Merge "[Notif] Disable long click listener after dismiss" into pi-dev
diff --git a/Android.bp b/Android.bp
index be83210..4d5d998 100644
--- a/Android.bp
+++ b/Android.bp
@@ -500,7 +500,8 @@
"telephony/java/android/telephony/ims/aidl/IImsSmsListener.aidl",
"telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl",
"telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl",
- "telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl",
+ "telephony/java/android/telephony/mbms/IDownloadStatusListener.aidl",
+ "telephony/java/android/telephony/mbms/IDownloadProgressListener.aidl",
"telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl",
"telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl",
"telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl",
diff --git a/Android.mk b/Android.mk
index e2f88e8..b630c3f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -869,11 +869,27 @@
$(eval $(call copy-one-file,frameworks/base/config/hiddenapi-blacklist.txt,\
$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)))
+# Automatically add all methods which match the following signatures.
+# These need to be greylisted in order to allow applications to write their
+# own serializers.
+$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): REGEX_SERIALIZATION := \
+ "readObject\(Ljava/io/ObjectInputStream;\)V" \
+ "readObjectNoData\(\)V" \
+ "readResolve\(\)Ljava/lang/Object;" \
+ "serialVersionUID:J" \
+ "serialPersistentFields:\[Ljava/io/ObjectStreamField;" \
+ "writeObject\(Ljava/io/ObjectOutputStream;\)V" \
+ "writeReplace\(\)Ljava/lang/Object;"
+$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): PRIVATE_API := $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE)
# Temporarily merge light greylist from two files. Vendor list will become dark
# grey once we remove the UI toast.
$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST): frameworks/base/config/hiddenapi-light-greylist.txt \
- frameworks/base/config/hiddenapi-vendor-list.txt
- sort $^ > $@
+ frameworks/base/config/hiddenapi-vendor-list.txt \
+ $(INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE)
+ sort frameworks/base/config/hiddenapi-light-greylist.txt \
+ frameworks/base/config/hiddenapi-vendor-list.txt \
+ <(grep -E "\->("$(subst $(space),"|",$(REGEX_SERIALIZATION))")$$" $(PRIVATE_API)) \
+ > $@
# Generate dark greylist as private API minus (blacklist plus light greylist).
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index 2a67b75..6c3951d 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -9,3 +9,5 @@
services/usb/
api_lint_hook = ${REPO_ROOT}/frameworks/base/tools/apilint/apilint_sha.sh ${PREUPLOAD_COMMIT}
+
+strings_lint_hook = ${REPO_ROOT}/frameworks/base/tools/stringslint/stringslint_sha.sh ${PREUPLOAD_COMMIT}
diff --git a/api/current.txt b/api/current.txt
index 93906ac..64b2d58 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7041,7 +7041,8 @@
method public int getBackoffPolicy();
method public android.content.ClipData getClipData();
method public int getClipGrantFlags();
- method public long getEstimatedNetworkBytes();
+ method public long getEstimatedNetworkDownloadBytes();
+ method public long getEstimatedNetworkUploadBytes();
method public android.os.PersistableBundle getExtras();
method public long getFlexMillis();
method public int getId();
@@ -7058,8 +7059,10 @@
method public long getTriggerContentMaxDelay();
method public long getTriggerContentUpdateDelay();
method public android.app.job.JobInfo.TriggerContentUri[] getTriggerContentUris();
+ method public boolean isImportantWhileForeground();
method public boolean isPeriodic();
method public boolean isPersisted();
+ method public boolean isPrefetch();
method public boolean isRequireBatteryNotLow();
method public boolean isRequireCharging();
method public boolean isRequireDeviceIdle();
@@ -7085,15 +7088,15 @@
method public android.app.job.JobInfo build();
method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int);
method public android.app.job.JobInfo.Builder setClipData(android.content.ClipData, int);
- method public android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long);
+ method public android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long, long);
method public android.app.job.JobInfo.Builder setExtras(android.os.PersistableBundle);
method public android.app.job.JobInfo.Builder setImportantWhileForeground(boolean);
- method public android.app.job.JobInfo.Builder setIsPrefetch(boolean);
method public android.app.job.JobInfo.Builder setMinimumLatency(long);
method public android.app.job.JobInfo.Builder setOverrideDeadline(long);
method public android.app.job.JobInfo.Builder setPeriodic(long);
method public android.app.job.JobInfo.Builder setPeriodic(long, long);
method public android.app.job.JobInfo.Builder setPersisted(boolean);
+ method public android.app.job.JobInfo.Builder setPrefetch(boolean);
method public android.app.job.JobInfo.Builder setRequiredNetwork(android.net.NetworkRequest);
method public android.app.job.JobInfo.Builder setRequiredNetworkType(int);
method public android.app.job.JobInfo.Builder setRequiresBatteryNotLow(boolean);
@@ -7163,10 +7166,11 @@
public final class JobWorkItem implements android.os.Parcelable {
ctor public JobWorkItem(android.content.Intent);
- ctor public JobWorkItem(android.content.Intent, long);
+ ctor public JobWorkItem(android.content.Intent, long, long);
method public int describeContents();
method public int getDeliveryCount();
- method public long getEstimatedNetworkBytes();
+ method public long getEstimatedNetworkDownloadBytes();
+ method public long getEstimatedNetworkUploadBytes();
method public android.content.Intent getIntent();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.app.job.JobWorkItem> CREATOR;
@@ -7289,6 +7293,7 @@
method public final java.lang.String getType(android.net.Uri);
method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
method public android.app.slice.Slice onBindSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>);
+ method public android.app.PendingIntent onCreatePermissionRequest(android.net.Uri);
method public java.util.Collection<android.net.Uri> onGetSliceDescendants(android.net.Uri);
method public android.net.Uri onMapIntentToUri(android.content.Intent);
method public void onSlicePinned(android.net.Uri);
@@ -15727,6 +15732,8 @@
method public abstract void abortCaptures() throws android.hardware.camera2.CameraAccessException;
method public abstract int capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract int captureBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public int captureBurstRequests(java.util.List<android.hardware.camera2.CaptureRequest>, java.util.concurrent.Executor, android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+ method public int captureSingleRequest(android.hardware.camera2.CaptureRequest, java.util.concurrent.Executor, android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
method public abstract void close();
method public abstract void finalizeOutputConfigurations(java.util.List<android.hardware.camera2.params.OutputConfiguration>) throws android.hardware.camera2.CameraAccessException;
method public abstract android.hardware.camera2.CameraDevice getDevice();
@@ -15734,7 +15741,9 @@
method public abstract boolean isReprocessable();
method public abstract void prepare(android.view.Surface) throws android.hardware.camera2.CameraAccessException;
method public abstract int setRepeatingBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public int setRepeatingBurstRequests(java.util.List<android.hardware.camera2.CaptureRequest>, java.util.concurrent.Executor, android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
method public abstract int setRepeatingRequest(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public int setSingleRepeatingRequest(android.hardware.camera2.CaptureRequest, java.util.concurrent.Executor, android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
method public abstract void stopRepeating() throws android.hardware.camera2.CameraAccessException;
method public void updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration) throws android.hardware.camera2.CameraAccessException;
}
@@ -15902,8 +15911,11 @@
method public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(java.lang.String) throws android.hardware.camera2.CameraAccessException;
method public java.lang.String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException;
method public void openCamera(java.lang.String, android.hardware.camera2.CameraDevice.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public void openCamera(java.lang.String, java.util.concurrent.Executor, android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
method public void registerAvailabilityCallback(android.hardware.camera2.CameraManager.AvailabilityCallback, android.os.Handler);
+ method public void registerAvailabilityCallback(java.util.concurrent.Executor, android.hardware.camera2.CameraManager.AvailabilityCallback);
method public void registerTorchCallback(android.hardware.camera2.CameraManager.TorchCallback, android.os.Handler);
+ method public void registerTorchCallback(java.util.concurrent.Executor, android.hardware.camera2.CameraManager.TorchCallback);
method public void setTorchMode(java.lang.String, boolean) throws android.hardware.camera2.CameraAccessException;
method public void unregisterAvailabilityCallback(android.hardware.camera2.CameraManager.AvailabilityCallback);
method public void unregisterTorchCallback(android.hardware.camera2.CameraManager.TorchCallback);
@@ -24472,29 +24484,6 @@
field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
}
- public final class Rating2 {
- method public static android.media.Rating2 fromBundle(android.content.Context, android.os.Bundle);
- method public float getPercentRating();
- method public int getRatingStyle();
- method public float getStarRating();
- method public boolean hasHeart();
- method public boolean isRated();
- method public boolean isThumbUp();
- method public static android.media.Rating2 newHeartRating(android.content.Context, boolean);
- method public static android.media.Rating2 newPercentageRating(android.content.Context, float);
- method public static android.media.Rating2 newStarRating(android.content.Context, int, float);
- method public static android.media.Rating2 newThumbRating(android.content.Context, boolean);
- method public static android.media.Rating2 newUnratedRating(android.content.Context, int);
- method public android.os.Bundle toBundle();
- field public static final int RATING_3_STARS = 3; // 0x3
- field public static final int RATING_4_STARS = 4; // 0x4
- field public static final int RATING_5_STARS = 5; // 0x5
- field public static final int RATING_HEART = 1; // 0x1
- field public static final int RATING_NONE = 0; // 0x0
- field public static final int RATING_PERCENTAGE = 6; // 0x6
- field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
- }
-
public deprecated class RemoteControlClient {
ctor public RemoteControlClient(android.app.PendingIntent);
ctor public RemoteControlClient(android.app.PendingIntent, android.os.Looper);
@@ -27270,6 +27259,7 @@
method public static long getMobileTxBytes();
method public static long getMobileTxPackets();
method public static int getThreadStatsTag();
+ method public static int getThreadStatsUid();
method public static long getTotalRxBytes();
method public static long getTotalRxPackets();
method public static long getTotalTxBytes();
@@ -27289,7 +27279,7 @@
method public static void incrementOperationCount(int);
method public static void incrementOperationCount(int, int);
method public static void setThreadStatsTag(int);
- method public static void setThreadStatsUidSelf();
+ method public static void setThreadStatsUid(int);
method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void tagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
@@ -32050,7 +32040,6 @@
ctor public Build.VERSION();
field public static final java.lang.String BASE_OS;
field public static final java.lang.String CODENAME;
- field public static final int FIRST_SDK_INT;
field public static final java.lang.String INCREMENTAL;
field public static final int MIN_SUPPORTED_TARGET_SDK_INT;
field public static final int PREVIEW_SDK_INT;
@@ -33086,8 +33075,6 @@
}
public final class SystemClock {
- method public static java.time.Clock currentNetworkTimeClock();
- method public static long currentNetworkTimeMillis();
method public static long currentThreadTimeMillis();
method public static long elapsedRealtime();
method public static long elapsedRealtimeNanos();
@@ -41668,6 +41655,8 @@
public abstract class CellIdentity implements android.os.Parcelable {
method public int describeContents();
+ method public java.lang.CharSequence getOperatorAlphaLong();
+ method public java.lang.CharSequence getOperatorAlphaShort();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.telephony.CellIdentity> CREATOR;
}
@@ -41677,8 +41666,6 @@
method public int getLatitude();
method public int getLongitude();
method public int getNetworkId();
- method public java.lang.CharSequence getOperatorAlphaLong();
- method public java.lang.CharSequence getOperatorAlphaShort();
method public int getSystemId();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityCdma> CREATOR;
@@ -41694,8 +41681,6 @@
method public deprecated int getMnc();
method public java.lang.String getMncString();
method public java.lang.String getMobileNetworkOperator();
- method public java.lang.CharSequence getOperatorAlphaLong();
- method public java.lang.CharSequence getOperatorAlphaShort();
method public deprecated int getPsc();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityGsm> CREATOR;
@@ -41710,8 +41695,6 @@
method public deprecated int getMnc();
method public java.lang.String getMncString();
method public java.lang.String getMobileNetworkOperator();
- method public java.lang.CharSequence getOperatorAlphaLong();
- method public java.lang.CharSequence getOperatorAlphaShort();
method public int getPci();
method public int getTac();
method public void writeToParcel(android.os.Parcel, int);
@@ -41736,8 +41719,6 @@
method public deprecated int getMnc();
method public java.lang.String getMncString();
method public java.lang.String getMobileNetworkOperator();
- method public java.lang.CharSequence getOperatorAlphaLong();
- method public java.lang.CharSequence getOperatorAlphaShort();
method public int getPsc();
method public int getUarfcn();
method public void writeToParcel(android.os.Parcel, int);
@@ -41867,6 +41848,8 @@
}
public class MbmsDownloadSession implements java.lang.AutoCloseable {
+ method public int addProgressListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadProgressListener);
+ method public int addStatusListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadStatusListener);
method public int cancelDownload(android.telephony.mbms.DownloadRequest);
method public void close();
method public static android.telephony.MbmsDownloadSession create(android.content.Context, java.util.concurrent.Executor, android.telephony.mbms.MbmsDownloadSessionCallback);
@@ -41874,12 +41857,12 @@
method public int download(android.telephony.mbms.DownloadRequest);
method public java.io.File getTempFileRootDirectory();
method public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads();
- method public int registerStateCallback(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadStateCallback);
+ method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener);
+ method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener);
method public void requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo);
method public void requestUpdateFileServices(java.util.List<java.lang.String>);
method public void resetDownloadKnowledge(android.telephony.mbms.DownloadRequest);
method public void setTempFileRootDirectory(java.io.File);
- method public int unregisterStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback);
field public static final java.lang.String DEFAULT_TOP_LEVEL_TEMP_DIRECTORY = "androidMbmsTempFileRoot";
field public static final java.lang.String EXTRA_MBMS_COMPLETED_FILE_URI = "android.telephony.extra.MBMS_COMPLETED_FILE_URI";
field public static final java.lang.String EXTRA_MBMS_DOWNLOAD_REQUEST = "android.telephony.extra.MBMS_DOWNLOAD_REQUEST";
@@ -42778,6 +42761,11 @@
package android.telephony.mbms {
+ public class DownloadProgressListener {
+ ctor public DownloadProgressListener();
+ method public void onProgressUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int, int, int, int);
+ }
+
public final class DownloadRequest implements android.os.Parcelable {
method public int describeContents();
method public android.net.Uri getDestinationUri();
@@ -42801,15 +42789,9 @@
method public android.telephony.mbms.DownloadRequest.Builder setSubscriptionId(int);
}
- public class DownloadStateCallback {
- ctor public DownloadStateCallback();
- ctor public DownloadStateCallback(int);
- method public final boolean isFilterFlagSet(int);
- method public void onProgressUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int, int, int, int);
- method public void onStateUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int);
- field public static final int ALL_UPDATES = 0; // 0x0
- field public static final int PROGRESS_UPDATES = 1; // 0x1
- field public static final int STATE_UPDATES = 2; // 0x2
+ public class DownloadStatusListener {
+ ctor public DownloadStatusListener();
+ method public void onStatusUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int);
}
public final class FileInfo implements android.os.Parcelable {
@@ -45062,18 +45044,6 @@
field public static final deprecated boolean RELEASE = true;
}
- public class DataUnit extends java.lang.Enum {
- method public long toBytes(long);
- method public static android.util.DataUnit valueOf(java.lang.String);
- method public static final android.util.DataUnit[] values();
- enum_constant public static final android.util.DataUnit GIBIBYTES;
- enum_constant public static final android.util.DataUnit GIGABYTES;
- enum_constant public static final android.util.DataUnit KIBIBYTES;
- enum_constant public static final android.util.DataUnit KILOBYTES;
- enum_constant public static final android.util.DataUnit MEBIBYTES;
- enum_constant public static final android.util.DataUnit MEGABYTES;
- }
-
public class DebugUtils {
method public static boolean isObjectSelected(java.lang.Object);
}
diff --git a/api/removed.txt b/api/removed.txt
index 1228fd1..4279c31 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -54,6 +54,24 @@
}
+package android.app.job {
+
+ public class JobInfo implements android.os.Parcelable {
+ method public deprecated long getEstimatedNetworkBytes();
+ }
+
+ public static final class JobInfo.Builder {
+ method public deprecated android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long);
+ method public deprecated android.app.job.JobInfo.Builder setIsPrefetch(boolean);
+ }
+
+ public final class JobWorkItem implements android.os.Parcelable {
+ ctor public deprecated JobWorkItem(android.content.Intent, long);
+ method public deprecated long getEstimatedNetworkBytes();
+ }
+
+}
+
package android.app.usage {
public final class StorageStats implements android.os.Parcelable {
@@ -261,6 +279,10 @@
method public static deprecated org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache);
}
+ public class TrafficStats {
+ method public static deprecated void setThreadStatsUidSelf();
+ }
+
}
package android.os {
diff --git a/api/system-current.txt b/api/system-current.txt
index ec84bf0..e049f53 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5710,6 +5710,7 @@
}
public final class ImsReasonInfo implements android.os.Parcelable {
+ ctor public ImsReasonInfo(int, int, java.lang.String);
method public int describeContents();
method public int getCode();
method public int getExtraCode();
@@ -6311,18 +6312,20 @@
public class MbmsDownloadServiceBase extends android.os.Binder {
ctor public MbmsDownloadServiceBase();
+ method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+ method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
method public int cancelDownload(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public void dispose(int) throws android.os.RemoteException;
method public int download(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public int initialize(int, android.telephony.mbms.MbmsDownloadSessionCallback) throws android.os.RemoteException;
method public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads(int) throws android.os.RemoteException;
method public void onAppCallbackDied(int, int);
- method public int registerStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback) throws android.os.RemoteException;
+ method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+ method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
method public int requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo) throws android.os.RemoteException;
method public int requestUpdateFileServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
method public int resetDownloadKnowledge(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public int setTempFileRootDirectory(int, java.lang.String) throws android.os.RemoteException;
- method public int unregisterStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback) throws android.os.RemoteException;
}
public class MbmsStreamingServiceBase extends android.os.Binder {
diff --git a/api/test-current.txt b/api/test-current.txt
index dd16771..d323725 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -20,6 +20,7 @@
public class ActivityManager {
method public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
+ method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName);
method public int getPackageImportance(java.lang.String);
method public long getTotalRam();
method public int getUidImportance(int);
@@ -239,6 +240,7 @@
public abstract class PackageManager {
method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int);
method public abstract int getInstallReason(java.lang.String, android.os.UserHandle);
+ method public abstract java.lang.String[] getNamesForUids(int[]);
method public abstract java.lang.String getPermissionControllerPackageName();
method public abstract boolean isPermissionReviewModeEnabled();
field public static final java.lang.String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage";
@@ -480,6 +482,7 @@
package android.os {
public static class Build.VERSION {
+ field public static final int FIRST_SDK_INT;
field public static final int RESOURCES_SDK_INT;
}
@@ -584,6 +587,7 @@
field public static final java.lang.String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions";
field public static final java.lang.String LOCATION_GLOBAL_KILL_SWITCH = "location_global_kill_switch";
field public static final java.lang.String LOW_POWER_MODE = "low_power";
+ field public static final java.lang.String LOW_POWER_MODE_STICKY = "low_power_sticky";
field public static final java.lang.String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package";
}
@@ -802,18 +806,20 @@
public class MbmsDownloadServiceBase extends android.os.Binder {
ctor public MbmsDownloadServiceBase();
+ method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+ method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
method public int cancelDownload(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public void dispose(int) throws android.os.RemoteException;
method public int download(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public int initialize(int, android.telephony.mbms.MbmsDownloadSessionCallback) throws android.os.RemoteException;
method public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads(int) throws android.os.RemoteException;
method public void onAppCallbackDied(int, int);
- method public int registerStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback) throws android.os.RemoteException;
+ method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+ method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
method public int requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo) throws android.os.RemoteException;
method public int requestUpdateFileServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
method public int resetDownloadKnowledge(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
method public int setTempFileRootDirectory(int, java.lang.String) throws android.os.RemoteException;
- method public int unregisterStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback) throws android.os.RemoteException;
}
public class MbmsStreamingServiceBase extends android.os.Binder {
@@ -1066,6 +1072,7 @@
public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
method public android.view.View getTooltipView();
+ method public static boolean isDefaultFocusHighlightEnabled();
method public boolean isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
method public boolean restoreFocusInCluster(int);
method public boolean restoreFocusNotInCluster();
diff --git a/cmds/statsd/Android.mk b/cmds/statsd/Android.mk
index 79c0d71..1aef0c4 100644
--- a/cmds/statsd/Android.mk
+++ b/cmds/statsd/Android.mk
@@ -62,6 +62,7 @@
src/storage/StorageManager.cpp \
src/StatsLogProcessor.cpp \
src/StatsService.cpp \
+ src/statscompanion_util.cpp \
src/subscriber/IncidentdReporter.cpp \
src/subscriber/SubscriberReporter.cpp \
src/HashableDimensionKey.cpp \
@@ -205,7 +206,9 @@
tests/e2e/GaugeMetric_e2e_push_test.cpp \
tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp \
tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp \
- tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp
+ tests/e2e/DimensionInCondition_e2e_simple_cond_test.cpp \
+ tests/e2e/Anomaly_count_e2e_test.cpp \
+ tests/e2e/Anomaly_duration_sum_e2e_test.cpp
LOCAL_STATIC_LIBRARIES := \
$(statsd_common_static_libraries) \
diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h
index 1be4dc5..a07a355 100644
--- a/cmds/statsd/src/StatsLogProcessor.h
+++ b/cmds/statsd/src/StatsLogProcessor.h
@@ -69,6 +69,11 @@
void dumpStates(FILE* out, bool verbose);
private:
+ // For testing only.
+ inline sp<AlarmMonitor> getAnomalyAlarmMonitor() const {
+ return mAnomalyAlarmMonitor;
+ }
+
mutable mutex mMetricsMutex;
std::unordered_map<ConfigKey, sp<MetricsManager>> mMetricsManagers;
@@ -133,13 +138,15 @@
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_SimpleCondition);
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_SimpleCondition);
-
-
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_AND_CombinationCondition);
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_AND_CombinationCondition);
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_AND_CombinationCondition);
-
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period);
};
} // namespace statsd
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index b86646a..b03b4b4 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -49,33 +49,6 @@
constexpr const char* kPermissionDump = "android.permission.DUMP";
#define STATS_SERVICE_DIR "/data/misc/stats-service"
-/**
- * Watches for the death of the stats companion (system process).
- */
-class CompanionDeathRecipient : public IBinder::DeathRecipient {
-public:
- CompanionDeathRecipient(const sp<AlarmMonitor>& anomalyAlarmMonitor,
- const sp<AlarmMonitor>& periodicAlarmMonitor,
- const sp<StatsLogProcessor>& processor)
- : mAnomalyAlarmMonitor(anomalyAlarmMonitor),
- mPeriodicAlarmMonitor(periodicAlarmMonitor),
- mProcessor(processor) {}
- virtual void binderDied(const wp<IBinder>& who);
-
-private:
- sp<AlarmMonitor> mAnomalyAlarmMonitor;
- sp<AlarmMonitor> mPeriodicAlarmMonitor;
- sp<StatsLogProcessor> mProcessor;
-};
-
-void CompanionDeathRecipient::binderDied(const wp<IBinder>& who) {
- ALOGW("statscompanion service died");
- mProcessor->WriteDataToDisk();
- mAnomalyAlarmMonitor->setStatsCompanionService(nullptr);
- mPeriodicAlarmMonitor->setStatsCompanionService(nullptr);
- SubscriberReporter::getInstance().setStatsCompanionService(nullptr);
-}
-
StatsService::StatsService(const sp<Looper>& handlerLooper)
: mAnomalyAlarmMonitor(new AlarmMonitor(MIN_DIFF_TO_UPDATE_REGISTERED_ALARM_SECS,
[](const sp<IStatsCompanionService>& sc, int64_t timeMillis) {
@@ -791,21 +764,6 @@
}
}
-sp<IStatsCompanionService> StatsService::getStatsCompanionService() {
- sp<IStatsCompanionService> statsCompanion = nullptr;
- // Get statscompanion service from service manager
- const sp<IServiceManager> sm(defaultServiceManager());
- if (sm != nullptr) {
- const String16 name("statscompanion");
- statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name));
- if (statsCompanion == nullptr) {
- ALOGW("statscompanion service unavailable!");
- return nullptr;
- }
- }
- return statsCompanion;
-}
-
Status StatsService::statsCompanionReady() {
VLOG("StatsService::statsCompanionReady was called");
@@ -821,9 +779,8 @@
"statscompanion unavailable despite it contacting statsd!");
}
VLOG("StatsService::statsCompanionReady linking to statsCompanion.");
- IInterface::asBinder(statsCompanion)
- ->linkToDeath(new CompanionDeathRecipient(
- mAnomalyAlarmMonitor, mPeriodicAlarmMonitor, mProcessor));
+ IInterface::asBinder(statsCompanion)->linkToDeath(this);
+ mStatsPullerManager.SetStatsCompanionService(statsCompanion);
mAnomalyAlarmMonitor->setStatsCompanionService(statsCompanion);
mPeriodicAlarmMonitor->setStatsCompanionService(statsCompanion);
SubscriberReporter::getInstance().setStatsCompanionService(statsCompanion);
@@ -969,6 +926,12 @@
void StatsService::binderDied(const wp <IBinder>& who) {
+ ALOGW("statscompanion service died");
+ mProcessor->WriteDataToDisk();
+ mAnomalyAlarmMonitor->setStatsCompanionService(nullptr);
+ mPeriodicAlarmMonitor->setStatsCompanionService(nullptr);
+ SubscriberReporter::getInstance().setStatsCompanionService(nullptr);
+ mStatsPullerManager.SetStatsCompanionService(nullptr);
}
} // namespace statsd
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index 0ec31ef..8d2fd33 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -23,6 +23,7 @@
#include "config/ConfigManager.h"
#include "external/StatsPullerManager.h"
#include "packages/UidMap.h"
+#include "statscompanion_util.h"
#include <android/os/BnStatsManager.h>
#include <android/os/IStatsCompanionService.h>
@@ -132,9 +133,6 @@
/** Inform statsCompanion that statsd is ready. */
virtual void sayHiToStatsCompanion();
- /** Fetches and returns the StatsCompanionService. */
- static sp<IStatsCompanionService> getStatsCompanionService();
-
/** IBinder::DeathRecipient */
virtual void binderDied(const wp<IBinder>& who) override;
diff --git a/cmds/statsd/src/anomaly/AnomalyTracker.cpp b/cmds/statsd/src/anomaly/AnomalyTracker.cpp
index 49de1ac..f0960e3 100644
--- a/cmds/statsd/src/anomaly/AnomalyTracker.cpp
+++ b/cmds/statsd/src/anomaly/AnomalyTracker.cpp
@@ -66,6 +66,9 @@
void AnomalyTracker::advanceMostRecentBucketTo(const int64_t& bucketNum) {
VLOG("advanceMostRecentBucketTo() called.");
+ if (mNumOfPastBuckets <= 0) {
+ return;
+ }
if (bucketNum <= mMostRecentBucketNum) {
ALOGW("Cannot advance buckets backwards (bucketNum=%lld but mMostRecentBucketNum=%lld)",
(long long)bucketNum, (long long)mMostRecentBucketNum);
@@ -170,7 +173,8 @@
int64_t AnomalyTracker::getPastBucketValue(const MetricDimensionKey& key,
const int64_t& bucketNum) const {
- if (bucketNum < 0 || bucketNum <= mMostRecentBucketNum - mNumOfPastBuckets
+ if (bucketNum < 0 || mMostRecentBucketNum < 0
+ || bucketNum <= mMostRecentBucketNum - mNumOfPastBuckets
|| bucketNum > mMostRecentBucketNum) {
return 0;
}
@@ -241,14 +245,10 @@
}
bool AnomalyTracker::isInRefractoryPeriod(const uint64_t& timestampNs,
- const MetricDimensionKey& key) {
+ const MetricDimensionKey& key) const {
const auto& it = mRefractoryPeriodEndsSec.find(key);
if (it != mRefractoryPeriodEndsSec.end()) {
- if (timestampNs < it->second * NS_PER_SEC) {
- return true;
- } else {
- mRefractoryPeriodEndsSec.erase(key);
- }
+ return timestampNs < it->second * NS_PER_SEC;
}
return false;
}
diff --git a/cmds/statsd/src/anomaly/AnomalyTracker.h b/cmds/statsd/src/anomaly/AnomalyTracker.h
index d3da7dc..ae0af64 100644
--- a/cmds/statsd/src/anomaly/AnomalyTracker.h
+++ b/cmds/statsd/src/anomaly/AnomalyTracker.h
@@ -113,6 +113,13 @@
}
protected:
+ // For testing only.
+ // Returns the alarm timestamp in seconds for the query dimension if it exists. Otherwise
+ // returns 0.
+ virtual uint32_t getAlarmTimestampSec(const MetricDimensionKey& dimensionKey) const {
+ return 0; // The base AnomalyTracker class doesn't have alarms.
+ }
+
// statsd_config.proto Alert message that defines this tracker.
const Alert mAlert;
@@ -159,8 +166,7 @@
void subtractValueFromSum(const MetricDimensionKey& key, const int64_t& bucketValue);
// Returns true if in the refractory period, else false.
- // If there is a stored refractory period but it ended prior to timestampNs, it is removed.
- bool isInRefractoryPeriod(const uint64_t& timestampNs, const MetricDimensionKey& key);
+ bool isInRefractoryPeriod(const uint64_t& timestampNs, const MetricDimensionKey& key) const;
// Calculates the corresponding bucket index within the circular array.
// Requires bucketNum >= 0.
@@ -176,6 +182,9 @@
FRIEND_TEST(AnomalyTrackerTest, TestSparseBuckets);
FRIEND_TEST(GaugeMetricProducerTest, TestAnomalyDetection);
FRIEND_TEST(CountMetricProducerTest, TestAnomalyDetectionUnSliced);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period);
};
} // namespace statsd
diff --git a/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp b/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp
index 79067eb..cdc4251 100644
--- a/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp
+++ b/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp
@@ -38,11 +38,10 @@
void DurationAnomalyTracker::startAlarm(const MetricDimensionKey& dimensionKey,
const uint64_t& timestampNs) {
// Alarms are stored in secs. Must round up, since if it fires early, it is ignored completely.
- uint32_t timestampSec = static_cast<uint32_t>((timestampNs -1)/ NS_PER_SEC) + 1; // round up
+ uint32_t timestampSec = static_cast<uint32_t>((timestampNs -1) / NS_PER_SEC) + 1; // round up
if (isInRefractoryPeriod(timestampNs, dimensionKey)) {
- // TODO: Bug! By the refractory's end, the data might be erased and the alarm inapplicable.
- VLOG("Setting a delayed anomaly alarm lest it fall in the refractory period");
- timestampSec = getRefractoryPeriodEndsSec(dimensionKey) + 1;
+ VLOG("Not setting anomaly alarm since it would fall in the refractory period.");
+ return;
}
auto itr = mAlarms.find(dimensionKey);
diff --git a/cmds/statsd/src/anomaly/DurationAnomalyTracker.h b/cmds/statsd/src/anomaly/DurationAnomalyTracker.h
index 92bb2bc..53155d9 100644
--- a/cmds/statsd/src/anomaly/DurationAnomalyTracker.h
+++ b/cmds/statsd/src/anomaly/DurationAnomalyTracker.h
@@ -52,6 +52,13 @@
unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>>& firedAlarms) override;
protected:
+ // Returns the alarm timestamp in seconds for the query dimension if it exists. Otherwise
+ // returns 0.
+ uint32_t getAlarmTimestampSec(const MetricDimensionKey& dimensionKey) const override {
+ auto it = mAlarms.find(dimensionKey);
+ return it == mAlarms.end() ? 0 : it->second->timestampSec;
+ }
+
// The alarms owned by this tracker. The alarm monitor also shares the alarm pointers when they
// are still active.
std::unordered_map<MetricDimensionKey, sp<const InternalAlarm>> mAlarms;
diff --git a/cmds/statsd/src/external/StatsCompanionServicePuller.cpp b/cmds/statsd/src/external/StatsCompanionServicePuller.cpp
index bd859fd..d953f50 100644
--- a/cmds/statsd/src/external/StatsCompanionServicePuller.cpp
+++ b/cmds/statsd/src/external/StatsCompanionServicePuller.cpp
@@ -20,10 +20,9 @@
#include <android/os/IStatsCompanionService.h>
#include <binder/IPCThreadState.h>
#include <private/android_filesystem_config.h>
+#include "../stats_log_util.h"
+#include "../statscompanion_util.h"
#include "StatsCompanionServicePuller.h"
-#include "StatsService.h"
-#include "stats_log_util.h"
-#include "guardrail/StatsdStats.h"
using namespace android;
using namespace android::base;
@@ -44,11 +43,18 @@
StatsCompanionServicePuller::StatsCompanionServicePuller(int tagId) : StatsPuller(tagId) {
}
+void StatsCompanionServicePuller::SetStatsCompanionService(
+ sp<IStatsCompanionService> statsCompanionService) {
+ AutoMutex _l(mStatsCompanionServiceLock);
+ sp<IStatsCompanionService> tmpForLock = mStatsCompanionService;
+ mStatsCompanionService = statsCompanionService;
+}
+
bool StatsCompanionServicePuller::PullInternal(vector<shared_ptr<LogEvent> >* data) {
- sp<IStatsCompanionService> statsCompanion = StatsService::getStatsCompanionService();
- vector<StatsLogEventWrapper> returned_value;
- if (statsCompanion != NULL) {
- Status status = statsCompanion->pullData(mTagId, &returned_value);
+ sp<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService;
+ if (statsCompanionServiceCopy != nullptr) {
+ vector<StatsLogEventWrapper> returned_value;
+ Status status = statsCompanionServiceCopy->pullData(mTagId, &returned_value);
if (!status.isOk()) {
ALOGW("error pulling for %d", mTagId);
return false;
diff --git a/cmds/statsd/src/external/StatsCompanionServicePuller.h b/cmds/statsd/src/external/StatsCompanionServicePuller.h
index 4c91f31..0a49732 100644
--- a/cmds/statsd/src/external/StatsCompanionServicePuller.h
+++ b/cmds/statsd/src/external/StatsCompanionServicePuller.h
@@ -27,6 +27,12 @@
public:
StatsCompanionServicePuller(int tagId);
bool PullInternal(vector<std::shared_ptr<LogEvent> >* data) override;
+
+ void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService) override;
+
+private:
+ Mutex mStatsCompanionServiceLock;
+ sp<IStatsCompanionService> mStatsCompanionService = nullptr;
};
} // namespace statsd
diff --git a/cmds/statsd/src/external/StatsPuller.h b/cmds/statsd/src/external/StatsPuller.h
index 82a8611..936c47e 100644
--- a/cmds/statsd/src/external/StatsPuller.h
+++ b/cmds/statsd/src/external/StatsPuller.h
@@ -16,9 +16,9 @@
#pragma once
-#include <android/os/StatsLogEventWrapper.h>
-#include <utils/String16.h>
+#include <android/os/IStatsCompanionService.h>
#include <utils/RefBase.h>
+#include <utils/String16.h>
#include <mutex>
#include <vector>
#include "packages/UidMap.h"
@@ -27,8 +27,6 @@
#include "logd/LogEvent.h"
#include "puller_util.h"
-using android::os::StatsLogEventWrapper;
-
namespace android {
namespace os {
namespace statsd {
@@ -49,7 +47,9 @@
static void SetUidMap(const sp<UidMap>& uidMap);
- protected:
+ virtual void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService){};
+
+protected:
// The atom tag id this puller pulls
const int mTagId;
diff --git a/cmds/statsd/src/external/StatsPullerManager.h b/cmds/statsd/src/external/StatsPullerManager.h
index 0dee342..2717d5c 100644
--- a/cmds/statsd/src/external/StatsPullerManager.h
+++ b/cmds/statsd/src/external/StatsPullerManager.h
@@ -58,6 +58,10 @@
return mPullerManager.ForceClearPullerCache();
}
+ void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService) {
+ mPullerManager.SetStatsCompanionService(statsCompanionService);
+ }
+
int ClearPullerCacheIfNecessary(long timestampSec) {
return mPullerManager.ClearPullerCacheIfNecessary(timestampSec);
}
diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp
index fb0be73..dd6406b 100644
--- a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp
+++ b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp
@@ -21,15 +21,15 @@
#include <cutils/log.h>
#include <algorithm>
#include <climits>
+#include "../logd/LogEvent.h"
+#include "../stats_log_util.h"
+#include "../statscompanion_util.h"
#include "ResourceHealthManagerPuller.h"
#include "ResourceThermalManagerPuller.h"
#include "StatsCompanionServicePuller.h"
-#include "StatsPullerManagerImpl.h"
#include "StatsService.h"
#include "SubsystemSleepStatePuller.h"
-#include "logd/LogEvent.h"
#include "statslog.h"
-#include "stats_log_util.h"
#include <iostream>
@@ -123,7 +123,6 @@
StatsPullerManagerImpl::StatsPullerManagerImpl()
: mCurrentPullingInterval(LONG_MAX) {
- mStatsCompanionService = StatsService::getStatsCompanionService();
}
bool StatsPullerManagerImpl::Pull(int tagId, vector<shared_ptr<LogEvent>>* data) {
@@ -148,9 +147,35 @@
return kAllPullAtomInfo.find(tagId) != kAllPullAtomInfo.end();
}
+void StatsPullerManagerImpl::updateAlarmLocked() {
+ long currentTimeMs = getElapsedRealtimeMillis();
+ long nextAlarmTimeMs = currentTimeMs + mCurrentPullingInterval -
+ (currentTimeMs - mTimeBaseSec * 1000) % mCurrentPullingInterval;
+ sp<IStatsCompanionService> statsCompanionServiceCopy = mStatsCompanionService;
+ if (statsCompanionServiceCopy != nullptr) {
+ statsCompanionServiceCopy->setPullingAlarms(nextAlarmTimeMs, mCurrentPullingInterval);
+ } else {
+ VLOG("StatsCompanionService not available. Alarm not set.");
+ }
+ return;
+}
+
+void StatsPullerManagerImpl::SetStatsCompanionService(
+ sp<IStatsCompanionService> statsCompanionService) {
+ AutoMutex _l(mLock);
+ sp<IStatsCompanionService> tmpForLock = mStatsCompanionService;
+ mStatsCompanionService = statsCompanionService;
+ for (const auto& pulledAtom : kAllPullAtomInfo) {
+ pulledAtom.second.puller->SetStatsCompanionService(statsCompanionService);
+ }
+ if (mStatsCompanionService != nullptr) {
+ updateAlarmLocked();
+ }
+}
+
void StatsPullerManagerImpl::RegisterReceiver(int tagId, wp<PullDataReceiver> receiver,
long intervalMs) {
- AutoMutex _l(mReceiversLock);
+ AutoMutex _l(mLock);
auto& receivers = mReceivers[tagId];
for (auto it = receivers.begin(); it != receivers.end(); it++) {
if (it->receiver == receiver) {
@@ -175,20 +200,13 @@
if (roundedIntervalMs < mCurrentPullingInterval) {
VLOG("Updating pulling interval %ld", intervalMs);
mCurrentPullingInterval = roundedIntervalMs;
- long currentTimeMs = getElapsedRealtimeMillis();
- long nextAlarmTimeMs = currentTimeMs + mCurrentPullingInterval -
- (currentTimeMs - mTimeBaseSec * 1000) % mCurrentPullingInterval;
- if (mStatsCompanionService != nullptr) {
- mStatsCompanionService->setPullingAlarms(nextAlarmTimeMs, mCurrentPullingInterval);
- } else {
- VLOG("Failed to update pulling interval");
- }
+ updateAlarmLocked();
}
VLOG("Puller for tagId %d registered of %d", tagId, (int)receivers.size());
}
void StatsPullerManagerImpl::UnRegisterReceiver(int tagId, wp<PullDataReceiver> receiver) {
- AutoMutex _l(mReceiversLock);
+ AutoMutex _l(mLock);
if (mReceivers.find(tagId) == mReceivers.end()) {
VLOG("Unknown pull code or no receivers: %d", tagId);
return;
@@ -204,7 +222,7 @@
}
void StatsPullerManagerImpl::OnAlarmFired() {
- AutoMutex _l(mReceiversLock);
+ AutoMutex _l(mLock);
uint64_t currentTimeMs = getElapsedRealtimeMillis();
diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.h b/cmds/statsd/src/external/StatsPullerManagerImpl.h
index 76a4c14..682ad33 100644
--- a/cmds/statsd/src/external/StatsPullerManagerImpl.h
+++ b/cmds/statsd/src/external/StatsPullerManagerImpl.h
@@ -67,16 +67,15 @@
int ClearPullerCacheIfNecessary(long timestampSec);
+ void SetStatsCompanionService(sp<IStatsCompanionService> statsCompanionService);
+
const static std::map<int, PullAtomInfo> kAllPullAtomInfo;
private:
StatsPullerManagerImpl();
- // use this to update alarm
sp<IStatsCompanionService> mStatsCompanionService = nullptr;
- sp<IStatsCompanionService> get_stats_companion_service();
-
typedef struct {
// pull_interval_sec : last_pull_time_sec
std::pair<uint64_t, uint64_t> timeInfo;
@@ -86,7 +85,10 @@
// mapping from simple matcher tagId to receivers
std::map<int, std::list<ReceiverInfo>> mReceivers;
- Mutex mReceiversLock;
+ // locks for data receiver and StatsCompanionService changes
+ Mutex mLock;
+
+ void updateAlarmLocked();
long mCurrentPullingInterval;
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 7a55f60..ef637df 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -92,6 +92,10 @@
const int FIELD_ID_UID_MAP_DROPPED_SNAPSHOTS = 4;
const int FIELD_ID_UID_MAP_DROPPED_CHANGES = 5;
+const std::map<int, std::pair<size_t, size_t>> StatsdStats::kAtomDimensionKeySizeLimitMap = {
+ {android::util::CPU_TIME_PER_UID_FREQ, {6000, 10000}},
+};
+
// TODO: add stats for pulled atoms.
StatsdStats::StatsdStats() {
mPushedAtomStats.resize(android::util::kMaxPushedAtomId + 1);
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index a4f64dd..7675888 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -81,6 +81,9 @@
const static int kDimensionKeySizeSoftLimit = 300;
const static int kDimensionKeySizeHardLimit = 500;
+ // Per atom dimension key size limit
+ static const std::map<int, std::pair<size_t, size_t>> kAtomDimensionKeySizeLimitMap;
+
const static int kMaxConfigCount = 10;
const static int kMaxAlertCountPerConfig = 100;
const static int kMaxConditionCountPerConfig = 200;
diff --git a/cmds/statsd/src/matchers/matcher_util.cpp b/cmds/statsd/src/matchers/matcher_util.cpp
index b7105b3..8dc5cef 100644
--- a/cmds/statsd/src/matchers/matcher_util.cpp
+++ b/cmds/statsd/src/matchers/matcher_util.cpp
@@ -236,8 +236,8 @@
}
return false;
}
- case FieldValueMatcher::ValueMatcherCase::kNeqAllString: {
- const auto& str_list = matcher.neq_all_string();
+ case FieldValueMatcher::ValueMatcherCase::kNeqAnyString: {
+ const auto& str_list = matcher.neq_any_string();
for (int i = start; i < end; i++) {
bool notEqAll = true;
for (const auto& str : str_list.str_value()) {
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
index 49034ac..f08d54a 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -17,9 +17,9 @@
#define DEBUG false // STOPSHIP if true
#include "Log.h"
+#include "../guardrail/StatsdStats.h"
#include "GaugeMetricProducer.h"
-#include "guardrail/StatsdStats.h"
-#include "stats_log_util.h"
+#include "../stats_log_util.h"
#include <cutils/log.h>
@@ -60,12 +60,20 @@
GaugeMetricProducer::GaugeMetricProducer(const ConfigKey& key, const GaugeMetric& metric,
const int conditionIndex,
- const sp<ConditionWizard>& wizard,
- const int pullTagId, const uint64_t startTimeNs,
+ const sp<ConditionWizard>& wizard, const int pullTagId,
+ const uint64_t startTimeNs,
shared_ptr<StatsPullerManager> statsPullerManager)
: MetricProducer(metric.id(), key, startTimeNs, conditionIndex, wizard),
mStatsPullerManager(statsPullerManager),
- mPullTagId(pullTagId) {
+ mPullTagId(pullTagId),
+ mDimensionSoftLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) !=
+ StatsdStats::kAtomDimensionKeySizeLimitMap.end()
+ ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).first
+ : StatsdStats::kDimensionKeySizeSoftLimit),
+ mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) !=
+ StatsdStats::kAtomDimensionKeySizeLimitMap.end()
+ ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second
+ : StatsdStats::kDimensionKeySizeHardLimit) {
mCurrentSlicedBucket = std::make_shared<DimToGaugeAtomsMap>();
mCurrentSlicedBucketForAnomaly = std::make_shared<DimToValMap>();
int64_t bucketSizeMills = 0;
@@ -305,11 +313,11 @@
return false;
}
// 1. Report the tuple count if the tuple count > soft limit
- if (mCurrentSlicedBucket->size() > StatsdStats::kDimensionKeySizeSoftLimit - 1) {
+ if (mCurrentSlicedBucket->size() > mDimensionSoftLimit - 1) {
size_t newTupleCount = mCurrentSlicedBucket->size() + 1;
StatsdStats::getInstance().noteMetricDimensionSize(mConfigKey, mMetricId, newTupleCount);
// 2. Don't add more tuples, we are above the allowed threshold. Drop the data.
- if (newTupleCount > StatsdStats::kDimensionKeySizeHardLimit) {
+ if (newTupleCount > mDimensionHardLimit) {
ALOGE("GaugeMetric %lld dropping data for dimension key %s",
(long long)mMetricId, newKey.toString().c_str());
return true;
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h
index dd6aff4..4b543f8 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.h
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h
@@ -150,6 +150,10 @@
static const size_t kBucketSize = sizeof(GaugeBucket{});
+ const size_t mDimensionSoftLimit;
+
+ const size_t mDimensionHardLimit;
+
FRIEND_TEST(GaugeMetricProducerTest, TestWithCondition);
FRIEND_TEST(GaugeMetricProducerTest, TestNoCondition);
FRIEND_TEST(GaugeMetricProducerTest, TestPushedEventsWithUpgrade);
diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h
index ea45f43..4983f96 100644
--- a/cmds/statsd/src/metrics/MetricProducer.h
+++ b/cmds/statsd/src/metrics/MetricProducer.h
@@ -188,7 +188,7 @@
// Convenience to compute the current bucket's end time, which is always aligned with the
// start time of the metric.
- uint64_t getCurrentBucketEndTimeNs() {
+ uint64_t getCurrentBucketEndTimeNs() const {
return mStartTimeNs + (mCurrentBucketNum + 1) * mBucketSizeNs;
}
diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h
index 46a9b34..05ce84d 100644
--- a/cmds/statsd/src/metrics/MetricsManager.h
+++ b/cmds/statsd/src/metrics/MetricsManager.h
@@ -178,6 +178,12 @@
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_Link_AND_CombinationCondition);
FRIEND_TEST(DimensionInConditionE2eTest, TestDurationMetric_PartialLink_AND_CombinationCondition);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets);
+ FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period);
+
};
} // namespace statsd
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
index 767260d..ed4d7e4 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
@@ -18,8 +18,8 @@
#include "Log.h"
#include "ValueMetricProducer.h"
-#include "guardrail/StatsdStats.h"
-#include "stats_log_util.h"
+#include "../guardrail/StatsdStats.h"
+#include "../stats_log_util.h"
#include <cutils/log.h>
#include <limits.h>
@@ -68,7 +68,15 @@
: MetricProducer(metric.id(), key, startTimeNs, conditionIndex, wizard),
mValueField(metric.value_field()),
mStatsPullerManager(statsPullerManager),
- mPullTagId(pullTagId) {
+ mPullTagId(pullTagId),
+ mDimensionSoftLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) !=
+ StatsdStats::kAtomDimensionKeySizeLimitMap.end()
+ ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).first
+ : StatsdStats::kDimensionKeySizeSoftLimit),
+ mDimensionHardLimit(StatsdStats::kAtomDimensionKeySizeLimitMap.find(pullTagId) !=
+ StatsdStats::kAtomDimensionKeySizeLimitMap.end()
+ ? StatsdStats::kAtomDimensionKeySizeLimitMap.at(pullTagId).second
+ : StatsdStats::kDimensionKeySizeHardLimit) {
// TODO: valuemetric for pushed events may need unlimited bucket length
int64_t bucketSizeMills = 0;
if (metric.has_bucket()) {
@@ -266,11 +274,11 @@
if (mCurrentSlicedBucket.find(newKey) != mCurrentSlicedBucket.end()) {
return false;
}
- if (mCurrentSlicedBucket.size() > StatsdStats::kDimensionKeySizeSoftLimit - 1) {
+ if (mCurrentSlicedBucket.size() > mDimensionSoftLimit - 1) {
size_t newTupleCount = mCurrentSlicedBucket.size() + 1;
StatsdStats::getInstance().noteMetricDimensionSize(mConfigKey, mMetricId, newTupleCount);
// 2. Don't add more tuples, we are above the allowed threshold. Drop the data.
- if (newTupleCount > StatsdStats::kDimensionKeySizeHardLimit) {
+ if (newTupleCount > mDimensionHardLimit) {
ALOGE("ValueMetric %lld dropping data for dimension key %s",
(long long)mMetricId, newKey.toString().c_str());
return true;
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h
index be57183..c4477b3 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.h
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.h
@@ -149,6 +149,10 @@
static const size_t kBucketSize = sizeof(ValueBucket{});
+ const size_t mDimensionSoftLimit;
+
+ const size_t mDimensionHardLimit;
+
FRIEND_TEST(ValueMetricProducerTest, TestNonDimensionalEvents);
FRIEND_TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition);
FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithUpgrade);
diff --git a/cmds/statsd/src/metrics/duration_helper/DurationTracker.h b/cmds/statsd/src/metrics/duration_helper/DurationTracker.h
index 991a76a..ddfb8cc 100644
--- a/cmds/statsd/src/metrics/duration_helper/DurationTracker.h
+++ b/cmds/statsd/src/metrics/duration_helper/DurationTracker.h
@@ -109,7 +109,7 @@
// Predict the anomaly timestamp given the current status.
virtual int64_t predictAnomalyTimestampNs(const DurationAnomalyTracker& anomalyTracker,
- const uint64_t currentTimestamp) const = 0;
+ const int64_t currentTimestamp) const = 0;
// Dump internal states for debugging
virtual void dumpStates(FILE* out, bool verbose) const = 0;
@@ -118,12 +118,19 @@
}
protected:
+ uint64_t getCurrentBucketEndTimeNs() const {
+ return mStartTimeNs + (mCurrentBucketNum + 1) * mBucketSizeNs;
+ }
+
// Starts the anomaly alarm.
void startAnomalyAlarm(const uint64_t eventTime) {
for (auto& anomalyTracker : mAnomalyTrackers) {
if (anomalyTracker != nullptr) {
- anomalyTracker->startAlarm(mEventKey,
- predictAnomalyTimestampNs(*anomalyTracker, eventTime));
+ const uint64_t alarmTimestampNs =
+ predictAnomalyTimestampNs(*anomalyTracker, eventTime);
+ if (alarmTimestampNs > 0) {
+ anomalyTracker->startAlarm(mEventKey, alarmTimestampNs);
+ }
}
}
}
diff --git a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp
index c9547cf..df9e6ae 100644
--- a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp
+++ b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp
@@ -313,7 +313,7 @@
}
int64_t MaxDurationTracker::predictAnomalyTimestampNs(const DurationAnomalyTracker& anomalyTracker,
- const uint64_t currentTimestamp) const {
+ const int64_t currentTimestamp) const {
// The allowed time we can continue in the current state is the
// (anomaly threshold) - max(elapsed time of the started mInfos).
int64_t maxElapsed = 0;
diff --git a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h
index 0452d37..32d42fa 100644
--- a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h
+++ b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.h
@@ -57,7 +57,7 @@
void onConditionChanged(bool condition, const uint64_t timestamp) override;
int64_t predictAnomalyTimestampNs(const DurationAnomalyTracker& anomalyTracker,
- const uint64_t currentTimestamp) const override;
+ const int64_t currentTimestamp) const override;
void dumpStates(FILE* out, bool verbose) const override;
private:
diff --git a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.cpp b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.cpp
index b418a85..da79217 100644
--- a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.cpp
+++ b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.cpp
@@ -166,13 +166,13 @@
current_info.mDuration = mDuration;
(*output)[mEventKey].push_back(current_info);
mDurationFullBucket += mDuration;
- if (eventTimeNs > fullBucketEnd) {
- // End of full bucket, can send to anomaly tracker now.
- addPastBucketToAnomalyTrackers(mDurationFullBucket, mCurrentBucketNum);
- mDurationFullBucket = 0;
- }
VLOG(" duration: %lld", (long long)current_info.mDuration);
}
+ if (eventTimeNs > fullBucketEnd) {
+ // End of full bucket, can send to anomaly tracker now.
+ addPastBucketToAnomalyTrackers(mDurationFullBucket, mCurrentBucketNum);
+ mDurationFullBucket = 0;
+ }
if (mStarted.size() > 0) {
for (int i = 1; i < numBucketsForward; i++) {
@@ -186,6 +186,10 @@
addPastBucketToAnomalyTrackers(info.mDuration, mCurrentBucketNum + i);
VLOG(" add filling bucket with duration %lld", (long long)info.mDuration);
}
+ } else {
+ if (numBucketsForward >= 2) {
+ addPastBucketToAnomalyTrackers(0, mCurrentBucketNum + numBucketsForward - 1);
+ }
}
mDuration = 0;
@@ -320,57 +324,84 @@
}
int64_t OringDurationTracker::predictAnomalyTimestampNs(
- const DurationAnomalyTracker& anomalyTracker, const uint64_t eventTimestampNs) const {
+ const DurationAnomalyTracker& anomalyTracker, const int64_t eventTimestampNs) const {
// TODO: Unit-test this and see if it can be done more efficiently (e.g. use int32).
- // All variables below represent durations (not timestamps).
+ // The anomaly threshold.
const int64_t thresholdNs = anomalyTracker.getAnomalyThreshold();
- // The time until the current bucket ends. This is how much more 'space' it can hold.
- const int64_t currRemainingBucketSizeNs =
- mBucketSizeNs - (eventTimestampNs - mCurrentBucketStartTimeNs);
- if (currRemainingBucketSizeNs < 0) {
- ALOGE("OringDurationTracker currRemainingBucketSizeNs < 0");
- // This should never happen. Return the safest thing possible given that data is corrupt.
- return eventTimestampNs + thresholdNs;
- }
+ // The timestamp of the current bucket end.
+ const int64_t currentBucketEndNs = getCurrentBucketEndTimeNs();
+
+ // The past duration ns for the current bucket.
+ int64_t currentBucketPastNs = mDuration + mDurationFullBucket;
// As we move into the future, old buckets get overwritten (so their old data is erased).
-
// Sum of past durations. Will change as we overwrite old buckets.
- int64_t pastNs = mDuration + mDurationFullBucket;
- pastNs += anomalyTracker.getSumOverPastBuckets(mEventKey);
+ int64_t pastNs = currentBucketPastNs + anomalyTracker.getSumOverPastBuckets(mEventKey);
- // How much of the threshold is still unaccounted after considering pastNs.
- int64_t leftNs = thresholdNs - pastNs;
+ // The refractory period end timestamp for dimension mEventKey.
+ const int64_t refractoryPeriodEndNs =
+ anomalyTracker.getRefractoryPeriodEndsSec(mEventKey) * NS_PER_SEC;
- // First deal with the remainder of the current bucket.
- if (leftNs <= currRemainingBucketSizeNs) { // Predict the anomaly will occur in this bucket.
- return eventTimestampNs + leftNs;
+ // The anomaly should happen when accumulated wakelock duration is above the threshold and
+ // not within the refractory period.
+ int64_t anomalyTimestampNs =
+ std::max(eventTimestampNs + thresholdNs - pastNs, refractoryPeriodEndNs);
+ // If the predicted the anomaly timestamp is within the current bucket, return it directly.
+ if (anomalyTimestampNs <= currentBucketEndNs) {
+ return std::max(eventTimestampNs, anomalyTimestampNs);
}
- // The remainder of this bucket contributes, but we must then move to the next bucket.
- pastNs += currRemainingBucketSizeNs;
- // Now deal with the past buckets, starting with the oldest.
- for (int futBucketIdx = 0; futBucketIdx < anomalyTracker.getNumOfPastBuckets();
- futBucketIdx++) {
- // We now overwrite the oldest bucket with the previous 'current', and start a new
- // 'current'.
+ // Remove the old bucket.
+ if (anomalyTracker.getNumOfPastBuckets() > 0) {
pastNs -= anomalyTracker.getPastBucketValue(
- mEventKey, mCurrentBucketNum - anomalyTracker.getNumOfPastBuckets() + futBucketIdx);
- leftNs = thresholdNs - pastNs;
- if (leftNs <= mBucketSizeNs) { // Predict anomaly will occur in this bucket.
- return eventTimestampNs + currRemainingBucketSizeNs + (futBucketIdx * mBucketSizeNs) +
- leftNs;
- } else { // This bucket would be entirely filled, and we'll need to move to the next
- // bucket.
- pastNs += mBucketSizeNs;
+ mEventKey,
+ mCurrentBucketNum - anomalyTracker.getNumOfPastBuckets());
+ // Add the remaining of the current bucket to the accumulated wakelock duration.
+ pastNs += (currentBucketEndNs - eventTimestampNs);
+ } else {
+ // The anomaly depends on only one bucket.
+ pastNs = 0;
+ }
+
+ // The anomaly will not happen in the current bucket. We need to iterate over the future buckets
+ // to predict the accumulated wakelock duration and determine the anomaly timestamp accordingly.
+ for (int futureBucketIdx = 1; futureBucketIdx <= anomalyTracker.getNumOfPastBuckets() + 1;
+ futureBucketIdx++) {
+ // The alarm candidate timestamp should meet two requirements:
+ // 1. the accumulated wakelock duration is above the threshold.
+ // 2. it is not within the refractory period.
+ // 3. the alarm timestamp falls in this bucket. Otherwise we need to flush the past buckets,
+ // find the new alarm candidate timestamp and check these requirements again.
+ const int64_t bucketEndNs = currentBucketEndNs + futureBucketIdx * mBucketSizeNs;
+ int64_t anomalyTimestampNs =
+ std::max(bucketEndNs - mBucketSizeNs + thresholdNs - pastNs, refractoryPeriodEndNs);
+ if (anomalyTimestampNs <= bucketEndNs) {
+ return anomalyTimestampNs;
+ }
+ if (anomalyTracker.getNumOfPastBuckets() <= 0) {
+ continue;
+ }
+
+ // No valid alarm timestamp is found in this bucket. The clock moves to the end of the
+ // bucket. Update the pastNs.
+ pastNs += mBucketSizeNs;
+ // 1. If the oldest past bucket is still in the past bucket window, we could fetch the past
+ // bucket and erase it from pastNs.
+ // 2. If the oldest past bucket is the current bucket, we should compute the
+ // wakelock duration in the current bucket and erase it from pastNs.
+ // 3. Otherwise all othe past buckets are ancient.
+ if (futureBucketIdx < anomalyTracker.getNumOfPastBuckets()) {
+ pastNs -= anomalyTracker.getPastBucketValue(
+ mEventKey,
+ mCurrentBucketNum - anomalyTracker.getNumOfPastBuckets() + futureBucketIdx);
+ } else if (futureBucketIdx == anomalyTracker.getNumOfPastBuckets()) {
+ pastNs -= (currentBucketPastNs + (currentBucketEndNs - eventTimestampNs));
}
}
- // If we have reached this point, we even have to overwrite the the original current bucket.
- // Thus, none of the past data will still be extant - pastNs is now 0.
- return eventTimestampNs + thresholdNs;
+ return std::max(eventTimestampNs + thresholdNs, refractoryPeriodEndNs);
}
void OringDurationTracker::dumpStates(FILE* out, bool verbose) const {
diff --git a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h
index 610e3ea..ca8abfe 100644
--- a/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h
+++ b/cmds/statsd/src/metrics/duration_helper/OringDurationTracker.h
@@ -56,7 +56,7 @@
std::unordered_map<MetricDimensionKey, std::vector<DurationBucket>>* output) override;
int64_t predictAnomalyTimestampNs(const DurationAnomalyTracker& anomalyTracker,
- const uint64_t currentTimestamp) const override;
+ const int64_t currentTimestamp) const override;
void dumpStates(FILE* out, bool verbose) const override;
private:
diff --git a/cmds/statsd/src/metrics/metrics_manager_util.cpp b/cmds/statsd/src/metrics/metrics_manager_util.cpp
index c6112fd..50eca05 100644
--- a/cmds/statsd/src/metrics/metrics_manager_util.cpp
+++ b/cmds/statsd/src/metrics/metrics_manager_util.cpp
@@ -277,14 +277,6 @@
config.event_metric_size() + config.value_metric_size();
allMetricProducers.reserve(allMetricsCount);
StatsPullerManager statsPullerManager;
- // Align all buckets to same instant in MIN_BUCKET_SIZE_SEC, so that avoid alarm
- // clock will not grow very aggressive. New metrics will be delayed up to
- // MIN_BUCKET_SIZE_SEC before starting.
- // Why not use timeBaseSec directly?
-// long currentTimeSec = time(nullptr);
-// uint64_t startTimeNs = (currentTimeSec - kMinBucketSizeSec -
-// (currentTimeSec - timeBaseSec) % kMinBucketSizeSec) *
-// NS_PER_SEC;
uint64_t startTimeNs = timeBaseSec * NS_PER_SEC;
diff --git a/cmds/statsd/src/packages/UidMap.cpp b/cmds/statsd/src/packages/UidMap.cpp
index 1cb20bc..8c8152d 100644
--- a/cmds/statsd/src/packages/UidMap.cpp
+++ b/cmds/statsd/src/packages/UidMap.cpp
@@ -116,32 +116,16 @@
lock_guard<mutex> lock(mMutex); // Exclusively lock for updates.
mMap.clear();
- ProtoOutputStream proto;
- uint64_t token = proto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
- FIELD_ID_SNAPSHOT_PACKAGE_INFO);
+ vector<const SnapshotPackageInfo> infos;
for (size_t j = 0; j < uid.size(); j++) {
string package = string(String8(packageName[j]).string());
mMap.insert(make_pair(uid[j], AppData(package, versionCode[j])));
- proto.write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_NAME, package);
- proto.write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_VERSION, (int)versionCode[j]);
- proto.write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_UID, (int)uid[j]);
+ infos.emplace_back(package, versionCode[j], uid[j]);
}
- proto.end(token);
- // Copy ProtoOutputStream output to
- auto iter = proto.data();
- size_t pos = 0;
- vector<char> outData(proto.size());
- while (iter.readBuffer() != NULL) {
- size_t toRead = iter.currentToRead();
- std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
- pos += toRead;
- iter.rp()->move(toRead);
- }
- SnapshotRecord record(timestamp, outData);
- mSnapshots.push_back(record);
+ mSnapshots.emplace_back(timestamp, infos);
- mBytesUsed += proto.size() + kBytesTimestampField;
+ mBytesUsed += mSnapshots.back().bytes;
ensureBytesUsedBelowLimit();
StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
StatsdStats::getInstance().setUidMapSnapshots(mSnapshots.size());
@@ -212,7 +196,7 @@
while (mBytesUsed > limit) {
ALOGI("Bytes used %zu is above limit %zu, need to delete something", mBytesUsed, limit);
if (mSnapshots.size() > 0) {
- mBytesUsed -= mSnapshots.front().bytes.size() + kBytesTimestampField;
+ mBytesUsed -= mSnapshots.front().bytes;
mSnapshots.pop_front();
StatsdStats::getInstance().noteUidMapDropped(1, 0);
} else if (mChanges.size() > 0) {
@@ -365,8 +349,14 @@
count++;
proto->write(FIELD_TYPE_INT64 | FIELD_ID_SNAPSHOT_TIMESTAMP,
(long long)record.timestampNs);
- proto->write(FIELD_TYPE_MESSAGE | FIELD_ID_SNAPSHOT_PACKAGE_INFO, record.bytes.data(),
- record.bytes.size());
+ for (const SnapshotPackageInfo& info : record.infos) {
+ uint64_t token = proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
+ FIELD_ID_SNAPSHOT_PACKAGE_INFO);
+ proto->write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_NAME, info.package);
+ proto->write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_VERSION, info.version);
+ proto->write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_UID, info.uid);
+ proto->end(token);
+ }
proto->end(snapshotsToken);
}
}
@@ -380,7 +370,7 @@
int64_t cutoff_nanos = newMin;
for (auto it_snapshots = mSnapshots.begin(); it_snapshots != mSnapshots.end();) {
if (it_snapshots->timestampNs < cutoff_nanos) {
- mBytesUsed -= it_snapshots->bytes.size() + kBytesTimestampField;
+ mBytesUsed -= it_snapshots->bytes;
it_snapshots = mSnapshots.erase(it_snapshots);
} else {
++it_snapshots;
@@ -399,31 +389,13 @@
// Produce another snapshot. This results in extra data being uploaded but
// helps ensure we can re-construct the UID->app name, versionCode mapping
// in server.
- ProtoOutputStream snapshotProto;
- uint64_t token = snapshotProto.start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED |
- FIELD_ID_SNAPSHOT_PACKAGE_INFO);
+ vector<const SnapshotPackageInfo> infos;
for (const auto& it : mMap) {
- snapshotProto.write(FIELD_TYPE_STRING | FIELD_ID_SNAPSHOT_PACKAGE_NAME,
- it.second.packageName);
- snapshotProto.write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_VERSION,
- (int)it.second.versionCode);
- snapshotProto.write(FIELD_TYPE_INT32 | FIELD_ID_SNAPSHOT_PACKAGE_UID,
- (int)it.first);
+ infos.emplace_back(it.second.packageName, it.second.versionCode, it.first);
}
- snapshotProto.end(token);
- // Copy ProtoOutputStream output to
- auto iter = snapshotProto.data();
- vector<char> snapshotData(snapshotProto.size());
- size_t pos = 0;
- while (iter.readBuffer() != NULL) {
- size_t toRead = iter.currentToRead();
- std::memcpy(&(snapshotData[pos]), iter.readBuffer(), toRead);
- pos += toRead;
- iter.rp()->move(toRead);
- }
- mSnapshots.emplace_back(timestamp, snapshotData);
- mBytesUsed += kBytesTimestampField + snapshotData.size();
+ mSnapshots.emplace_back(timestamp, infos);
+ mBytesUsed += mSnapshots.back().bytes;
}
}
StatsdStats::getInstance().setCurrentUidMapMemory(mBytesUsed);
diff --git a/cmds/statsd/src/packages/UidMap.h b/cmds/statsd/src/packages/UidMap.h
index 9dc73f4..a3632d2 100644
--- a/cmds/statsd/src/packages/UidMap.h
+++ b/cmds/statsd/src/packages/UidMap.h
@@ -74,17 +74,35 @@
// less because of varint encoding).
const unsigned int kBytesTimestampField = 10;
+struct SnapshotPackageInfo {
+ const string package;
+ const int32_t version;
+ const int32_t uid;
+ SnapshotPackageInfo(const string& package, const int32_t version, const int32_t uid)
+ : package(package), version(version), uid(uid) {
+ }
+};
+
+const unsigned int kBytesSnapshotInfo = sizeof(struct SnapshotPackageInfo);
+
// When calling appendUidMap, we retrieve all the snapshots since the last
// timestamp we called appendUidMap for this configuration key.
struct SnapshotRecord {
const int64_t timestampNs;
- // For performance reasons, we convert the package_info field (which is a
- // repeated field of PackageInfo messages).
- vector<char> bytes;
+ // All the package info known.
+ vector<const SnapshotPackageInfo> infos;
- SnapshotRecord(const int64_t timestampNs, vector<char> bytes)
- : timestampNs(timestampNs), bytes(bytes) {
+ // Tracks the number of bytes this snapshot consumes.
+ uint32_t bytes;
+
+ SnapshotRecord(const int64_t timestampNs, vector<const SnapshotPackageInfo>& infos)
+ : timestampNs(timestampNs), infos(infos) {
+ bytes = 0;
+ for (auto info : infos) {
+ bytes += info.package.size() + kBytesSnapshotInfo;
+ }
+ bytes += kBytesTimestampField;
}
};
@@ -210,6 +228,7 @@
// Allows unit-test to access private methods.
FRIEND_TEST(UidMapTest, TestClearingOutput);
+ FRIEND_TEST(UidMapTest, TestOutputIncludesAtLeastOneSnapshot);
FRIEND_TEST(UidMapTest, TestMemoryComputed);
FRIEND_TEST(UidMapTest, TestMemoryGuardrail);
};
diff --git a/cmds/statsd/src/stats_util.h b/cmds/statsd/src/stats_util.h
index e0206d1..5fcb161 100644
--- a/cmds/statsd/src/stats_util.h
+++ b/cmds/statsd/src/stats_util.h
@@ -28,9 +28,6 @@
const HashableDimensionKey DEFAULT_DIMENSION_KEY = HashableDimensionKey();
const MetricDimensionKey DEFAULT_METRIC_DIMENSION_KEY = MetricDimensionKey();
-// Minimum bucket size in seconds
-const long kMinBucketSizeSec = 5 * 60;
-
typedef std::map<int64_t, HashableDimensionKey> ConditionKey;
typedef std::unordered_map<MetricDimensionKey, int64_t> DimToValMap;
diff --git a/cmds/statsd/src/statscompanion_util.cpp b/cmds/statsd/src/statscompanion_util.cpp
new file mode 100644
index 0000000..d338827
--- /dev/null
+++ b/cmds/statsd/src/statscompanion_util.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define DEBUG false // STOPSHIP if true
+#include "Log.h"
+
+#include "statscompanion_util.h"
+
+namespace android {
+namespace os {
+namespace statsd {
+
+sp <IStatsCompanionService> getStatsCompanionService() {
+ sp<IStatsCompanionService> statsCompanion = nullptr;
+ // Get statscompanion service from service manager
+ static const sp <IServiceManager> sm(defaultServiceManager());
+ if (statsCompanion == nullptr) {
+ if (sm != nullptr) {
+ const String16 name("statscompanion");
+ statsCompanion = interface_cast<IStatsCompanionService>(sm->checkService(name));
+ if (statsCompanion == nullptr) {
+ ALOGW("statscompanion service unavailable!");
+ return nullptr;
+ }
+ }
+ }
+ return statsCompanion;
+}
+
+} // namespace statsd
+} // namespace os
+} // namespace android
diff --git a/cmds/statsd/src/statscompanion_util.h b/cmds/statsd/src/statscompanion_util.h
new file mode 100644
index 0000000..ff702f2
--- /dev/null
+++ b/cmds/statsd/src/statscompanion_util.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "StatsLogProcessor.h"
+
+using namespace android;
+using namespace android::base;
+using namespace android::binder;
+using namespace android::os;
+using namespace std;
+
+namespace android {
+namespace os {
+namespace statsd {
+
+/** Fetches and returns the StatsCompanionService. */
+sp<IStatsCompanionService> getStatsCompanionService();
+
+} // namespace statsd
+} // namespace os
+} // namespace android
diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto
index 2c70191..93df9b82 100644
--- a/cmds/statsd/src/statsd_config.proto
+++ b/cmds/statsd/src/statsd_config.proto
@@ -78,7 +78,7 @@
MessageMatcher matches_tuple = 12;
StringListMatcher eq_any_string = 13;
- StringListMatcher neq_all_string = 14;
+ StringListMatcher neq_any_string = 14;
}
}
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 36c6e0c..b0da07b 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -339,7 +339,7 @@
ATTRIBUTION_UID_FIELD_ID);
auto neqStringList = attributionMatcher->mutable_matches_tuple()
->mutable_field_value_matcher(0)
- ->mutable_neq_all_string();
+ ->mutable_neq_any_string();
neqStringList->add_str_value("pkg2");
neqStringList->add_str_value("pkg3");
diff --git a/cmds/statsd/tests/StatsLogProcessor_test.cpp b/cmds/statsd/tests/StatsLogProcessor_test.cpp
index efed42e..4b9a87d 100644
--- a/cmds/statsd/tests/StatsLogProcessor_test.cpp
+++ b/cmds/statsd/tests/StatsLogProcessor_test.cpp
@@ -14,6 +14,7 @@
#include "StatsLogProcessor.h"
#include "config/ConfigKey.h"
+#include "frameworks/base/cmds/statsd/src/stats_log.pb.h"
#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
#include "guardrail/StatsdStats.h"
#include "logd/LogEvent.h"
@@ -122,6 +123,32 @@
EXPECT_EQ(0, broadcastCount);
}
+TEST(StatsLogProcessorTest, TestUidMapHasSnapshot) {
+ // Setup simple config key corresponding to empty config.
+ sp<UidMap> m = new UidMap();
+ m->updateMap({1, 2}, {1, 2}, {String16("p1"), String16("p2")});
+ sp<AlarmMonitor> anomalyAlarmMonitor;
+ sp<AlarmMonitor> subscriberAlarmMonitor;
+ int broadcastCount = 0;
+ StatsLogProcessor p(m, anomalyAlarmMonitor, subscriberAlarmMonitor, 0,
+ [&broadcastCount](const ConfigKey& key) { broadcastCount++; });
+ ConfigKey key(3, 4);
+ StatsdConfig config;
+ config.add_allowed_log_source("AID_ROOT");
+ p.OnConfigUpdated(key, config);
+
+ // Expect to get no metrics, but snapshot specified above in uidmap.
+ vector<uint8_t> bytes;
+ p.onDumpReport(key, 1, &bytes);
+
+ ConfigMetricsReportList output;
+ output.ParseFromArray(bytes.data(), bytes.size());
+ EXPECT_TRUE(output.reports_size() > 0);
+ auto uidmap = output.reports(0).uid_map();
+ EXPECT_TRUE(uidmap.snapshots_size() > 0);
+ EXPECT_EQ(2, uidmap.snapshots(0).package_info_size());
+}
+
#else
GTEST_LOG_(INFO) << "This test does nothing.\n";
#endif
diff --git a/cmds/statsd/tests/UidMap_test.cpp b/cmds/statsd/tests/UidMap_test.cpp
index c9492eb..a9b67e0 100644
--- a/cmds/statsd/tests/UidMap_test.cpp
+++ b/cmds/statsd/tests/UidMap_test.cpp
@@ -173,6 +173,33 @@
results->ParseFromArray(bytes.data(), bytes.size());
}
+// Test that uid map returns at least one snapshot even if we already obtained
+// this snapshot from a previous call to getData.
+TEST(UidMapTest, TestOutputIncludesAtLeastOneSnapshot) {
+ UidMap m;
+ // Initialize single config key.
+ ConfigKey config1(1, StringToId("config1"));
+ m.OnConfigUpdated(config1);
+ vector<int32_t> uids;
+ vector<int64_t> versions;
+ vector<String16> apps;
+ uids.push_back(1000);
+ apps.push_back(String16(kApp2.c_str()));
+ versions.push_back(5);
+ m.updateMap(1, uids, versions, apps);
+
+ // Set the last timestamp for this config key to be newer.
+ m.mLastUpdatePerConfigKey[config1] = 2;
+
+ ProtoOutputStream proto;
+ m.appendUidMap(3, config1, &proto);
+
+ // Check there's still a uidmap attached this one.
+ UidMapping results;
+ protoOutputStreamToUidMapping(&proto, &results);
+ EXPECT_EQ(1, results.snapshots_size());
+}
+
TEST(UidMapTest, TestClearingOutput) {
UidMap m;
@@ -199,7 +226,7 @@
protoOutputStreamToUidMapping(&proto, &results);
EXPECT_EQ(1, results.snapshots_size());
- // It should be cleared now
+ // We have to keep at least one snapshot in memory at all times.
EXPECT_EQ(1U, m.mSnapshots.size());
proto.clear();
m.appendUidMap(2, config1, &proto);
diff --git a/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp b/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp
new file mode 100644
index 0000000..93ecde5
--- /dev/null
+++ b/cmds/statsd/tests/e2e/Anomaly_count_e2e_test.cpp
@@ -0,0 +1,241 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <gtest/gtest.h>
+
+#include "src/StatsLogProcessor.h"
+#include "src/stats_log_util.h"
+#include "tests/statsd_test_util.h"
+
+#include <vector>
+
+namespace android {
+namespace os {
+namespace statsd {
+
+#ifdef __ANDROID__
+
+namespace {
+
+StatsdConfig CreateStatsdConfig(int num_buckets, int threshold) {
+ StatsdConfig config;
+ config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+ auto wakelockAcquireMatcher = CreateAcquireWakelockAtomMatcher();
+
+ *config.add_atom_matcher() = wakelockAcquireMatcher;
+
+ auto countMetric = config.add_count_metric();
+ countMetric->set_id(123456);
+ countMetric->set_what(wakelockAcquireMatcher.id());
+ *countMetric->mutable_dimensions_in_what() = CreateAttributionUidDimensions(
+ android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+ countMetric->set_bucket(FIVE_MINUTES);
+
+ auto alert = config.add_alert();
+ alert->set_id(StringToId("alert"));
+ alert->set_metric_id(123456);
+ alert->set_num_buckets(num_buckets);
+ alert->set_refractory_period_secs(10);
+ alert->set_trigger_if_sum_gt(threshold);
+ return config;
+}
+
+} // namespace
+
+TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_single_bucket) {
+ const int num_buckets = 1;
+ const int threshold = 3;
+ auto config = CreateStatsdConfig(num_buckets, threshold);
+ const uint64_t alert_id = config.alert(0).id();
+ const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+
+ int64_t bucketStartTimeNs = 10000000000;
+ int64_t bucketSizeNs =
+ TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+
+ ConfigKey cfgKey;
+ auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
+ EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+ EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+ EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+
+ sp<AnomalyTracker> anomalyTracker =
+ processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+
+ std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+ std::vector<AttributionNodeInternal> attributions2 = {
+ CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
+ std::vector<AttributionNodeInternal> attributions3 = {
+ CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
+ std::vector<AttributionNodeInternal> attributions4 = {
+ CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
+ std::vector<AttributionNodeInternal> attributions5 = {
+ CreateAttribution(222, "GMSCoreModule1") };
+
+ FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+ Value((int32_t)111));
+ HashableDimensionKey whatKey1({fieldValue1});
+ MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
+
+ FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+ Value((int32_t)222));
+ HashableDimensionKey whatKey2({fieldValue2});
+ MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
+
+ auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 3);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ event = CreateAcquireWakelockEvent(attributions3, "wl1", bucketStartTimeNs + 4);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + 4);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ // Fired alarm and refractory period end timestamp updated.
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 5);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 100);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + bucketStartTimeNs / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs - 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions4, "wl2", bucketStartTimeNs + bucketSizeNs + 1);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 3);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ event = CreateAcquireWakelockEvent(attributions5, "wl2", bucketStartTimeNs + bucketSizeNs + 4);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 4) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+}
+
+TEST(AnomalyDetectionE2eTest, TestSlicedCountMetric_multiple_buckets) {
+ const int num_buckets = 3;
+ const int threshold = 3;
+ auto config = CreateStatsdConfig(num_buckets, threshold);
+ const uint64_t alert_id = config.alert(0).id();
+ const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+
+ int64_t bucketStartTimeNs = 10000000000;
+ int64_t bucketSizeNs =
+ TimeUnitToBucketSizeInMillis(config.count_metric(0).bucket()) * 1000000;
+
+ ConfigKey cfgKey;
+ auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
+ EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+ EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+ EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+
+ sp<AnomalyTracker> anomalyTracker =
+ processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+
+ std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1")};
+ std::vector<AttributionNodeInternal> attributions2 = {
+ CreateAttribution(111, "App1"), CreateAttribution(222, "GMSCoreModule1")};
+ std::vector<AttributionNodeInternal> attributions3 = {
+ CreateAttribution(111, "App1"), CreateAttribution(333, "App3")};
+ std::vector<AttributionNodeInternal> attributions4 = {
+ CreateAttribution(222, "GMSCoreModule1"), CreateAttribution(333, "App3")};
+ std::vector<AttributionNodeInternal> attributions5 = {
+ CreateAttribution(222, "GMSCoreModule1") };
+
+ FieldValue fieldValue1(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+ Value((int32_t)111));
+ HashableDimensionKey whatKey1({fieldValue1});
+ MetricDimensionKey dimensionKey1(whatKey1, DEFAULT_DIMENSION_KEY);
+
+ FieldValue fieldValue2(Field(android::util::WAKELOCK_STATE_CHANGED, (int32_t)0x02010101),
+ Value((int32_t)222));
+ HashableDimensionKey whatKey2({fieldValue2});
+ MetricDimensionKey dimensionKey2(whatKey2, DEFAULT_DIMENSION_KEY);
+
+ auto event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 3);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ // Fired alarm and refractory period end timestamp updated.
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 4);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 1);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + bucketSizeNs + 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+
+ event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 3 * bucketSizeNs + 2);
+ processor->OnLogEvent(event.get());
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + 3 * bucketSizeNs + 2) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey1));
+}
+
+#else
+GTEST_LOG_(INFO) << "This test does nothing.\n";
+#endif
+
+} // namespace statsd
+} // namespace os
+} // namespace android
diff --git a/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp b/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp
new file mode 100644
index 0000000..e924b03
--- /dev/null
+++ b/cmds/statsd/tests/e2e/Anomaly_duration_sum_e2e_test.cpp
@@ -0,0 +1,486 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <gtest/gtest.h>
+
+#include "src/anomaly/DurationAnomalyTracker.h"
+#include "src/StatsLogProcessor.h"
+#include "src/stats_log_util.h"
+#include "tests/statsd_test_util.h"
+
+#include <vector>
+
+namespace android {
+namespace os {
+namespace statsd {
+
+#ifdef __ANDROID__
+
+namespace {
+
+StatsdConfig CreateStatsdConfig(int num_buckets,
+ uint64_t threshold_ns,
+ DurationMetric::AggregationType aggregationType,
+ bool nesting) {
+ StatsdConfig config;
+ config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
+ *config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
+ *config.add_atom_matcher() = CreateScreenTurnedOffAtomMatcher();
+ *config.add_atom_matcher() = CreateAcquireWakelockAtomMatcher();
+ *config.add_atom_matcher() = CreateReleaseWakelockAtomMatcher();
+
+ auto screenIsOffPredicate = CreateScreenIsOffPredicate();
+ *config.add_predicate() = screenIsOffPredicate;
+
+ auto holdingWakelockPredicate = CreateHoldingWakelockPredicate();
+ FieldMatcher dimensions = CreateAttributionUidDimensions(
+ android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+ dimensions.add_child()->set_field(3); // The wakelock tag is set in field 3 of the wakelock.
+ *holdingWakelockPredicate.mutable_simple_predicate()->mutable_dimensions() = dimensions;
+ holdingWakelockPredicate.mutable_simple_predicate()->set_count_nesting(nesting);
+ *config.add_predicate() = holdingWakelockPredicate;
+
+ auto durationMetric = config.add_duration_metric();
+ durationMetric->set_id(StringToId("WakelockDuration"));
+ durationMetric->set_what(holdingWakelockPredicate.id());
+ durationMetric->set_condition(screenIsOffPredicate.id());
+ durationMetric->set_aggregation_type(aggregationType);
+ *durationMetric->mutable_dimensions_in_what() =
+ CreateAttributionUidDimensions(android::util::WAKELOCK_STATE_CHANGED, {Position::FIRST});
+ durationMetric->set_bucket(FIVE_MINUTES);
+
+ auto alert = config.add_alert();
+ alert->set_id(StringToId("alert"));
+ alert->set_metric_id(StringToId("WakelockDuration"));
+ alert->set_num_buckets(num_buckets);
+ alert->set_refractory_period_secs(2);
+ alert->set_trigger_if_sum_gt(threshold_ns);
+ return config;
+}
+
+} // namespace
+
+std::vector<AttributionNodeInternal> attributions1 = {CreateAttribution(111, "App1"),
+ CreateAttribution(222, "GMSCoreModule1")};
+
+std::vector<AttributionNodeInternal> attributions2 = {CreateAttribution(111, "App2"),
+ CreateAttribution(222, "GMSCoreModule1")};
+
+std::vector<AttributionNodeInternal> attributions3 = {CreateAttribution(222, "GMSCoreModule1")};
+
+MetricDimensionKey dimensionKey(
+ HashableDimensionKey({FieldValue(Field(android::util::WAKELOCK_STATE_CHANGED,
+ (int32_t)0x02010101), Value((int32_t)111))}),
+ DEFAULT_DIMENSION_KEY);
+
+MetricDimensionKey dimensionKey2(
+ HashableDimensionKey({FieldValue(Field(android::util::WAKELOCK_STATE_CHANGED,
+ (int32_t)0x02010101), Value((int32_t)222))}),
+ DEFAULT_DIMENSION_KEY);
+
+TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket) {
+ const int num_buckets = 1;
+ const uint64_t threshold_ns = NS_PER_SEC;
+ auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
+ const uint64_t alert_id = config.alert(0).id();
+ const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+
+ int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+ int64_t bucketSizeNs =
+ TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+
+ ConfigKey cfgKey;
+ auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
+ EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+ EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+ EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+
+ sp<AnomalyTracker> anomalyTracker =
+ processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+
+ auto screen_on_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_ON, bucketStartTimeNs + 1);
+ auto screen_off_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 10);
+ processor->OnLogEvent(screen_on_event.get());
+ processor->OnLogEvent(screen_off_event.get());
+
+ // Acquire wakelock wl1.
+ auto acquire_event = CreateAcquireWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 11);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 11 + threshold_ns) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Release wakelock wl1. No anomaly detected. Alarm cancelled at the "release" event.
+ auto release_event = CreateReleaseWakelockEvent(attributions1, "wl1", bucketStartTimeNs + 101);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire wakelock wl1 within bucket #0.
+ acquire_event = CreateAcquireWakelockEvent(attributions2, "wl1", bucketStartTimeNs + 110);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 110 + threshold_ns - 90) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Release wakelock wl1. One anomaly detected.
+ release_event = CreateReleaseWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + NS_PER_SEC + 109);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire wakelock wl1.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + NS_PER_SEC + 112);
+ processor->OnLogEvent(acquire_event.get());
+ // Wakelock has been hold longer than the threshold in bucket #0. The alarm is set at the
+ // end of the refractory period.
+ const int64_t alarmFiredTimestampSec0 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
+ EXPECT_EQ(refractory_period_sec + (bucketStartTimeNs + NS_PER_SEC + 109) / NS_PER_SEC + 1,
+ (uint32_t)alarmFiredTimestampSec0);
+
+ // Anomaly alarm fired.
+ auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+ static_cast<uint32_t>(alarmFiredTimestampSec0));
+ EXPECT_EQ(1u, alarmSet.size());
+ processor->onAnomalyAlarmFired(alarmFiredTimestampSec0 * NS_PER_SEC, alarmSet);
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Release wakelock wl1.
+ release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", alarmFiredTimestampSec0 * NS_PER_SEC + NS_PER_SEC + 1);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ // Within refractory period. No more anomaly detected.
+ EXPECT_EQ(refractory_period_sec + alarmFiredTimestampSec0,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire wakelock wl1.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + bucketSizeNs - 5 * NS_PER_SEC - 11);
+ processor->OnLogEvent(acquire_event.get());
+ const int64_t alarmFiredTimestampSec1 = anomalyTracker->getAlarmTimestampSec(dimensionKey);
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs - 5 * NS_PER_SEC) / NS_PER_SEC,
+ (uint64_t)alarmFiredTimestampSec1);
+
+ // Release wakelock wl1.
+ release_event = CreateReleaseWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + bucketSizeNs - 4 * NS_PER_SEC - 10) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+ static_cast<uint32_t>(alarmFiredTimestampSec1));
+ EXPECT_EQ(0u, alarmSet.size());
+
+ // Acquire wakelock wl1 near the end of bucket #0.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 2);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ // Release the event at early bucket #1.
+ release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + NS_PER_SEC - 1);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ // Anomaly detected when stopping the alarm. The refractory period does not change.
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Condition changes to false.
+ screen_on_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+ bucketStartTimeNs + 2 * bucketSizeNs + 20);
+ processor->OnLogEvent(screen_on_event.get());
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 30);
+ processor->OnLogEvent(acquire_event.get());
+ // The condition is false. Do not start the alarm.
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + bucketSizeNs + NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Condition turns true.
+ screen_off_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+ bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC);
+ processor->OnLogEvent(screen_off_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs + NS_PER_SEC + threshold_ns) / NS_PER_SEC,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ // Condition turns to false.
+ screen_on_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_ON,
+ bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1);
+ processor->OnLogEvent(screen_on_event.get());
+ // Condition turns to false. Cancelled the alarm.
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ // Detected one anomaly.
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 1) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Condition turns to true again.
+ screen_off_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_OFF,
+ bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC + 2);
+ processor->OnLogEvent(screen_off_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 2 + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ release_event = CreateReleaseWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + 2 * bucketSizeNs + 5 * NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+}
+
+TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets) {
+ const int num_buckets = 3;
+ const uint64_t threshold_ns = NS_PER_SEC;
+ auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, true);
+ const uint64_t alert_id = config.alert(0).id();
+ const uint32_t refractory_period_sec = config.alert(0).refractory_period_secs();
+
+ int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+ int64_t bucketSizeNs =
+ TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+
+ ConfigKey cfgKey;
+ auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
+ EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+ EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+ EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+
+ sp<AnomalyTracker> anomalyTracker =
+ processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+
+ auto screen_off_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
+ processor->OnLogEvent(screen_off_event.get());
+
+ // Acquire wakelock "wc1" in bucket #0.
+ auto acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - NS_PER_SEC / 2 - 1);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Release wakelock "wc1" in bucket #0.
+ auto release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 1);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire wakelock "wc1" in bucket #1.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 1);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ release_event = CreateReleaseWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + bucketSizeNs + 100);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire wakelock "wc2" in bucket #2.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 1);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ // Release wakelock "wc2" in bucket #2.
+ release_event = CreateReleaseWakelockEvent(
+ attributions3, "wl2", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+ EXPECT_EQ(refractory_period_sec +
+ (bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey2));
+
+ // Acquire wakelock "wc1" in bucket #2.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2 * NS_PER_SEC);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 2 * bucketSizeNs) / NS_PER_SEC + 2 + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Release wakelock "wc1" in bucket #2.
+ release_event = CreateReleaseWakelockEvent(
+ attributions2, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec +
+ (int64_t)(bucketStartTimeNs + 2 * bucketSizeNs + 2.5 * NS_PER_SEC) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 4);
+ processor->OnLogEvent(acquire_event.get());
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs - NS_PER_SEC + 5);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ((bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+
+ release_event = CreateReleaseWakelockEvent(
+ attributions3, "wl2", bucketStartTimeNs + 6 * bucketSizeNs + 2);
+ processor->OnLogEvent(release_event.get());
+ release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 6 * bucketSizeNs + 6);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey2));
+ // The buckets are not messed up across dimensions. Only one dimension has anomaly triggered.
+ EXPECT_EQ(refractory_period_sec +
+ (int64_t)(bucketStartTimeNs + 6 * bucketSizeNs) / NS_PER_SEC + 1,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+}
+
+TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period) {
+ const int num_buckets = 2;
+ const uint64_t threshold_ns = 3 * NS_PER_SEC;
+ auto config = CreateStatsdConfig(num_buckets, threshold_ns, DurationMetric::SUM, false);
+ int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+ int64_t bucketSizeNs =
+ TimeUnitToBucketSizeInMillis(config.duration_metric(0).bucket()) * 1000000;
+
+ const uint64_t alert_id = config.alert(0).id();
+ const uint32_t refractory_period_sec = 3 * bucketSizeNs / NS_PER_SEC;
+ config.mutable_alert(0)->set_refractory_period_secs(refractory_period_sec);
+
+ ConfigKey cfgKey;
+ auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey);
+ EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
+ EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
+ EXPECT_EQ(1u, processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers.size());
+
+ sp<AnomalyTracker> anomalyTracker =
+ processor->mMetricsManagers.begin()->second->mAllAnomalyTrackers[0];
+
+ auto screen_off_event = CreateScreenStateChangedEvent(
+ android::view::DisplayStateEnum::DISPLAY_STATE_OFF, bucketStartTimeNs + 1);
+ processor->OnLogEvent(screen_off_event.get());
+
+ // Acquire wakelock "wc1" in bucket #0.
+ auto acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs - 100);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Acquire the wakelock "wc1" again.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + bucketSizeNs + 2 * NS_PER_SEC + 1);
+ processor->OnLogEvent(acquire_event.get());
+ // The alarm does not change.
+ EXPECT_EQ((bucketStartTimeNs + bucketSizeNs) / NS_PER_SEC + 3,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(0u, anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // Anomaly alarm fired late.
+ const int64_t firedAlarmTimestampNs = bucketStartTimeNs + 2 * bucketSizeNs - NS_PER_SEC;
+ auto alarmSet = processor->getAnomalyAlarmMonitor()->popSoonerThan(
+ static_cast<uint32_t>(firedAlarmTimestampNs / NS_PER_SEC));
+ EXPECT_EQ(1u, alarmSet.size());
+ processor->onAnomalyAlarmFired(firedAlarmTimestampNs, alarmSet);
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs - 100);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ auto release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 1);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+ // Within the refractory period. No anomaly.
+ EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ // A new wakelock, but still within refractory period.
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 2 * bucketSizeNs + 10 * NS_PER_SEC);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 3 * bucketSizeNs - NS_PER_SEC);
+ // Still in the refractory period. No anomaly.
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(refractory_period_sec + firedAlarmTimestampNs / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(dimensionKey));
+
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 5);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ release_event = CreateReleaseWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 4);
+ processor->OnLogEvent(release_event.get());
+ EXPECT_EQ(0u, anomalyTracker->getAlarmTimestampSec(dimensionKey));
+
+ acquire_event = CreateAcquireWakelockEvent(
+ attributions1, "wl1", bucketStartTimeNs + 5 * bucketSizeNs - 3 * NS_PER_SEC - 3);
+ processor->OnLogEvent(acquire_event.get());
+ EXPECT_EQ((bucketStartTimeNs + 5 * bucketSizeNs) / NS_PER_SEC,
+ anomalyTracker->getAlarmTimestampSec(dimensionKey));
+}
+
+#else
+GTEST_LOG_(INFO) << "This test does nothing.\n";
+#endif
+
+} // namespace statsd
+} // namespace os
+} // namespace android
diff --git a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp
index 2287c2b..c2334d8 100644
--- a/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp
+++ b/cmds/statsd/tests/e2e/DimensionInCondition_e2e_combination_OR_cond_test.cpp
@@ -458,7 +458,7 @@
} // namespace
TEST(DimensionInConditionE2eTest, TestDurationMetric_NoLink_OR_CombinationCondition) {
- for (auto aggregationType : { DurationMetric::MAX_SPARSE}) { // DurationMetric::SUM,
+ for (auto aggregationType : { DurationMetric::MAX_SPARSE, DurationMetric::SUM}) {
ConfigKey cfgKey;
auto config = CreateDurationMetricConfig_NoLink_CombinationCondition(aggregationType);
int64_t bucketStartTimeNs = 10000000000;
diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
index 5ef84e6..a75d6c8 100644
--- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
@@ -40,7 +40,7 @@
const ConfigKey kConfigKey(0, 12345);
const int tagId = 1;
const int64_t metricId = 123;
-const int64_t bucketStartTimeNs = 10000000000;
+const int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
const int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
const int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs;
const int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs;
diff --git a/cmds/statsd/tests/metrics/OringDurationTracker_test.cpp b/cmds/statsd/tests/metrics/OringDurationTracker_test.cpp
index 9b27f3c..13cdb0b 100644
--- a/cmds/statsd/tests/metrics/OringDurationTracker_test.cpp
+++ b/cmds/statsd/tests/metrics/OringDurationTracker_test.cpp
@@ -44,7 +44,7 @@
const HashableDimensionKey kConditionKey1 = getMockedDimensionKey(TagId, 1, "maps");
const HashableDimensionKey kEventKey1 = getMockedDimensionKey(TagId, 2, "maps");
const HashableDimensionKey kEventKey2 = getMockedDimensionKey(TagId, 3, "maps");
-const uint64_t bucketSizeNs = 30 * 1000 * 1000 * 1000LL;
+const uint64_t bucketSizeNs = 30 * NS_PER_SEC;
TEST(OringDurationTrackerTest, TestDurationOverlap) {
const MetricDimensionKey eventKey = getMockedMetricDimensionKey(TagId, 0, "event");
@@ -370,6 +370,103 @@
tracker.predictAnomalyTimestampNs(*anomalyTracker, event3StartTimeNs));
}
+TEST(OringDurationTrackerTest, TestPredictAnomalyTimestamp2) {
+ vector<Matcher> dimensionInCondition;
+ Alert alert;
+ alert.set_id(101);
+ alert.set_metric_id(1);
+ alert.set_trigger_if_sum_gt(5 * NS_PER_SEC);
+ alert.set_num_buckets(1);
+ alert.set_refractory_period_secs(20);
+
+ uint64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+ uint64_t bucketNum = 0;
+
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<AlarmMonitor> alarmMonitor;
+ sp<DurationAnomalyTracker> anomalyTracker =
+ new DurationAnomalyTracker(alert, kConfigKey, alarmMonitor);
+ OringDurationTracker tracker(kConfigKey, metricId, DEFAULT_METRIC_DIMENSION_KEY, wizard, 1,
+ dimensionInCondition,
+ true, bucketStartTimeNs, bucketNum, bucketStartTimeNs,
+ bucketSizeNs, true, false, {anomalyTracker});
+
+ uint64_t eventStartTimeNs = bucketStartTimeNs + 9 * NS_PER_SEC;
+ tracker.noteStart(DEFAULT_DIMENSION_KEY, true, eventStartTimeNs, ConditionKey());
+ // Anomaly happens in the bucket #1.
+ EXPECT_EQ((long long)(bucketStartTimeNs + 14 * NS_PER_SEC),
+ tracker.predictAnomalyTimestampNs(*anomalyTracker, eventStartTimeNs));
+
+ tracker.noteStop(DEFAULT_DIMENSION_KEY, bucketStartTimeNs + 14 * NS_PER_SEC, false);
+
+ EXPECT_EQ((long long)(bucketStartTimeNs + 34 * NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY));
+
+ uint64_t event2StartTimeNs = bucketStartTimeNs + 22 * NS_PER_SEC;
+ EXPECT_EQ((long long)(bucketStartTimeNs + 34 * NS_PER_SEC) / NS_PER_SEC,
+ anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY));
+ EXPECT_EQ((long long)(bucketStartTimeNs + 35 * NS_PER_SEC),
+ tracker.predictAnomalyTimestampNs(*anomalyTracker, event2StartTimeNs));
+}
+
+TEST(OringDurationTrackerTest, TestPredictAnomalyTimestamp3) {
+ // Test the cases where the refractory period is smaller than the bucket size, longer than
+ // the bucket size, and longer than 2x of the anomaly detection window.
+ for (int j = 0; j < 3; j++) {
+ uint64_t thresholdNs = j * bucketSizeNs + 5 * NS_PER_SEC;
+ for (int i = 0; i <= 7; ++i) {
+ vector<Matcher> dimensionInCondition;
+ Alert alert;
+ alert.set_id(101);
+ alert.set_metric_id(1);
+ alert.set_trigger_if_sum_gt(thresholdNs);
+ alert.set_num_buckets(3);
+ alert.set_refractory_period_secs(
+ bucketSizeNs / NS_PER_SEC / 2 + i * bucketSizeNs / NS_PER_SEC);
+
+ uint64_t bucketStartTimeNs = 10 * NS_PER_SEC;
+ uint64_t bucketNum = 101;
+
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<AlarmMonitor> alarmMonitor;
+ sp<DurationAnomalyTracker> anomalyTracker =
+ new DurationAnomalyTracker(alert, kConfigKey, alarmMonitor);
+ OringDurationTracker tracker(kConfigKey, metricId, DEFAULT_METRIC_DIMENSION_KEY,
+ wizard, 1, dimensionInCondition,
+ true, bucketStartTimeNs, bucketNum, bucketStartTimeNs,
+ bucketSizeNs, true, false, {anomalyTracker});
+
+ uint64_t eventStartTimeNs = bucketStartTimeNs + 9 * NS_PER_SEC;
+ tracker.noteStart(DEFAULT_DIMENSION_KEY, true, eventStartTimeNs, ConditionKey());
+ EXPECT_EQ((long long)(eventStartTimeNs + thresholdNs),
+ tracker.predictAnomalyTimestampNs(*anomalyTracker, eventStartTimeNs));
+ uint64_t eventStopTimeNs = eventStartTimeNs + thresholdNs + NS_PER_SEC;
+ tracker.noteStop(DEFAULT_DIMENSION_KEY, eventStopTimeNs, false);
+
+ uint64_t refractoryPeriodEndSec =
+ anomalyTracker->getRefractoryPeriodEndsSec(DEFAULT_METRIC_DIMENSION_KEY);
+ EXPECT_EQ((long long)(eventStopTimeNs) / NS_PER_SEC + alert.refractory_period_secs(),
+ refractoryPeriodEndSec);
+
+ // Acquire and release a wakelock in the next bucket.
+ uint64_t event2StartTimeNs = eventStopTimeNs + bucketSizeNs;
+ tracker.noteStart(DEFAULT_DIMENSION_KEY, true, event2StartTimeNs, ConditionKey());
+ uint64_t event2StopTimeNs = event2StartTimeNs + 4 * NS_PER_SEC;
+ tracker.noteStop(DEFAULT_DIMENSION_KEY, event2StopTimeNs, false);
+
+ // Test the alarm prediction works well when seeing another wakelock start event.
+ for (int k = 0; k <= 2; ++k) {
+ uint64_t event3StartTimeNs = event2StopTimeNs + NS_PER_SEC + k * bucketSizeNs;
+ uint64_t alarmTimestampNs =
+ tracker.predictAnomalyTimestampNs(*anomalyTracker, event3StartTimeNs);
+ EXPECT_GT(alarmTimestampNs, 0u);
+ EXPECT_GE(alarmTimestampNs, event3StartTimeNs);
+ EXPECT_GE(alarmTimestampNs, refractoryPeriodEndSec * NS_PER_SEC);
+ }
+ }
+ }
+}
+
TEST(OringDurationTrackerTest, TestAnomalyDetectionExpiredAlarm) {
const MetricDimensionKey eventKey = getMockedMetricDimensionKey(TagId, 0, "event");
diff --git a/cmds/statsd/tests/statsd_test_util.cpp b/cmds/statsd/tests/statsd_test_util.cpp
index 0f785df..ce44a35 100644
--- a/cmds/statsd/tests/statsd_test_util.cpp
+++ b/cmds/statsd/tests/statsd_test_util.cpp
@@ -447,7 +447,9 @@
sp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const StatsdConfig& config,
const ConfigKey& key) {
sp<UidMap> uidMap = new UidMap();
- sp<AlarmMonitor> anomalyAlarmMonitor;
+ sp<AlarmMonitor> anomalyAlarmMonitor =
+ new AlarmMonitor(1, [](const sp<IStatsCompanionService>&, int64_t){},
+ [](const sp<IStatsCompanionService>&){});
sp<AlarmMonitor> periodicAlarmMonitor;
sp<StatsLogProcessor> processor = new StatsLogProcessor(
uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){});
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 9cba926..8e2e43c 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -167,10 +167,13 @@
Landroid/app/ApplicationPackageManager;->mPM:Landroid/content/pm/IPackageManager;
Landroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I
Landroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I
+Landroid/app/AppOpsManager;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
Landroid/app/AppOpsManager;->mService:Lcom/android/internal/app/IAppOpsService;
Landroid/app/AppOpsManager;->noteOp(I)I
Landroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I
Landroid/app/AppOpsManager;->OP_COARSE_LOCATION:I
+Landroid/app/AppOpsManager$OpEntry;->getDuration()I
+Landroid/app/AppOpsManager$OpEntry;->getRejectTime()J
Landroid/app/AppOpsManager;->OP_FINE_LOCATION:I
Landroid/app/AppOpsManager;->OP_GET_USAGE_STATS:I
Landroid/app/AppOpsManager;->OP_POST_NOTIFICATION:I
@@ -357,6 +360,7 @@
Landroid/bluetooth/BluetoothAdapter;->setScanMode(II)Z
Landroid/bluetooth/BluetoothAdapter;->setScanMode(I)Z
Landroid/bluetooth/BluetoothDevice;->createBond(I)Z
+Landroid/bluetooth/BluetoothDevice;->getAlias()Ljava/lang/String;
Landroid/bluetooth/BluetoothDevice;->getAliasName()Ljava/lang/String;
Landroid/bluetooth/BluetoothGattCharacteristic;->mInstance:I
Landroid/bluetooth/BluetoothGattCharacteristic;->mService:Landroid/bluetooth/BluetoothGattService;
@@ -614,6 +618,7 @@
Landroid/graphics/drawable/BitmapDrawable;->getOpticalInsets()Landroid/graphics/Insets;
Landroid/graphics/drawable/BitmapDrawable;->getTint()Landroid/content/res/ColorStateList;
Landroid/graphics/drawable/BitmapDrawable;->getTintMode()Landroid/graphics/PorterDuff$Mode;
+Landroid/graphics/drawable/BitmapDrawable;->mTargetDensity:I
Landroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V
Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mConstantPadding:Landroid/graphics/Rect;
Landroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets;
@@ -677,6 +682,7 @@
Landroid/graphics/NinePatch$InsetStruct;-><init>(IIIIIIIIFIF)V
Landroid/graphics/NinePatch;->mBitmap:Landroid/graphics/Bitmap;
Landroid/graphics/Picture;->mNativePicture:J
+Landroid/graphics/PixelXorXfermode;-><init>(I)V
Landroid/graphics/PorterDuffColorFilter;->setColor(I)V
Landroid/graphics/PorterDuffColorFilter;->setMode(Landroid/graphics/PorterDuff$Mode;)V
Landroid/graphics/Region;-><init>(JI)V
@@ -692,14 +698,64 @@
Landroid/graphics/Typeface;->sDefaults:[Landroid/graphics/Typeface;
Landroid/graphics/Typeface;->setDefault(Landroid/graphics/Typeface;)V
Landroid/graphics/Typeface;->sSystemFontMap:Ljava/util/Map;
+Landroid/hardware/camera2/CameraCharacteristics;->CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->CONTROL_MAX_REGIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V
Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+Landroid/hardware/camera2/CameraCharacteristics;->LED_AVAILABLE_LEDS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->LENS_INFO_SHADING_MAP_SIZE:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->LOGICAL_MULTI_CAMERA_PHYSICAL_IDS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->QUIRKS_USE_PARTIAL_RESULT:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_CHARACTERISTICS_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_REQUEST_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_RESULT_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_AVAILABLE_SESSION_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->REQUEST_MAX_NUM_OUTPUT_STREAMS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_FORMATS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_JPEG_MIN_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_JPEG_SIZES:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_PROCESSED_SIZES:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;->SCALER_AVAILABLE_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CaptureRequest;->JPEG_GPS_COORDINATES:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->JPEG_GPS_PROCESSING_METHOD:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->JPEG_GPS_TIMESTAMP:Landroid/hardware/camera2/CaptureRequest$Key;
Landroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V
+Landroid/hardware/camera2/CaptureRequest;->LED_TRANSMIT:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->REQUEST_ID:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_BLUE:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_GREEN:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_COORDINATES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_PROCESSING_METHOD:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->JPEG_GPS_TIMESTAMP:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/camera2/CaptureResult$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V
Landroid/hardware/camera2/CaptureResult$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+Landroid/hardware/camera2/CaptureResult;->LED_TRANSMIT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->QUIRKS_PARTIAL_RESULT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->REQUEST_FRAME_COUNT:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->REQUEST_ID:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_IDS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_LANDMARKS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_RECTANGLES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_FACE_SCORES:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_LENS_SHADING_MAP:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_TIMESTAMPS:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_X_SHIFTS:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/camera2/CaptureResult;->STATISTICS_OIS_Y_SHIFTS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_PREDICTED_COLOR_GAINS:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->STATISTICS_PREDICTED_COLOR_TRANSFORM:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->SYNC_FRAME_NUMBER:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_BLUE:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_GREEN:Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureResult$Key;
Landroid/hardware/camera2/impl/CameraMetadataNative;->mMetadataPtr:J
Landroid/hardware/Camera;->addCallbackBuffer([BI)V
Landroid/hardware/Camera;->mNativeContext:J
@@ -766,56 +822,24 @@
Landroid/hardware/usb/UsbRequest;->mLength:I
Landroid/hardware/usb/UsbRequest;->mNativeContext:J
Landroid/icu/impl/CurrencyData;-><init>()V
-Landroid/icu/impl/number/DecimalFormatProperties;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/impl/number/DecimalFormatProperties;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/impl/TimeZoneGenericNames;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/icu/text/ArabicShaping;->isAlefMaksouraChar(C)Z
Landroid/icu/text/ArabicShaping;->isSeenTailFamilyChar(C)I
Landroid/icu/text/ArabicShaping;->isTailChar(C)Z
Landroid/icu/text/ArabicShaping;->isYehHamzaChar(C)Z
-Landroid/icu/text/DateFormat;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/icu/text/DateFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
-Landroid/icu/text/DateFormatSymbols;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/icu/text/DateIntervalFormat;-><init>()V
-Landroid/icu/text/DateIntervalFormat;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
-Landroid/icu/text/DecimalFormat_ICU58_Android;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/DecimalFormat_ICU58_Android;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/DecimalFormat;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/icu/text/DecimalFormatSymbols;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
-Landroid/icu/text/DecimalFormatSymbols;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/DecimalFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/MessageFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/MessageFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/NumberFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/NumberFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/PluralFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/PluralRules$FixedDecimal;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/PluralRules$FixedDecimal;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/PluralRules;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/PluralRules;->writeObject(Ljava/io/ObjectOutputStream;)V
Landroid/icu/text/RuleBasedCollator;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
-Landroid/icu/text/RuleBasedNumberFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/RuleBasedNumberFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/text/SelectFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/SimpleDateFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/SimpleDateFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
Landroid/icu/text/SpoofChecker$ScriptSet;->and(I)V
Landroid/icu/text/SpoofChecker$ScriptSet;-><init>()V
Landroid/icu/text/SpoofChecker$ScriptSet;->isFull()Z
Landroid/icu/text/SpoofChecker$ScriptSet;->setAll()V
-Landroid/icu/text/TimeZoneFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/text/TimeZoneFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
Landroid/icu/text/TimeZoneNames$DefaultTimeZoneNames$FactoryImpl;-><init>()V
Landroid/icu/text/Transliterator;->createFromRules(Ljava/lang/String;Ljava/lang/String;I)Landroid/icu/text/Transliterator;
Landroid/icu/text/Transliterator;->transliterate(Ljava/lang/String;)Ljava/lang/String;
Landroid/icu/text/UFormat;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
Landroid/icu/util/Calendar;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale;
-Landroid/icu/util/Calendar;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/util/Calendar;->writeObject(Ljava/io/ObjectOutputStream;)V
-Landroid/icu/util/ChineseCalendar;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/util/IslamicCalendar;->readObject(Ljava/io/ObjectInputStream;)V
-Landroid/icu/util/SimpleTimeZone;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/inputmethodservice/InputMethodService;->mExtractEditText:Landroid/inputmethodservice/ExtractEditText;
Landroid/location/CountryDetector;->detectCountry()Landroid/location/Country;
Landroid/location/Country;->getCountryIso()Ljava/lang/String;
@@ -922,6 +946,7 @@
Landroid/media/JetPlayer;->mNativePlayerInJavaObj:J
Landroid/media/JetPlayer;->postEventFromNative(Ljava/lang/Object;III)V
Landroid/media/MediaCodec$CodecException;-><init>(IILjava/lang/String;)V
+Landroid/media/MediaCodec;->getBuffers(Z)[Ljava/nio/ByteBuffer;
Landroid/media/MediaCodec;->releaseOutputBuffer(IZZJ)V
Landroid/media/MediaFile;->FIRST_AUDIO_FILE_TYPE:I
Landroid/media/MediaFile;->getFileType(Ljava/lang/String;)Landroid/media/MediaFile$MediaFileType;
@@ -1849,6 +1874,8 @@
Landroid/text/DynamicLayout;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V
Landroid/text/DynamicLayout;->sStaticLayout:Landroid/text/StaticLayout;
Landroid/text/Html;->withinStyle(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;II)V
+Landroid/text/Layout$Alignment;->ALIGN_LEFT:Landroid/text/Layout$Alignment;
+Landroid/text/Layout$Alignment;->ALIGN_RIGHT:Landroid/text/Layout$Alignment;
Landroid/text/Layout;->DIRS_ALL_LEFT_TO_RIGHT:Landroid/text/Layout$Directions;
Landroid/text/Layout;->getPrimaryHorizontal(IZ)F
Landroid/text/method/LinkMovementMethod;->sInstance:Landroid/text/method/LinkMovementMethod;
@@ -1930,8 +1957,8 @@
Landroid/util/Pools$SynchronizedPool;-><init>(I)V
Landroid/util/Rational;->mDenominator:I
Landroid/util/Rational;->mNumerator:I
-Landroid/util/Rational;->readObject(Ljava/io/ObjectInputStream;)V
Landroid/util/Singleton;->mInstance:Ljava/lang/Object;
+Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
Landroid/util/SparseIntArray;->mKeys:[I
Landroid/util/SparseIntArray;->mSize:I
Landroid/util/SparseIntArray;->mValues:[I
@@ -2095,6 +2122,7 @@
Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionStarted(I)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
+Landroid/view/textclassifier/TextClassificationManager;->getTextClassifier(I)Landroid/view/textclassifier/TextClassifier;
Landroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z
Landroid/view/TextureView;->destroyHardwareLayer()V
Landroid/view/TextureView;->mLayer:Landroid/view/TextureLayer;
@@ -2777,8 +2805,6 @@
Lcom/android/okhttp/OkHttpClient;->dns:Lcom/android/okhttp/Dns;
Lcom/android/okhttp/OkHttpClient;->setProtocols(Ljava/util/List;)Lcom/android/okhttp/OkHttpClient;
Lcom/android/okhttp/OkHttpClient;->setRetryOnConnectionFailure(Z)V
-Lcom/android/okhttp/okio/ByteString;->readObject(Ljava/io/ObjectInputStream;)V
-Lcom/android/okhttp/okio/ByteString;->writeObject(Ljava/io/ObjectOutputStream;)V
Lcom/android/okhttp/Request;->headers:Lcom/android/okhttp/Headers;
Lcom/android/okhttp/Request;->method:Ljava/lang/String;
Lcom/android/okhttp/Request;->url:Lcom/android/okhttp/HttpUrl;
@@ -2881,20 +2907,14 @@
Ldalvik/system/VMRuntime;->vmLibrary()Ljava/lang/String;
Ldalvik/system/VMStack;->getCallingClassLoader()Ljava/lang/ClassLoader;
Ldalvik/system/VMStack;->getStackClass2()Ljava/lang/Class;
-Ljava/awt/font/NumericShaper;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/beans/PropertyChangeSupport;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/beans/PropertyChangeSupport;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/io/FileDescriptor;->descriptor:I
Ljava/io/FileDescriptor;->getInt$()I
Ljava/io/FileDescriptor;->setInt$(I)V
Ljava/io/FileInputStream;->fd:Ljava/io/FileDescriptor;
Ljava/io/FileOutputStream;->fd:Ljava/io/FileDescriptor;
-Ljava/io/File;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/io/File;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/io/ObjectStreamClass;->getConstructorId(Ljava/lang/Class;)J
Ljava/io/ObjectStreamClass;->newInstance(Ljava/lang/Class;J)Ljava/lang/Object;
Ljava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object;
-Ljava/io/UncheckedIOException;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/lang/AbstractStringBuilder;->value:[C
Ljava/lang/Boolean;->value:Z
Ljava/lang/Byte;->value:B
@@ -2915,11 +2935,8 @@
Ljava/lang/Daemons;->start()V
Ljava/lang/Daemons;->stop()V
Ljava/lang/Double;->value:D
-Ljava/lang/Enum;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/lang/Float;->value:F
Ljava/lang/Integer;->value:I
-Ljava/lang/invoke/MethodType;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/lang/invoke/MethodType;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/lang/Long;->value:J
Ljava/lang/ref/FinalizerReference;->add(Ljava/lang/Object;)V
Ljava/lang/ref/FinalizerReference;->head:Ljava/lang/ref/FinalizerReference;
@@ -2935,10 +2952,6 @@
Ljava/lang/Runtime;->load(Ljava/lang/String;Ljava/lang/ClassLoader;)V
Ljava/lang/Runtime;->nativeLoad(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String;
Ljava/lang/Short;->value:S
-Ljava/lang/StringBuffer;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/lang/StringBuffer;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/lang/StringBuilder;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/lang/StringBuilder;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/lang/String;-><init>(II[C)V
Ljava/lang/System;-><init>()V
Ljava/lang/Thread;->daemon:Z
@@ -2962,16 +2975,9 @@
Ljava/lang/Throwable;->cause:Ljava/lang/Throwable;
Ljava/lang/Throwable;->detailMessage:Ljava/lang/String;
Ljava/lang/Throwable;->nativeFillInStackTrace()Ljava/lang/Object;
-Ljava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/lang/Throwable;->stackTrace:[Ljava/lang/StackTraceElement;
Ljava/lang/Throwable;->suppressedExceptions:Ljava/util/List;
-Ljava/lang/Throwable;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/lang/Void;-><init>()V
-Ljava/math/BigDecimal;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/math/BigDecimal;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/math/BigInteger;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/math/BigInteger;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/math/MathContext;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/net/Authenticator;->theAuthenticator:Ljava/net/Authenticator;
Ljava/net/DatagramSocket;->impl:Ljava/net/DatagramSocketImpl;
Ljava/net/HttpCookie;->httpOnly:Z
@@ -2983,8 +2989,6 @@
Ljava/net/Inet6Address$Inet6AddressHolder;->scope_id_set:Z
Ljava/net/Inet6Address$Inet6AddressHolder;->scope_ifname:Ljava/net/NetworkInterface;
Ljava/net/Inet6Address;-><init>()V
-Ljava/net/Inet6Address;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/net/Inet6Address;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/net/InetAddress;->clearDnsCache()V
Ljava/net/InetAddress;->holder:Ljava/net/InetAddress$InetAddressHolder;
Ljava/net/InetAddress$InetAddressHolder;->address:I
@@ -2993,19 +2997,11 @@
Ljava/net/InetAddress$InetAddressHolder;->originalHostName:Ljava/lang/String;
Ljava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z
Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;
-Ljava/net/InetAddress;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/net/InetAddress;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/net/InetSocketAddress;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/net/InetSocketAddress;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor;
Ljava/net/Socket;->impl:Ljava/net/SocketImpl;
Ljava/net/URI;->host:Ljava/lang/String;
-Ljava/net/URI;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/net/URI;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/net/URL;->handler:Ljava/net/URLStreamHandler;
Ljava/net/URL;->handlers:Ljava/util/Hashtable;
-Ljava/net/URL;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/net/URL;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/nio/Buffer;->address:J
Ljava/nio/Buffer;->capacity:I
Ljava/nio/Buffer;->_elementSizeShift:I
@@ -3016,168 +3012,37 @@
Ljava/nio/ByteBuffer;->offset:I
Ljava/nio/charset/CharsetEncoder;->canEncode(Ljava/nio/CharBuffer;)Z
Ljava/nio/DirectByteBuffer;-><init>(JI)V
-Ljava/nio/file/DirectoryIteratorException;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object;
Ljava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I
Ljava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J
-Ljava/security/cert/CertificateRevokedException;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/security/cert/CertificateRevokedException;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/security/cert/CertPathValidatorException;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/security/CodeSigner;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/security/GuardedObject;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/security/Provider;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/security/SignedObject;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String;
Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V
-Ljava/security/Timestamp;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/ChoiceFormat;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/text/DateFormat;->is24Hour:Ljava/lang/Boolean;
-Ljava/text/DateFormatSymbols;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/DateFormatSymbols;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/text/DecimalFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/DecimalFormatSymbols;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/DecimalFormatSymbols;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/text/DecimalFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/text/MessageFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/NumberFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/text/NumberFormat;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/text/SimpleDateFormat;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/AbstractChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/HijrahChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/HijrahDate;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/IsoChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/JapaneseChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/JapaneseDate;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/JapaneseEra;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/MinguoChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/MinguoDate;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/ThaiBuddhistChronology;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/chrono/ThaiBuddhistDate;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/Duration;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/time/Duration;->toSeconds()Ljava/math/BigDecimal;
-Ljava/time/Instant;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/LocalDate;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/LocalDateTime;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/LocalTime;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/MonthDay;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/time/OffsetDateTime;-><init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)V
-Ljava/time/OffsetDateTime;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/OffsetTime;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/Period;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/temporal/ValueRange;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/temporal/WeekFields;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/YearMonth;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/Year;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/ZonedDateTime;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/ZoneId;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/ZoneOffset;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/zone/ZoneOffsetTransition;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/zone/ZoneOffsetTransitionRule;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/time/zone/ZoneRules;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/ArrayDeque;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/ArrayDeque;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/ArrayList;->elementData:[Ljava/lang/Object;
-Ljava/util/ArrayList;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/util/ArrayList;->size:I
Ljava/util/ArrayList$SubList;->parent:Ljava/util/AbstractList;
Ljava/util/ArrayList$SubList;->parentOffset:I
Ljava/util/ArrayList$SubList;->size:I
-Ljava/util/ArrayList;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/Arrays$ArrayList;->a:[Ljava/lang/Object;
-Ljava/util/BitSet;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/BitSet;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/Calendar;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/Calendar;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/Calendar;->zone:Ljava/util/TimeZone;
Ljava/util/Collections$EmptyList;-><init>()V
-Ljava/util/Collections$SetFromMap;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/util/Collections$SynchronizedCollection;->c:Ljava/util/Collection;
-Ljava/util/Collections$SynchronizedCollection;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/Collections$SynchronizedMap;->m:Ljava/util/Map;
-Ljava/util/Collections$SynchronizedMap;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/Collections$UnmodifiableCollection;->c:Ljava/util/Collection;
Ljava/util/Collections$UnmodifiableMap;->m:Ljava/util/Map;
-Ljava/util/concurrent/atomic/AtomicReferenceArray;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/atomic/DoubleAccumulator;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/atomic/DoubleAdder;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/atomic/LongAccumulator;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/atomic/LongAdder;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasMoreElements()Z
-Ljava/util/concurrent/ConcurrentHashMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/ConcurrentHashMap;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/ConcurrentLinkedDeque;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/ConcurrentLinkedDeque;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/ConcurrentLinkedQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/ConcurrentLinkedQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/ConcurrentSkipListMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/ConcurrentSkipListMap;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/CopyOnWriteArrayList;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/CopyOnWriteArrayList;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/ForkJoinTask;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/ForkJoinTask;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/concurrent/FutureTask;->callable:Ljava/util/concurrent/Callable;
-Ljava/util/concurrent/LinkedBlockingDeque;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/LinkedBlockingDeque;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/concurrent/LinkedBlockingQueue;->capacity:I
-Ljava/util/concurrent/LinkedBlockingQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/LinkedBlockingQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/LinkedTransferQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/LinkedTransferQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/locks/ReentrantLock$Sync;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/locks/StampedLock;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/PriorityBlockingQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/PriorityBlockingQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/SynchronousQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/concurrent/SynchronousQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/concurrent/ThreadLocalRandom;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/Date;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/Date;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/EnumMap;->keyType:Ljava/lang/Class;
-Ljava/util/EnumMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/EnumMap;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/EnumSet;->elementType:Ljava/lang/Class;
-Ljava/util/EnumSet;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/GregorianCalendar;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/util/HashMap$HashIterator;->hasNext()Z
-Ljava/util/HashMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/HashMap;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/HashSet;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/HashSet;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/Hashtable;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/Hashtable;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/IdentityHashMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/IdentityHashMap;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/InvalidPropertiesFormatException;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/InvalidPropertiesFormatException;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry;
Ljava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z
-Ljava/util/LinkedList;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/LinkedList;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/Locale;->createConstant(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale;
-Ljava/util/Locale;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/Locale;->readResolve()Ljava/lang/Object;
-Ljava/util/Locale;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/logging/LogRecord;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/logging/LogRecord;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/prefs/NodeChangeEvent;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/prefs/NodeChangeEvent;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/prefs/PreferenceChangeEvent;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/prefs/PreferenceChangeEvent;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/PriorityQueue;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/PriorityQueue;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/Random;->readObject(Ljava/io/ObjectInputStream;)V
Ljava/util/Random;->seedUniquifier()J
-Ljava/util/Random;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/regex/Matcher;->appendPos:I
-Ljava/util/regex/Pattern;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/SimpleTimeZone;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/SimpleTimeZone;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/TreeMap;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/TreeMap;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/TreeSet;->readObject(Ljava/io/ObjectInputStream;)V
-Ljava/util/TreeSet;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljava/util/Vector;->writeObject(Ljava/io/ObjectOutputStream;)V
Ljava/util/zip/Deflater;->buf:[B
Ljava/util/zip/Deflater;->finished:Z
Ljava/util/zip/Deflater;->finish:Z
@@ -3193,23 +3058,11 @@
Ljava/util/zip/Inflater;->off:I
Ljava/util/zip/ZipEntry;-><init>(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V
Ljava/util/zip/ZipFile;->jzfile:J
-Ljavax/crypto/SealedObject;->readObject(Ljava/io/ObjectInputStream;)V
Ljavax/net/ssl/SSLServerSocketFactory;->defaultServerSocketFactory:Ljavax/net/ssl/SSLServerSocketFactory;
Ljavax/net/ssl/SSLSocketFactory;->defaultSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
-Ljavax/security/auth/Subject;->readObject(Ljava/io/ObjectInputStream;)V
-Ljavax/security/auth/Subject$SecureSet;->readObject(Ljava/io/ObjectInputStream;)V
-Ljavax/security/auth/Subject$SecureSet;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljavax/security/auth/Subject;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljavax/security/auth/x500/X500Principal;->readObject(Ljava/io/ObjectInputStream;)V
-Ljavax/security/auth/x500/X500Principal;->writeObject(Ljava/io/ObjectOutputStream;)V
-Ljavax/xml/datatype/DatatypeConfigurationException;->readObject(Ljava/io/ObjectInputStream;)V
-Ljavax/xml/namespace/QName;->readObject(Ljava/io/ObjectInputStream;)V
Llibcore/util/ZoneInfo;->mTransitions:[J
-Llibcore/util/ZoneInfo;->readObject(Ljava/io/ObjectInputStream;)V
Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V
Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>()V
Lorg/json/JSONArray;->values:Ljava/util/List;
Lorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V
Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe;
-Lsun/security/util/ObjectIdentifier;->readObject(Ljava/io/ObjectInputStream;)V
-Lsun/security/util/ObjectIdentifier;->writeObject(Ljava/io/ObjectOutputStream;)V
diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt
index 2477b57..2f0bba1 100644
--- a/config/hiddenapi-vendor-list.txt
+++ b/config/hiddenapi-vendor-list.txt
@@ -426,7 +426,6 @@
Landroid/telephony/ims/ImsCallForwardInfo;-><init>()V
Landroid/telephony/ims/ImsCallProfile;->presentationToOIR(I)I
Landroid/telephony/ims/ImsExternalCallState;-><init>(ILandroid/net/Uri;ZIIZ)V
-Landroid/telephony/ims/ImsReasonInfo;-><init>(IILjava/lang/String;)V
Landroid/telephony/ims/ImsReasonInfo;-><init>(II)V
Landroid/telephony/ims/ImsStreamMediaProfile;-><init>()V
Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index a18ba71..3047cdb 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -3745,6 +3745,24 @@
}
/**
+ * Unsupported compiled sdk warning should always be shown for the intput activity
+ * even in cases where the system would normally not show the warning. E.g. when running in a
+ * test harness.
+ *
+ * @param activity The component name of the activity to always show the warning for.
+ *
+ * @hide
+ */
+ @TestApi
+ public void alwaysShowUnsupportedCompileSdkWarning(ComponentName activity) {
+ try {
+ getService().alwaysShowUnsupportedCompileSdkWarning(activity);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns the launch count of each installed package.
*
* @hide
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index baf2d60..f01eee4 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -30,15 +30,12 @@
import android.app.assist.AssistContent;
import android.app.assist.AssistStructure;
import android.app.backup.BackupAgent;
-import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ActivityLifecycleItem.LifecycleState;
-import android.app.servertransaction.ActivityRelaunchItem;
import android.app.servertransaction.ActivityResultItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.PendingTransactionActions;
import android.app.servertransaction.PendingTransactionActions.StopInfo;
import android.app.servertransaction.TransactionExecutor;
-import android.app.servertransaction.TransactionExecutorHelper;
import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks2;
import android.content.ComponentName;
@@ -523,10 +520,6 @@
return activityInfo.persistableMode == ActivityInfo.PERSIST_ACROSS_REBOOTS;
}
- public boolean isVisibleFromServer() {
- return activity != null && activity.mVisibleFromServer;
- }
-
public String toString() {
ComponentName componentName = intent != null ? intent.getComponent() : null;
return "ActivityRecord{"
@@ -1804,7 +1797,6 @@
// message is handled.
transaction.recycle();
}
- // TODO(lifecycler): Recycle locally scheduled transactions.
break;
}
Object obj = msg.obj;
@@ -4731,25 +4723,14 @@
return;
}
+ // TODO(b/73747058): Investigate converting this to use transaction to relaunch.
+ handleRelaunchActivityInner(r, 0 /* configChanges */, null /* pendingResults */,
+ null /* pendingIntents */, null /* pendingActions */, prevState != ON_RESUME,
+ r.overrideConfig, "handleRelaunchActivityLocally");
- // Initialize a relaunch request.
- final MergedConfiguration mergedConfiguration = new MergedConfiguration(
- r.createdConfig != null ? r.createdConfig : mConfiguration,
- r.overrideConfig);
- final ActivityRelaunchItem activityRelaunchItem = ActivityRelaunchItem.obtain(
- null /* pendingResults */, null /* pendingIntents */, 0 /* configChanges */,
- mergedConfiguration, r.mPreserveWindow);
- // Make sure to match the existing lifecycle state in the end of the transaction.
- final ActivityLifecycleItem lifecycleRequest =
- TransactionExecutorHelper.getLifecycleRequestForCurrentState(r);
- // Schedule the transaction.
- final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token);
- transaction.addCallback(activityRelaunchItem);
- transaction.setLifecycleStateRequest(lifecycleRequest);
- try {
- mAppThread.scheduleTransaction(transaction);
- } catch (RemoteException e) {
- // Local scheduling
+ // Restore back to the previous state before relaunch if needed.
+ if (prevState != r.getLifecycleState()) {
+ mTransactionExecutor.cycleToPath(r, prevState);
}
}
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index fb8ded1..f38c80c 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -2855,4 +2855,13 @@
throw e.rethrowAsRuntimeException();
}
}
+
+ @Override
+ public boolean isPackageStateProtected(String packageName, int userId) {
+ try {
+ return mPM.isPackageStateProtected(packageName, userId);
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
}
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 0d45dfa..99efecd 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -703,4 +703,7 @@
*/
void registerRemoteAnimationForNextActivityStart(in String packageName,
in RemoteAnimationAdapter adapter);
+
+ /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */
+ void alwaysShowUnsupportedCompileSdkWarning(in ComponentName activity);
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 4cb7f89..3015398 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -8610,6 +8610,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
@UserProvisioningState
public int getUserProvisioningState() {
throwIfParentInstance("getUserProvisioningState");
@@ -8754,6 +8755,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
public boolean isDeviceProvisioned() {
try {
return mService.isDeviceProvisioned();
@@ -9418,7 +9420,21 @@
* <p>This method may returns {@code -1} if {@code apnSetting} conflicts with an existing
* override APN. Update the existing conflicted APN with
* {@link #updateOverrideApn(ComponentName, int, ApnSetting)} instead of adding a new entry.
- * <p>See {@link ApnSetting} for the definition of conflict.
+ * <p>Two override APNs are considered to conflict when all the following APIs return
+ * the same values on both override APNs:
+ * <ul>
+ * <li>{@link ApnSetting#getOperatorNumeric()}</li>
+ * <li>{@link ApnSetting#getApnName()}</li>
+ * <li>{@link ApnSetting#getProxyAddress()}</li>
+ * <li>{@link ApnSetting#getProxyPort()}</li>
+ * <li>{@link ApnSetting#getMmsProxyAddress()}</li>
+ * <li>{@link ApnSetting#getMmsProxyPort()}</li>
+ * <li>{@link ApnSetting#getMmsc()}</li>
+ * <li>{@link ApnSetting#isEnabled()}</li>
+ * <li>{@link ApnSetting#getMvnoType()}</li>
+ * <li>{@link ApnSetting#getProtocol()}</li>
+ * <li>{@link ApnSetting#getRoamingProtocol()}</li>
+ * </ul>
*
* @param admin which {@link DeviceAdminReceiver} this request is associated with
* @param apnSetting the override APN to insert
@@ -9447,7 +9463,7 @@
* {@code apnId}.
* <p>This method may also returns {@code false} if {@code apnSetting} conflicts with an
* existing override APN. Update the existing conflicted APN instead.
- * <p>See {@link ApnSetting} for the definition of conflict.
+ * <p>See {@link #addOverrideApn} for the definition of conflict.
*
* @param admin which {@link DeviceAdminReceiver} this request is associated with
* @param apnId the {@code id} of the override APN to update
diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java
index ee13880..02afcc7 100644
--- a/core/java/android/app/job/JobInfo.java
+++ b/core/java/android/app/job/JobInfo.java
@@ -65,7 +65,6 @@
NETWORK_TYPE_UNMETERED,
NETWORK_TYPE_NOT_ROAMING,
NETWORK_TYPE_CELLULAR,
- NETWORK_TYPE_METERED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface NetworkType {}
@@ -253,7 +252,7 @@
/**
* @hide
*/
- public static final int FLAG_IS_PREFETCH = 1 << 2;
+ public static final int FLAG_PREFETCH = 1 << 2;
/**
* This job needs to be exempted from the app standby throttling. Only the system (UID 1000)
@@ -296,7 +295,8 @@
private final boolean hasEarlyConstraint;
private final boolean hasLateConstraint;
private final NetworkRequest networkRequest;
- private final long networkBytes;
+ private final long networkDownloadBytes;
+ private final long networkUploadBytes;
private final long minLatencyMillis;
private final long maxExecutionDelayMillis;
private final boolean isPeriodic;
@@ -317,30 +317,28 @@
}
/**
- * Bundle of extras which are returned to your application at execution time.
+ * @see JobInfo.Builder#setExtras(PersistableBundle)
*/
public @NonNull PersistableBundle getExtras() {
return extras;
}
/**
- * Bundle of transient extras which are returned to your application at execution time,
- * but not persisted by the system.
+ * @see JobInfo.Builder#setTransientExtras(Bundle)
*/
public @NonNull Bundle getTransientExtras() {
return transientExtras;
}
/**
- * ClipData of information that is returned to your application at execution time,
- * but not persisted by the system.
+ * @see JobInfo.Builder#setClipData(ClipData, int)
*/
public @Nullable ClipData getClipData() {
return clipData;
}
/**
- * Permission grants that go along with {@link #getClipData}.
+ * @see JobInfo.Builder#setClipData(ClipData, int)
*/
public int getClipGrantFlags() {
return clipGrantFlags;
@@ -369,32 +367,28 @@
}
/**
- * Whether this job requires that the device be charging (or be a non-battery-powered
- * device connected to permanent power, such as Android TV devices).
+ * @see JobInfo.Builder#setRequiresCharging(boolean)
*/
public boolean isRequireCharging() {
return (constraintFlags & CONSTRAINT_FLAG_CHARGING) != 0;
}
/**
- * Whether this job needs the device's battery level to not be at below the critical threshold.
+ * @see JobInfo.Builder#setRequiresBatteryNotLow(boolean)
*/
public boolean isRequireBatteryNotLow() {
return (constraintFlags & CONSTRAINT_FLAG_BATTERY_NOT_LOW) != 0;
}
/**
- * Whether this job requires that the user <em>not</em> be interacting with the device.
- *
- * <p class="note">This is <em>not</em> the same as "doze" or "device idle";
- * it is purely about the user's direct interactions.</p>
+ * @see JobInfo.Builder#setRequiresDeviceIdle(boolean)
*/
public boolean isRequireDeviceIdle() {
return (constraintFlags & CONSTRAINT_FLAG_DEVICE_IDLE) != 0;
}
/**
- * Whether this job needs the device's storage to not be low.
+ * @see JobInfo.Builder#setRequiresStorageNotLow(boolean)
*/
public boolean isRequireStorageNotLow() {
return (constraintFlags & CONSTRAINT_FLAG_STORAGE_NOT_LOW) != 0;
@@ -410,6 +404,7 @@
/**
* Which content: URIs must change for the job to be scheduled. Returns null
* if there are none required.
+ * @see JobInfo.Builder#addTriggerContentUri(TriggerContentUri)
*/
public @Nullable TriggerContentUri[] getTriggerContentUris() {
return triggerContentUris;
@@ -418,6 +413,7 @@
/**
* When triggering on content URI changes, this is the delay from when a change
* is detected until the job is scheduled.
+ * @see JobInfo.Builder#setTriggerContentUpdateDelay(long)
*/
public long getTriggerContentUpdateDelay() {
return triggerContentUpdateDelay;
@@ -426,6 +422,7 @@
/**
* When triggering on content URI changes, this is the maximum delay we will
* use before scheduling the job.
+ * @see JobInfo.Builder#setTriggerContentMaxDelay(long)
*/
public long getTriggerContentMaxDelay() {
return triggerContentMaxDelay;
@@ -466,28 +463,59 @@
}
/**
- * Return the estimated size of network traffic that will be performed by
+ * @deprecated replaced by {@link #getEstimatedNetworkDownloadBytes()} and
+ * {@link #getEstimatedNetworkUploadBytes()}.
+ * @removed
+ */
+ @Deprecated
+ public @BytesLong long getEstimatedNetworkBytes() {
+ if (networkDownloadBytes == NETWORK_BYTES_UNKNOWN
+ && networkUploadBytes == NETWORK_BYTES_UNKNOWN) {
+ return NETWORK_BYTES_UNKNOWN;
+ } else if (networkDownloadBytes == NETWORK_BYTES_UNKNOWN) {
+ return networkUploadBytes;
+ } else if (networkUploadBytes == NETWORK_BYTES_UNKNOWN) {
+ return networkDownloadBytes;
+ } else {
+ return networkDownloadBytes + networkUploadBytes;
+ }
+ }
+
+ /**
+ * Return the estimated size of download traffic that will be performed by
* this job, in bytes.
*
- * @return Estimated size of network traffic, or
+ * @return Estimated size of download traffic, or
* {@link #NETWORK_BYTES_UNKNOWN} when unknown.
- * @see Builder#setEstimatedNetworkBytes(long)
+ * @see Builder#setEstimatedNetworkBytes(long, long)
*/
- public @BytesLong long getEstimatedNetworkBytes() {
- return networkBytes;
+ public @BytesLong long getEstimatedNetworkDownloadBytes() {
+ return networkDownloadBytes;
+ }
+
+ /**
+ * Return the estimated size of upload traffic that will be performed by
+ * this job, in bytes.
+ *
+ * @return Estimated size of upload traffic, or
+ * {@link #NETWORK_BYTES_UNKNOWN} when unknown.
+ * @see Builder#setEstimatedNetworkBytes(long, long)
+ */
+ public @BytesLong long getEstimatedNetworkUploadBytes() {
+ return networkUploadBytes;
}
/**
* Set for a job that does not recur periodically, to specify a delay after which the job
* will be eligible for execution. This value is not set if the job recurs periodically.
+ * @see JobInfo.Builder#setMinimumLatency(long)
*/
public long getMinLatencyMillis() {
return minLatencyMillis;
}
/**
- * See {@link Builder#setOverrideDeadline(long)}. This value is not set if the job recurs
- * periodically.
+ * @see JobInfo.Builder#setOverrideDeadline(long)
*/
public long getMaxExecutionDelayMillis() {
return maxExecutionDelayMillis;
@@ -495,13 +523,15 @@
/**
* Track whether this job will repeat with a given period.
+ * @see JobInfo.Builder#setPeriodic(long)
+ * @see JobInfo.Builder#setPeriodic(long, long)
*/
public boolean isPeriodic() {
return isPeriodic;
}
/**
- * @return Whether or not this job should be persisted across device reboots.
+ * @see JobInfo.Builder#setPersisted(boolean)
*/
public boolean isPersisted() {
return isPersisted;
@@ -510,6 +540,8 @@
/**
* Set to the interval between occurrences of this job. This value is <b>not</b> set if the
* job does not recur periodically.
+ * @see JobInfo.Builder#setPeriodic(long)
+ * @see JobInfo.Builder#setPeriodic(long, long)
*/
public long getIntervalMillis() {
return intervalMillis;
@@ -518,6 +550,8 @@
/**
* Flex time for this job. Only valid if this is a periodic job. The job can
* execute at any time in a window of flex length at the end of the period.
+ * @see JobInfo.Builder#setPeriodic(long)
+ * @see JobInfo.Builder#setPeriodic(long, long)
*/
public long getFlexMillis() {
return flexMillis;
@@ -527,6 +561,7 @@
* The amount of time the JobScheduler will wait before rescheduling a failed job. This value
* will be increased depending on the backoff policy specified at job creation time. Defaults
* to 30 seconds, minimum is currently 10 seconds.
+ * @see JobInfo.Builder#setBackoffCriteria(long, int)
*/
public long getInitialBackoffMillis() {
return initialBackoffMillis;
@@ -534,12 +569,27 @@
/**
* Return the backoff policy of this job.
+ * @see JobInfo.Builder#setBackoffCriteria(long, int)
*/
public @BackoffPolicy int getBackoffPolicy() {
return backoffPolicy;
}
/**
+ * @see JobInfo.Builder#setImportantWhileForeground(boolean)
+ */
+ public boolean isImportantWhileForeground() {
+ return (flags & FLAG_IMPORTANT_WHILE_FOREGROUND) != 0;
+ }
+
+ /**
+ * @see JobInfo.Builder#setPrefetch(boolean)
+ */
+ public boolean isPrefetch() {
+ return (flags & FLAG_PREFETCH) != 0;
+ }
+
+ /**
* User can specify an early constraint of 0L, which is valid, so we keep track of whether the
* function was called at all.
* @hide
@@ -610,7 +660,10 @@
if (!Objects.equals(networkRequest, j.networkRequest)) {
return false;
}
- if (networkBytes != j.networkBytes) {
+ if (networkDownloadBytes != j.networkDownloadBytes) {
+ return false;
+ }
+ if (networkUploadBytes != j.networkUploadBytes) {
return false;
}
if (minLatencyMillis != j.minLatencyMillis) {
@@ -673,7 +726,8 @@
if (networkRequest != null) {
hashCode = 31 * hashCode + networkRequest.hashCode();
}
- hashCode = 31 * hashCode + Long.hashCode(networkBytes);
+ hashCode = 31 * hashCode + Long.hashCode(networkDownloadBytes);
+ hashCode = 31 * hashCode + Long.hashCode(networkUploadBytes);
hashCode = 31 * hashCode + Long.hashCode(minLatencyMillis);
hashCode = 31 * hashCode + Long.hashCode(maxExecutionDelayMillis);
hashCode = 31 * hashCode + Boolean.hashCode(isPeriodic);
@@ -708,7 +762,8 @@
} else {
networkRequest = null;
}
- networkBytes = in.readLong();
+ networkDownloadBytes = in.readLong();
+ networkUploadBytes = in.readLong();
minLatencyMillis = in.readLong();
maxExecutionDelayMillis = in.readLong();
isPeriodic = in.readInt() == 1;
@@ -737,7 +792,8 @@
triggerContentUpdateDelay = b.mTriggerContentUpdateDelay;
triggerContentMaxDelay = b.mTriggerContentMaxDelay;
networkRequest = b.mNetworkRequest;
- networkBytes = b.mNetworkBytes;
+ networkDownloadBytes = b.mNetworkDownloadBytes;
+ networkUploadBytes = b.mNetworkUploadBytes;
minLatencyMillis = b.mMinLatencyMillis;
maxExecutionDelayMillis = b.mMaxExecutionDelayMillis;
isPeriodic = b.mIsPeriodic;
@@ -780,7 +836,8 @@
} else {
out.writeInt(0);
}
- out.writeLong(networkBytes);
+ out.writeLong(networkDownloadBytes);
+ out.writeLong(networkUploadBytes);
out.writeLong(minLatencyMillis);
out.writeLong(maxExecutionDelayMillis);
out.writeInt(isPeriodic ? 1 : 0);
@@ -914,7 +971,8 @@
// Requirements.
private int mConstraintFlags;
private NetworkRequest mNetworkRequest;
- private long mNetworkBytes = NETWORK_BYTES_UNKNOWN;
+ private long mNetworkDownloadBytes = NETWORK_BYTES_UNKNOWN;
+ private long mNetworkUploadBytes = NETWORK_BYTES_UNKNOWN;
private ArrayList<TriggerContentUri> mTriggerContentUris;
private long mTriggerContentUpdateDelay = -1;
private long mTriggerContentMaxDelay = -1;
@@ -965,6 +1023,7 @@
/**
* Set optional extras. This is persisted, so we only allow primitive types.
* @param extras Bundle containing extras you want the scheduler to hold on to for you.
+ * @see JobInfo#getExtras()
*/
public Builder setExtras(@NonNull PersistableBundle extras) {
mExtras = extras;
@@ -979,6 +1038,7 @@
* {@link android.app.job.JobInfo.Builder#build()} is called.</p>
*
* @param extras Bundle containing extras you want the scheduler to hold on to for you.
+ * @see JobInfo#getTransientExtras()
*/
public Builder setTransientExtras(@NonNull Bundle extras) {
mTransientExtras = extras;
@@ -1006,6 +1066,8 @@
* a combination of {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION},
* {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}, and
* {@link android.content.Intent#FLAG_GRANT_PREFIX_URI_PERMISSION}.
+ * @see JobInfo#getClipData()
+ * @see JobInfo#getClipGrantFlags()
*/
public Builder setClipData(@Nullable ClipData clip, int grantFlags) {
mClipData = clip;
@@ -1096,6 +1158,16 @@
}
/**
+ * @deprecated replaced by
+ * {@link #setEstimatedNetworkBytes(long, long)}.
+ * @removed
+ */
+ @Deprecated
+ public Builder setEstimatedNetworkBytes(@BytesLong long networkBytes) {
+ return setEstimatedNetworkBytes(networkBytes, NETWORK_BYTES_UNKNOWN);
+ }
+
+ /**
* Set the estimated size of network traffic that will be performed by
* this job, in bytes.
* <p>
@@ -1112,23 +1184,30 @@
* <li>A job that synchronizes email could end up using an extreme range
* of data, from under 1KB when nothing has changed, to dozens of MB
* when there are new emails with attachments. Jobs that cannot provide
- * reasonable estimates should leave this estimated value undefined.
+ * reasonable estimates should use the sentinel value
+ * {@link JobInfo#NETWORK_BYTES_UNKNOWN}.
* </ul>
* Note that the system may choose to delay jobs with large network
* usage estimates when the device has a poor network connection, in
* order to save battery.
+ * <p>
+ * The values provided here only reflect the traffic that will be
+ * performed by the base job; if you're using {@link JobWorkItem} then
+ * you also need to define the network traffic used by each work item
+ * when constructing them.
*
- * @param networkBytes The estimated size of network traffic that will
- * be performed by this job, in bytes. This value only
- * reflects the traffic that will be performed by the base
- * job; if you're using {@link JobWorkItem} then you also
- * need to define the network traffic used by each work item
- * when constructing them.
- * @see JobInfo#getEstimatedNetworkBytes()
- * @see JobWorkItem#JobWorkItem(android.content.Intent, long)
+ * @param downloadBytes The estimated size of network traffic that will
+ * be downloaded by this job, in bytes.
+ * @param uploadBytes The estimated size of network traffic that will be
+ * uploaded by this job, in bytes.
+ * @see JobInfo#getEstimatedNetworkDownloadBytes()
+ * @see JobInfo#getEstimatedNetworkUploadBytes()
+ * @see JobWorkItem#JobWorkItem(android.content.Intent, long, long)
*/
- public Builder setEstimatedNetworkBytes(@BytesLong long networkBytes) {
- mNetworkBytes = networkBytes;
+ public Builder setEstimatedNetworkBytes(@BytesLong long downloadBytes,
+ @BytesLong long uploadBytes) {
+ mNetworkDownloadBytes = downloadBytes;
+ mNetworkUploadBytes = uploadBytes;
return this;
}
@@ -1146,6 +1225,7 @@
*
* @param requiresCharging Pass {@code true} to require that the device be
* charging in order to run the job.
+ * @see JobInfo#isRequireCharging()
*/
public Builder setRequiresCharging(boolean requiresCharging) {
mConstraintFlags = (mConstraintFlags&~CONSTRAINT_FLAG_CHARGING)
@@ -1159,6 +1239,7 @@
* is not low, which is generally the point where the user is given a "low battery"
* warning.
* @param batteryNotLow Whether or not the device's battery level must not be low.
+ * @see JobInfo#isRequireBatteryNotLow()
*/
public Builder setRequiresBatteryNotLow(boolean batteryNotLow) {
mConstraintFlags = (mConstraintFlags&~CONSTRAINT_FLAG_BATTERY_NOT_LOW)
@@ -1183,6 +1264,7 @@
*
* @param requiresDeviceIdle Pass {@code true} to prevent the job from running
* while the device is being used interactively.
+ * @see JobInfo#isRequireDeviceIdle()
*/
public Builder setRequiresDeviceIdle(boolean requiresDeviceIdle) {
mConstraintFlags = (mConstraintFlags&~CONSTRAINT_FLAG_DEVICE_IDLE)
@@ -1196,6 +1278,7 @@
* in a low storage state, which is generally the point where the user is given a
* "low storage" warning.
* @param storageNotLow Whether or not the device's available storage must not be low.
+ * @see JobInfo#isRequireStorageNotLow()
*/
public Builder setRequiresStorageNotLow(boolean storageNotLow) {
mConstraintFlags = (mConstraintFlags&~CONSTRAINT_FLAG_STORAGE_NOT_LOW)
@@ -1228,6 +1311,7 @@
* job}
*
* @param uri The content: URI to monitor.
+ * @see JobInfo#getTriggerContentUris()
*/
public Builder addTriggerContentUri(@NonNull TriggerContentUri uri) {
if (mTriggerContentUris == null) {
@@ -1242,6 +1326,7 @@
* the job is scheduled. If there are more changes during that time, the delay
* will be reset to start at the time of the most recent change.
* @param durationMs Delay after most recent content change, in milliseconds.
+ * @see JobInfo#getTriggerContentUpdateDelay()
*/
public Builder setTriggerContentUpdateDelay(long durationMs) {
mTriggerContentUpdateDelay = durationMs;
@@ -1252,6 +1337,7 @@
* Set the maximum total delay (in milliseconds) that is allowed from the first
* time a content change is detected until the job is scheduled.
* @param durationMs Delay after initial content change, in milliseconds.
+ * @see JobInfo#getTriggerContentMaxDelay()
*/
public Builder setTriggerContentMaxDelay(long durationMs) {
mTriggerContentMaxDelay = durationMs;
@@ -1265,6 +1351,8 @@
* Setting this function on the builder with {@link #setMinimumLatency(long)} or
* {@link #setOverrideDeadline(long)} will result in an error.
* @param intervalMillis Millisecond interval for which this job will repeat.
+ * @see JobInfo#getIntervalMillis()
+ * @see JobInfo#getFlexMillis()
*/
public Builder setPeriodic(long intervalMillis) {
return setPeriodic(intervalMillis, intervalMillis);
@@ -1278,6 +1366,8 @@
* @param flexMillis Millisecond flex for this job. Flex is clamped to be at least
* {@link #getMinFlexMillis()} or 5 percent of the period, whichever is
* higher.
+ * @see JobInfo#getIntervalMillis()
+ * @see JobInfo#getFlexMillis()
*/
public Builder setPeriodic(long intervalMillis, long flexMillis) {
final long minPeriod = getMinPeriodMillis();
@@ -1309,6 +1399,7 @@
* {@link android.app.job.JobInfo.Builder#build()} is called.
* @param minLatencyMillis Milliseconds before which this job will not be considered for
* execution.
+ * @see JobInfo#getMinLatencyMillis()
*/
public Builder setMinimumLatency(long minLatencyMillis) {
mMinLatencyMillis = minLatencyMillis;
@@ -1322,6 +1413,7 @@
* this property on a periodic job, doing so will throw an
* {@link java.lang.IllegalArgumentException} when
* {@link android.app.job.JobInfo.Builder#build()} is called.
+ * @see JobInfo#getMaxExecutionDelayMillis()
*/
public Builder setOverrideDeadline(long maxExecutionDelayMillis) {
mMaxExecutionDelayMillis = maxExecutionDelayMillis;
@@ -1341,6 +1433,8 @@
* mode.
* @param initialBackoffMillis Millisecond time interval to wait initially when job has
* failed.
+ * @see JobInfo#getInitialBackoffMillis()
+ * @see JobInfo#getBackoffPolicy()
*/
public Builder setBackoffCriteria(long initialBackoffMillis,
@BackoffPolicy int backoffPolicy) {
@@ -1371,6 +1465,7 @@
*
* @param importantWhileForeground whether to relax doze restrictions for this job when the
* app is in the foreground. False by default.
+ * @see JobInfo#isImportantWhileForeground()
*/
public Builder setImportantWhileForeground(boolean importantWhileForeground) {
if (importantWhileForeground) {
@@ -1382,6 +1477,15 @@
}
/**
+ * @removed
+ * @deprecated replaced with {@link #setPrefetch(boolean)}
+ */
+ @Deprecated
+ public Builder setIsPrefetch(boolean isPrefetch) {
+ return setPrefetch(isPrefetch);
+ }
+
+ /**
* Setting this to true indicates that this job is designed to prefetch
* content that will make a material improvement to the experience of
* the specific user of this device. For example, fetching top headlines
@@ -1393,12 +1497,13 @@
* network when there is a surplus of metered data available. The system
* may also use this signal in combination with end user usage patterns
* to ensure data is prefetched before the user launches your app.
+ * @see JobInfo#isPrefetch()
*/
- public Builder setIsPrefetch(boolean isPrefetch) {
- if (isPrefetch) {
- mFlags |= FLAG_IS_PREFETCH;
+ public Builder setPrefetch(boolean prefetch) {
+ if (prefetch) {
+ mFlags |= FLAG_PREFETCH;
} else {
- mFlags &= (~FLAG_IS_PREFETCH);
+ mFlags &= (~FLAG_PREFETCH);
}
return this;
}
@@ -1408,6 +1513,7 @@
*
* @param isPersisted True to indicate that the job will be written to
* disk and loaded at boot.
+ * @see JobInfo#isPersisted()
*/
@RequiresPermission(android.Manifest.permission.RECEIVE_BOOT_COMPLETED)
public Builder setPersisted(boolean isPersisted) {
@@ -1427,7 +1533,7 @@
"constraints, this is not allowed.");
}
// Check that network estimates require network type
- if (mNetworkBytes > 0 && mNetworkRequest == null) {
+ if ((mNetworkDownloadBytes > 0 || mNetworkUploadBytes > 0) && mNetworkRequest == null) {
throw new IllegalArgumentException(
"Can't provide estimated network usage without requiring a network");
}
diff --git a/core/java/android/app/job/JobWorkItem.java b/core/java/android/app/job/JobWorkItem.java
index 1c46e8e..995f522 100644
--- a/core/java/android/app/job/JobWorkItem.java
+++ b/core/java/android/app/job/JobWorkItem.java
@@ -16,6 +16,8 @@
package android.app.job;
+import static android.app.job.JobInfo.NETWORK_BYTES_UNKNOWN;
+
import android.annotation.BytesLong;
import android.content.Intent;
import android.os.Parcel;
@@ -28,7 +30,8 @@
*/
final public class JobWorkItem implements Parcelable {
final Intent mIntent;
- final long mNetworkBytes;
+ final long mNetworkDownloadBytes;
+ final long mNetworkUploadBytes;
int mDeliveryCount;
int mWorkId;
Object mGrants;
@@ -41,22 +44,36 @@
*/
public JobWorkItem(Intent intent) {
mIntent = intent;
- mNetworkBytes = JobInfo.NETWORK_BYTES_UNKNOWN;
+ mNetworkDownloadBytes = NETWORK_BYTES_UNKNOWN;
+ mNetworkUploadBytes = NETWORK_BYTES_UNKNOWN;
+ }
+
+ /**
+ * @deprecated replaced by {@link #JobWorkItem(Intent, long, long)}
+ * @removed
+ */
+ @Deprecated
+ public JobWorkItem(Intent intent, @BytesLong long networkBytes) {
+ this(intent, networkBytes, NETWORK_BYTES_UNKNOWN);
}
/**
* Create a new piece of work, which can be submitted to
* {@link JobScheduler#enqueue JobScheduler.enqueue}.
+ * <p>
+ * See {@link JobInfo.Builder#setEstimatedNetworkBytes(long, long)} for
+ * details about how to estimate network traffic.
*
* @param intent The general Intent describing this work.
- * @param networkBytes The estimated size of network traffic that will be
- * performed by this job work item, in bytes. See
- * {@link JobInfo.Builder#setEstimatedNetworkBytes(long)} for
- * details about how to estimate.
+ * @param downloadBytes The estimated size of network traffic that will be
+ * downloaded by this job work item, in bytes.
+ * @param uploadBytes The estimated size of network traffic that will be
+ * uploaded by this job work item, in bytes.
*/
- public JobWorkItem(Intent intent, @BytesLong long networkBytes) {
+ public JobWorkItem(Intent intent, @BytesLong long downloadBytes, @BytesLong long uploadBytes) {
mIntent = intent;
- mNetworkBytes = networkBytes;
+ mNetworkDownloadBytes = downloadBytes;
+ mNetworkUploadBytes = uploadBytes;
}
/**
@@ -67,14 +84,44 @@
}
/**
- * Return the estimated size of network traffic that will be performed by
+ * @deprecated replaced by {@link #getEstimatedNetworkDownloadBytes()} and
+ * {@link #getEstimatedNetworkUploadBytes()}.
+ * @removed
+ */
+ @Deprecated
+ public @BytesLong long getEstimatedNetworkBytes() {
+ if (mNetworkDownloadBytes == NETWORK_BYTES_UNKNOWN
+ && mNetworkUploadBytes == NETWORK_BYTES_UNKNOWN) {
+ return NETWORK_BYTES_UNKNOWN;
+ } else if (mNetworkDownloadBytes == NETWORK_BYTES_UNKNOWN) {
+ return mNetworkUploadBytes;
+ } else if (mNetworkUploadBytes == NETWORK_BYTES_UNKNOWN) {
+ return mNetworkDownloadBytes;
+ } else {
+ return mNetworkDownloadBytes + mNetworkUploadBytes;
+ }
+ }
+
+ /**
+ * Return the estimated size of download traffic that will be performed by
+ * this job, in bytes.
+ *
+ * @return Estimated size of download traffic, or
+ * {@link JobInfo#NETWORK_BYTES_UNKNOWN} when unknown.
+ */
+ public @BytesLong long getEstimatedNetworkDownloadBytes() {
+ return mNetworkDownloadBytes;
+ }
+
+ /**
+ * Return the estimated size of upload traffic that will be performed by
* this job work item, in bytes.
*
- * @return estimated size, or {@link JobInfo#NETWORK_BYTES_UNKNOWN} when
- * unknown.
+ * @return Estimated size of upload traffic, or
+ * {@link JobInfo#NETWORK_BYTES_UNKNOWN} when unknown.
*/
- public @BytesLong long getEstimatedNetworkBytes() {
- return mNetworkBytes;
+ public @BytesLong long getEstimatedNetworkUploadBytes() {
+ return mNetworkUploadBytes;
}
/**
@@ -128,9 +175,13 @@
sb.append(mWorkId);
sb.append(" intent=");
sb.append(mIntent);
- if (mNetworkBytes != JobInfo.NETWORK_BYTES_UNKNOWN) {
- sb.append(" networkBytes=");
- sb.append(mNetworkBytes);
+ if (mNetworkDownloadBytes != NETWORK_BYTES_UNKNOWN) {
+ sb.append(" downloadBytes=");
+ sb.append(mNetworkDownloadBytes);
+ }
+ if (mNetworkUploadBytes != NETWORK_BYTES_UNKNOWN) {
+ sb.append(" uploadBytes=");
+ sb.append(mNetworkUploadBytes);
}
if (mDeliveryCount != 0) {
sb.append(" dcount=");
@@ -151,7 +202,8 @@
} else {
out.writeInt(0);
}
- out.writeLong(mNetworkBytes);
+ out.writeLong(mNetworkDownloadBytes);
+ out.writeLong(mNetworkUploadBytes);
out.writeInt(mDeliveryCount);
out.writeInt(mWorkId);
}
@@ -173,7 +225,8 @@
} else {
mIntent = null;
}
- mNetworkBytes = in.readLong();
+ mNetworkDownloadBytes = in.readLong();
+ mNetworkUploadBytes = in.readLong();
mDeliveryCount = in.readInt();
mWorkId = in.readInt();
}
diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
index 01b13a2..7e66fd7 100644
--- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java
+++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java
@@ -26,7 +26,7 @@
import static android.app.servertransaction.ActivityLifecycleItem.PRE_ON_CREATE;
import static android.app.servertransaction.ActivityLifecycleItem.UNDEFINED;
-import android.app.ActivityThread.ActivityClientRecord;
+import android.app.ActivityThread;
import android.util.IntArray;
import com.android.internal.annotations.VisibleForTesting;
@@ -124,7 +124,7 @@
* {@link ActivityLifecycleItem#UNDEFINED} if there is not path.
*/
@VisibleForTesting
- public int getClosestPreExecutionState(ActivityClientRecord r,
+ public int getClosestPreExecutionState(ActivityThread.ActivityClientRecord r,
int postExecutionState) {
switch (postExecutionState) {
case UNDEFINED:
@@ -147,7 +147,7 @@
* were provided or there is not path.
*/
@VisibleForTesting
- public int getClosestOfStates(ActivityClientRecord r, int[] finalStates) {
+ public int getClosestOfStates(ActivityThread.ActivityClientRecord r, int[] finalStates) {
if (finalStates == null || finalStates.length == 0) {
return UNDEFINED;
}
@@ -168,27 +168,6 @@
return closestState;
}
- /** Get the lifecycle state request to match the current state in the end of a transaction. */
- public static ActivityLifecycleItem getLifecycleRequestForCurrentState(ActivityClientRecord r) {
- final int prevState = r.getLifecycleState();
- final ActivityLifecycleItem lifecycleItem;
- switch (prevState) {
- // TODO(lifecycler): Extend to support all possible states.
- case ON_PAUSE:
- lifecycleItem = PauseActivityItem.obtain();
- break;
- case ON_STOP:
- lifecycleItem = StopActivityItem.obtain(r.isVisibleFromServer(),
- 0 /* configChanges */);
- break;
- default:
- lifecycleItem = ResumeActivityItem.obtain(false /* isForward */);
- break;
- }
-
- return lifecycleItem;
- }
-
/**
* Check if there is a destruction involved in the path. We want to avoid a lifecycle sequence
* that involves destruction and recreation if there is another path.
diff --git a/core/java/android/app/slice/SliceManager.java b/core/java/android/app/slice/SliceManager.java
index 67a72ec..1afe53d 100644
--- a/core/java/android/app/slice/SliceManager.java
+++ b/core/java/android/app/slice/SliceManager.java
@@ -32,9 +32,11 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
+import android.os.UserHandle;
import android.util.Log;
import com.android.internal.util.Preconditions;
@@ -392,6 +394,9 @@
*/
public void enforceSlicePermission(Uri uri, String pkg, int pid, int uid) {
try {
+ if (UserHandle.isSameApp(uid, Process.myUid())) {
+ return;
+ }
if (pkg == null) {
throw new SecurityException("No pkg specified");
}
diff --git a/core/java/android/app/slice/SliceProvider.java b/core/java/android/app/slice/SliceProvider.java
index dd89293..bf856b7 100644
--- a/core/java/android/app/slice/SliceProvider.java
+++ b/core/java/android/app/slice/SliceProvider.java
@@ -37,7 +37,6 @@
import android.os.Process;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
-import android.os.UserHandle;
import android.util.Log;
import java.util.ArrayList;
@@ -146,18 +145,6 @@
* @hide
*/
public static final String EXTRA_PROVIDER_PKG = "provider_pkg";
- /**
- * @hide
- */
- public static final String EXTRA_OVERRIDE_PKG = "override_pkg";
- /**
- * @hide
- */
- public static final String EXTRA_OVERRIDE_UID = "override_uid";
- /**
- * @hide
- */
- public static final String EXTRA_OVERRIDE_PID = "override_pid";
private static final boolean DEBUG = false;
@@ -257,6 +244,23 @@
"This provider has not implemented intent to uri mapping");
}
+ /**
+ * Called when an app requests a slice it does not have write permission
+ * to the uri for.
+ * <p>
+ * The return value will be the action on a slice that prompts the user that
+ * the calling app wants to show slices from this app. The default implementation
+ * launches a dialog that allows the user to grant access to this slice. Apps
+ * that do not want to allow this user grant, can override this and instead
+ * launch their own dialog with different behavior.
+ *
+ * @param sliceUri the Uri of the slice attempting to be bound.
+ * @see #getCallingPackage()
+ */
+ public @NonNull PendingIntent onCreatePermissionRequest(Uri sliceUri) {
+ return createPermissionIntent(getContext(), sliceUri, getCallingPackage());
+ }
+
@Override
public final int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
@@ -312,17 +316,7 @@
String callingPackage = getCallingPackage();
int callingUid = Binder.getCallingUid();
int callingPid = Binder.getCallingPid();
- if (extras.containsKey(EXTRA_OVERRIDE_PKG)) {
- if (Binder.getCallingUid() != Process.SYSTEM_UID) {
- throw new SecurityException("Only the system can override calling pkg");
- }
- // This is safe because we would grant SYSTEM_UID access to all slices
- // and want to allow it to bind slices as if it were a less privileged app
- // to check their permission levels.
- callingPackage = extras.getString(EXTRA_OVERRIDE_PKG);
- callingUid = extras.getInt(EXTRA_OVERRIDE_UID);
- callingPid = extras.getInt(EXTRA_OVERRIDE_PID);
- }
+
Slice s = handleBindSlice(uri, supportedSpecs, callingPackage, callingUid, callingPid);
Bundle b = new Bundle();
b.putParcelable(EXTRA_SLICE, s);
@@ -406,13 +400,11 @@
// SliceManager#bindSlice.
String pkg = callingPkg != null ? callingPkg
: getContext().getPackageManager().getNameForUid(callingUid);
- if (!UserHandle.isSameApp(callingUid, Process.myUid())) {
- try {
- mSliceManager.enforceSlicePermission(sliceUri, pkg,
- callingPid, callingUid);
- } catch (SecurityException e) {
- return createPermissionSlice(getContext(), sliceUri, pkg);
- }
+ try {
+ mSliceManager.enforceSlicePermission(sliceUri, pkg,
+ callingPid, callingUid);
+ } catch (SecurityException e) {
+ return createPermissionSlice(getContext(), sliceUri, pkg);
}
mCallback = "onBindSlice";
Handler.getMain().postDelayed(mAnr, SLICE_BIND_ANR);
@@ -426,10 +418,18 @@
/**
* @hide
*/
- public static Slice createPermissionSlice(Context context, Uri sliceUri,
+ public Slice createPermissionSlice(Context context, Uri sliceUri,
String callingPackage) {
+ PendingIntent action;
+ mCallback = "onCreatePermissionRequest";
+ Handler.getMain().postDelayed(mAnr, SLICE_BIND_ANR);
+ try {
+ action = onCreatePermissionRequest(sliceUri);
+ } finally {
+ Handler.getMain().removeCallbacks(mAnr);
+ }
return new Slice.Builder(sliceUri)
- .addAction(createPermissionIntent(context, sliceUri, callingPackage),
+ .addAction(action,
new Slice.Builder(sliceUri.buildUpon().appendPath("permission").build())
.addText(getPermissionString(context, callingPackage), null,
Collections.emptyList())
diff --git a/core/java/android/app/usage/TimeSparseArray.java b/core/java/android/app/usage/TimeSparseArray.java
index 7974fa7..5764fa8 100644
--- a/core/java/android/app/usage/TimeSparseArray.java
+++ b/core/java/android/app/usage/TimeSparseArray.java
@@ -17,6 +17,7 @@
package android.app.usage;
import android.util.LongSparseArray;
+import android.util.Slog;
/**
* An array that indexes by a long timestamp, representing milliseconds since the epoch.
@@ -24,6 +25,8 @@
* {@hide}
*/
public class TimeSparseArray<E> extends LongSparseArray<E> {
+ private static final String TAG = TimeSparseArray.class.getSimpleName();
+
public TimeSparseArray() {
super();
}
@@ -70,6 +73,25 @@
}
/**
+ * {@inheritDoc}
+ *
+ * Overridden to ensure no collisions. The key (time in milliseconds) is incremented till an
+ * empty place is found.
+ */
+ @Override
+ public void put(long key, E value) {
+ final long origKey = key;
+ while (indexOfKey(key) >= 0) {
+ key++;
+ }
+ if (origKey != key) {
+ Slog.w(TAG, "Value " + value + " supposed to be inserted at " + origKey
+ + " displaced to " + key);
+ }
+ super.put(key, value);
+ }
+
+ /**
* Finds the index of the first element whose timestamp is less than or equal to
* the given time.
*
diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java
index 656188f..6aeb94d 100644
--- a/core/java/android/bluetooth/BluetoothProfile.java
+++ b/core/java/android/bluetooth/BluetoothProfile.java
@@ -38,7 +38,7 @@
* This extra represents the current connection state of the profile of the
* Bluetooth device.
*/
- public static final String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
+ String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
/**
* Extra for the connection state intents of the individual profiles.
@@ -46,123 +46,130 @@
* This extra represents the previous connection state of the profile of the
* Bluetooth device.
*/
- public static final String EXTRA_PREVIOUS_STATE =
+ String EXTRA_PREVIOUS_STATE =
"android.bluetooth.profile.extra.PREVIOUS_STATE";
/** The profile is in disconnected state */
- public static final int STATE_DISCONNECTED = 0;
+ int STATE_DISCONNECTED = 0;
/** The profile is in connecting state */
- public static final int STATE_CONNECTING = 1;
+ int STATE_CONNECTING = 1;
/** The profile is in connected state */
- public static final int STATE_CONNECTED = 2;
+ int STATE_CONNECTED = 2;
/** The profile is in disconnecting state */
- public static final int STATE_DISCONNECTING = 3;
+ int STATE_DISCONNECTING = 3;
/**
* Headset and Handsfree profile
*/
- public static final int HEADSET = 1;
+ int HEADSET = 1;
/**
* A2DP profile.
*/
- public static final int A2DP = 2;
+ int A2DP = 2;
/**
* Health Profile
*/
- public static final int HEALTH = 3;
+ int HEALTH = 3;
/**
* HID Host
*
* @hide
*/
- public static final int HID_HOST = 4;
+ int HID_HOST = 4;
/**
* PAN Profile
*
* @hide
*/
- public static final int PAN = 5;
+ int PAN = 5;
/**
* PBAP
*
* @hide
*/
- public static final int PBAP = 6;
+ int PBAP = 6;
/**
* GATT
*/
- public static final int GATT = 7;
+ int GATT = 7;
/**
* GATT_SERVER
*/
- public static final int GATT_SERVER = 8;
+ int GATT_SERVER = 8;
/**
* MAP Profile
*
* @hide
*/
- public static final int MAP = 9;
+ int MAP = 9;
/*
* SAP Profile
* @hide
*/
- public static final int SAP = 10;
+ int SAP = 10;
/**
* A2DP Sink Profile
*
* @hide
*/
- public static final int A2DP_SINK = 11;
+ int A2DP_SINK = 11;
/**
* AVRCP Controller Profile
*
* @hide
*/
- public static final int AVRCP_CONTROLLER = 12;
+ int AVRCP_CONTROLLER = 12;
+
+ /**
+ * AVRCP Target Profile
+ *
+ * @hide
+ */
+ int AVRCP = 13;
/**
* Headset Client - HFP HF Role
*
* @hide
*/
- public static final int HEADSET_CLIENT = 16;
+ int HEADSET_CLIENT = 16;
/**
* PBAP Client
*
* @hide
*/
- public static final int PBAP_CLIENT = 17;
+ int PBAP_CLIENT = 17;
/**
* MAP Messaging Client Equipment (MCE)
*
* @hide
*/
- public static final int MAP_CLIENT = 18;
+ int MAP_CLIENT = 18;
/**
* HID Device
*/
- public static final int HID_DEVICE = 19;
+ int HID_DEVICE = 19;
/**
* Object Push Profile (OPP)
*
* @hide
*/
- public static final int OPP = 20;
+ int OPP = 20;
/**
* Hearing Aid Device
@@ -185,7 +192,7 @@
*
* @hide
**/
- public static final int PRIORITY_AUTO_CONNECT = 1000;
+ int PRIORITY_AUTO_CONNECT = 1000;
/**
* Default priority for devices that allow incoming
@@ -194,7 +201,7 @@
* @hide
**/
@SystemApi
- public static final int PRIORITY_ON = 100;
+ int PRIORITY_ON = 100;
/**
* Default priority for devices that does not allow incoming
@@ -203,14 +210,14 @@
* @hide
**/
@SystemApi
- public static final int PRIORITY_OFF = 0;
+ int PRIORITY_OFF = 0;
/**
* Default priority when not set or when the device is unpaired
*
* @hide
*/
- public static final int PRIORITY_UNDEFINED = -1;
+ int PRIORITY_UNDEFINED = -1;
/**
* Get connected devices for this specific profile.
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index e1a00b1..920056a 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -621,7 +621,7 @@
* @throws android.content.res.Resources.NotFoundException if the given ID
* does not exist.
*/
- @NonNull
+ @Nullable
public final Drawable getDrawable(@DrawableRes int id) {
return getResources().getDrawable(id, getTheme());
}
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 387a836..e85058d 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -1101,6 +1101,58 @@
/** @hide */
public String[] splitClassLoaderNames;
+ /**
+ * Represents the default policy. The actual policy used will depend on other properties of
+ * the application, e.g. the target SDK version.
+ * @hide
+ */
+ public static final int HIDDEN_API_ENFORCEMENT_DEFAULT = -1;
+ /**
+ * No API enforcement; the app can access the entire internal private API. Only for use by
+ * system apps.
+ * @hide
+ */
+ public static final int HIDDEN_API_ENFORCEMENT_NONE = 0;
+ /**
+ * Light grey list enforcement, the strictest option. Enforces the light grey, dark grey and
+ * black lists.
+ * @hide
+ * */
+ public static final int HIDDEN_API_ENFORCEMENT_ALL_LISTS = 1;
+ /**
+ * Dark grey list enforcement. Enforces the dark grey and black lists
+ * @hide
+ */
+ public static final int HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK = 2;
+ /**
+ * Blacklist enforcement only.
+ * @hide
+ */
+ public static final int HIDDEN_API_ENFORCEMENT_BLACK = 3;
+
+ private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_BLACK;
+
+ /**
+ * Values in this IntDef MUST be kept in sync with enum hiddenapi::EnforcementPolicy in
+ * art/runtime/hidden_api.h
+ * @hide
+ */
+ @IntDef(prefix = { "HIDDEN_API_ENFORCEMENT_" }, value = {
+ HIDDEN_API_ENFORCEMENT_DEFAULT,
+ HIDDEN_API_ENFORCEMENT_NONE,
+ HIDDEN_API_ENFORCEMENT_ALL_LISTS,
+ HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK,
+ HIDDEN_API_ENFORCEMENT_BLACK,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface HiddenApiEnforcementPolicy {}
+
+ private boolean isValidHiddenApiEnforcementPolicy(int policy) {
+ return policy >= HIDDEN_API_ENFORCEMENT_DEFAULT && policy <= HIDDEN_API_ENFORCEMENT_MAX;
+ }
+
+ private int mHiddenApiPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT;
+
public void dump(Printer pw, String prefix) {
dump(pw, prefix, DUMP_FLAG_ALL);
}
@@ -1188,7 +1240,7 @@
if (category != CATEGORY_UNDEFINED) {
pw.println(prefix + "category=" + category);
}
- pw.println(prefix + "isAllowedToUseHiddenApi=" + isAllowedToUseHiddenApi());
+ pw.println(prefix + "HiddenApiEnforcementPolicy=" + getHiddenApiEnforcementPolicy());
}
super.dumpBack(pw, prefix);
}
@@ -1386,6 +1438,7 @@
appComponentFactory = orig.appComponentFactory;
compileSdkVersion = orig.compileSdkVersion;
compileSdkVersionCodename = orig.compileSdkVersionCodename;
+ mHiddenApiPolicy = orig.mHiddenApiPolicy;
}
public String toString() {
@@ -1459,6 +1512,7 @@
dest.writeInt(compileSdkVersion);
dest.writeString(compileSdkVersionCodename);
dest.writeString(appComponentFactory);
+ dest.writeInt(mHiddenApiPolicy);
}
public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -1529,6 +1583,7 @@
compileSdkVersion = source.readInt();
compileSdkVersionCodename = source.readString();
appComponentFactory = source.readString();
+ mHiddenApiPolicy = source.readInt();
}
/**
@@ -1599,13 +1654,31 @@
}
}
+ private boolean isPackageWhitelistedForHiddenApis() {
+ return SystemConfig.getInstance().getHiddenApiWhitelistedApps().contains(packageName);
+ }
+
/**
* @hide
*/
- public boolean isAllowedToUseHiddenApi() {
- boolean whitelisted =
- SystemConfig.getInstance().getHiddenApiWhitelistedApps().contains(packageName);
- return whitelisted && (isSystemApp() || isUpdatedSystemApp());
+ public @HiddenApiEnforcementPolicy int getHiddenApiEnforcementPolicy() {
+ if (mHiddenApiPolicy != HIDDEN_API_ENFORCEMENT_DEFAULT) {
+ return mHiddenApiPolicy;
+ }
+ if (isPackageWhitelistedForHiddenApis() && (isSystemApp() || isUpdatedSystemApp())) {
+ return HIDDEN_API_ENFORCEMENT_NONE;
+ }
+ return HIDDEN_API_ENFORCEMENT_BLACK;
+ }
+
+ /**
+ * @hide
+ */
+ public void setHiddenApiEnforcementPolicy(@HiddenApiEnforcementPolicy int policy) {
+ if (!isValidHiddenApiEnforcementPolicy(policy)) {
+ throw new IllegalArgumentException("Invalid API enforcement policy: " + policy);
+ }
+ mHiddenApiPolicy = policy;
}
/**
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index f4352f9..d43d80f 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -615,6 +615,10 @@
void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
+ void grantDefaultPermissionsToEnabledTelephonyDataServices(
+ in String[] packageNames, int userId);
+ void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
+ in String[] packageNames, int userId);
boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
@@ -670,4 +674,6 @@
boolean hasUidSigningCertificate(int uid, in byte[] signingCertificate, int flags);
String getSystemTextClassifierPackageName();
+
+ boolean isPackageStateProtected(String packageName, int userId);
}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 4d8773c..314eb98 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3711,6 +3711,7 @@
*
* @hide
*/
+ @TestApi
public abstract @Nullable String[] getNamesForUids(int[] uids);
/**
@@ -6140,4 +6141,16 @@
throw new UnsupportedOperationException(
"getSystemTextClassifierPackageName not implemented in subclass");
}
+
+ /**
+ * @return whether a given package's state is protected, e.g. package cannot be disabled,
+ * suspended, hidden or force stopped.
+ *
+ * @hide
+ */
+ public boolean isPackageStateProtected(String packageName, int userId) {
+ throw new UnsupportedOperationException(
+ "isPackageStateProtected not implemented in subclass");
+ }
+
}
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index d813382..c58cde0 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -847,6 +847,7 @@
* @see #getDrawableForDensity(int, int, Theme)
* @deprecated Use {@link #getDrawableForDensity(int, int, Theme)} instead.
*/
+ @Nullable
@Deprecated
public Drawable getDrawableForDensity(@DrawableRes int id, int density)
throws NotFoundException {
@@ -864,12 +865,13 @@
* found in {@link DisplayMetrics}. A value of 0 means to use the
* density returned from {@link #getConfiguration()}.
* This is equivalent to calling {@link #getDrawable(int, Theme)}.
- * @param theme The theme used to style the drawable attributes, may be {@code null}.
+ * @param theme The theme used to style the drawable attributes, may be {@code null} if the
+ * drawable cannot be decoded.
* @return Drawable An object that can be used to draw this resource.
* @throws NotFoundException Throws NotFoundException if the given ID does
- * not exist, or cannot be decoded.
+ * not exist.
*/
- @NonNull
+ @Nullable
public Drawable getDrawableForDensity(@DrawableRes int id, int density, @Nullable Theme theme) {
final TypedValue value = obtainTempTypedValue();
try {
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index 157910a..8c98067 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -544,7 +544,7 @@
}
}
- @NonNull
+ @Nullable
Drawable loadDrawable(@NonNull Resources wrapper, @NonNull TypedValue value, int id,
int density, @Nullable Resources.Theme theme)
throws NotFoundException {
@@ -757,6 +757,7 @@
*
* This call will handle closing ais.
*/
+ @Nullable
private Drawable decodeImageDrawable(@NonNull AssetInputStream ais,
@NonNull Resources wrapper, @NonNull TypedValue value) {
ImageDecoder.Source src = new ImageDecoder.AssetInputStreamSource(ais,
@@ -774,8 +775,10 @@
/**
* Loads a drawable from XML or resources stream.
+ *
+ * @return Drawable, or null if Drawable cannot be decoded.
*/
- @NonNull
+ @Nullable
private Drawable loadDrawableForCookie(@NonNull Resources wrapper, @NonNull TypedValue value,
int id, int density) {
if (value.string == null) {
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index ff69bd8..eafe593 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -16,15 +16,16 @@
package android.hardware.camera2;
+import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.camera2.params.OutputConfiguration;
import android.os.Handler;
import android.view.Surface;
+import java.util.concurrent.Executor;
import java.util.List;
-
/**
* A configured capture session for a {@link CameraDevice}, used for capturing images from the
* camera or reprocessing images captured from the camera in the same session previously.
@@ -354,6 +355,50 @@
throws CameraAccessException;
/**
+ * <p>Submit a request for an image to be captured by the camera device.</p>
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #capture(CaptureRequest, CaptureCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param request the settings for this capture
+ * @param executor the executor which will be used for invoking the listener.
+ * @param listener The callback object to notify once this request has been
+ * processed.
+ *
+ * @return int A unique capture sequence ID used by
+ * {@link CaptureCallback#onCaptureSequenceCompleted}.
+ *
+ * @throws CameraAccessException if the camera device is no longer connected or has
+ * encountered a fatal error
+ * @throws IllegalStateException if this session is no longer active, either because the session
+ * was explicitly closed, a new session has been created
+ * or the camera device has been closed.
+ * @throws IllegalArgumentException if the request targets no Surfaces or Surfaces that are not
+ * configured as outputs for this session; or the request
+ * targets a set of Surfaces that cannot be submitted
+ * simultaneously in a reprocessable capture session; or a
+ * reprocess capture request is submitted in a
+ * non-reprocessable capture session; or the reprocess capture
+ * request was created with a {@link TotalCaptureResult} from
+ * a different session; or the capture targets a Surface in
+ * the middle of being {@link #prepare prepared}; or the
+ * executor is null, or the listener is not null.
+ *
+ * @see #captureBurst
+ * @see #setRepeatingRequest
+ * @see #setRepeatingBurst
+ * @see #abortCaptures
+ * @see CameraDevice#createReprocessableCaptureSession
+ */
+ public int captureSingleRequest(@NonNull CaptureRequest request,
+ @NonNull @CallbackExecutor Executor executor, @NonNull CaptureCallback listener)
+ throws CameraAccessException {
+ throw new UnsupportedOperationException("Subclasses must override this method");
+ }
+
+ /**
* Submit a list of requests to be captured in sequence as a burst. The
* burst will be captured in the minimum amount of time possible, and will
* not be interleaved with requests submitted by other capture or repeat
@@ -416,6 +461,53 @@
throws CameraAccessException;
/**
+ * Submit a list of requests to be captured in sequence as a burst. The
+ * burst will be captured in the minimum amount of time possible, and will
+ * not be interleaved with requests submitted by other capture or repeat
+ * calls.
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #captureBurst(List, CaptureCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param requests the list of settings for this burst capture
+ * @param executor the executor which will be used for invoking the listener.
+ * @param listener The callback object to notify each time one of the
+ * requests in the burst has been processed.
+ *
+ * @return int A unique capture sequence ID used by
+ * {@link CaptureCallback#onCaptureSequenceCompleted}.
+ *
+ * @throws CameraAccessException if the camera device is no longer connected or has
+ * encountered a fatal error
+ * @throws IllegalStateException if this session is no longer active, either because the session
+ * was explicitly closed, a new session has been created
+ * or the camera device has been closed.
+ * @throws IllegalArgumentException If the requests target no Surfaces, or the requests target
+ * Surfaces not currently configured as outputs; or one of the
+ * requests targets a set of Surfaces that cannot be submitted
+ * simultaneously in a reprocessable capture session; or a
+ * reprocess capture request is submitted in a
+ * non-reprocessable capture session; or one of the reprocess
+ * capture requests was created with a
+ * {@link TotalCaptureResult} from a different session; or one
+ * of the captures targets a Surface in the middle of being
+ * {@link #prepare prepared}; or if the executor is null; or if
+ * the listener is null.
+ *
+ * @see #capture
+ * @see #setRepeatingRequest
+ * @see #setRepeatingBurst
+ * @see #abortCaptures
+ */
+ public int captureBurstRequests(@NonNull List<CaptureRequest> requests,
+ @NonNull @CallbackExecutor Executor executor, @NonNull CaptureCallback listener)
+ throws CameraAccessException {
+ throw new UnsupportedOperationException("Subclasses must override this method");
+ }
+
+ /**
* Request endlessly repeating capture of images by this capture session.
*
* <p>With this method, the camera device will continually capture images
@@ -483,6 +575,45 @@
throws CameraAccessException;
/**
+ * Request endlessly repeating capture of images by this capture session.
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #setRepeatingRequest(CaptureRequest, CaptureCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param request the request to repeat indefinitely
+ * @param executor the executor which will be used for invoking the listener.
+ * @param listener The callback object to notify every time the
+ * request finishes processing.
+ *
+ * @return int A unique capture sequence ID used by
+ * {@link CaptureCallback#onCaptureSequenceCompleted}.
+ *
+ * @throws CameraAccessException if the camera device is no longer connected or has
+ * encountered a fatal error
+ * @throws IllegalStateException if this session is no longer active, either because the session
+ * was explicitly closed, a new session has been created
+ * or the camera device has been closed.
+ * @throws IllegalArgumentException If the request references no Surfaces or references Surfaces
+ * that are not currently configured as outputs; or the request
+ * is a reprocess capture request; or the capture targets a
+ * Surface in the middle of being {@link #prepare prepared}; or
+ * the executor is null; or the listener is null.
+ *
+ * @see #capture
+ * @see #captureBurst
+ * @see #setRepeatingBurst
+ * @see #stopRepeating
+ * @see #abortCaptures
+ */
+ public int setSingleRepeatingRequest(@NonNull CaptureRequest request,
+ @NonNull @CallbackExecutor Executor executor, @NonNull CaptureCallback listener)
+ throws CameraAccessException {
+ throw new UnsupportedOperationException("Subclasses must override this method");
+ }
+
+ /**
* <p>Request endlessly repeating capture of a sequence of images by this
* capture session.</p>
*
@@ -555,6 +686,47 @@
throws CameraAccessException;
/**
+ * <p>Request endlessly repeating capture of a sequence of images by this
+ * capture session.</p>
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #setRepeatingBurst(List, CaptureCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param requests the list of requests to cycle through indefinitely
+ * @param executor the executor which will be used for invoking the listener.
+ * @param listener The callback object to notify each time one of the
+ * requests in the repeating bursts has finished processing.
+ *
+ * @return int A unique capture sequence ID used by
+ * {@link CaptureCallback#onCaptureSequenceCompleted}.
+ *
+ * @throws CameraAccessException if the camera device is no longer connected or has
+ * encountered a fatal error
+ * @throws IllegalStateException if this session is no longer active, either because the session
+ * was explicitly closed, a new session has been created
+ * or the camera device has been closed.
+ * @throws IllegalArgumentException If the requests reference no Surfaces or reference Surfaces
+ * not currently configured as outputs; or one of the requests
+ * is a reprocess capture request; or one of the captures
+ * targets a Surface in the middle of being
+ * {@link #prepare prepared}; or the executor is null; or the
+ * listener is null.
+ *
+ * @see #capture
+ * @see #captureBurst
+ * @see #setRepeatingRequest
+ * @see #stopRepeating
+ * @see #abortCaptures
+ */
+ public int setRepeatingBurstRequests(@NonNull List<CaptureRequest> requests,
+ @NonNull @CallbackExecutor Executor executor, @NonNull CaptureCallback listener)
+ throws CameraAccessException {
+ throw new UnsupportedOperationException("Subclasses must override this method");
+ }
+
+ /**
* <p>Cancel any ongoing repeating capture set by either
* {@link #setRepeatingRequest setRepeatingRequest} or
* {@link #setRepeatingBurst}. Has no effect on requests submitted through
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 4d64295..4124536 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -16,6 +16,7 @@
package android.hardware.camera2;
+import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -134,6 +135,27 @@
}
/**
+ * Register a callback to be notified about camera device availability.
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #registerAvailabilityCallback(AvailabilityCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param executor The executor which will be used to invoke the callback.
+ * @param callback the new callback to send camera availability notices to
+ *
+ * @throws IllegalArgumentException if the executor is {@code null}.
+ */
+ public void registerAvailabilityCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull AvailabilityCallback callback) {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor was null");
+ }
+ CameraManagerGlobal.get().registerAvailabilityCallback(callback, executor);
+ }
+
+ /**
* Remove a previously-added callback; the callback will no longer receive connection and
* disconnection callbacks.
*
@@ -173,6 +195,27 @@
}
/**
+ * Register a callback to be notified about torch mode status.
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #registerTorchCallback(TorchCallback, Handler)},
+ * except that it uses {@link java.util.concurrent.Executor} as an argument
+ * instead of {@link android.os.Handler}.</p>
+ *
+ * @param executor The executor which will be used to invoke the callback
+ * @param callback The new callback to send torch mode status to
+ *
+ * @throws IllegalArgumentException if the executor is {@code null}.
+ */
+ public void registerTorchCallback(@NonNull @CallbackExecutor Executor executor,
+ @NonNull TorchCallback callback) {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor was null");
+ }
+ CameraManagerGlobal.get().registerTorchCallback(callback, executor);
+ }
+
+ /**
* Remove a previously-added callback; the callback will no longer receive torch mode status
* callbacks.
*
@@ -248,7 +291,7 @@
*
* @param cameraId The unique identifier of the camera device to open
* @param callback The callback for the camera. Must not be null.
- * @param handler The handler to invoke the callback on. Must not be null.
+ * @param executor The executor to invoke the callback with. Must not be null.
* @param uid The UID of the application actually opening the camera.
* Must be USE_CALLING_UID unless the caller is a service
* that is trusted to open the device on behalf of an
@@ -267,7 +310,7 @@
* @see android.app.admin.DevicePolicyManager#setCameraDisabled
*/
private CameraDevice openCameraDeviceUserAsync(String cameraId,
- CameraDevice.StateCallback callback, Handler handler, final int uid)
+ CameraDevice.StateCallback callback, Executor executor, final int uid)
throws CameraAccessException {
CameraCharacteristics characteristics = getCameraCharacteristics(cameraId);
CameraDevice device = null;
@@ -280,7 +323,7 @@
new android.hardware.camera2.impl.CameraDeviceImpl(
cameraId,
callback,
- handler,
+ executor,
characteristics,
mContext.getApplicationInfo().targetSdkVersion);
@@ -421,7 +464,47 @@
@NonNull final CameraDevice.StateCallback callback, @Nullable Handler handler)
throws CameraAccessException {
- openCameraForUid(cameraId, callback, handler, USE_CALLING_UID);
+ openCameraForUid(cameraId, callback, CameraDeviceImpl.checkAndWrapHandler(handler),
+ USE_CALLING_UID);
+ }
+
+ /**
+ * Open a connection to a camera with the given ID.
+ *
+ * <p>The behavior of this method matches that of
+ * {@link #openCamera(String, StateCallback, Handler)}, except that it uses
+ * {@link java.util.concurrent.Executor} as an argument instead of
+ * {@link android.os.Handler}.</p>
+ *
+ * @param cameraId
+ * The unique identifier of the camera device to open
+ * @param executor
+ * The executor which will be used when invoking the callback.
+ * @param callback
+ * The callback which is invoked once the camera is opened
+ *
+ * @throws CameraAccessException if the camera is disabled by device policy,
+ * has been disconnected, or is being used by a higher-priority camera API client.
+ *
+ * @throws IllegalArgumentException if cameraId, the callback or the executor was null,
+ * or the cameraId does not match any currently or previously available
+ * camera device.
+ *
+ * @throws SecurityException if the application does not have permission to
+ * access the camera
+ *
+ * @see #getCameraIdList
+ * @see android.app.admin.DevicePolicyManager#setCameraDisabled
+ */
+ @RequiresPermission(android.Manifest.permission.CAMERA)
+ public void openCamera(@NonNull String cameraId,
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull final CameraDevice.StateCallback callback)
+ throws CameraAccessException {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor was null");
+ }
+ openCameraForUid(cameraId, callback, executor, USE_CALLING_UID);
}
/**
@@ -440,7 +523,7 @@
* @hide
*/
public void openCameraForUid(@NonNull String cameraId,
- @NonNull final CameraDevice.StateCallback callback, @Nullable Handler handler,
+ @NonNull final CameraDevice.StateCallback callback, @NonNull Executor executor,
int clientUid)
throws CameraAccessException {
@@ -448,19 +531,12 @@
throw new IllegalArgumentException("cameraId was null");
} else if (callback == null) {
throw new IllegalArgumentException("callback was null");
- } else if (handler == null) {
- if (Looper.myLooper() != null) {
- handler = new Handler();
- } else {
- throw new IllegalArgumentException(
- "Handler argument is null, but no looper exists in the calling thread");
- }
}
if (CameraManagerGlobal.sCameraServiceDisabled) {
throw new IllegalArgumentException("No cameras available on device");
}
- openCameraDeviceUserAsync(cameraId, callback, handler, clientUid);
+ openCameraDeviceUserAsync(cameraId, callback, executor, clientUid);
}
/**
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
index 9cac71c..a4640c1 100644
--- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
@@ -158,14 +158,7 @@
@Override
public int capture(CaptureRequest request, CaptureCallback callback,
Handler handler) throws CameraAccessException {
- if (request == null) {
- throw new IllegalArgumentException("request must not be null");
- } else if (request.isReprocess() && !isReprocessable()) {
- throw new IllegalArgumentException("this capture session cannot handle reprocess " +
- "requests");
- } else if (request.isReprocess() && request.getReprocessableSessionId() != mId) {
- throw new IllegalArgumentException("capture request was created for another session");
- }
+ checkCaptureRequest(request);
synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
@@ -183,25 +176,45 @@
}
@Override
+ public int captureSingleRequest(CaptureRequest request, Executor executor,
+ CaptureCallback callback) throws CameraAccessException {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor must not be null");
+ } else if (callback == null) {
+ throw new IllegalArgumentException("callback must not be null");
+ }
+ checkCaptureRequest(request);
+
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
+
+ executor = CameraDeviceImpl.checkExecutor(executor, callback);
+
+ if (DEBUG) {
+ Log.v(TAG, mIdString + "capture - request " + request + ", callback " + callback +
+ " executor " + executor);
+ }
+
+ return addPendingSequence(mDeviceImpl.capture(request,
+ createCaptureCallbackProxyWithExecutor(executor, callback), mDeviceExecutor));
+ }
+ }
+
+ private void checkCaptureRequest(CaptureRequest request) {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ } else if (request.isReprocess() && !isReprocessable()) {
+ throw new IllegalArgumentException("this capture session cannot handle reprocess " +
+ "requests");
+ } else if (request.isReprocess() && request.getReprocessableSessionId() != mId) {
+ throw new IllegalArgumentException("capture request was created for another session");
+ }
+ }
+
+ @Override
public int captureBurst(List<CaptureRequest> requests, CaptureCallback callback,
Handler handler) throws CameraAccessException {
- if (requests == null) {
- throw new IllegalArgumentException("Requests must not be null");
- } else if (requests.isEmpty()) {
- throw new IllegalArgumentException("Requests must have at least one element");
- }
-
- for (CaptureRequest request : requests) {
- if (request.isReprocess()) {
- if (!isReprocessable()) {
- throw new IllegalArgumentException("This capture session cannot handle " +
- "reprocess requests");
- } else if (request.getReprocessableSessionId() != mId) {
- throw new IllegalArgumentException("Capture request was created for another " +
- "session");
- }
- }
- }
+ checkCaptureRequests(requests);
synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
@@ -220,13 +233,56 @@
}
@Override
+ public int captureBurstRequests(List<CaptureRequest> requests, Executor executor,
+ CaptureCallback callback) throws CameraAccessException {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor must not be null");
+ } else if (callback == null) {
+ throw new IllegalArgumentException("callback must not be null");
+ }
+ checkCaptureRequests(requests);
+
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
+
+ executor = CameraDeviceImpl.checkExecutor(executor, callback);
+
+ if (DEBUG) {
+ CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
+ Log.v(TAG, mIdString + "captureBurst - requests " + Arrays.toString(requestArray) +
+ ", callback " + callback + " executor " + executor);
+ }
+
+ return addPendingSequence(mDeviceImpl.captureBurst(requests,
+ createCaptureCallbackProxyWithExecutor(executor, callback), mDeviceExecutor));
+ }
+ }
+
+ private void checkCaptureRequests(List<CaptureRequest> requests) {
+ if (requests == null) {
+ throw new IllegalArgumentException("Requests must not be null");
+ } else if (requests.isEmpty()) {
+ throw new IllegalArgumentException("Requests must have at least one element");
+ }
+
+ for (CaptureRequest request : requests) {
+ if (request.isReprocess()) {
+ if (!isReprocessable()) {
+ throw new IllegalArgumentException("This capture session cannot handle " +
+ "reprocess requests");
+ } else if (request.getReprocessableSessionId() != mId) {
+ throw new IllegalArgumentException("Capture request was created for another " +
+ "session");
+ }
+ }
+ }
+
+ }
+
+ @Override
public int setRepeatingRequest(CaptureRequest request, CaptureCallback callback,
Handler handler) throws CameraAccessException {
- if (request == null) {
- throw new IllegalArgumentException("request must not be null");
- } else if (request.isReprocess()) {
- throw new IllegalArgumentException("repeating reprocess requests are not supported");
- }
+ checkRepeatingRequest(request);
synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
@@ -244,20 +300,42 @@
}
@Override
+ public int setSingleRepeatingRequest(CaptureRequest request, Executor executor,
+ CaptureCallback callback) throws CameraAccessException {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor must not be null");
+ } else if (callback == null) {
+ throw new IllegalArgumentException("callback must not be null");
+ }
+ checkRepeatingRequest(request);
+
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
+
+ executor = CameraDeviceImpl.checkExecutor(executor, callback);
+
+ if (DEBUG) {
+ Log.v(TAG, mIdString + "setRepeatingRequest - request " + request + ", callback " +
+ callback + " executor" + " " + executor);
+ }
+
+ return addPendingSequence(mDeviceImpl.setRepeatingRequest(request,
+ createCaptureCallbackProxyWithExecutor(executor, callback), mDeviceExecutor));
+ }
+ }
+
+ private void checkRepeatingRequest(CaptureRequest request) {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ } else if (request.isReprocess()) {
+ throw new IllegalArgumentException("repeating reprocess requests are not supported");
+ }
+ }
+
+ @Override
public int setRepeatingBurst(List<CaptureRequest> requests,
CaptureCallback callback, Handler handler) throws CameraAccessException {
- if (requests == null) {
- throw new IllegalArgumentException("requests must not be null");
- } else if (requests.isEmpty()) {
- throw new IllegalArgumentException("requests must have at least one element");
- }
-
- for (CaptureRequest r : requests) {
- if (r.isReprocess()) {
- throw new IllegalArgumentException("repeating reprocess burst requests are not " +
- "supported");
- }
- }
+ checkRepeatingRequests(requests);
synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
@@ -277,6 +355,48 @@
}
@Override
+ public int setRepeatingBurstRequests(List<CaptureRequest> requests, Executor executor,
+ CaptureCallback callback) throws CameraAccessException {
+ if (executor == null) {
+ throw new IllegalArgumentException("executor must not be null");
+ } else if (callback == null) {
+ throw new IllegalArgumentException("callback must not be null");
+ }
+ checkRepeatingRequests(requests);
+
+ synchronized (mDeviceImpl.mInterfaceLock) {
+ checkNotClosed();
+
+ executor = CameraDeviceImpl.checkExecutor(executor, callback);
+
+ if (DEBUG) {
+ CaptureRequest[] requestArray = requests.toArray(new CaptureRequest[0]);
+ Log.v(TAG, mIdString + "setRepeatingBurst - requests " +
+ Arrays.toString(requestArray) + ", callback " + callback +
+ " executor" + "" + executor);
+ }
+
+ return addPendingSequence(mDeviceImpl.setRepeatingBurst(requests,
+ createCaptureCallbackProxyWithExecutor(executor, callback), mDeviceExecutor));
+ }
+ }
+
+ private void checkRepeatingRequests(List<CaptureRequest> requests) {
+ if (requests == null) {
+ throw new IllegalArgumentException("requests must not be null");
+ } else if (requests.isEmpty()) {
+ throw new IllegalArgumentException("requests must have at least one element");
+ }
+
+ for (CaptureRequest r : requests) {
+ if (r.isReprocess()) {
+ throw new IllegalArgumentException("repeating reprocess burst requests are not " +
+ "supported");
+ }
+ }
+ }
+
+ @Override
public void stopRepeating() throws CameraAccessException {
synchronized (mDeviceImpl.mInterfaceLock) {
checkNotClosed();
@@ -462,6 +582,11 @@
final Executor executor = (callback != null) ? CameraDeviceImpl.checkAndWrapHandler(
handler) : null;
+ return createCaptureCallbackProxyWithExecutor(executor, callback);
+ }
+
+ private CameraDeviceImpl.CaptureCallback createCaptureCallbackProxyWithExecutor(
+ Executor executor, CaptureCallback callback) {
return new CameraDeviceImpl.CaptureCallback() {
@Override
public void onCaptureStarted(CameraDevice camera,
diff --git a/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java
index 89f6172..3494a7f 100644
--- a/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java
@@ -193,6 +193,13 @@
}
@Override
+ public int captureSingleRequest(CaptureRequest request, Executor executor,
+ CaptureCallback listener) throws CameraAccessException {
+ throw new UnsupportedOperationException("Constrained high speed session doesn't support"
+ + " this method");
+ }
+
+ @Override
public int captureBurst(List<CaptureRequest> requests, CaptureCallback listener,
Handler handler) throws CameraAccessException {
if (!isConstrainedHighSpeedRequestList(requests)) {
@@ -204,6 +211,17 @@
}
@Override
+ public int captureBurstRequests(List<CaptureRequest> requests, Executor executor,
+ CaptureCallback listener) throws CameraAccessException {
+ if (!isConstrainedHighSpeedRequestList(requests)) {
+ throw new IllegalArgumentException(
+ "Only request lists created by createHighSpeedRequestList() can be submitted to " +
+ "a constrained high speed capture session");
+ }
+ return mSessionImpl.captureBurstRequests(requests, executor, listener);
+ }
+
+ @Override
public int setRepeatingRequest(CaptureRequest request, CaptureCallback listener,
Handler handler) throws CameraAccessException {
throw new UnsupportedOperationException("Constrained high speed session doesn't support"
@@ -211,6 +229,13 @@
}
@Override
+ public int setSingleRepeatingRequest(CaptureRequest request, Executor executor,
+ CaptureCallback listener) throws CameraAccessException {
+ throw new UnsupportedOperationException("Constrained high speed session doesn't support"
+ + " this method");
+ }
+
+ @Override
public int setRepeatingBurst(List<CaptureRequest> requests, CaptureCallback listener,
Handler handler) throws CameraAccessException {
if (!isConstrainedHighSpeedRequestList(requests)) {
@@ -222,6 +247,17 @@
}
@Override
+ public int setRepeatingBurstRequests(List<CaptureRequest> requests, Executor executor,
+ CaptureCallback listener) throws CameraAccessException {
+ if (!isConstrainedHighSpeedRequestList(requests)) {
+ throw new IllegalArgumentException(
+ "Only request lists created by createHighSpeedRequestList() can be submitted to " +
+ "a constrained high speed capture session");
+ }
+ return mSessionImpl.setRepeatingBurstRequests(requests, executor, listener);
+ }
+
+ @Override
public void stopRepeating() throws CameraAccessException {
mSessionImpl.stopRepeating();
}
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 1f35f31..d967fba 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -240,14 +240,14 @@
}
};
- public CameraDeviceImpl(String cameraId, StateCallback callback, Handler handler,
+ public CameraDeviceImpl(String cameraId, StateCallback callback, Executor executor,
CameraCharacteristics characteristics, int appTargetSdkVersion) {
- if (cameraId == null || callback == null || handler == null || characteristics == null) {
+ if (cameraId == null || callback == null || executor == null || characteristics == null) {
throw new IllegalArgumentException("Null argument given");
}
mCameraId = cameraId;
mDeviceCallback = callback;
- mDeviceExecutor = checkAndWrapHandler(handler);
+ mDeviceExecutor = executor;
mCharacteristics = characteristics;
mAppTargetSdkVersion = appTargetSdkVersion;
@@ -2349,7 +2349,7 @@
*
* <p>If the callback isn't null, check the executor, otherwise pass it through.</p>
*/
- static <T> Executor checkExecutor(Executor executor, T callback) {
+ public static <T> Executor checkExecutor(Executor executor, T callback) {
return (callback != null) ? checkExecutor(executor) : executor;
}
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 91bbdc7..6d9c913 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -105,6 +105,12 @@
/* Gets the current screen unlocked functions. */
long getScreenUnlockedFunctions();
+ /* Get the functionfs control handle for the given function. Usb
+ * descriptors will already be written, and the handle will be
+ * ready to use.
+ */
+ ParcelFileDescriptor getControlFd(long function);
+
/* Allow USB debugging from the attached host. If alwaysAllow is true, add the
* the public key to list of host keys that the user has approved.
*/
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index 572c585..46142e3 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -192,14 +192,6 @@
public static final String USB_DATA_UNLOCKED = "unlocked";
/**
- * Boolean extra indicating whether the intent represents a change in the usb
- * configuration (as opposed to a state update).
- *
- * {@hide}
- */
- public static final String USB_CONFIG_CHANGED = "config_changed";
-
- /**
* A placeholder indicating that no USB function is being specified.
* Used for compatibility with old init scripts to indicate no functions vs. charging function.
*
@@ -471,6 +463,25 @@
}
/**
+ * Gets the functionfs control file descriptor for the given function, with
+ * the usb descriptors and strings already written. The file descriptor is used
+ * by the function implementation to handle events and control requests.
+ *
+ * @param function to get control fd for. Currently {@link #FUNCTION_MTP} and
+ * {@link #FUNCTION_PTP} are supported.
+ * @return A ParcelFileDescriptor holding the valid fd, or null if the fd was not found.
+ *
+ * {@hide}
+ */
+ public ParcelFileDescriptor getControlFd(long function) {
+ try {
+ return mService.getControlFd(function);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns true if the caller has permission to access the device.
* Permission might have been granted temporarily via
* {@link #requestPermission(UsbDevice, PendingIntent)} or
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 93b1b22..e07f586 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -3851,8 +3851,8 @@
/**
* The network watchlist is a list of domains and IP addresses that are associated with
- * potentially harmful apps. This method returns the hash of the watchlist currently
- * used by the system.
+ * potentially harmful apps. This method returns the SHA-256 of the watchlist config file
+ * currently used by the system for validation purposes.
*
* @return Hash of network watchlist config file. Null if config does not exist.
*/
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index 7922276..40d53b7 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -16,7 +16,6 @@
package android.net;
-import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -259,30 +258,47 @@
/**
* Set specific UID to use when accounting {@link Socket} traffic
* originating from the current thread. Designed for use when performing an
- * operation on behalf of another application.
+ * operation on behalf of another application, or when another application
+ * is performing operations on your behalf.
+ * <p>
+ * Any app can <em>accept</em> blame for traffic performed on a socket
+ * originally created by another app by calling this method with the
+ * {@link android.system.Os#getuid()} value. However, only apps holding the
+ * {@code android.Manifest.permission#UPDATE_DEVICE_STATS} permission may
+ * <em>assign</em> blame to another UIDs.
* <p>
* Changes only take effect during subsequent calls to
* {@link #tagSocket(Socket)}.
- * <p>
- * To take effect, caller must hold
- * {@link android.Manifest.permission#UPDATE_DEVICE_STATS} permission.
- *
- * @hide
*/
@SystemApi
- @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
+ @SuppressLint("Doclava125")
public static void setThreadStatsUid(int uid) {
NetworkManagementSocketTagger.setThreadSocketStatsUid(uid);
}
/**
+ * Get the active UID used when accounting {@link Socket} traffic originating
+ * from the current thread. Only one active tag per thread is supported.
+ * {@link #tagSocket(Socket)}.
+ *
+ * @see #setThreadStatsUid(int)
+ */
+ public static int getThreadStatsUid() {
+ return NetworkManagementSocketTagger.getThreadSocketStatsUid();
+ }
+
+ /**
* Set specific UID to use when accounting {@link Socket} traffic
* originating from the current thread as the calling UID. Designed for use
* when another application is performing operations on your behalf.
* <p>
* Changes only take effect during subsequent calls to
* {@link #tagSocket(Socket)}.
+ *
+ * @removed
+ * @deprecated use {@link #setThreadStatsUid(int)} instead.
*/
+ @Deprecated
public static void setThreadStatsUidSelf() {
setThreadStatsUid(android.os.Process.myUid());
}
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index df6ce8e..e22c65f 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -242,7 +242,9 @@
* Possible values are defined in {@link Build.VERSION_CODES}.
*
* @see #SDK_INT
+ * @hide
*/
+ @TestApi
public static final int FIRST_SDK_INT = SystemProperties
.getInt("ro.product.first_api_level", 0);
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index 1160415..88d6e84 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -411,6 +411,9 @@
checkpoint = 0;
}
}
+ if (listener != null) {
+ listener.onProgress(progress);
+ }
return progress;
}
@@ -440,6 +443,9 @@
checkpoint = 0;
}
}
+ if (listener != null) {
+ listener.onProgress(progress);
+ }
return progress;
}
@@ -479,6 +485,9 @@
checkpoint = 0;
}
}
+ if (listener != null) {
+ listener.onProgress(progress);
+ }
return progress;
}
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index a5e1934..2437ed1 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -340,7 +340,7 @@
* Configure name servers, search paths, and resolver parameters for the given network.
*/
void setDnsConfigurationForNetwork(int netId, in String[] servers, in String[] domains,
- in int[] params, boolean useTls, String tlsHostname);
+ in int[] params, String tlsHostname, in String[] tlsServers);
void setFirewallEnabled(boolean enabled);
boolean isFirewallEnabled();
diff --git a/core/java/android/os/SystemClock.java b/core/java/android/os/SystemClock.java
index 0f70427..b254166 100644
--- a/core/java/android/os/SystemClock.java
+++ b/core/java/android/os/SystemClock.java
@@ -269,6 +269,7 @@
* time or throw.
*
* @throws DateTimeException when no accurate network time can be provided.
+ * @hide
*/
public static long currentNetworkTimeMillis() {
final IAlarmManager mgr = IAlarmManager.Stub
@@ -302,6 +303,7 @@
* time or throw.
*
* @throws DateTimeException when no accurate network time can be provided.
+ * @hide
*/
public static @NonNull Clock currentNetworkTimeClock() {
return new SimpleClock(ZoneOffset.UTC) {
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index f93b39f..30451c2 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -91,6 +91,8 @@
public static final long TRACE_TAG_ADB = 1L << 22;
/** @hide */
public static final long TRACE_TAG_VIBRATOR = 1L << 23;
+ /** @hide */
+ public static final long TRACE_TAG_AIDL = 1L << 24;
private static final long TRACE_TAG_NOT_READY = 1L << 63;
private static final int MAX_SECTION_NAME_LEN = 127;
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 18fd67e..9ecae8c 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1348,10 +1348,18 @@
= "android.settings.NOTIFICATION_SETTINGS";
/**
+ * Activity Action: Show app listing settings, filtered by those that send notifications.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_ALL_APPS_NOTIFICATION_SETTINGS =
+ "android.settings.ALL_APPS_NOTIFICATION_SETTINGS";
+
+ /**
* Activity Action: Show notification settings for a single app.
* <p>
- * Input: {@link #EXTRA_APP_PACKAGE}, the package containing the channel to display.
- * Input: Optionally, {@link #EXTRA_CHANNEL_ID}, to highlight that channel.
+ * Input: {@link #EXTRA_APP_PACKAGE}, the package to display.
* <p>
* Output: Nothing.
*/
@@ -11004,13 +11012,21 @@
public static final String SHOW_PROCESSES = "show_processes";
/**
- * If 1 low power mode is enabled.
+ * If 1 low power mode (aka battery saver) is enabled.
* @hide
*/
@TestApi
public static final String LOW_POWER_MODE = "low_power";
/**
+ * If 1, battery saver ({@link #LOW_POWER_MODE}) will be re-activated after the device
+ * is unplugged from a charger or rebooted.
+ * @hide
+ */
+ @TestApi
+ public static final String LOW_POWER_MODE_STICKY = "low_power_sticky";
+
+ /**
* Battery level [1-100] at which low power mode automatically turns on.
* If 0, it will not automatically turn on.
* @hide
@@ -12427,6 +12443,7 @@
*
* <pre>
* enabled (boolean)
+ * requires_targeting_p (boolean)
* max_squeeze_remeasure_attempts (int)
* </pre>
* @see com.android.systemui.statusbar.policy.SmartReplyConstants
diff --git a/core/java/android/security/keystore/BackwardsCompat.java b/core/java/android/security/keystore/BackwardsCompat.java
index 69558c4..cf5fe1f 100644
--- a/core/java/android/security/keystore/BackwardsCompat.java
+++ b/core/java/android/security/keystore/BackwardsCompat.java
@@ -61,8 +61,8 @@
static android.security.keystore.recovery.KeyDerivationParams fromLegacyKeyDerivationParams(
KeyDerivationParams keyDerivationParams
) {
- return new android.security.keystore.recovery.KeyDerivationParams(
- keyDerivationParams.getAlgorithm(), keyDerivationParams.getSalt());
+ return android.security.keystore.recovery.KeyDerivationParams.createSha256Params(
+ keyDerivationParams.getSalt());
}
static android.security.keystore.recovery.WrappedApplicationKey fromLegacyWrappedApplicationKey(
diff --git a/core/java/android/security/keystore/RecoveryController.java b/core/java/android/security/keystore/RecoveryController.java
index 145261e..d50424d 100644
--- a/core/java/android/security/keystore/RecoveryController.java
+++ b/core/java/android/security/keystore/RecoveryController.java
@@ -195,17 +195,7 @@
*/
public @NonNull Map<byte[], Integer> getRecoverySnapshotVersions()
throws InternalRecoveryServiceException {
- try {
- // IPC doesn't support generic Maps.
- @SuppressWarnings("unchecked")
- Map<byte[], Integer> result =
- (Map<byte[], Integer>) mBinder.getRecoverySnapshotVersions();
- return result;
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- throw wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
@@ -337,13 +327,7 @@
@NonNull
public @KeychainProtectionParams.UserSecretType int[] getPendingRecoverySecretTypes()
throws InternalRecoveryServiceException {
- try {
- return mBinder.getPendingRecoverySecretTypes();
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- } catch (ServiceSpecificException e) {
- throw wrapUnexpectedServiceSpecificException(e);
- }
+ throw new UnsupportedOperationException();
}
/**
diff --git a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java
index d42424e..2a66206 100644
--- a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java
+++ b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java
@@ -94,21 +94,6 @@
private KeyDerivationParams mKeyDerivationParams;
private byte[] mSecret; // Derived from user secret. The field must have limited visibility.
- /**
- * @param secret Constructor creates a reference to the secret. Caller must use
- * @link {#clearSecret} to overwrite its value in memory.
- * @hide
- */
- public KeyChainProtectionParams(@UserSecretType int userSecretType,
- @LockScreenUiFormat int lockScreenUiFormat,
- @NonNull KeyDerivationParams keyDerivationParams,
- @NonNull byte[] secret) {
- mUserSecretType = userSecretType;
- mLockScreenUiFormat = lockScreenUiFormat;
- mKeyDerivationParams = Preconditions.checkNotNull(keyDerivationParams);
- mSecret = Preconditions.checkNotNull(secret);
- }
-
private KeyChainProtectionParams() {
}
@@ -158,6 +143,7 @@
/**
* Sets user secret type.
+ * Default value is {@link TYPE_LOCKSCREEN}.
*
* @see TYPE_LOCKSCREEN
* @param userSecretType The secret type
@@ -185,7 +171,7 @@
/**
* Sets parameters of the key derivation function.
*
- * @param keyDerivationParams Key derivation Params
+ * @param keyDerivationParams Key derivation parameters
* @return This builder.
*/
public Builder setKeyDerivationParams(@NonNull KeyDerivationParams
diff --git a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
index 69b9123..24ff182 100644
--- a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
+++ b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
@@ -84,8 +84,8 @@
}
/**
- * Snapshot version for given account. It is incremented when user secret or list of application
- * keys changes.
+ * Snapshot version for given recovery agent. It is incremented when user secret or list of
+ * application keys changes.
*/
public int getSnapshotVersion() {
return mSnapshotVersion;
@@ -178,7 +178,7 @@
private KeyChainSnapshot mInstance = new KeyChainSnapshot();
/**
- * Snapshot version for given account.
+ * Snapshot version for the recovery agent.
*
* @param snapshotVersion The snapshot version
* @return This builder.
@@ -252,12 +252,12 @@
/**
* Sets UI and key derivation parameters
*
- * @param recoveryMetadata The UI and key derivation parameters
+ * @param keyChainProtectionParams The UI and key derivation parameters
* @return This builder.
*/
public Builder setKeyChainProtectionParams(
- @NonNull List<KeyChainProtectionParams> recoveryMetadata) {
- mInstance.mKeyChainProtectionParams = recoveryMetadata;
+ @NonNull List<KeyChainProtectionParams> keyChainProtectionParams) {
+ mInstance.mKeyChainProtectionParams = keyChainProtectionParams;
return this;
}
@@ -292,7 +292,7 @@
*/
@NonNull public KeyChainSnapshot build() {
Preconditions.checkCollectionElementsNotNull(mInstance.mKeyChainProtectionParams,
- "recoveryMetadata");
+ "keyChainProtectionParams");
Preconditions.checkCollectionElementsNotNull(mInstance.mEntryRecoveryData,
"entryRecoveryData");
Preconditions.checkNotNull(mInstance.mEncryptedRecoveryKeyBlob);
diff --git a/core/java/android/security/keystore/recovery/KeyDerivationParams.java b/core/java/android/security/keystore/recovery/KeyDerivationParams.java
index 8cb8e51..225b592 100644
--- a/core/java/android/security/keystore/recovery/KeyDerivationParams.java
+++ b/core/java/android/security/keystore/recovery/KeyDerivationParams.java
@@ -22,7 +22,6 @@
import android.os.Parcel;
import android.os.Parcelable;
-
import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
@@ -63,7 +62,7 @@
* salt + key_material_len + key_material, where salt_len and key_material_len are one-byte, and
* denote the number of bytes for salt and key_material, respectively.
*/
- public static KeyDerivationParams createSha256Params(@NonNull byte[] salt) {
+ public static @NonNull KeyDerivationParams createSha256Params(@NonNull byte[] salt) {
return new KeyDerivationParams(ALGORITHM_SHA256, salt);
}
@@ -76,7 +75,7 @@
* the parallelization parameter p is 1, the block size parameter r is 8, and the hashing output
* length is 32-byte.
*/
- public static KeyDerivationParams createScryptParams(
+ public static @NonNull KeyDerivationParams createScryptParams(
@NonNull byte[] salt, int memoryDifficulty) {
return new KeyDerivationParams(ALGORITHM_SCRYPT, salt, memoryDifficulty);
}
@@ -84,8 +83,7 @@
/**
* @hide
*/
- // TODO: Make private once legacy API is removed
- public KeyDerivationParams(@KeyDerivationAlgorithm int algorithm, @NonNull byte[] salt) {
+ private KeyDerivationParams(@KeyDerivationAlgorithm int algorithm, @NonNull byte[] salt) {
this(algorithm, salt, /*memoryDifficulty=*/ -1);
}
diff --git a/core/java/android/security/keystore/recovery/RecoveryCertPath.java b/core/java/android/security/keystore/recovery/RecoveryCertPath.java
index 1950947..f3604fe 100644
--- a/core/java/android/security/keystore/recovery/RecoveryCertPath.java
+++ b/core/java/android/security/keystore/recovery/RecoveryCertPath.java
@@ -45,7 +45,7 @@
* @param certPath The certificate path to be wrapped.
* @throws CertificateException if the given certificate path cannot be encoded properly.
*/
- public static RecoveryCertPath createRecoveryCertPath(@NonNull CertPath certPath)
+ public static @NonNull RecoveryCertPath createRecoveryCertPath(@NonNull CertPath certPath)
throws CertificateException {
// Perform the encoding here to avoid throwing exceptions in writeToParcel
try {
@@ -61,7 +61,7 @@
* @return the wrapped certificate path.
* @throws CertificateException if the wrapped certificate path cannot be decoded properly.
*/
- public CertPath getCertPath() throws CertificateException {
+ public @NonNull CertPath getCertPath() throws CertificateException {
// Perform the decoding here to avoid throwing exceptions in createFromParcel
return decodeCertPath(mEncodedCertPath);
}
diff --git a/core/java/android/security/keystore/recovery/RecoveryController.java b/core/java/android/security/keystore/recovery/RecoveryController.java
index 843b9da..ab52d32 100644
--- a/core/java/android/security/keystore/recovery/RecoveryController.java
+++ b/core/java/android/security/keystore/recovery/RecoveryController.java
@@ -159,7 +159,7 @@
* Gets a new instance of the class.
*/
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
- public static RecoveryController getInstance(Context context) {
+ @NonNull public static RecoveryController getInstance(@NonNull Context context) {
ILockSettings lockSettings =
ILockSettings.Stub.asInterface(ServiceManager.getService("lock_settings"));
return new RecoveryController(lockSettings, KeyStore.getInstance());
@@ -496,7 +496,7 @@
* screen is required to generate recoverable keys.
*/
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
- public Key generateKey(@NonNull String alias) throws InternalRecoveryServiceException,
+ public @NonNull Key generateKey(@NonNull String alias) throws InternalRecoveryServiceException,
LockScreenRequiredException {
try {
String grantAlias = mBinder.generateKey(alias);
@@ -527,7 +527,7 @@
*
*/
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
- public Key importKey(@NonNull String alias, byte[] keyBytes)
+ public @NonNull Key importKey(@NonNull String alias, @NonNull byte[] keyBytes)
throws InternalRecoveryServiceException, LockScreenRequiredException {
try {
String grantAlias = mBinder.importKey(alias, keyBytes);
@@ -575,7 +575,7 @@
/**
* Returns the key with the given {@code grantAlias}.
*/
- Key getKeyFromGrant(String grantAlias) throws UnrecoverableKeyException {
+ @NonNull Key getKeyFromGrant(@NonNull String grantAlias) throws UnrecoverableKeyException {
return AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(
mKeyStore,
grantAlias,
@@ -611,7 +611,7 @@
}
@RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE)
- public Map<String, X509Certificate> getRootCertificates() {
+ public @NonNull Map<String, X509Certificate> getRootCertificates() {
return TrustedRootCertificates.getRootCertificates();
}
diff --git a/core/java/android/security/keystore/recovery/RecoverySession.java b/core/java/android/security/keystore/recovery/RecoverySession.java
index cf8a9dd..0690bd5 100644
--- a/core/java/android/security/keystore/recovery/RecoverySession.java
+++ b/core/java/android/security/keystore/recovery/RecoverySession.java
@@ -234,7 +234,7 @@
* @throws InternalRecoveryServiceException if an error occurs internal to the recovery service.
*/
@RequiresPermission(Manifest.permission.RECOVER_KEYSTORE)
- public Map<String, Key> recoverKeyChainSnapshot(
+ @NonNull public Map<String, Key> recoverKeyChainSnapshot(
@NonNull byte[] recoveryKeyBlob,
@NonNull List<WrappedApplicationKey> applicationKeys
) throws SessionExpiredException, DecryptionFailedException, InternalRecoveryServiceException {
@@ -257,7 +257,7 @@
}
/** Given a map from alias to grant alias, returns a map from alias to a {@link Key} handle. */
- private Map<String, Key> getKeysFromGrants(Map<String, String> grantAliases)
+ private @NonNull Map<String, Key> getKeysFromGrants(@NonNull Map<String, String> grantAliases)
throws InternalRecoveryServiceException {
ArrayMap<String, Key> keysByAlias = new ArrayMap<>(grantAliases.size());
for (String alias : grantAliases.keySet()) {
diff --git a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java
index a65b40f..383af42 100644
--- a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java
+++ b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java
@@ -18,6 +18,7 @@
import static android.security.keystore.recovery.X509CertificateParsingUtils.decodeBase64Cert;
+import android.annotation.NonNull;
import android.util.ArrayMap;
import java.security.cert.CertificateException;
@@ -83,7 +84,7 @@
/**
* Returns all available root certificates, keyed by alias.
*/
- public static Map<String, X509Certificate> getRootCertificates() {
+ public static @NonNull Map<String, X509Certificate> getRootCertificates() {
return new ArrayMap(ALL_ROOT_CERTIFICATES);
}
@@ -93,7 +94,7 @@
* @param alias the alias of the certificate
* @return the certificate referenced by the alias, or null if such a certificate doesn't exist.
*/
- public static X509Certificate getRootCertificate(String alias) {
+ public static @NonNull X509Certificate getRootCertificate(String alias) {
return ALL_ROOT_CERTIFICATES.get(alias);
}
diff --git a/core/java/android/service/autofill/AutofillServiceHelper.java b/core/java/android/service/autofill/AutofillServiceHelper.java
index bbaebff..13fedba 100644
--- a/core/java/android/service/autofill/AutofillServiceHelper.java
+++ b/core/java/android/service/autofill/AutofillServiceHelper.java
@@ -26,7 +26,13 @@
static AutofillId[] assertValid(@Nullable AutofillId[] ids) {
Preconditions.checkArgument(ids != null && ids.length > 0, "must have at least one id");
- return Preconditions.checkArrayElementsNotNull(ids, "ids");
+ // Can't use Preconditions.checkArrayElementsNotNull() because it throws NPE instead of IAE
+ for (int i = 0; i < ids.length; ++i) {
+ if (ids[i] == null) {
+ throw new IllegalArgumentException("ids[" + i + "] must not be null");
+ }
+ }
+ return ids;
}
private AutofillServiceHelper() {
diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java
index ae59bfa..ce38ebb 100644
--- a/core/java/android/text/BoringLayout.java
+++ b/core/java/android/text/BoringLayout.java
@@ -347,14 +347,7 @@
TextLine line = TextLine.obtain();
line.set(paint, text, 0, textLength, Layout.DIR_LEFT_TO_RIGHT,
Layout.DIRS_ALL_LEFT_TO_RIGHT, false, null);
- if (text instanceof PrecomputedText) {
- PrecomputedText mt = (PrecomputedText) text;
- // Reaching here means there is only one paragraph.
- MeasuredParagraph mp = mt.getMeasuredParagraph(0);
- fm.width = (int) Math.ceil(mp.getWidth(0, mp.getTextLength()));
- } else {
- fm.width = (int) Math.ceil(line.metrics(fm));
- }
+ fm.width = (int) Math.ceil(line.metrics(fm));
TextLine.recycle(line);
return fm;
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 117a77d..fcb7d62 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -172,7 +172,12 @@
mComputed = null;
if (text instanceof PrecomputedText) {
+ // Here, no need to check line break strategy or hyphenation frequency since there is no
+ // line break concept here.
mComputed = (PrecomputedText) text;
+ if (!mComputed.getParams().getTextPaint().equalsForTextMeasurement(paint)) {
+ mComputed = null;
+ }
}
mCharsValid = hasReplacement || hasTabs || directions != Layout.DIRS_ALL_LEFT_TO_RIGHT;
diff --git a/core/java/android/text/method/LinkMovementMethod.java b/core/java/android/text/method/LinkMovementMethod.java
index 31ed549..f332358 100644
--- a/core/java/android/text/method/LinkMovementMethod.java
+++ b/core/java/android/text/method/LinkMovementMethod.java
@@ -16,6 +16,7 @@
package android.text.method;
+import android.os.Build;
import android.text.Layout;
import android.text.NoCopySpan;
import android.text.Selection;
@@ -35,6 +36,8 @@
private static final int UP = 2;
private static final int DOWN = 3;
+ private static final int HIDE_FLOATING_TOOLBAR_DELAY_MS = 200;
+
@Override
public boolean canSelectArbitrarily() {
return true;
@@ -65,7 +68,7 @@
return super.up(widget, buffer);
}
-
+
@Override
protected boolean down(TextView widget, Spannable buffer) {
if (action(DOWN, widget, buffer)) {
@@ -215,6 +218,12 @@
if (action == MotionEvent.ACTION_UP) {
links[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
+ if (widget.getContext().getApplicationInfo().targetSdkVersion
+ > Build.VERSION_CODES.O_MR1) {
+ // Selection change will reposition the toolbar. Hide it for a few ms for a
+ // smoother transition.
+ widget.hideFloatingToolbar(HIDE_FLOATING_TOOLBAR_DELAY_MS);
+ }
Selection.setSelection(buffer,
buffer.getSpanStart(links[0]),
buffer.getSpanEnd(links[0]));
diff --git a/core/java/android/util/DataUnit.java b/core/java/android/util/DataUnit.java
index ea4266e..cf045b8 100644
--- a/core/java/android/util/DataUnit.java
+++ b/core/java/android/util/DataUnit.java
@@ -29,6 +29,8 @@
* "kibibyte" as an IEC unit of 1024 bytes.
* <p>
* This design is mirrored after {@link TimeUnit} and {@link ChronoUnit}.
+ *
+ * @hide
*/
public enum DataUnit {
KILOBYTES { @Override public long toBytes(long v) { return v * 1_000; } },
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index f930f6e..7e54647 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -787,18 +787,26 @@
Surface viewRootSurface, long nextViewRootFrameNumber) {
}
- private void setParentSpaceRectangle(Rect position, long frameNumber) {
- ViewRootImpl viewRoot = getViewRootImpl();
-
+ private void applySurfaceTransforms(SurfaceControl surface, Rect position, long frameNumber) {
if (frameNumber > 0) {
- mRtTransaction.deferTransactionUntilSurface(mSurfaceControl, viewRoot.mSurface,
+ final ViewRootImpl viewRoot = getViewRootImpl();
+
+ mRtTransaction.deferTransactionUntilSurface(surface, viewRoot.mSurface,
frameNumber);
}
- mRtTransaction.setPosition(mSurfaceControl,position.left, position.top);
- mRtTransaction.setMatrix(mSurfaceControl,
+
+ mRtTransaction.setPosition(surface, position.left, position.top);
+ mRtTransaction.setMatrix(surface,
position.width() / (float) mSurfaceWidth,
0.0f, 0.0f,
position.height() / (float) mSurfaceHeight);
+ }
+
+ private void setParentSpaceRectangle(Rect position, long frameNumber) {
+ final ViewRootImpl viewRoot = getViewRootImpl();
+
+ applySurfaceTransforms(mSurfaceControl, position, frameNumber);
+ applySurfaceTransforms(mSurfaceControl.mBackgroundControl, position, frameNumber);
applyChildSurfaceTransaction_renderWorker(mRtTransaction, viewRoot.mSurface,
frameNumber);
@@ -1100,7 +1108,7 @@
};
class SurfaceControlWithBackground extends SurfaceControl {
- private SurfaceControl mBackgroundControl;
+ SurfaceControl mBackgroundControl;
private boolean mOpaque = true;
public boolean mVisible = false;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 18c3d76..6393127 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8536,22 +8536,25 @@
}
structure.setHint(info.getHintText());
}
- if ((info.getText() != null || info.getError() != null)) {
- structure.setText(info.getText(), info.getTextSelectionStart(),
- info.getTextSelectionEnd());
- if (forAutofill) {
- if (info.isEditable()) {
- structure.setDataIsSensitive(true);
+ CharSequence text = info.getText();
+ boolean hasText = text != null || info.getError() != null;
+ if (hasText) {
+ structure.setText(text, info.getTextSelectionStart(), info.getTextSelectionEnd());
+ }
+ if (forAutofill) {
+ if (info.isEditable()) {
+ structure.setDataIsSensitive(true);
+ if (hasText) {
structure.setAutofillType(AUTOFILL_TYPE_TEXT);
- final AutofillValue autofillValue = AutofillValue.forText(structure.getText());
- structure.setAutofillValue(autofillValue);
- if (info.isPassword()) {
- structure.setInputType(InputType.TYPE_CLASS_TEXT
- | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- }
- } else {
- structure.setDataIsSensitive(false);
+ structure.setAutofillValue(AutofillValue.forText(text));
}
+ int inputType = info.getInputType();
+ if (inputType == 0 && info.isPassword()) {
+ inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
+ }
+ structure.setInputType(inputType);
+ } else {
+ structure.setDataIsSensitive(false);
}
}
final int NCHILDREN = info.getChildCount();
@@ -14340,7 +14343,7 @@
}
/**
- * Return the width of the your view.
+ * Return the width of your view.
*
* @return The width of your view, in pixels.
*/
@@ -27592,6 +27595,15 @@
}
/**
+ * @return {@code true} if the default focus highlight is enabled, {@code false} otherwies.
+ * @hide
+ */
+ @TestApi
+ public static boolean isDefaultFocusHighlightEnabled() {
+ return sUseDefaultFocusHighlight;
+ }
+
+ /**
* Allows this view to handle {@link KeyEvent}s which weren't handled by normal dispatch. This
* occurs after the normal view hierarchy dispatch, but before the window callback. By default,
* this will dispatch into all the listeners registered via
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index 5bee87c..01fd090 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -274,6 +274,16 @@
public static final int STATE_DISABLED_BY_SERVICE = 4;
/**
+ * Same as {@link #STATE_UNKNOWN}, but used on
+ * {@link AutofillManagerClient#setSessionFinished(int)} when the session was finished because
+ * the URL bar changed on client mode
+ *
+ * @hide
+ */
+ public static final int STATE_UNKNOWN_COMPAT_MODE = 5;
+
+
+ /**
* Timeout in ms for calls to the field classification service.
* @hide
*/
@@ -1947,15 +1957,24 @@
* Marks the state of the session as finished.
*
* @param newState {@link #STATE_FINISHED} (because the autofill service returned a {@code null}
- * FillResponse), {@link #STATE_UNKNOWN} (because the session was removed), or
- * {@link #STATE_DISABLED_BY_SERVICE} (because the autofill service disabled further autofill
- * requests for the activity).
+ * FillResponse), {@link #STATE_UNKNOWN} (because the session was removed),
+ * {@link #STATE_UNKNOWN_COMPAT_MODE} (beucase the session was finished when the URL bar
+ * changed on compat mode), or {@link #STATE_DISABLED_BY_SERVICE} (because the autofill service
+ * disabled further autofill requests for the activity).
*/
private void setSessionFinished(int newState) {
synchronized (mLock) {
- if (sVerbose) Log.v(TAG, "setSessionFinished(): from " + mState + " to " + newState);
- resetSessionLocked(/* resetEnteredIds= */ false);
- mState = newState;
+ if (sVerbose) {
+ Log.v(TAG, "setSessionFinished(): from " + getStateAsStringLocked() + " to "
+ + getStateAsString(newState));
+ }
+ if (newState == STATE_UNKNOWN_COMPAT_MODE) {
+ resetSessionLocked(/* resetEnteredIds= */ true);
+ mState = STATE_UNKNOWN;
+ } else {
+ resetSessionLocked(/* resetEnteredIds= */ false);
+ mState = newState;
+ }
}
}
@@ -2107,19 +2126,26 @@
@GuardedBy("mLock")
private String getStateAsStringLocked() {
- switch (mState) {
+ return getStateAsString(mState);
+ }
+
+ @NonNull
+ private static String getStateAsString(int state) {
+ switch (state) {
case STATE_UNKNOWN:
- return "STATE_UNKNOWN";
+ return "UNKNOWN";
case STATE_ACTIVE:
- return "STATE_ACTIVE";
+ return "ACTIVE";
case STATE_FINISHED:
- return "STATE_FINISHED";
+ return "FINISHED";
case STATE_SHOWING_SAVE_UI:
- return "STATE_SHOWING_SAVE_UI";
+ return "SHOWING_SAVE_UI";
case STATE_DISABLED_BY_SERVICE:
- return "STATE_DISABLED_BY_SERVICE";
+ return "DISABLED_BY_SERVICE";
+ case STATE_UNKNOWN_COMPAT_MODE:
+ return "UNKNOWN_COMPAT_MODE";
default:
- return "INVALID:" + mState;
+ return "INVALID:" + state;
}
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 92285c7..3775835 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -289,6 +289,7 @@
boolean mShowSoftInputOnFocus = true;
private boolean mPreserveSelection;
private boolean mRestartActionModeOnNextRefresh;
+ private boolean mRequestingLinkActionMode;
private SelectionActionModeHelper mSelectionActionModeHelper;
@@ -2127,6 +2128,7 @@
return;
}
stopTextActionMode();
+ mRequestingLinkActionMode = true;
getSelectionActionModeHelper().startLinkActionModeAsync(start, end);
}
@@ -2212,7 +2214,9 @@
mTextActionMode = mTextView.startActionMode(actionModeCallback, ActionMode.TYPE_FLOATING);
final boolean selectionStarted = mTextActionMode != null;
- if (selectionStarted && !mTextView.isTextSelectable() && mShowSoftInputOnFocus) {
+ if (selectionStarted
+ && mTextView.isTextEditable() && !mTextView.isTextSelectable()
+ && mShowSoftInputOnFocus) {
// Show the IME to be able to replace text, except when selecting non editable text.
final InputMethodManager imm = InputMethodManager.peekInstance();
if (imm != null) {
@@ -2322,10 +2326,14 @@
if (!selectAllGotFocus && text.length() > 0) {
// Move cursor
final int offset = mTextView.getOffsetForPosition(event.getX(), event.getY());
- Selection.setSelection((Spannable) text, offset);
- if (mSpellChecker != null) {
- // When the cursor moves, the word that was typed may need spell check
- mSpellChecker.onSelectionChanged();
+
+ final boolean shouldInsertCursor = !mRequestingLinkActionMode;
+ if (shouldInsertCursor) {
+ Selection.setSelection((Spannable) text, offset);
+ if (mSpellChecker != null) {
+ // When the cursor moves, the word that was typed may need spell check
+ mSpellChecker.onSelectionChanged();
+ }
}
if (!extractedTextModeWillBeStarted()) {
@@ -2335,16 +2343,17 @@
mTextView.removeCallbacks(mInsertionActionModeRunnable);
}
- mShowSuggestionRunnable = new Runnable() {
- public void run() {
- replace();
- }
- };
+ mShowSuggestionRunnable = this::replace;
+
// removeCallbacks is performed on every touch
mTextView.postDelayed(mShowSuggestionRunnable,
ViewConfiguration.getDoubleTapTimeout());
} else if (hasInsertionController()) {
- getInsertionController().show();
+ if (shouldInsertCursor) {
+ getInsertionController().show();
+ } else {
+ getInsertionController().hide();
+ }
}
}
}
@@ -4170,6 +4179,7 @@
}
mAssistClickHandlers.clear();
+ mRequestingLinkActionMode = false;
}
@Override
diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java
index 6e855ba..05204d0 100644
--- a/core/java/android/widget/SelectionActionModeHelper.java
+++ b/core/java/android/widget/SelectionActionModeHelper.java
@@ -71,7 +71,7 @@
private final TextClassificationHelper mTextClassificationHelper;
private final TextClassificationConstants mTextClassificationSettings;
- private TextClassification mTextClassification;
+ @Nullable private TextClassification mTextClassification;
private AsyncTask mTextClassificationAsyncTask;
private final SelectionTracker mSelectionTracker;
@@ -124,7 +124,8 @@
: mTextClassificationHelper::classifyText,
mSmartSelectSprite != null
? this::startSelectionActionModeWithSmartSelectAnimation
- : this::startSelectionActionMode)
+ : this::startSelectionActionMode,
+ mTextClassificationHelper::getOriginalSelection)
.execute();
}
}
@@ -143,7 +144,8 @@
mTextView,
mTextClassificationHelper.getTimeoutDuration(),
mTextClassificationHelper::classifyText,
- this::startLinkActionMode)
+ this::startLinkActionMode,
+ mTextClassificationHelper::getOriginalSelection)
.execute();
}
}
@@ -158,7 +160,8 @@
mTextView,
mTextClassificationHelper.getTimeoutDuration(),
mTextClassificationHelper::classifyText,
- this::invalidateActionMode)
+ this::invalidateActionMode,
+ mTextClassificationHelper::getOriginalSelection)
.execute();
}
}
@@ -822,6 +825,7 @@
private final int mTimeOutDuration;
private final Supplier<SelectionResult> mSelectionResultSupplier;
private final Consumer<SelectionResult> mSelectionResultCallback;
+ private final Supplier<SelectionResult> mTimeOutResultSupplier;
private final TextView mTextView;
private final String mOriginalText;
@@ -830,16 +834,19 @@
* @param timeOut time in milliseconds to timeout the query if it has not completed
* @param selectionResultSupplier fetches the selection results. Runs on a background thread
* @param selectionResultCallback receives the selection results. Runs on the UiThread
+ * @param timeOutResultSupplier default result if the task times out
*/
TextClassificationAsyncTask(
@NonNull TextView textView, int timeOut,
@NonNull Supplier<SelectionResult> selectionResultSupplier,
- @NonNull Consumer<SelectionResult> selectionResultCallback) {
+ @NonNull Consumer<SelectionResult> selectionResultCallback,
+ @NonNull Supplier<SelectionResult> timeOutResultSupplier) {
super(textView != null ? textView.getHandler() : null);
mTextView = Preconditions.checkNotNull(textView);
mTimeOutDuration = timeOut;
mSelectionResultSupplier = Preconditions.checkNotNull(selectionResultSupplier);
mSelectionResultCallback = Preconditions.checkNotNull(selectionResultCallback);
+ mTimeOutResultSupplier = Preconditions.checkNotNull(timeOutResultSupplier);
// Make a copy of the original text.
mOriginalText = getText(mTextView).toString();
}
@@ -863,7 +870,7 @@
private void onTimeOut() {
if (getStatus() == Status.RUNNING) {
- onPostExecute(null);
+ onPostExecute(mTimeOutResultSupplier.get());
}
cancel(true);
}
@@ -963,6 +970,10 @@
return performClassification(selection);
}
+ public SelectionResult getOriginalSelection() {
+ return new SelectionResult(mSelectionStart, mSelectionEnd, null, null);
+ }
+
/**
* Maximum time (in milliseconds) to wait for a textclassifier result before timing out.
*/
@@ -1025,14 +1036,14 @@
private static final class SelectionResult {
private final int mStart;
private final int mEnd;
- private final TextClassification mClassification;
+ @Nullable private final TextClassification mClassification;
@Nullable private final TextSelection mSelection;
SelectionResult(int start, int end,
- TextClassification classification, @Nullable TextSelection selection) {
+ @Nullable TextClassification classification, @Nullable TextSelection selection) {
mStart = start;
mEnd = end;
- mClassification = Preconditions.checkNotNull(classification);
+ mClassification = classification;
mSelection = selection;
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index c366a91..7b1acb1 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -644,8 +644,12 @@
*/
private Layout mSavedMarqueeModeLayout;
+ // Do not update following mText/mSpannable/mPrecomputed except for setTextInternal()
@ViewDebug.ExportedProperty(category = "text")
- private CharSequence mText;
+ private @Nullable CharSequence mText;
+ private @Nullable Spannable mSpannable;
+ private @Nullable PrecomputedText mPrecomputed;
+
private CharSequence mTransformed;
private BufferType mBufferType = BufferType.NORMAL;
@@ -874,7 +878,7 @@
setImportantForAutofill(IMPORTANT_FOR_AUTOFILL_YES);
}
- mText = "";
+ setTextInternal("");
final Resources res = getResources();
final CompatibilityInfo compat = res.getCompatibilityInfo();
@@ -1615,6 +1619,13 @@
}
}
+ // Update mText and mPrecomputed
+ private void setTextInternal(@Nullable CharSequence text) {
+ mText = text;
+ mSpannable = (text instanceof Spannable) ? (Spannable) text : null;
+ mPrecomputed = (text instanceof PrecomputedText) ? (PrecomputedText) text : null;
+ }
+
/**
* Specify whether this widget should automatically scale the text to try to perfectly fit
* within the layout bounds by using the default auto-size configuration.
@@ -1973,9 +1984,9 @@
}
}
}
- } else if (mText instanceof Spannable) {
+ } else if (mSpannable != null) {
// Reset the selection.
- Selection.setSelection((Spannable) mText, getSelectionEnd());
+ Selection.setSelection(mSpannable, getSelectionEnd());
}
}
}
@@ -2359,7 +2370,7 @@
if (mMovement != movement) {
mMovement = movement;
- if (movement != null && !(mText instanceof Spannable)) {
+ if (movement != null && mSpannable == null) {
setText(mText);
}
@@ -2409,8 +2420,8 @@
return;
}
if (mTransformation != null) {
- if (mText instanceof Spannable) {
- ((Spannable) mText).removeSpan(mTransformation);
+ if (mSpannable != null) {
+ mSpannable.removeSpan(mTransformation);
}
}
@@ -5254,7 +5265,7 @@
((Editable) mText).append(text, start, end);
if (mAutoLinkMask != 0) {
- boolean linksWereAdded = Linkify.addLinks((Spannable) mText, mAutoLinkMask);
+ boolean linksWereAdded = Linkify.addLinks(mSpannable, mAutoLinkMask);
// Do not change the movement method for text that support text selection as it
// would prevent an arbitrary cursor displacement.
if (linksWereAdded && mLinksClickable && !textCanBeSelected()) {
@@ -5413,7 +5424,7 @@
}
if (ss.selStart >= 0 && ss.selEnd >= 0) {
- if (mText instanceof Spannable) {
+ if (mSpannable != null) {
int len = mText.length();
if (ss.selStart > len || ss.selEnd > len) {
@@ -5426,7 +5437,7 @@
Log.e(LOG_TAG, "Saved cursor position " + ss.selStart + "/" + ss.selEnd
+ " out of range for " + restored + "text " + mText);
} else {
- Selection.setSelection((Spannable) mText, ss.selStart, ss.selEnd);
+ Selection.setSelection(mSpannable, ss.selStart, ss.selEnd);
if (ss.frozenWithFocus) {
createEditorIfNeeded();
@@ -5688,7 +5699,7 @@
* movement method, because setMovementMethod() may call
* setText() again to try to upgrade the buffer type.
*/
- mText = text;
+ setTextInternal(text);
// Do not change the movement method for text that support text selection as it
// would prevent an arbitrary cursor displacement.
@@ -5699,7 +5710,7 @@
}
mBufferType = type;
- mText = text;
+ setTextInternal(text);
if (mTransformation == null) {
mTransformed = text;
@@ -5825,8 +5836,8 @@
setText(text, type);
if (start >= 0 || end >= 0) {
- if (mText instanceof Spannable) {
- Selection.setSelection((Spannable) mText,
+ if (mSpannable != null) {
+ Selection.setSelection(mSpannable,
Math.max(0, Math.min(start, len)),
Math.max(0, Math.min(end, len)));
}
@@ -6020,7 +6031,7 @@
}
if (!isSuggestionsEnabled()) {
- mText = removeSuggestionSpans(mText);
+ setTextInternal(removeSuggestionSpans(mText));
}
InputMethodManager imm = InputMethodManager.peekInstance();
@@ -6948,8 +6959,7 @@
public boolean hasOverlappingRendering() {
// horizontal fading edge causes SaveLayerAlpha, which doesn't support alpha modulation
return ((getBackground() != null && getBackground().getCurrent() != null)
- || mText instanceof Spannable || hasSelection()
- || isHorizontalFadingEdgeEnabled());
+ || mSpannable != null || hasSelection() || isHorizontalFadingEdgeEnabled());
}
/**
@@ -7399,11 +7409,11 @@
@Override
public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) {
- if (mText instanceof Spannable && mLinksClickable) {
+ if (mSpannable != null && mLinksClickable) {
final float x = event.getX(pointerIndex);
final float y = event.getY(pointerIndex);
final int offset = getOffsetForPosition(x, y);
- final ClickableSpan[] clickables = ((Spannable) mText).getSpans(offset, offset,
+ final ClickableSpan[] clickables = mSpannable.getSpans(offset, offset,
ClickableSpan.class);
if (clickables.length > 0) {
return PointerIcon.getSystemIcon(mContext, PointerIcon.TYPE_HAND);
@@ -7496,10 +7506,10 @@
} else if (which == KEY_DOWN_HANDLED_BY_MOVEMENT_METHOD) {
// mMovement is not null from doKeyDown
- mMovement.onKeyUp(this, (Spannable) mText, keyCode, up);
+ mMovement.onKeyUp(this, mSpannable, keyCode, up);
while (--repeatCount > 0) {
- mMovement.onKeyDown(this, (Spannable) mText, keyCode, down);
- mMovement.onKeyUp(this, (Spannable) mText, keyCode, up);
+ mMovement.onKeyDown(this, mSpannable, keyCode, down);
+ mMovement.onKeyUp(this, mSpannable, keyCode, up);
}
}
@@ -7694,8 +7704,7 @@
boolean doDown = true;
if (otherEvent != null) {
try {
- boolean handled = mMovement.onKeyOther(this, (Spannable) mText,
- otherEvent);
+ boolean handled = mMovement.onKeyOther(this, mSpannable, otherEvent);
doDown = false;
if (handled) {
return KEY_EVENT_HANDLED;
@@ -7706,7 +7715,7 @@
}
}
if (doDown) {
- if (mMovement.onKeyDown(this, (Spannable) mText, keyCode, event)) {
+ if (mMovement.onKeyDown(this, mSpannable, keyCode, event)) {
if (event.getRepeatCount() == 0 && !KeyEvent.isModifierKey(keyCode)) {
mPreventDefaultMovement = true;
}
@@ -7848,7 +7857,7 @@
}
if (mMovement != null && mLayout != null) {
- if (mMovement.onKeyUp(this, (Spannable) mText, keyCode, event)) {
+ if (mMovement.onKeyUp(this, mSpannable, keyCode, event)) {
return true;
}
}
@@ -8314,13 +8323,23 @@
}
/**
+ * Returns true if DynamicLayout is required
+ *
+ * @hide
+ */
+ @VisibleForTesting
+ public boolean useDynamicLayout() {
+ return isTextSelectable() || (mSpannable != null && mPrecomputed == null);
+ }
+
+ /**
* @hide
*/
protected Layout makeSingleLayout(int wantWidth, BoringLayout.Metrics boring, int ellipsisWidth,
Layout.Alignment alignment, boolean shouldEllipsize, TruncateAt effectiveEllipsize,
boolean useSaved) {
Layout result = null;
- if (mText instanceof Spannable) {
+ if (useDynamicLayout()) {
final DynamicLayout.Builder builder = DynamicLayout.Builder.obtain(mText, mTextPaint,
wantWidth)
.setDisplayText(mTransformed)
@@ -9262,7 +9281,7 @@
}
if (newStart != start) {
- Selection.setSelection((Spannable) mText, newStart);
+ Selection.setSelection(mSpannable, newStart);
return true;
}
@@ -9999,9 +10018,8 @@
if (mEditor != null) mEditor.onFocusChanged(focused, direction);
if (focused) {
- if (mText instanceof Spannable) {
- Spannable sp = (Spannable) mText;
- MetaKeyKeyListener.resetMetaState(sp);
+ if (mSpannable != null) {
+ MetaKeyKeyListener.resetMetaState(mSpannable);
}
}
@@ -10039,7 +10057,7 @@
*/
public void clearComposingText() {
if (mText instanceof Spannable) {
- BaseInputConnection.removeComposingSpans((Spannable) mText);
+ BaseInputConnection.removeComposingSpans(mSpannable);
}
}
@@ -10095,7 +10113,7 @@
boolean handled = false;
if (mMovement != null) {
- handled |= mMovement.onTouchEvent(this, (Spannable) mText, event);
+ handled |= mMovement.onTouchEvent(this, mSpannable, event);
}
final boolean textIsSelectable = isTextSelectable();
@@ -10103,7 +10121,7 @@
// The LinkMovementMethod which should handle taps on links has not been installed
// on non editable text that support text selection.
// We reproduce its behavior here to open links for these.
- ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(),
+ ClickableSpan[] links = mSpannable.getSpans(getSelectionStart(),
getSelectionEnd(), ClickableSpan.class);
if (links.length > 0) {
@@ -10138,7 +10156,7 @@
public boolean onGenericMotionEvent(MotionEvent event) {
if (mMovement != null && mText instanceof Spannable && mLayout != null) {
try {
- if (mMovement.onGenericMotionEvent(this, (Spannable) mText, event)) {
+ if (mMovement.onGenericMotionEvent(this, mSpannable, event)) {
return true;
}
} catch (AbstractMethodError ex) {
@@ -10199,8 +10217,8 @@
@Override
public boolean onTrackballEvent(MotionEvent event) {
- if (mMovement != null && mText instanceof Spannable && mLayout != null) {
- if (mMovement.onTrackballEvent(this, (Spannable) mText, event)) {
+ if (mMovement != null && mSpannable != null && mLayout != null) {
+ if (mMovement.onTrackballEvent(this, mSpannable, event)) {
return true;
}
}
@@ -11121,7 +11139,7 @@
if (mText != null) {
int updatedTextLength = mText.length();
if (updatedTextLength > 0) {
- Selection.setSelection((Spannable) mText, updatedTextLength);
+ Selection.setSelection(mSpannable, updatedTextLength);
}
}
} return true;
@@ -11593,6 +11611,13 @@
}
}
+ /** @hide */
+ public void hideFloatingToolbar(int durationMs) {
+ if (mEditor != null) {
+ mEditor.hideFloatingToolbar(durationMs);
+ }
+ }
+
boolean canUndo() {
return mEditor != null && mEditor.canUndo();
}
@@ -11687,10 +11712,10 @@
boolean selectAllText() {
if (mEditor != null) {
// Hide the toolbar before changing the selection to avoid flickering.
- mEditor.hideFloatingToolbar(FLOATING_TOOLBAR_SELECT_ALL_REFRESH_DELAY);
+ hideFloatingToolbar(FLOATING_TOOLBAR_SELECT_ALL_REFRESH_DELAY);
}
final int length = mText.length();
- Selection.setSelection((Spannable) mText, 0, length);
+ Selection.setSelection(mSpannable, 0, length);
return length > 0;
}
@@ -11718,7 +11743,7 @@
}
if (paste != null) {
if (!didFirst) {
- Selection.setSelection((Spannable) mText, max);
+ Selection.setSelection(mSpannable, max);
((Editable) mText).replace(min, max, paste);
didFirst = true;
} else {
@@ -11740,7 +11765,7 @@
selectedText = TextUtils.trimToParcelableSize(selectedText);
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, selectedText);
getContext().startActivity(Intent.createChooser(sharingIntent, null));
- Selection.setSelection((Spannable) mText, getSelectionEnd());
+ Selection.setSelection(mSpannable, getSelectionEnd());
}
}
@@ -11815,7 +11840,7 @@
case DragEvent.ACTION_DRAG_LOCATION:
if (mText instanceof Spannable) {
final int offset = getOffsetForPosition(event.getX(), event.getY());
- Selection.setSelection((Spannable) mText, offset);
+ Selection.setSelection(mSpannable, offset);
}
return true;
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 28a7c12..cbd3ad5 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -53,10 +53,21 @@
public static final int DISABLE_VERIFIER = 1 << 9;
/** Only use oat files located in /system. Otherwise use dex/jar/apk . */
public static final int ONLY_USE_SYSTEM_OAT_FILES = 1 << 10;
- /** Do enfore hidden API access restrictions. */
- public static final int ENABLE_HIDDEN_API_CHECKS = 1 << 11;
/** Force generation of native debugging information for backtraces. */
- public static final int DEBUG_GENERATE_MINI_DEBUG_INFO = 1 << 12;
+ public static final int DEBUG_GENERATE_MINI_DEBUG_INFO = 1 << 11;
+ /**
+ * Hidden API access restrictions. This is a mask for bits representing the API enforcement
+ * policy, defined by {@code @ApplicationInfo.HiddenApiEnforcementPolicy}.
+ */
+ public static final int API_ENFORCEMENT_POLICY_MASK = (1 << 12) | (1 << 13);
+ /**
+ * Bit shift for use with {@link #API_ENFORCEMENT_POLICY_MASK}.
+ *
+ * (flags & API_ENFORCEMENT_POLICY_MASK) >> API_ENFORCEMENT_POLICY_SHIFT gives
+ * @ApplicationInfo.ApiEnforcementPolicy values.
+ */
+ public static final int API_ENFORCEMENT_POLICY_SHIFT =
+ Integer.numberOfTrailingZeros(API_ENFORCEMENT_POLICY_MASK);
/** No external storage should be mounted. */
public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE;
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 66035f4..9467ecc 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -652,7 +652,7 @@
String args[] = {
"--setuid=1000",
"--setgid=1000",
- "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1032,1065,3001,3002,3003,3006,3007,3009,3010",
+ "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1024,1032,1065,3001,3002,3003,3006,3007,3009,3010",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl
index bff34ca..59b14f1 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -67,13 +67,11 @@
String getKey(String alias);
void removeKey(String alias);
void setSnapshotCreatedPendingIntent(in PendingIntent intent);
- Map getRecoverySnapshotVersions();
void setServerParams(in byte[] serverParams);
void setRecoveryStatus(in String alias, int status);
Map getRecoveryStatus();
void setRecoverySecretTypes(in int[] secretTypes);
int[] getRecoverySecretTypes();
- int[] getPendingRecoverySecretTypes();
byte[] startRecoverySession(in String sessionId,
in byte[] verifierPublicKey, in byte[] vaultParams, in byte[] vaultChallenge,
in List<KeyChainProtectionParams> secrets);
diff --git a/core/java/com/android/server/NetworkManagementSocketTagger.java b/core/java/com/android/server/NetworkManagementSocketTagger.java
index 03f2bc1..2959667 100644
--- a/core/java/com/android/server/NetworkManagementSocketTagger.java
+++ b/core/java/com/android/server/NetworkManagementSocketTagger.java
@@ -67,6 +67,10 @@
return old;
}
+ public static int getThreadSocketStatsUid() {
+ return threadSocketTags.get().statsUid;
+ }
+
@Override
public void tag(FileDescriptor fd) throws SocketException {
final SocketTags options = threadSocketTags.get();
diff --git a/core/proto/README.md b/core/proto/README.md
index d2b89a5..78809fa 100644
--- a/core/proto/README.md
+++ b/core/proto/README.md
@@ -8,7 +8,7 @@
1. If the proto describes the top level output of dumpsys, it should contain
`Dump`. This makes it easy to understand that the proto is the dumpsys output
of a certain service, not the data structure of that service, e.g.
- `WindowManagerServiceDumpProto` vs `WindowManagerServiceDumpProto`.
+ `WindowManagerServiceDumpProto` vs `WindowManagerServiceProto`.
* Inner messages whose containing messages have the `Proto` suffix do not
need to have a `Proto` suffix. E.g:
diff --git a/core/proto/android/providers/settings.proto b/core/proto/android/providers/settings.proto
index 89665db..7f8bed5 100644
--- a/core/proto/android/providers/settings.proto
+++ b/core/proto/android/providers/settings.proto
@@ -20,6 +20,8 @@
option java_multiple_files = true;
option java_outer_classname = "SettingsServiceProto";
+import "frameworks/base/core/proto/android/providers/settings/common.proto";
+import "frameworks/base/core/proto/android/providers/settings/global.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";
message SettingsServiceDumpProto {
@@ -47,470 +49,6 @@
// Note: it's a conscious decision to add each setting as a separate field. This
// allows annotating each setting with its own privacy tag.
-message GlobalSettingsProto {
- option (android.msg_privacy).dest = DEST_EXPLICIT;
-
- repeated SettingsOperationProto historical_operations = 1;
-
- optional SettingProto add_users_when_locked = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_accessibility_global_gesture_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto airplane_mode_on = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto theater_mode_on = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // A comma-separated list of radios that need to be disabled when airplane
- // mode is on. This overrides wifi_on and bluetooth_on if wifi and bluetooth
- // are included in the comma-separated list.
- optional SettingProto airplane_mode_radios = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto airplane_mode_toggleable_radios = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto bluetooth_class_of_device = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto bluetooth_disabled_profiles = 9;
- optional SettingProto bluetooth_interoperability_list = 10;
- optional SettingProto wifi_sleep_policy = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto auto_time = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto auto_time_zone = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto car_dock_sound = 14;
- optional SettingProto car_undock_sound = 15;
- optional SettingProto desk_dock_sound = 16;
- optional SettingProto desk_undock_sound = 17;
- optional SettingProto dock_sounds_enabled = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dock_sounds_enabled_when_accessibility = 19 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto lock_sound = 20;
- optional SettingProto unlock_sound = 21;
- optional SettingProto trusted_sound = 22;
- optional SettingProto low_battery_sound = 23;
- optional SettingProto power_sounds_enabled = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wireless_charging_started_sound = 25;
- optional SettingProto charging_sounds_enabled = 26 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto stay_on_while_plugged_in = 27 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto bugreport_in_power_menu = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto adb_enabled = 29 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Whether views are allowed to save their attribute data.
- optional SettingProto debug_view_attributes = 30 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto assisted_gps_enabled = 31 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto bluetooth_on = 32 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto cdma_cell_broadcast_sms = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto cdma_roaming_mode = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto cdma_subscription_mode = 35 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto data_activity_timeout_mobile = 36 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto data_activity_timeout_wifi = 37 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto data_roaming = 38 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto mdc_initial_max_retry = 39 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto force_allow_on_external = 40 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto euicc_provisioned = 41 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto development_force_resizable_activities = 42 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto development_enable_freeform_windows_support = 43 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto development_settings_enabled = 44 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto device_provisioned = 45 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto device_provisioning_mobile_data_enabled = 46 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto display_size_forced = 47 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto display_scaling_force = 48 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto download_max_bytes_over_mobile = 49 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto download_recommended_max_bytes_over_mobile = 50 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto hdmi_control_enabled = 51 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto hdmi_system_audio_control_enabled = 52 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto hdmi_control_auto_wakeup_enabled = 53 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto hdmi_control_auto_device_off_enabled = 54 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // If true, out-of-the-box execution for priv apps is enabled.
- optional SettingProto priv_app_oob_enabled = 55 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto location_background_throttle_interval_ms = 56 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto location_background_throttle_proximity_alert_interval_ms = 57 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Packages that are whitelisted for background throttling (throttling will
- // not be applied).
- optional SettingProto location_background_throttle_package_whitelist = 58 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_scan_background_throttle_interval_ms = 59 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_scan_background_throttle_package_whitelist = 60 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto mhl_input_switching_enabled = 61 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto mhl_power_charge_enabled = 62 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto mobile_data = 63 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto mobile_data_always_on = 64 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto connectivity_metrics_buffer_size = 65 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_enabled = 66 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_poll_interval = 67 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_time_cache_max_age = 68 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_global_alert_bytes = 69 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_sample_enabled = 70 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_augment_enabled = 71 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_dev_bucket_duration = 72 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_dev_persist_bytes = 73 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_dev_rotate_age = 74 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_dev_delete_age = 75 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_bucket_duration = 76 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_persist_bytes = 77 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_rotate_age = 78 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_delete_age = 79 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_tag_bucket_duration = 80 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_tag_persist_bytes = 81 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_tag_rotate_age = 82 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto netstats_uid_tag_delete_age = 83 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // User preference for which network(s) should be used.
- optional SettingProto network_preference = 84;
- optional SettingProto network_scorer_app = 85 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto night_display_forced_auto_mode_available = 86 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto nitz_update_diff = 87 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto nitz_update_spacing = 88 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ntp_server = 89;
- optional SettingProto ntp_timeout = 90 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto storage_benchmark_interval = 91 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dns_resolver_sample_validity_seconds = 92 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dns_resolver_success_threshold_percent = 93 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dns_resolver_min_samples = 94 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dns_resolver_max_samples = 95 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Whether to disable the automatic scheduling of system updates.
- optional SettingProto ota_disable_automatic_update = 96 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto package_verifier_enable = 97 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto package_verifier_timeout = 98 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto package_verifier_default_response = 99;
- optional SettingProto package_verifier_setting_visible = 100 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto package_verifier_include_adb = 101 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto fstrim_mandatory_interval = 102 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_poll_interval_ms = 103 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_long_poll_interval_ms = 104 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_error_poll_interval_ms = 105 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_trigger_packet_count = 106 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_error_poll_count = 107 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pdp_watchdog_max_pdp_reset_fail_count = 108 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto setup_prepaid_data_service_url = 109;
- optional SettingProto setup_prepaid_detection_target_url = 110;
- optional SettingProto setup_prepaid_detection_redir_host = 111;
- optional SettingProto sms_outgoing_check_interval_ms = 112 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sms_outgoing_check_max_count = 113 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Used to disable SMS short code confirmation. Defaults to true.
- optional SettingProto sms_short_code_confirmation = 114 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sms_short_code_rule = 115 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto tcp_default_init_rwnd = 116 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto tether_supported = 117 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto tether_dun_required = 118 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto tether_dun_apn = 119;
- optional SettingProto tether_offload_disabled = 120 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // List of carrier app certificate mapped to carrier app package id which are whitelisted to
- // prompt the user for install when a SIM card with matching UICC carrier privilege rules is
- // inserted.
- optional SettingProto carrier_app_whitelist = 121 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto carrier_app_names = 122 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto usb_mass_storage_enabled = 123 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto use_google_mail = 124 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto webview_data_reduction_proxy_key = 125;
- optional SettingProto webview_fallback_logic_enabled = 126 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Name of the package used as WebView provider.
- optional SettingProto webview_provider = 127 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto webview_multiprocess = 128 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_switch_notification_daily_limit = 129 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_switch_notification_rate_limit_millis = 130 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_avoid_bad_wifi = 131 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_metered_multipath_preference = 132 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_watchlist_last_report_time = 133 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_badging_thresholds = 134 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_display_on = 135 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_display_certification_on = 136 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_display_wps_config = 137 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_networks_available_notification_on = 138 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_carrier_networks_available_notification_on = 139 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wimax_networks_available_notification_on = 140 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_networks_available_repeat_delay = 141 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_country_code = 142;
- optional SettingProto wifi_framework_scan_interval_ms = 143 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_idle_ms = 144 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_num_open_networks_kept = 145 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_on = 146 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_scan_always_available = 147 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto soft_ap_timeout_enabled = 148 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_wakeup_enabled = 149 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_scoring_ui_enabled = 150 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto speed_label_cache_eviction_age_millis = 151 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto recommended_network_evaluator_cache_expiry_ms = 152 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_recommendations_enabled = 153 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_recommendations_package = 154 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto use_open_wifi_package = 155 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_recommendation_request_timeout_ms = 156 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_always_available = 157 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_low_power_window_ms = 158 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_balanced_window_ms = 159 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_low_latency_window_ms = 160 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_low_power_interval_ms = 161 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_balanced_interval_ms = 162 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_low_latency_interval_ms = 163 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ble_scan_background_mode = 389 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_saved_state = 164 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_supplicant_scan_interval_ms = 165 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_enhanced_auto_join = 166 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_network_show_rssi = 167 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_scan_interval_when_p2p_connected_ms = 168 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_watchdog_on = 169 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_watchdog_poor_network_test_enabled = 170 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_suspend_optimizations_enabled = 171 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_verbose_logging_enabled = 172 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_connected_mac_randomization_enabled = 173 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_max_dhcp_retry_count = 174 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_mobile_data_transition_wakelock_timeout_ms = 175 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_device_owner_configs_lockdown = 176 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_frequency_band = 177 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_p2p_device_name = 178;
- optional SettingProto wifi_reenable_delay_ms = 179 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_ephemeral_out_of_range_timeout_ms = 180 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto data_stall_alarm_non_aggressive_delay_in_ms = 181 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto data_stall_alarm_aggressive_delay_in_ms = 182 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto provisioning_apn_alarm_delay_in_ms = 183 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto gprs_register_check_period_ms = 184 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wtf_is_fatal = 185 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Ringer mode. A change in this value will not reflect as a change in the
- // ringer mode.
- optional SettingProto mode_ringer = 186 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Overlay display devices setting.
- // The value is a specially formatted string that describes the size and
- // density of simulated secondary devices.
- // Format: {width}x{height}/dpi;...
- optional SettingProto overlay_display_devices = 187 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto battery_discharge_duration_threshold = 188 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto battery_discharge_threshold = 189 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto send_action_app_error = 190 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dropbox_age_seconds = 191 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dropbox_max_files = 192 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dropbox_quota_kb = 193 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dropbox_quota_percent = 194 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dropbox_reserve_percent = 195 [ (android.privacy).dest = DEST_AUTOMATIC ];
- repeated SettingProto dropbox_settings = 196;
- repeated SettingProto error_logcat_lines = 197;
- optional SettingProto sys_free_storage_log_interval = 198 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto disk_free_change_reporting_threshold = 199 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sys_storage_threshold_percentage = 200 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sys_storage_threshold_max_bytes = 201 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sys_storage_full_threshold_bytes = 202 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sys_storage_cache_percentage = 203 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sys_storage_cache_max_bytes = 204 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sync_max_retry_delay_in_seconds = 205 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto connectivity_change_delay = 206 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto connectivity_sampling_interval_in_seconds = 207 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto pac_change_delay = 208 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto captive_portal_mode = 209 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto captive_portal_detection_enabled = 210 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto captive_portal_server = 211;
- optional SettingProto captive_portal_https_url = 212;
- optional SettingProto captive_portal_http_url = 213;
- optional SettingProto captive_portal_fallback_url = 214;
- optional SettingProto captive_portal_other_fallback_urls = 215;
- optional SettingProto captive_portal_use_https = 216 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto captive_portal_user_agent = 217;
- optional SettingProto nsd_on = 218 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Let user pick default install location.
- optional SettingProto set_install_location = 219 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto default_install_location = 220 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto inet_condition_debounce_up_delay = 221 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto inet_condition_debounce_down_delay = 222 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto read_external_storage_enforced_default = 223 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto http_proxy = 224;
- optional SettingProto global_http_proxy_host = 225;
- optional SettingProto global_http_proxy_port = 226;
- optional SettingProto global_http_proxy_exclusion_list = 227;
- optional SettingProto global_http_proxy_pac = 228;
- // Enables the UI setting to allow the user to specify the global HTTP proxy
- // and associated exclusion list.
- optional SettingProto set_global_http_proxy = 229 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto default_dns_server = 230;
- // The requested Private DNS mode and an accompanying specifier.
- optional SettingProto private_dns_mode = 231;
- optional SettingProto private_dns_specifier = 232;
- repeated SettingProto bluetooth_headset_priorities = 233;
- repeated SettingProto bluetooth_a2dp_sink_priorities = 234;
- repeated SettingProto bluetooth_a2dp_src_priorities = 235;
- repeated SettingProto bluetooth_a2dp_supports_optional_codecs = 236;
- repeated SettingProto bluetooth_a2dp_optional_codecs_enabled = 237;
- repeated SettingProto bluetooth_input_device_priorities = 238;
- repeated SettingProto bluetooth_map_priorities = 239;
- repeated SettingProto bluetooth_map_client_priorities = 240;
- repeated SettingProto bluetooth_pbap_client_priorities = 241;
- repeated SettingProto bluetooth_sap_priorities = 242;
- repeated SettingProto bluetooth_pan_priorities = 243;
- repeated SettingProto bluetooth_hearing_aid_priorities = 244;
- // These are key=value lists, separated by commas.
- optional SettingProto activity_manager_constants = 245;
- optional SettingProto device_idle_constants = 246;
- optional SettingProto battery_saver_constants = 247;
- optional SettingProto battery_saver_device_specific_constants = 248;
- optional SettingProto battery_tip_constants = 249;
- optional SettingProto anomaly_detection_constants = 250;
- // Version of the anomaly config.
- optional SettingProto anomaly_config_version = 251 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // A base64-encoded string represents anomaly stats config.
- optional SettingProto anomaly_config = 252;
- // This is a key=value list, separated by commas.
- optional SettingProto always_on_display_constants = 253;
- // System VDSO global setting. This links to the "sys.vdso" system property.
- // The following values are supported:
- // false -> both 32 and 64 bit vdso disabled
- // 32 -> 32 bit vdso enabled
- // 64 -> 64 bit vdso enabled
- // Any other value defaults to both 32 bit and 64 bit true.
- optional SettingProto sys_vdso = 254 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // UidCpuPower global setting. This links the sys.uidcpupower system property.
- // The following values are supported:
- // 0 -> /proc/uid_cpupower/* are disabled
- // 1 -> /proc/uid_cpupower/* are enabled
- // Any other value defaults to enabled.
- optional SettingProto sys_uidcpupower = 255 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // An integer to reduce the FPS by this factor. Only for experiments.
- optional SettingProto fps_divisor = 256 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Flag to enable or disable display panel low power mode (lpm)
- // false -> Display panel power saving mode is disabled.
- // true -> Display panel power saving mode is enabled.
- optional SettingProto display_panel_lpm = 257 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // These are key=value lists, separated by commas.
- optional SettingProto app_idle_constants = 258;
- optional SettingProto power_manager_constants = 259;
- optional SettingProto alarm_manager_constants = 260;
- optional SettingProto job_scheduler_constants = 261;
- optional SettingProto shortcut_manager_constants = 262;
- optional SettingProto device_policy_constants = 263;
- optional SettingProto text_classifier_constants = 264;
- optional SettingProto battery_stats_constants = 265;
- optional SettingProto sync_manager_constants = 266;
- optional SettingProto app_standby_enabled = 267 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto app_auto_restriction_enabled = 268 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto forced_app_standby_enabled = 269 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto forced_app_standby_for_small_battery_enabled = 270 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto off_body_radios_off_for_small_battery_enabled = 271 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto off_body_radios_off_delay_ms = 272 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_on_when_proxy_disconnected = 273 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto time_only_mode_constants = 274 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_watchlist_enabled = 275 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto keep_profile_in_background = 276 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto window_animation_scale = 277 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto transition_animation_scale = 278 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto animator_duration_scale = 279 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto fancy_ime_animations = 280 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto compatibility_mode = 281 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto emergency_tone = 282 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto call_auto_retry = 283 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto emergency_affordance_needed = 284 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto preferred_network_mode = 285 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Name of an application package to be debugged.
- optional SettingProto debug_app = 286;
- optional SettingProto wait_for_debugger = 287 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_gpu_debug_layers = 288 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // App allowed to load GPU debug layers.
- optional SettingProto gpu_debug_app = 289;
- optional SettingProto gpu_debug_layers = 290 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto low_power_mode = 291 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Battery level [1-100] at which low power mode automatically turns on. If
- // 0, it will not automatically turn on.
- optional SettingProto low_power_mode_trigger_level = 292 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // The max value for {@link #LOW_POWER_MODE_TRIGGER_LEVEL}. If this setting
- // is not set or the value is 0, the default max will be used.
- optional SettingProto low_power_mode_trigger_level_max = 293 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto always_finish_activities = 294 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto dock_audio_media_enabled = 295 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto encoded_surround_output = 296 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto audio_safe_volume_state = 297 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto tzinfo_update_content_url = 298;
- optional SettingProto tzinfo_update_metadata_url = 299;
- optional SettingProto selinux_update_content_url = 300;
- optional SettingProto selinux_update_metadata_url = 301;
- optional SettingProto sms_short_codes_update_content_url = 302;
- optional SettingProto sms_short_codes_update_metadata_url = 303;
- optional SettingProto apn_db_update_content_url = 304;
- optional SettingProto apn_db_update_metadata_url = 305;
- optional SettingProto cert_pin_update_content_url = 306;
- optional SettingProto cert_pin_update_metadata_url = 307;
- optional SettingProto intent_firewall_update_content_url = 308;
- optional SettingProto intent_firewall_update_metadata_url = 309;
- optional SettingProto lang_id_update_content_url = 310;
- optional SettingProto lang_id_update_metadata_url = 311;
- optional SettingProto smart_selection_update_content_url = 312;
- optional SettingProto smart_selection_update_metadata_url = 313;
- optional SettingProto selinux_status = 314 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto development_force_rtl = 315 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto low_battery_sound_timeout = 316 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wifi_bounce_delay_override_ms = 317 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto policy_control = 318 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto emulate_display_cutout = 319 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto zen_mode = 320 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto zen_mode_ringer_level = 321 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto zen_mode_config_etag = 322;
- // If 0, turning on dnd manually will last indefinitely. Else if
- // non-negative, turning on dnd manually will last for this many minutes.
- // Else (if negative), turning on dnd manually will surface a dialog that
- // prompts user to specify a duration.
- optional SettingProto zen_duration = 323 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto heads_up_notifications_enabled = 324 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto device_name = 325;
- optional SettingProto network_scoring_provisioned = 326 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto require_password_to_decrypt = 327 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enhanced_4g_mode_enabled = 328 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto vt_ims_enabled = 329 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wfc_ims_enabled = 330 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wfc_ims_mode = 331 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wfc_ims_roaming_mode = 332 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto wfc_ims_roaming_enabled = 333 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto lte_service_forced = 334 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto ephemeral_cookie_max_size_bytes = 335 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_ephemeral_feature = 336 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto instant_app_dexopt_enabled = 337 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto installed_instant_app_min_cache_period = 338 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto installed_instant_app_max_cache_period = 339 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto uninstalled_instant_app_min_cache_period = 340 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto uninstalled_instant_app_max_cache_period = 341 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto unused_static_shared_lib_min_cache_period = 342 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto allow_user_switching_when_system_user_locked = 343 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto boot_count = 344 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto safe_boot_disallowed = 345 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto device_demo_mode = 346 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto network_access_timeout_ms = 347 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto database_downgrade_reason = 348;
- optional SettingProto database_creation_buildid = 349 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto contacts_database_wal_enabled = 350 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto location_settings_link_to_permissions_enabled = 351 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto euicc_factory_reset_timeout_millis = 352 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto storage_settings_clobber_threshold = 353 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // If set to 1, {@link Secure#LOCATION_MODE} will be set to {@link
- // Secure#LOCATION_MODE_OFF} temporarily for all users.
- optional SettingProto location_global_kill_switch = 354 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // If set to 1, SettingsProvider's restoreAnyVersion="true" attribute will
- // be ignored and restoring to lower version of platform API will be
- // skipped.
- optional SettingProto override_settings_provider_restore_any_version = 355 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto chained_battery_attribution_enabled = 356 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto autofill_compat_mode_allowed_packages = 357 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto hidden_api_blacklist_exemptions = 358 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto sound_trigger_detection_service_op_timeout = 387 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto max_sound_trigger_detection_service_ops_per_day = 388 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Subscription to be used for voice call on a multi sim device. The
- // supported values are 0 = SUB1, 1 = SUB2 and etc.
- optional SettingProto multi_sim_voice_call_subscription = 359 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto multi_sim_voice_prompt = 360 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto multi_sim_data_call_subscription = 361 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto multi_sim_sms_subscription = 362 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto multi_sim_sms_prompt = 363 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Whether to enable new contacts aggregator or not.
- // 1 = enable, 0 = disable.
- optional SettingProto new_contact_aggregator = 364 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto contact_metadata_sync_enabled = 365 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_cellular_on_boot = 366 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto max_notification_enqueue_rate = 367 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto show_notification_channel_warnings = 368 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto cell_on = 369 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto show_temperature_warning = 370 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto warning_temperature = 371 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_diskstats_logging = 372 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_cache_quota_calculation = 373 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_deletion_helper_no_threshold_toggle = 374 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto notification_snooze_options = 375 [ (android.privacy).dest = DEST_AUTOMATIC ];
- // Configuration flags for SQLite Compatibility WAL. Encoded as a key-value
- // list, separated by commas.
- // E.g.: compatibility_wal_supported=true, wal_syncmode=OFF
- optional SettingProto sqlite_compatibility_wal_flags = 376 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto enable_gnss_raw_meas_full_tracking = 377 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto install_carrier_app_notification_persistent = 378 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto install_carrier_app_notification_sleep_millis = 379 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto zram_enabled = 380 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto smart_replies_in_notifications_flags = 381 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto show_first_crash_dialog = 382 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto show_restart_in_crash_dialog = 383 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingProto show_mute_in_crash_dialog = 384 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingsProto show_zen_upgrade_notification = 385 [ (android.privacy).dest = DEST_AUTOMATIC ];
- optional SettingsProto backup_agent_timeout_parameters = 386;
- // Please insert fields in the same order as in
- // frameworks/base/core/java/android/provider/Settings.java.
- // Next tag = 390;
-}
-
message SecureSettingsProto {
option (android.msg_privacy).dest = DEST_EXPLICIT;
@@ -854,26 +392,6 @@
// Next tag = 73;
}
-message SettingProto {
- // ID of the setting
- optional string id = 1;
-
- // Name of the setting
- optional string name = 2;
-
- // Package name of the setting
- optional string pkg = 3;
-
- // Value of this setting
- optional string value = 4;
-
- // Default value of this setting
- optional string default_value = 5;
-
- // Whether the default is set by the system
- optional bool default_from_system = 6;
-}
-
message SettingsProto {
// Enum values gotten from Settings.java
enum ScreenBrightnessMode {
@@ -881,14 +399,3 @@
SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1;
}
}
-
-message SettingsOperationProto {
- // When the operation happened
- optional int64 timestamp = 1;
-
- // Type of the operation
- optional string operation = 2;
-
- // Name of the setting that was affected (optional)
- optional string setting = 3;
-}
diff --git a/core/proto/android/providers/settings/common.proto b/core/proto/android/providers/settings/common.proto
new file mode 100644
index 0000000..64ffefb6
--- /dev/null
+++ b/core/proto/android/providers/settings/common.proto
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto2";
+package android.providers.settings;
+
+option java_multiple_files = true;
+
+message SettingProto {
+ // ID of the setting
+ optional string id = 1;
+
+ // Name of the setting
+ optional string name = 2;
+
+ // Package name of the setting
+ optional string pkg = 3;
+
+ // Value of this setting
+ optional string value = 4;
+
+ // Default value of this setting
+ optional string default_value = 5;
+
+ // Whether the default is set by the system
+ optional bool default_from_system = 6;
+}
+
+message SettingsOperationProto {
+ // When the operation happened
+ optional int64 timestamp = 1;
+
+ // Type of the operation
+ optional string operation = 2;
+
+ // Name of the setting that was affected (optional)
+ optional string setting = 3;
+}
diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto
new file mode 100644
index 0000000..c7de947
--- /dev/null
+++ b/core/proto/android/providers/settings/global.proto
@@ -0,0 +1,942 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto2";
+package android.providers.settings;
+
+option java_multiple_files = true;
+
+import "frameworks/base/core/proto/android/providers/settings/common.proto";
+import "frameworks/base/libs/incident/proto/android/privacy.proto";
+
+// Note: it's a conscious decision to add each setting as a separate field. This
+// allows annotating each setting with its own privacy tag.
+message GlobalSettingsProto {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ repeated SettingsOperationProto historical_operations = 1;
+
+ // These are key=value lists, separated by commas.
+ optional SettingProto activity_manager_constants = 2;
+ optional SettingProto adb_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto add_users_when_locked = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message AirplaneMode {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // "airplane_mode_on" in code.
+ optional SettingProto on = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // A comma-separated list of radios that need to be disabled when airplane
+ // mode is on. This overrides wifi_on and bluetooth_on if wifi and bluetooth
+ // are included in the comma-separated list.
+ optional SettingProto radios = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto toggleable_radios = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional AirplaneMode airplane_mode = 5;
+
+ optional SettingProto alarm_manager_constants = 6;
+ optional SettingProto allow_user_switching_when_system_user_locked = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // This is a key=value list, separated by commas.
+ optional SettingProto always_on_display_constants = 8;
+ optional SettingProto always_finish_activities = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto animator_duration_scale = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Anomaly {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // "anomaly_detection_constants" in code.
+ optional SettingProto detection_constants = 1;
+ // Version of the anomaly config.
+ optional SettingProto config_version = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // A base64-encoded string represents anomaly stats config.
+ optional SettingProto config = 3;
+ }
+ optional Anomaly anomaly = 11;
+
+ message ApnDb {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional ApnDb apn_db = 12;
+
+ message App {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // These are key=value lists, separated by commas.
+ optional SettingProto idle_constants = 1;
+ optional SettingProto standby_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto auto_restriction_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto forced_app_standby_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto forced_app_standby_for_small_battery_enabled = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional App app = 13;
+
+ optional SettingProto assisted_gps_enabled = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto audio_safe_volume_state = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Auto {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto time = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto time_zone = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Auto auto = 16;
+
+ optional SettingProto autofill_compat_mode_allowed_packages = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto backup_agent_timeout_parameters = 18;
+
+ message Battery {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto discharge_duration_threshold = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto discharge_threshold = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto saver_constants = 3;
+ optional SettingProto saver_device_specific_constants = 4;
+ optional SettingProto stats_constants = 5;
+ optional SettingProto tip_constants = 6;
+ }
+ optional Battery battery = 19;
+
+ message BleScan {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto always_available = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto low_power_window_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto balanced_window_ms = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto low_latency_window_ms = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto low_power_interval_ms = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto balanced_interval_ms = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto low_latency_interval_ms = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto background_mode = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional BleScan ble_scan = 20;
+
+ message Bluetooth {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto class_of_device = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto disabled_profiles = 2;
+ optional SettingProto interoperability_list = 3;
+ optional SettingProto on = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ repeated SettingProto headset_priorities = 5;
+ repeated SettingProto a2dp_sink_priorities = 6;
+ repeated SettingProto a2dp_src_priorities = 7;
+ repeated SettingProto a2dp_supports_optional_codecs = 8;
+ repeated SettingProto a2dp_optional_codecs_enabled = 9;
+ repeated SettingProto input_device_priorities = 10;
+ repeated SettingProto map_priorities = 11;
+ repeated SettingProto map_client_priorities = 12;
+ repeated SettingProto pbap_client_priorities = 13;
+ repeated SettingProto sap_priorities = 14;
+ repeated SettingProto pan_priorities = 15;
+ repeated SettingProto hearing_aid_priorities = 16;
+ }
+ optional Bluetooth bluetooth = 21;
+
+ optional SettingProto boot_count = 22 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto bugreport_in_power_menu = 23 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto call_auto_retry = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message CaptivePortal {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto mode = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto detection_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto server = 3;
+ optional SettingProto https_url = 4;
+ optional SettingProto http_url = 5;
+ optional SettingProto fallback_url = 6;
+ optional SettingProto other_fallback_urls = 7;
+ optional SettingProto use_https = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto user_agent = 9;
+ }
+ optional CaptivePortal captive_portal = 25;
+
+ message Carrier {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // List of carrier app certificate mapped to carrier app package id which are whitelisted to
+ // prompt the user for install when a SIM card with matching UICC carrier privilege rules is
+ // inserted.
+ optional SettingProto app_whitelist = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto app_names = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto install_carrier_app_notification_persistent = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto install_carrier_app_notification_sleep_millis = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Carrier carrier = 26;
+
+ message Cdma {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto cell_broadcast_sms = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto roaming_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto subscription_mode = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Cdma cdma = 27;
+
+ optional SettingProto cell_on = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message CertPin {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional CertPin cert_pin = 29;
+
+ optional SettingProto chained_battery_attribution_enabled = 30 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto compatibility_mode = 31 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Connectivity {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto metrics_buffer_size = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto change_delay = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto sampling_interval_in_seconds = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Connectivity connectivity = 32;
+
+ optional SettingProto contact_metadata_sync_enabled = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto contacts_database_wal_enabled = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Data {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto activity_timeout_mobile = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto activity_timeout_wifi = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto roaming = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto stall_alarm_non_aggressive_delay_in_ms = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto stall_alarm_aggressive_delay_in_ms = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Data data = 35;
+
+ message Database {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto downgrade_reason = 1;
+ optional SettingProto creation_buildid = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Database database = 36;
+
+ message Debug {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Name of an application package to be debugged.
+ optional SettingProto app = 1;
+ // Whether views are allowed to save their attribute data.
+ optional SettingProto view_attributes = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Debug debug = 37;
+
+ message Default {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto install_location = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dns_server = 2;
+ }
+ optional Default default = 38;
+
+ message Development {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto settings_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto force_resizable_activities = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto enable_freeform_windows_support = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto force_rtl = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto emulate_display_cutout = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Development development = 39;
+
+ message Device {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto name = 1;
+ optional SettingProto provisioned = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto provisioning_mobile_data_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto idle_constants = 4;
+ optional SettingProto policy_constants = 5;
+ optional SettingProto demo_mode = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Device device = 40;
+
+ optional SettingProto disk_free_change_reporting_threshold = 41 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Display {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto size_forced = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scaling_force = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Flag to enable or disable display panel low power mode (lpm)
+ // false -> Display panel power saving mode is disabled.
+ // true -> Display panel power saving mode is enabled.
+ optional SettingProto panel_lpm = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Display display = 42;
+
+ message DnsResolver {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto sample_validity_seconds = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto success_threshold_percent = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto min_samples = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto max_samples = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional DnsResolver dns_resolver = 43;
+
+ optional SettingProto dock_audio_media_enabled = 44 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Download {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto max_bytes_over_mobile = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto recommended_max_bytes_over_mobile = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Download download = 45;
+
+ message Dropbox {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto age_seconds = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto max_files = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto quota_kb = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto quota_percent = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto reserve_percent = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ repeated SettingProto settings = 6;
+ }
+ optional Dropbox dropbox = 46;
+
+ message Emergency {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto tone = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto affordance_needed = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Emergency emergency = 47;
+
+ message Enable {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto accessibility_global_gesture_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto gpu_debug_layers = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ephemeral_feature = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto cellular_on_boot = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto diskstats_logging = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto cache_quota_calculation = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto deletion_helper_no_threshold_toggle = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto gnss_raw_meas_full_tracking = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Enable enable = 48;
+
+ optional SettingProto encoded_surround_output = 49 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto enhanced_4g_mode_enabled = 50 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ repeated SettingProto error_logcat_lines = 51;
+
+ message Euicc {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto provisioned = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto factory_reset_timeout_millis = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Euicc euicc = 52;
+
+ optional SettingProto fancy_ime_animations = 53 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto force_allow_on_external = 54 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // An integer to reduce the FPS by this factor. Only for experiments.
+ optional SettingProto fps_divisor = 55 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto fstrim_mandatory_interval = 56 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message GlobalHttpProxy {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Including Global.HTTP_PROXY is redundant since the data is also
+ // encompassed in the host and port fields.
+
+ optional SettingProto host = 1;
+ optional SettingProto port = 2;
+ optional SettingProto exclusion_list = 3;
+ optional SettingProto pac = 4;
+ // Enables the UI setting to allow the user to specify the global HTTP proxy
+ // and associated exclusion list. Simply "set_global_http_proxy".
+ optional SettingProto setting_ui_enabled = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional GlobalHttpProxy global_http_proxy = 57;
+
+ optional SettingProto gprs_register_check_period_ms = 58 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Gpu {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // App allowed to load GPU debug layers.
+ optional SettingProto debug_app = 1;
+ optional SettingProto debug_layers = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Gpu gpu = 59;
+
+ message Hdmi {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto control_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto system_audio_control_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto control_auto_wakeup_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto control_auto_device_off_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Hdmi hdmi = 60;
+
+ optional SettingProto heads_up_notifications_enabled = 61 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto hidden_api_blacklist_exemptions = 62 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message InetCondition {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto debounce_up_delay = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto debounce_down_delay = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional InetCondition inet_condition = 63;
+
+ message InstantApp {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto dexopt_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ephemeral_cookie_max_size_bytes = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto installed_min_cache_period = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto installed_max_cache_period = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uninstalled_min_cache_period = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uninstalled_max_cache_period = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional InstantApp instant_app = 64;
+
+ message IntentFirewall {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional IntentFirewall intent_firewall = 65;
+
+ optional SettingProto job_scheduler_constants = 66;
+ optional SettingProto keep_profile_in_background = 67 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message LangId {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional LangId lang_id = 68;
+
+ message Location {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto background_throttle_interval_ms = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto background_throttle_proximity_alert_interval_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Packages that are whitelisted for background throttling (throttling will
+ // not be applied).
+ optional SettingProto background_throttle_package_whitelist = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto settings_link_to_permissions_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // If set to 1, {@link Secure#LOCATION_MODE} will be set to {@link
+ // Secure#LOCATION_MODE_OFF} temporarily for all users.
+ optional SettingProto global_kill_switch = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Location location = 69;
+
+ message LowPowerMode {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Simply "low_power_mode" in code.
+ optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Battery level [1-100] at which low power mode automatically turns on. If
+ // 0, it will not automatically turn on.
+ optional SettingProto trigger_level = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // The max value for {@link #LOW_POWER_MODE_TRIGGER_LEVEL}. If this setting
+ // is not set or the value is 0, the default max will be used.
+ optional SettingProto trigger_level_max = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional LowPowerMode low_power_mode = 70;
+
+ optional SettingProto lte_service_forced = 71 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto mdc_initial_max_retry = 72 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Mhl {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto input_switching_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto power_charge_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Mhl mhl = 73;
+
+ message MobileData {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Whether mobile data connections are allowed by the user. Simply
+ // "mobile_data" in code.
+ optional SettingProto allowed = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Whether the mobile data connection should remain active even when higher
+ // priority networks like WiFi are active, to help make network switching
+ // faster.
+ optional SettingProto always_on = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional MobileData mobile_data = 74;
+
+ // Ringer mode. A change in this value will not reflect as a change in the
+ // ringer mode.
+ optional SettingProto mode_ringer = 75 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message MultiSim {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Subscription to be used for voice call on a multi sim device. The
+ // supported values are 0 = SUB1, 1 = SUB2 and etc.
+ optional SettingProto voice_call_subscription = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto voice_prompt = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto data_call_subscription = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto sms_subscription = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto sms_prompt = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional MultiSim multi_sim = 76;
+
+ message Netstats {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto poll_interval = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto time_cache_max_age = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto global_alert_bytes = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto sample_enabled = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto augment_enabled = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dev_bucket_duration = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dev_persist_bytes = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dev_rotate_age = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dev_delete_age = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_bucket_duration = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_persist_bytes = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_rotate_age = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_delete_age = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_tag_bucket_duration = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_tag_persist_bytes = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_tag_rotate_age = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto uid_tag_delete_age = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Netstats netstats = 77;
+
+ message Network {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // User preference for which network(s) should be used.
+ optional SettingProto preference = 1;
+ optional SettingProto preferred_network_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scorer_app = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto switch_notification_daily_limit = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto switch_notification_rate_limit_millis = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto avoid_bad_wifi = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto metered_multipath_preference = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto watchlist_last_report_time = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scoring_ui_enabled = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto recommendations_enabled = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto recommendations_package = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto recommendation_request_timeout_ms = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto watchlist_enabled = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scoring_provisioned = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto access_timeout_ms = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto recommended_network_evaluator_cache_expiry_ms = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Network network = 78;
+
+ // Whether to enable new contacts aggregator or not.
+ // 1 = enable, 0 = disable.
+ optional SettingProto new_contact_aggregator = 79 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto night_display_forced_auto_mode_available = 80 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message NitzUpdate {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment to
+ // SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
+ // exceeded.
+ optional SettingProto diff = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // The length of time in milli-seconds that automatic small adjustments to
+ // SystemClock are ignored if NITZ_UPDATE_DIFF is not exceeded.
+ optional SettingProto spacing = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional NitzUpdate nitz_update = 81;
+
+ message Notification {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto max_notification_enqueue_rate = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto show_notification_channel_warnings = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // The list of snooze options for notifications. This is encoded as a key=value list,
+ // separated by commas.
+ optional SettingProto snooze_options = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto smart_replies_in_notifications_flags = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Notification notification = 82;
+
+ optional SettingProto nsd_on = 83 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Ntp {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Preferred NTP server.
+ optional SettingProto server = 1;
+ // Timeout in milliseconds to wait for NTP server.
+ optional SettingProto timeout_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Ntp ntp = 84;
+
+ // Details about the Off Body, Radios Off feature.
+ message OffBodyRadiosOff {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Whether or not to enable the Off Body, Radios Off feature on small battery devices.
+ optional SettingProto enabled_for_small_battery = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // How long after the device goes off body to disable radios, in milliseconds.
+ optional SettingProto delay_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional OffBodyRadiosOff off_body_radios_off = 85;
+
+ // Whether to disable the automatic scheduling of system updates.
+ optional SettingProto ota_disable_automatic_update = 86 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Overlay display devices setting.
+ // The value is a specially formatted string that describes the size and
+ // density of simulated secondary devices.
+ // Format: {width}x{height}/dpi;...
+ optional SettingProto overlay_display_devices = 87 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // If set to 1, SettingsProvider's restoreAnyVersion="true" attribute will
+ // be ignored and restoring to lower version of platform API will be
+ // skipped.
+ optional SettingProto override_settings_provider_restore_any_version = 88 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // The series of successively longer delays used in retrying to download PAC file.
+ optional SettingProto pac_change_delay = 89 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message PackageVerifier {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Whether the package manager should send package verification broadcasts
+ // for verifiers to review apps prior to installation.
+ optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto timeout = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto default_response = 3;
+ optional SettingProto setting_visible = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto include_adb = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional PackageVerifier package_verifier = 90;
+
+ message PdpWatchdog {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto poll_interval_ms = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto long_poll_interval_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto error_poll_interval_ms = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto trigger_packet_count = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto error_poll_count = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto max_pdp_reset_fail_count = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional PdpWatchdog pdp_watchdog = 91;
+
+ // Defines global runtime overrides to window policy.
+ optional SettingProto policy_control = 92;
+ optional SettingProto power_manager_constants = 93;
+ // If true, out-of-the-box execution for priv apps is enabled.
+ optional SettingProto priv_app_oob_enabled = 94 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message PrepaidSetup {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // URL to open browser on to allow user to manage a prepay account.
+ optional SettingProto data_service_url = 1;
+ // URL to attempt a GET on to see if this is a prepay device.
+ optional SettingProto detection_target_url = 2;
+ // Host to check for a redirect to after an attempt to GET
+ // SETUP_PREPAID_DETECTION_TARGET_URL. (If we redirected there, this is a
+ // prepaid device with zero balance.)
+ optional SettingProto detection_redir_host = 3;
+ }
+ optional PrepaidSetup prepaid_setup = 95;
+
+ message Private {
+ option (android.msg_privacy).dest = DEST_LOCAL;
+
+ // The requested Private DNS mode and an accompanying specifier.
+ optional SettingProto dns_mode = 1;
+ optional SettingProto dns_specifier = 2;
+ }
+ optional Private private = 96;
+
+ // The number of milliseconds to allow the provisioning apn to remain active.
+ optional SettingProto provisioning_apn_alarm_delay_in_ms = 97 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto read_external_storage_enforced_default = 98 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto require_password_to_decrypt = 99 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto safe_boot_disallowed = 100 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Selinux {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ optional SettingProto status = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Selinux selinux = 101;
+
+ // Flag for allowing ActivityManagerService to send ACTION_APP_ERROR intents
+ // on application crashes and ANRs. If this is disabled, the crash/ANR
+ // dialog will never display the "Report" button.
+ optional SettingProto send_action_app_error = 102 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Let user pick default install location.
+ optional SettingProto set_install_location = 103 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto shortcut_manager_constants = 104;
+ optional SettingProto show_first_crash_dialog = 105 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto show_restart_in_crash_dialog = 106 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto show_mute_in_crash_dialog = 107 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message SmartSelection {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional SmartSelection smart_selection = 108;
+
+ message Sms {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto outgoing_check_interval_ms = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto outgoing_check_max_count = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Used to disable SMS short code confirmation. Defaults to true.
+ optional SettingProto short_code_confirmation = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto short_code_rule = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto short_codes_update_content_url = 5;
+ optional SettingProto short_codes_update_metadata_url = 6;
+ }
+ optional Sms sms = 109;
+
+ message Sounds {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto car_dock = 1;
+ optional SettingProto car_undock = 2;
+ optional SettingProto charging_sounds_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto charging_started = 4;
+ optional SettingProto desk_dock = 5;
+ optional SettingProto desk_undock = 6;
+ optional SettingProto dock_sounds_enabled = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dock_sounds_enabled_when_accessibility = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto lock = 9;
+ optional SettingProto low_battery = 10;
+ optional SettingProto low_battery_sound_timeout = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Called "power_sounds_enabled" in code.
+ optional SettingProto low_battery_sounds_enabled = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto trusted = 13;
+ optional SettingProto unlock = 14;
+ }
+ optional Sounds sounds = 110;
+
+ message SoundTrigger {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // Maximum number of SoundTriggerDetectionService operations per day.
+ optional SettingProto max_sound_trigger_detection_service_ops_per_day = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Timeout for a single SoundTriggerDetectionService operation (in ms).
+ optional SettingProto detection_service_op_timeout_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional SoundTrigger sound_trigger = 111;
+
+ // Value to specify how long in milliseconds to retain seen score cache
+ // curves to be used when generating SSID only bases score curves.
+ optional SettingProto speed_label_cache_eviction_age_ms = 112 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Configuration flags for SQLite Compatibility WAL. Encoded as a key-value
+ // list, separated by commas.
+ // E.g.: compatibility_wal_supported=true, wal_syncmode=OFF
+ optional SettingProto sqlite_compatibility_wal_flags = 113 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto stay_on_while_plugged_in = 114 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Storage {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto benchmark_interval = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto settings_clobber_threshold = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Storage storage = 115;
+
+ message Sync {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // The maximum reconnect delay for short network outages or when the network is suspended due to phone use.
+ optional SettingProto max_retry_delay_in_seconds = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Simply "sync_manager_constants" in code.
+ optional SettingProto manager_constants = 2;
+ }
+ optional Sync sync = 116;
+
+ message Sys {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ // The interval in minutes after which the amount of free storage left on
+ // the device is logged to the event log.
+ optional SettingProto free_storage_log_interval_mins = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto storage_threshold_percentage = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto storage_threshold_max_bytes = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto storage_full_threshold_bytes = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto storage_cache_percentage = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto storage_cache_max_bytes = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // System VDSO global setting. This links to the "sys.vdso" system property.
+ // The following values are supported:
+ // false -> both 32 and 64 bit vdso disabled
+ // 32 -> 32 bit vdso enabled
+ // 64 -> 64 bit vdso enabled
+ // Any other value defaults to both 32 bit and 64 bit true.
+ optional SettingProto vdso = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // UidCpuPower global setting. This links the sys.uidcpupower system property.
+ // The following values are supported:
+ // 0 -> /proc/uid_cpupower/* are disabled
+ // 1 -> /proc/uid_cpupower/* are enabled
+ // Any other value defaults to enabled.
+ optional SettingProto uidcpupower = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Sys sys = 117;
+
+ optional SettingProto tcp_default_init_rwnd = 118 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message TemperatureWarning {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto show_temperature_warning = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Temperature at which the high temperature warning notification should
+ // be shown.
+ optional SettingProto warning_temperature_level = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional TemperatureWarning temperature_warning = 119;
+
+ message Tether {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto supported = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dun_required = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto dun_apn = 3;
+ optional SettingProto offload_disabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Simply "soft_ap_timeout_enabled" in code.
+ optional SettingProto timeout_enabled = 112 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Tether tether = 120;
+
+ optional SettingProto text_classifier_constants = 121;
+ optional SettingProto theater_mode_on = 122 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto time_only_mode_constants = 123 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto transition_animation_scale = 124 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Tzinfo {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto update_content_url = 1;
+ optional SettingProto update_metadata_url = 2;
+ }
+ optional Tzinfo tzinfo = 125;
+
+ // The min period for caching unused static shared libs in milliseconds.
+ optional SettingProto unused_static_shared_lib_min_cache_period_ms = 126 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto usb_mass_storage_enabled = 127 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto use_google_mail = 128 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto use_open_wifi_package = 129 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto vt_ims_enabled = 130 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto wait_for_debugger = 131 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Webview {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto data_reduction_proxy_key = 1;
+ optional SettingProto fallback_logic_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ // Name of the package used as WebView provider.
+ optional SettingProto provider = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto multiprocess = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Webview webview = 132;
+
+ message Wfc {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto ims_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ims_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ims_roaming_mode = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ims_roaming_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Wfc wfc = 133;
+
+ message Wifi {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto sleep_policy = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto badging_thresholds = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto display_on = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto display_certification_on = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto display_wps_config = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto networks_available_notification_on = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto carrier_networks_available_notification_on = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto networks_available_repeat_delay = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto country_code = 9;
+ optional SettingProto framework_scan_interval_ms = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto idle_ms = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto num_open_networks_kept = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto on = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scan_always_available = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto wakeup_enabled = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto saved_state = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto supplicant_scan_interval_ms = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto enhanced_auto_join = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto network_show_rssi = 19 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto scan_interval_when_p2p_connected_ms = 20 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto watchdog_on = 21 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto watchdog_poor_network_test_enabled = 22 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto suspend_optimizations_enabled = 23 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto verbose_logging_enabled = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto connected_mac_randomization_enabled = 25 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto max_dhcp_retry_count = 26 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto mobile_data_transition_wakelock_timeout_ms = 27 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto device_owner_configs_lockdown = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto frequency_band = 29 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto p2p_device_name = 30;
+ optional SettingProto reenable_delay_ms = 31 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto ephemeral_out_of_range_timeout_ms = 32 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto on_when_proxy_disconnected = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto bounce_delay_override_ms = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Wifi wifi = 134;
+
+ optional SettingProto wimax_networks_available_notification_on = 135 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto window_animation_scale = 136 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto wtf_is_fatal = 137 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ message Zen {
+ option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+ optional SettingProto mode = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto mode_ringer_level = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto mode_config_etag = 3;
+ // If 0, turning on dnd manually will last indefinitely. Else if
+ // non-negative, turning on dnd manually will last for this many minutes.
+ // Else (if negative), turning on dnd manually will surface a dialog that
+ // prompts user to specify a duration.
+ optional SettingProto duration = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto show_zen_upgrade_notification = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ }
+ optional Zen zen = 138;
+
+ optional SettingProto zram_enabled = 139 [ (android.privacy).dest = DEST_AUTOMATIC ];
+
+ // Please insert fields in alphabetical order and group them into messages
+ // if possible (to avoid reaching the method limit).
+ // Next tag = 140;
+}
diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto
index 122e5c4..8d4b56c 100644
--- a/core/proto/android/server/jobscheduler.proto
+++ b/core/proto/android/server/jobscheduler.proto
@@ -514,7 +514,7 @@
optional int32 uid = 3;
// Job IDs can technically be negative.
optional int32 job_id = 4;
- optional string tag = 5 [ (.android.privacy).dest = DEST_EXPLICIT ];
+ optional string tag = 5;
// Only valid for STOP_JOB or STOP_PERIODIC_JOB Events.
optional .android.app.job.StopReasonEnum stop_reason = 6;
}
@@ -538,7 +538,7 @@
// The UID that scheduled the job.
optional int32 calling_uid = 1;
- optional string tag = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
+ optional string tag = 2;
// The UID for which the job is being run.
optional int32 source_uid = 3;
diff --git a/core/proto/android/server/powermanagerservice.proto b/core/proto/android/server/powermanagerservice.proto
index c58de56..eb60942 100644
--- a/core/proto/android/server/powermanagerservice.proto
+++ b/core/proto/android/server/powermanagerservice.proto
@@ -118,61 +118,60 @@
// True if the sandman has just been summoned for the first time since entering
// the dreaming or dozing state. Indicates whether a new dream should begin.
optional bool is_sandman_summoned = 23;
- // If true, the device is in low power mode.
- optional bool is_low_power_mode_enabled = 24;
// True if the battery level is currently considered low.
- optional bool is_battery_level_low = 25;
+ optional bool is_battery_level_low = 24;
// True if we are currently in light device idle mode.
- optional bool is_light_device_idle_mode = 26;
+ optional bool is_light_device_idle_mode = 25;
// True if we are currently in device idle mode.
- optional bool is_device_idle_mode = 27;
+ optional bool is_device_idle_mode = 26;
// Set of app ids that we will always respect the wake locks for.
- repeated int32 device_idle_whitelist = 28;
+ repeated int32 device_idle_whitelist = 27;
// Set of app ids that are temporarily allowed to acquire wakelocks due to
// high-pri message
- repeated int32 device_idle_temp_whitelist = 29;
+ repeated int32 device_idle_temp_whitelist = 28;
// Timestamp of the last time the device was awoken.
- optional int64 last_wake_time_ms = 30;
+ optional int64 last_wake_time_ms = 29;
// Timestamp of the last time the device was put to sleep.
- optional int64 last_sleep_time_ms = 31;
+ optional int64 last_sleep_time_ms = 30;
// Timestamp of the last call to user activity.
- optional int64 last_user_activity_time_ms = 32;
- optional int64 last_user_activity_time_no_change_lights_ms = 33;
+ optional int64 last_user_activity_time_ms = 31;
+ optional int64 last_user_activity_time_no_change_lights_ms = 32;
// Timestamp of last interactive power hint.
- optional int64 last_interactive_power_hint_time_ms = 34;
+ optional int64 last_interactive_power_hint_time_ms = 33;
// Timestamp of the last screen brightness boost.
- optional int64 last_screen_brightness_boost_time_ms = 35;
+ optional int64 last_screen_brightness_boost_time_ms = 34;
// True if screen brightness boost is in progress.
- optional bool is_screen_brightness_boost_in_progress = 36;
+ optional bool is_screen_brightness_boost_in_progress = 35;
// True if the display power state has been fully applied, which means the
// display is actually on or actually off or whatever was requested.
- optional bool is_display_ready = 37;
+ optional bool is_display_ready = 36;
// True if the wake lock suspend blocker has been acquired.
- optional bool is_holding_wake_lock_suspend_blocker = 38;
+ optional bool is_holding_wake_lock_suspend_blocker = 37;
// The suspend blocker used to keep the CPU alive when the display is on, the
// display is getting ready or there is user activity (in which case the
// display must be on).
- optional bool is_holding_display_suspend_blocker = 39;
+ optional bool is_holding_display_suspend_blocker = 38;
// Settings and configuration
- optional PowerServiceSettingsAndConfigurationDumpProto settings_and_configuration = 40;
+ optional PowerServiceSettingsAndConfigurationDumpProto settings_and_configuration = 39;
// Sleep timeout in ms. This can be -1.
- optional sint32 sleep_timeout_ms = 41;
+ optional sint32 sleep_timeout_ms = 40;
// Screen off timeout in ms
- optional int32 screen_off_timeout_ms = 42;
+ optional int32 screen_off_timeout_ms = 41;
// Screen dim duration in ms
- optional int32 screen_dim_duration_ms = 43;
+ optional int32 screen_dim_duration_ms = 42;
// We are currently in the middle of a batch change of uids.
- optional bool are_uids_changing = 44;
+ optional bool are_uids_changing = 43;
// Some uids have actually changed while mUidsChanging was true.
- optional bool are_uids_changed = 45;
+ optional bool are_uids_changed = 44;
// List of UIDs and their states
- repeated UidStateProto uid_states = 46;
- optional .android.os.LooperProto looper = 47;
+ repeated UidStateProto uid_states = 45;
+ optional .android.os.LooperProto looper = 46;
// List of all wake locks acquired by applications.
- repeated WakeLockProto wake_locks = 48;
+ repeated WakeLockProto wake_locks = 47;
// List of all suspend blockers.
- repeated SuspendBlockerProto suspend_blockers = 49;
- optional WirelessChargerDetectorProto wireless_charger_detector = 50;
+ repeated SuspendBlockerProto suspend_blockers = 48;
+ optional WirelessChargerDetectorProto wireless_charger_detector = 49;
+ optional BatterySaverStateMachineProto battery_saver_state_machine = 50;
}
// A com.android.server.power.PowerManagerService.SuspendBlockerImpl object.
@@ -270,51 +269,80 @@
optional bool are_dreams_activate_on_dock_setting = 17;
// True if doze should not be started until after the screen off transition.
optional bool is_doze_after_screen_off_config = 18;
- // If true, the device is in low power mode.
- optional bool is_low_power_mode_setting = 19;
- // Current state of whether the settings are allowing auto low power mode.
- optional bool is_auto_low_power_mode_configured = 20;
- // The user turned off low power mode below the trigger level
- optional bool is_auto_low_power_mode_snoozing = 21;
// The minimum screen off timeout, in milliseconds.
- optional int32 minimum_screen_off_timeout_config_ms = 22;
+ optional int32 minimum_screen_off_timeout_config_ms = 19;
// The screen dim duration, in milliseconds.
- optional int32 maximum_screen_dim_duration_config_ms = 23;
+ optional int32 maximum_screen_dim_duration_config_ms = 20;
// The maximum screen dim time expressed as a ratio relative to the screen off timeout.
- optional float maximum_screen_dim_ratio_config = 24;
+ optional float maximum_screen_dim_ratio_config = 21;
// The screen off timeout setting value in milliseconds.
- optional int32 screen_off_timeout_setting_ms = 25;
+ optional int32 screen_off_timeout_setting_ms = 22;
// The sleep timeout setting value in milliseconds. Default value is -1.
- optional sint32 sleep_timeout_setting_ms = 26;
+ optional sint32 sleep_timeout_setting_ms = 23;
// The maximum allowable screen off timeout according to the device administration policy.
- optional int32 maximum_screen_off_timeout_from_device_admin_ms = 27;
- optional bool is_maximum_screen_off_timeout_from_device_admin_enforced_locked = 28;
+ optional int32 maximum_screen_off_timeout_from_device_admin_ms = 24;
+ optional bool is_maximum_screen_off_timeout_from_device_admin_enforced_locked = 25;
// The stay on while plugged in setting.
// A set of battery conditions under which to make the screen stay on.
- optional StayOnWhilePluggedInProto stay_on_while_plugged_in = 29;
+ optional StayOnWhilePluggedInProto stay_on_while_plugged_in = 26;
// The screen brightness mode.
- optional .android.providers.settings.SettingsProto.ScreenBrightnessMode screen_brightness_mode_setting = 30;
+ optional .android.providers.settings.SettingsProto.ScreenBrightnessMode screen_brightness_mode_setting = 27;
// The screen brightness setting override from the window manager
// to allow the current foreground activity to override the brightness.
// Use -1 to disable.
- optional sint32 screen_brightness_override_from_window_manager = 31;
+ optional sint32 screen_brightness_override_from_window_manager = 28;
// The user activity timeout override from the window manager
// to allow the current foreground activity to override the user activity
// timeout. Use -1 to disable.
- optional sint64 user_activity_timeout_override_from_window_manager_ms = 32;
+ optional sint64 user_activity_timeout_override_from_window_manager_ms = 29;
// The window manager has determined the user to be inactive via other means.
// Set this to false to disable.
- optional bool is_user_inactive_override_from_window_manager = 33;
+ optional bool is_user_inactive_override_from_window_manager = 30;
// The screen state to use while dozing.
- optional .android.view.DisplayStateEnum doze_screen_state_override_from_dream_manager = 34;
+ optional .android.view.DisplayStateEnum doze_screen_state_override_from_dream_manager = 31;
// The screen brightness to use while dozing.
- optional float dozed_screen_brightness_override_from_dream_manager = 35;
+ optional float dozed_screen_brightness_override_from_dream_manager = 32;
// Screen brightness settings limits.
- optional ScreenBrightnessSettingLimitsProto screen_brightness_setting_limits = 36;
+ optional ScreenBrightnessSettingLimitsProto screen_brightness_setting_limits = 33;
// True if double tap to wake is enabled
- optional bool is_double_tap_wake_enabled = 37;
+ optional bool is_double_tap_wake_enabled = 34;
// True if we are currently in VR Mode.
- optional bool is_vr_mode_enabled = 38;
+ optional bool is_vr_mode_enabled = 35;
// True if Sidekick is controlling the display and we shouldn't change its power mode.
- optional bool draw_wake_lock_override_from_sidekick = 39;
+ optional bool draw_wake_lock_override_from_sidekick = 36;
}
+
+message BatterySaverStateMachineProto {
+ // Whether battery saver is enabled.
+ optional bool enabled = 1;
+
+ // Whether system has booted.
+ optional bool boot_completed = 2;
+
+ // Whether settings have been loaded already.
+ optional bool settings_loaded = 3;
+
+ // Whether battery status has been set at least once.
+ optional bool battery_status_set = 4;
+
+ // Whether automatic battery saver has been canceled by the user.
+ optional bool battery_saver_snoozing = 5;
+
+ // Whether the device is connected to any power source.
+ optional bool is_powered = 6;
+
+ // Current battery level in %, 0-100.
+ optional int32 battery_level = 7;
+
+ // Whether battery level is low or not.
+ optional bool is_battery_level_low = 8;
+
+ // The value of Global.LOW_POWER_MODE.
+ optional bool setting_battery_saver_enabled = 9;
+
+ // The value of Global.LOW_POWER_MODE_STICKY.
+ optional bool setting_battery_saver_enabled_sticky = 10;
+
+ // The value of Global.LOW_POWER_MODE_TRIGGER_LEVEL.
+ optional int32 setting_battery_saver_trigger_threshold = 11;
+}
\ No newline at end of file
diff --git a/core/res/res/layout/notification_template_material_ambient.xml b/core/res/res/layout/notification_template_material_ambient.xml
index 346aad6c..fdc9f01 100644
--- a/core/res/res/layout/notification_template_material_ambient.xml
+++ b/core/res/res/layout/notification_template_material_ambient.xml
@@ -52,6 +52,7 @@
>
<TextView android:id="@+id/title"
android:textAppearance="@style/TextAppearance.Material.Notification.Title"
+ android:fontFamily="sans-serif"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="top|center_horizontal"
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 55c17b9..b5e223c 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1340,6 +1340,30 @@
<integer-array name="config_autoBrightnessKeyboardBacklightValues">
</integer-array>
+ <!-- Array of light sensor lux values to define the minimum brightness curve, which guarantees
+ that any curve that dips below it is rejected by the system.
+ This prevents auto-brightness from setting the screen so dark as to prevent the user from
+ disabling auto-brightness or reseting the brightness curve via ADB.
+
+ The control points must be strictly increasing. Each control point corresponds to an entry
+ in the minimum brightness nits array. -->
+ <integer-array name="config_autoBrightnessMinimumBrightnessCurveLux">
+ <item>2000</item>
+ <item>4000</item>
+ </integer-array>
+
+ <!-- Array of desired screen brightness in nits corresponding to the lux values
+ in the config_autoBrightnessMinimumBrightnessCurveLux array.
+
+ This array should have size one greater than the size of the
+ config_autoBrightnessMinimumBrightnessCurveLux array. The values must be non-negative and
+ non-decreasing. -->
+ <array name="config_autoBrightnessMinimumBrightnessCurveNits">
+ <item>1.0</item>
+ <item>50.0</item>
+ <item>90.0</item>
+ </array>
+
<!-- Array of hysteresis constraint values for brightening, represented as tenths of a
percent. The length of this array is assumed to be one greater than
config_dynamicHysteresisLuxLevels. The brightening threshold is calculated as
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 0ef93e5..2e8f663 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1350,6 +1350,8 @@
<!-- Message shown by the fingerprint dialog when fingerprint is not recognized -->
<string name="fingerprint_not_recognized">Not recognized</string>
+ <!-- Accessibility message announced when a fingerprint has been authenticated [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_authenticated">Fingerprint authenticated</string>
<!-- Error message shown when the fingerprint hardware can't be accessed -->
<string name="fingerprint_error_hw_not_available">Fingerprint hardware not available.</string>
@@ -3357,19 +3359,22 @@
<skip />
<!-- Notification title when external media is being checked [CHAR LIMIT=30] -->
- <string name="ext_media_checking_notification_title">Preparing <xliff:g id="name" example="SD card">%s</xliff:g></string>
+ <string name="ext_media_checking_notification_title">Checking <xliff:g id="name" example="SD card">%s</xliff:g>\u2026</string>
<!-- Notification body when external media is being checked [CHAR LIMIT=NONE] -->
- <string name="ext_media_checking_notification_message">Checking for errors</string>
+ <string name="ext_media_checking_notification_message">Reviewing current content</string>
+ <!-- Notification body when new external media is detected [CHAR LIMIT=30] -->
+ <string name="ext_media_new_notification_title">New <xliff:g id="name" example="SD card">%s</xliff:g></string>
<!-- Notification body when new external media is detected [CHAR LIMIT=NONE] -->
- <string name="ext_media_new_notification_message">New <xliff:g id="name" example="SD card">%s</xliff:g> detected</string>
+ <string name="ext_media_new_notification_message">Tap to set up</string>
+
<!-- Notification body when external media is ready for use [CHAR LIMIT=NONE] -->
<string name="ext_media_ready_notification_message">For transferring photos and media</string>
<!-- Notification title when external media is unmountable (corrupt) [CHAR LIMIT=30] -->
- <string name="ext_media_unmountable_notification_title">Corrupted <xliff:g id="name" example="SD card">%s</xliff:g></string>
+ <string name="ext_media_unmountable_notification_title">Issue with <xliff:g id="name" example="SD card">%s</xliff:g></string>
<!-- Notification body when external media is unmountable (corrupt) [CHAR LIMIT=NONE] -->
- <string name="ext_media_unmountable_notification_message"><xliff:g id="name" example="SD card">%s</xliff:g> is corrupt. Tap to fix.</string>
+ <string name="ext_media_unmountable_notification_message">Tap to fix</string>
<!-- TV-specifiv notification body when external media is unmountable (corrupt) [CHAR LIMIT=NONE] -->
<string name="ext_media_unmountable_notification_message" product="tv"><xliff:g id="name" example="SD card">%s</xliff:g> is corrupt. Select to fix.</string>
@@ -3383,17 +3388,17 @@
<!-- Notification title when external media is unsafely removed [CHAR LIMIT=30] -->
<string name="ext_media_badremoval_notification_title"><xliff:g id="name" example="SD card">%s</xliff:g> unexpectedly removed</string>
<!-- Notification body when external media is unsafely removed [CHAR LIMIT=NONE] -->
- <string name="ext_media_badremoval_notification_message">Unmount <xliff:g id="name" example="SD card">%s</xliff:g> before removing to avoid data loss</string>
+ <string name="ext_media_badremoval_notification_message">Eject media before removing to avoid losing content</string>
<!-- Notification title when external media is missing [CHAR LIMIT=30] -->
- <string name="ext_media_nomedia_notification_title">Removed <xliff:g id="name" example="SD card">%s</xliff:g></string>
+ <string name="ext_media_nomedia_notification_title"><xliff:g id="name" example="SD card">%s</xliff:g> removed</string>
<!-- Notification body when external media is missing [CHAR LIMIT=NONE] -->
- <string name="ext_media_nomedia_notification_message"><xliff:g id="name" example="SD card">%s</xliff:g> removed; insert a new one</string>
+ <string name="ext_media_nomedia_notification_message">Some functionality may not work properly. Insert new storage.</string>
<!-- Notification title when external media is unmounting [CHAR LIMIT=30] -->
- <string name="ext_media_unmounting_notification_title">Still ejecting <xliff:g id="name" example="SD card">%s</xliff:g>\u2026</string>
+ <string name="ext_media_unmounting_notification_title">Ejecting <xliff:g id="name" example="SD card">%s</xliff:g></string>
<!-- Notification body when external media is unmounting [CHAR LIMIT=NONE] -->
- <string name="ext_media_unmounting_notification_message">Don\'t remove</string>
+ <string name="ext_media_unmounting_notification_message">Don\u2019t remove</string>
<!-- Notification action to setup external media [CHAR LIMIT=20] -->
<string name="ext_media_init_action">Set up</string>
@@ -3405,7 +3410,7 @@
<!-- Notification title when external media is missing [CHAR LIMIT=30] -->
<string name="ext_media_missing_title"><xliff:g id="name" example="SD card">%s</xliff:g> missing</string>
<!-- Notification body when external media is missing [CHAR LIMIT=30] -->
- <string name="ext_media_missing_message">Reinsert this device</string>
+ <string name="ext_media_missing_message">Insert device again</string>
<!-- Notification title when moving an application to external storage [CHAR LIMIT=30] -->
<string name="ext_media_move_specific_title">Moving <xliff:g id="name" example="Calculator">%s</xliff:g></string>
@@ -3413,14 +3418,14 @@
<string name="ext_media_move_title">Moving data</string>
<!-- Notification title when moving data to external storage [CHAR LIMIT=32] -->
- <string name="ext_media_move_success_title">Move complete</string>
+ <string name="ext_media_move_success_title">Content transfer is done</string>
<!-- Notification title when moving data to external storage [CHAR LIMIT=64] -->
- <string name="ext_media_move_success_message">Data moved to <xliff:g id="name" example="SD card">%s</xliff:g></string>
+ <string name="ext_media_move_success_message">Content moved to <xliff:g id="name" example="SD card">%s</xliff:g></string>
<!-- Notification title when moving data to external storage failed [CHAR LIMIT=32] -->
- <string name="ext_media_move_failure_title">Couldn\'t move data</string>
+ <string name="ext_media_move_failure_title">Couldn\u2019t move content</string>
<!-- Notification title when moving data to external storage failed [CHAR LIMIT=64] -->
- <string name="ext_media_move_failure_message">Data left at original location</string>
+ <string name="ext_media_move_failure_message">Try moving content again</string>
<!-- Short summary of storage media status when removed [CHAR LIMIT=32] -->
<string name="ext_media_status_removed">Removed</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index b9215f8..5eeb418 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1794,6 +1794,8 @@
<java-symbol type="array" name="config_autoBrightnessKeyboardBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLcdBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLevels" />
+ <java-symbol type="array" name="config_autoBrightnessMinimumBrightnessCurveLux" />
+ <java-symbol type="array" name="config_autoBrightnessMinimumBrightnessCurveNits" />
<java-symbol type="array" name="config_dynamicHysteresisBrightLevels" />
<java-symbol type="array" name="config_dynamicHysteresisDarkLevels" />
<java-symbol type="array" name="config_dynamicHysteresisLuxLevels" />
@@ -2382,6 +2384,7 @@
<java-symbol type="string" name="fingerprint_error_lockout_permanent" />
<java-symbol type="string" name="fingerprint_name_template" />
<java-symbol type="string" name="fingerprint_not_recognized" />
+ <java-symbol type="string" name="fingerprint_authenticated" />
<java-symbol type="string" name="fingerprint_error_no_fingerprints" />
<java-symbol type="string" name="fingerprint_error_hw_not_present" />
diff --git a/core/tests/coretests/src/android/app/usage/TimeSparseArrayTest.java b/core/tests/coretests/src/android/app/usage/TimeSparseArrayTest.java
new file mode 100644
index 0000000..db46740
--- /dev/null
+++ b/core/tests/coretests/src/android/app/usage/TimeSparseArrayTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package android.app.usage;
+
+import static org.junit.Assert.assertTrue;
+
+import android.os.SystemClock;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class TimeSparseArrayTest {
+ @Test
+ public void testDuplicateKeysNotDropped() {
+ final TimeSparseArray<Integer> testTimeSparseArray = new TimeSparseArray<>();
+ final long key = SystemClock.elapsedRealtime();
+ for (int i = 0; i < 5; i++) {
+ testTimeSparseArray.put(key, i);
+ }
+ for (int i = 0; i < 5; i++) {
+ final int valueIndex = testTimeSparseArray.indexOfValue(i);
+ assertTrue("Value " + i + " not found; intended key: " + key , valueIndex >= 0);
+ final long keyForValue = testTimeSparseArray.keyAt(valueIndex);
+ assertTrue("Value " + i + " stored too far (at " + keyForValue + ") from intended key "
+ + key, Math.abs(keyForValue - key) < 100);
+ }
+ }
+}
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index a504ab9..6ef773a 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -266,6 +266,7 @@
Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
Settings.Global.LOW_POWER_MODE,
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX,
+ Settings.Global.LOW_POWER_MODE_STICKY,
Settings.Global.LTE_SERVICE_FORCED,
Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
Settings.Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY,
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
index 2b5b27b..4f1efbf 100644
--- a/core/tests/coretests/src/android/widget/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -17,6 +17,7 @@
package android.widget;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
@@ -32,9 +33,11 @@
import android.support.test.runner.AndroidJUnit4;
import android.text.GetChars;
import android.text.Layout;
+import android.text.PrecomputedText;
import android.text.Selection;
import android.text.Spannable;
import android.view.View;
+import android.widget.TextView.BufferType;
import org.junit.Before;
import org.junit.Rule;
@@ -241,6 +244,82 @@
mTextView.onTextContextMenuItem(TextView.ID_CUT);
}
+ @Test
+ public void testUseDynamicLayout() {
+ mTextView = new TextView(mActivity);
+ mTextView.setTextIsSelectable(true);
+ String text = "HelloWorld";
+ PrecomputedText precomputed =
+ PrecomputedText.create(text, mTextView.getTextMetricsParams());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(text);
+ assertFalse(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(text);
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(precomputed);
+ assertFalse(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(precomputed);
+ assertTrue(mTextView.useDynamicLayout());
+ }
+
+ @Test
+ public void testUseDynamicLayout_SPANNABLE() {
+ mTextView = new TextView(mActivity);
+ mTextView.setTextIsSelectable(true);
+ String text = "HelloWorld";
+ PrecomputedText precomputed =
+ PrecomputedText.create(text, mTextView.getTextMetricsParams());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(text, BufferType.SPANNABLE);
+ android.util.Log.e("TextViewTest", "Text:" + mTextView.getText().getClass().getName());
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(text, BufferType.SPANNABLE);
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(precomputed, BufferType.SPANNABLE);
+ assertFalse(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(precomputed, BufferType.SPANNABLE);
+ assertTrue(mTextView.useDynamicLayout());
+ }
+
+ @Test
+ public void testUseDynamicLayout_EDITABLE() {
+ mTextView = new TextView(mActivity);
+ mTextView.setTextIsSelectable(true);
+ String text = "HelloWorld";
+ PrecomputedText precomputed =
+ PrecomputedText.create(text, mTextView.getTextMetricsParams());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(text, BufferType.EDITABLE);
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(text, BufferType.EDITABLE);
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(false);
+ mTextView.setText(precomputed, BufferType.EDITABLE);
+ assertTrue(mTextView.useDynamicLayout());
+
+ mTextView.setTextIsSelectable(true);
+ mTextView.setText(precomputed, BufferType.EDITABLE);
+ assertTrue(mTextView.useDynamicLayout());
+ }
+
private String createLongText() {
int size = 600 * 1000;
final StringBuilder builder = new StringBuilder(size);
diff --git a/data/etc/hiddenapi-package-whitelist.xml b/data/etc/hiddenapi-package-whitelist.xml
index bacddf14..a4a1b94 100644
--- a/data/etc/hiddenapi-package-whitelist.xml
+++ b/data/etc/hiddenapi-package-whitelist.xml
@@ -64,6 +64,7 @@
<hidden-api-whitelisted-app package="com.android.gallery" />
<hidden-api-whitelisted-app package="com.android.hotspot2" />
<hidden-api-whitelisted-app package="com.android.keychain" />
+ <hidden-api-whitelisted-app package="com.android.launcher3" />
<hidden-api-whitelisted-app package="com.android.location.fused" />
<hidden-api-whitelisted-app package="com.android.managedprovisioning" />
<hidden-api-whitelisted-app package="com.android.mms.service" />
diff --git a/data/keyboards/Android.mk b/data/keyboards/Android.mk
index 2daef0c..7949c77 100644
--- a/data/keyboards/Android.mk
+++ b/data/keyboards/Android.mk
@@ -28,7 +28,7 @@
validatekeymaps := $(HOST_OUT_EXECUTABLES)/validatekeymaps$(HOST_EXECUTABLE_SUFFIX)
$(LOCAL_BUILT_MODULE): PRIVATE_VALIDATEKEYMAPS := $(validatekeymaps)
$(LOCAL_BUILT_MODULE) : $(framework_keylayouts) $(framework_keycharmaps) $(framework_keyconfigs) | $(validatekeymaps)
- $(hide) -q $(PRIVATE_VALIDATEKEYMAPS) $^
+ $(hide) $(PRIVATE_VALIDATEKEYMAPS) -q $^
$(hide) mkdir -p $(dir $@) && touch $@
# Run validatekeymaps uncondionally for platform build.
diff --git a/graphics/java/android/graphics/drawable/AnimatedImageDrawable.java b/graphics/java/android/graphics/drawable/AnimatedImageDrawable.java
index 457e4aa..898939e 100644
--- a/graphics/java/android/graphics/drawable/AnimatedImageDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedImageDrawable.java
@@ -52,8 +52,20 @@
/**
* {@link Drawable} for drawing animated images (like GIF).
*
+ * <p>The framework handles decoding subsequent frames in another thread and
+ * updating when necessary. The drawable will only animate while it is being
+ * displayed.</p>
+ *
* <p>Created by {@link ImageDecoder#decodeDrawable}. A user needs to call
* {@link #start} to start the animation.</p>
+ *
+ * <p>It can also be defined in XML using the <code><animated-image></code>
+ * element.</p>
+ *
+ * @attr ref android.R.styleable#AnimatedImageDrawable_src
+ * @attr ref android.R.styleable#AnimatedImageDrawable_autoStart
+ * @attr ref android.R.styleable#AnimatedImageDrawable_repeatCount
+ * @attr ref android.R.styleable#AnimatedImageDrawable_autoMirrored
*/
public class AnimatedImageDrawable extends Drawable implements Animatable2 {
private int mIntrinsicWidth;
@@ -456,8 +468,8 @@
* <p>Does nothing if the animation is already running. If the animation is stopped,
* this will reset it.</p>
*
- * <p>If the animation starts, this will call
- * {@link Animatable2.AnimationCallback#onAnimationStart}.</p>
+ * <p>When the drawable is drawn, starting the animation,
+ * {@link Animatable2.AnimationCallback#onAnimationStart} will be called.</p>
*/
@Override
public void start() {
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 8b5114c..dfdddb2 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -2093,6 +2093,7 @@
}
mRadius = radius;
mRadiusArray = null;
+ computeOpacity();
}
public void setCornerRadii(float[] radii) {
@@ -2100,6 +2101,7 @@
if (radii == null) {
mRadius = 0;
}
+ computeOpacity();
}
public void setSize(int width, int height) {
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java
index 1018926..2c45d43 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java
@@ -339,6 +339,7 @@
return new AndroidKeyStoreSecretKey(secretKeyAlias, uid, keyAlgorithmString);
}
+ @NonNull
public static AndroidKeyStoreKey loadAndroidKeyStoreKeyFromKeystore(
@NonNull KeyStore keyStore, @NonNull String userKeyAlias, int uid)
throws UnrecoverableKeyException {
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index acab8bb..aaba1e3 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -759,6 +759,7 @@
case FOR_SYSTEM: return "FOR_SYSTEM";
case FOR_HDMI_SYSTEM_AUDIO: return "FOR_HDMI_SYSTEM_AUDIO";
case FOR_ENCODED_SURROUND: return "FOR_ENCODED_SURROUND";
+ case FOR_VIBRATE_RINGING: return "FOR_VIBRATE_RINGING";
default: return "unknown usage (" + usage + ")" ;
}
}
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 9175416..bc0e43b 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -3226,9 +3226,18 @@
if (stripOffsetsAttribute != null && stripByteCountsAttribute != null) {
long[] stripOffsets =
- (long[]) stripOffsetsAttribute.getValue(mExifByteOrder);
+ convertToLongArray(stripOffsetsAttribute.getValue(mExifByteOrder));
long[] stripByteCounts =
- (long[]) stripByteCountsAttribute.getValue(mExifByteOrder);
+ convertToLongArray(stripByteCountsAttribute.getValue(mExifByteOrder));
+
+ if (stripOffsets == null) {
+ Log.w(TAG, "stripOffsets should not be null.");
+ return;
+ }
+ if (stripByteCounts == null) {
+ Log.w(TAG, "stripByteCounts should not be null.");
+ return;
+ }
// Set thumbnail byte array data for non-consecutive strip bytes
byte[] totalStripBytes =
@@ -4025,4 +4034,22 @@
}
return false;
}
+
+ /**
+ * Convert given int[] to long[]. If long[] is given, just return it.
+ * Return null for other types of input.
+ */
+ private static long[] convertToLongArray(Object inputObj) {
+ if (inputObj instanceof int[]) {
+ int[] input = (int[]) inputObj;
+ long[] result = new long[input.length];
+ for (int i = 0; i < input.length; i++) {
+ result[i] = input[i];
+ }
+ return result;
+ } else if (inputObj instanceof long[]) {
+ return (long[]) inputObj;
+ }
+ return null;
+ }
}
diff --git a/media/java/android/media/MediaController2.java b/media/java/android/media/MediaController2.java
index 234a4f4..591f33f 100644
--- a/media/java/android/media/MediaController2.java
+++ b/media/java/android/media/MediaController2.java
@@ -16,6 +16,8 @@
package android.media;
+import static android.media.MediaPlayerBase.BUFFERING_STATE_UNKNOWN;
+
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -23,9 +25,7 @@
import android.content.Context;
import android.media.MediaPlaylistAgent.RepeatMode;
import android.media.MediaPlaylistAgent.ShuffleMode;
-import android.media.MediaSession2.Command;
import android.media.MediaSession2.CommandButton;
-import android.media.MediaSession2.CommandGroup;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.ErrorCode;
import android.media.session.MediaSessionManager;
@@ -54,7 +54,7 @@
* When controlling {@link MediaSessionService2}, the {@link MediaController2} would be
* available only if the session service allows this controller by
* {@link MediaSession2.SessionCallback#onConnect(MediaSession2, ControllerInfo)} for the service.
- * Wait {@link ControllerCallback#onConnected(MediaController2, CommandGroup)} or
+ * Wait {@link ControllerCallback#onConnected(MediaController2, SessionCommandGroup2)} or
* {@link ControllerCallback#onDisconnected(MediaController2)} for the result.
* <p>
* A controller can be created through token from {@link MediaSessionManager} if you hold the
@@ -81,7 +81,7 @@
* @param allowedCommands commands that's allowed by the session.
*/
public void onConnected(@NonNull MediaController2 controller,
- @NonNull CommandGroup allowedCommands) { }
+ @NonNull SessionCommandGroup2 allowedCommands) { }
/**
* Called when the session refuses the controller or the controller is disconnected from
@@ -100,7 +100,8 @@
* Called when the session set the custom layout through the
* {@link MediaSession2#setCustomLayout(ControllerInfo, List)}.
* <p>
- * Can be called before {@link #onConnected(MediaController2, CommandGroup)} is called.
+ * Can be called before {@link #onConnected(MediaController2, SessionCommandGroup2)} is
+ * called.
*
* @param controller the controller for this event
* @param layout
@@ -124,7 +125,7 @@
* @param commands newly allowed commands
*/
public void onAllowedCommandsChanged(@NonNull MediaController2 controller,
- @NonNull CommandGroup commands) { }
+ @NonNull SessionCommandGroup2 commands) { }
/**
* Called when the session sent a custom command.
@@ -135,7 +136,7 @@
* @param receiver
*/
public void onCustomCommand(@NonNull MediaController2 controller,
- @NonNull Command command, @Nullable Bundle args,
+ @NonNull SessionCommand2 command, @Nullable Bundle args,
@Nullable ResultReceiver receiver) { }
/**
@@ -147,16 +148,6 @@
public void onPlayerStateChanged(@NonNull MediaController2 controller, int state) { }
/**
- * Called when the player's position is changed
- *
- * @param controller the controller for this event
- * @param eventTimeMs timestamp when the position information is sent from the session
- * @param positionMs position in millis
- */
- public void onPositionChanged(@NonNull MediaController2 controller,
- long eventTimeMs, long positionMs) { }
-
- /**
* Called when playback speed is changed.
*
* @param controller the controller for this event
@@ -166,13 +157,24 @@
float speed) { }
/**
- * Called when the player's buffering position
+ * Called to report buffering events for a data source.
+ * <p>
+ * Use {@link #getBufferedPosition()} for current buffering position.
*
* @param controller the controller for this event
- * @param positionMs buffering position in millis
+ * @param item the media item for which buffering is happening.
+ * @param state the new buffering state.
*/
- public void onBufferedPositionChanged(@NonNull MediaController2 controller,
- long positionMs) { }
+ public void onBufferingStateChanged(@NonNull MediaController2 controller,
+ @NonNull MediaItem2 item, @MediaPlayerBase.BuffState int state) { }
+
+ /**
+ * Called to indicate that seeking is completed.
+ *
+ * @param controller the controller for this event.
+ * @param position the previous seeking request.
+ */
+ public void onSeekCompleted(@NonNull MediaController2 controller, long position) { }
/**
* Called when a error from
@@ -192,8 +194,7 @@
*
* @param controller the controller for this event
* @param item new item
- * @see #onPositionChanged(MediaController2, long, long)
- * @see #onBufferedPositionChanged(MediaController2, long)
+ * @see #onBufferingStateChanged(MediaController2, MediaItem2, int)
*/
// TODO(jaewan): Use this (b/74316764)
public void onCurrentMediaItemChanged(@NonNull MediaController2 controller,
@@ -203,43 +204,37 @@
* Called when a playlist is changed.
*
* @param controller the controller for this event
- * @param playlistAgent playlist agent for this event
* @param list new playlist
* @param metadata new metadata
*/
public void onPlaylistChanged(@NonNull MediaController2 controller,
- @NonNull MediaPlaylistAgent playlistAgent, @NonNull List<MediaItem2> list,
- @Nullable MediaMetadata2 metadata) { }
+ @NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) { }
/**
* Called when a playlist metadata is changed.
*
* @param controller the controller for this event
- * @param playlistAgent playlist agent for this event
* @param metadata new metadata
*/
public void onPlaylistMetadataChanged(@NonNull MediaController2 controller,
- @NonNull MediaPlaylistAgent playlistAgent, @Nullable MediaMetadata2 metadata) { }
+ @Nullable MediaMetadata2 metadata) { }
/**
* Called when the shuffle mode is changed.
*
* @param controller the controller for this event
- * @param playlistAgent playlist agent for this event
* @param shuffleMode repeat mode
* @see MediaPlaylistAgent#SHUFFLE_MODE_NONE
* @see MediaPlaylistAgent#SHUFFLE_MODE_ALL
* @see MediaPlaylistAgent#SHUFFLE_MODE_GROUP
*/
public void onShuffleModeChanged(@NonNull MediaController2 controller,
- @NonNull MediaPlaylistAgent playlistAgent,
@MediaPlaylistAgent.ShuffleMode int shuffleMode) { }
/**
* Called when the repeat mode is changed.
*
* @param controller the controller for this event
- * @param playlistAgent playlist agent for this event
* @param repeatMode repeat mode
* @see MediaPlaylistAgent#REPEAT_MODE_NONE
* @see MediaPlaylistAgent#REPEAT_MODE_ONE
@@ -247,7 +242,6 @@
* @see MediaPlaylistAgent#REPEAT_MODE_GROUP
*/
public void onRepeatModeChanged(@NonNull MediaController2 controller,
- @NonNull MediaPlaylistAgent playlistAgent,
@MediaPlaylistAgent.RepeatMode int repeatMode) { }
}
@@ -425,16 +419,14 @@
}
/**
- * Start fast forwarding. If playback is already fast forwarding this
- * may increase the rate.
+ * Fast forwards playback. If playback is already fast forwarding this may increase the rate.
*/
public void fastForward() {
mProvider.fastForward_impl();
}
/**
- * Start rewinding. If playback is already rewinding this may increase
- * the rate.
+ * Rewinds playback. If playback is already rewinding this may increase the rate.
*/
public void rewind() {
mProvider.rewind_impl();
@@ -450,9 +442,11 @@
}
/**
+ * Revisit this API later.
* @hide
*/
public void skipForward() {
+ // TODO(jaewan): (Post-P) Discuss this API later.
// To match with KEYCODE_MEDIA_SKIP_FORWARD
}
@@ -460,6 +454,7 @@
* @hide
*/
public void skipBackward() {
+ // TODO(jaewan): (Post-P) Discuss this API later.
// To match with KEYCODE_MEDIA_SKIP_BACKWARD
}
@@ -605,16 +600,15 @@
}
/**
- * Get the lastly cached position from
- * {@link ControllerCallback#onPositionChanged(MediaController2, long, long)}.
+ * Gets the current playback position.
* <p>
* This returns the calculated value of the position, based on the difference between the
* update time and current time.
*
* @return position
*/
- public long getPosition() {
- return mProvider.getPosition_impl();
+ public long getCurrentPosition() {
+ return mProvider.getCurrentPosition_impl();
}
/**
@@ -634,9 +628,22 @@
// TODO(jaewan): implement this (b/74093080)
}
+
/**
- * Get the lastly cached buffered position from
- * {@link ControllerCallback#onBufferedPositionChanged(MediaController2, long)}.
+ * Gets the current buffering state of the player.
+ * During buffering, see {@link #getBufferedPosition()} for the quantifying the amount already
+ * buffered.
+ * @return the buffering state.
+ */
+ public @MediaPlayerBase.BuffState int getBufferingState() {
+ // TODO(jaewan): Implement.
+ return BUFFERING_STATE_UNKNOWN;
+ }
+
+ /**
+ * Gets the lastly cached buffered position from the session when
+ * {@link ControllerCallback#onBufferingStateChanged(MediaController2, MediaItem2, int)} is
+ * called.
*
* @return buffering position in millis
*/
@@ -676,22 +683,21 @@
* @param args optional argument
* @param cb optional result receiver
*/
- public void sendCustomCommand(@NonNull Command command, @Nullable Bundle args,
+ public void sendCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args,
@Nullable ResultReceiver cb) {
mProvider.sendCustomCommand_impl(command, args, cb);
}
/**
* Returns the cached playlist from
- * {@link ControllerCallback#onPlaylistChanged(MediaController2, MediaPlaylistAgent, List,
- * MediaMetadata2)}.
+ * {@link ControllerCallback#onPlaylistChanged(MediaController2, List, MediaMetadata2)}.
* <p>
* This list may differ with the list that was specified with
- * {@link #setPlaylist(List, MediaMetadata2)} depending on the {@link MediaPlaylistAgent}
- * implementation. Use media items returned here for other playlist agent APIs such as
- * {@link MediaPlaylistAgent#skipToPlaylistItem(MediaItem2)}.
+ * {@link #setPlaylist(List, MediaMetadata2)} depending on the session implementation. Use media
+ * items returned here for other playlist APIs such as {@link #skipToPlaylistItem(MediaItem2)}.
*
- * @return playlist. Can be {@code null} if the controller doesn't have enough permission.
+ * @return The playlist. Can be {@code null} if the controller doesn't have enough permission or
+ * the session hasn't set any playlist.
*/
public @Nullable List<MediaItem2> getPlaylist() {
return mProvider.getPlaylist_impl();
@@ -707,8 +713,7 @@
* @param list playlist
* @param metadata metadata of the playlist
* @see #getPlaylist()
- * @see ControllerCallback#onPlaylistChanged(
- * MediaController2, MediaPlaylistAgent, List, MediaMetadata2)
+ * @see ControllerCallback#onPlaylistChanged(MediaController2, List, MediaMetadata2)
*/
public void setPlaylist(@NonNull List<MediaItem2> list, @Nullable MediaMetadata2 metadata) {
mProvider.setPlaylist_impl(list, metadata);
@@ -725,10 +730,8 @@
/**
* Gets the lastly cached playlist playlist metadata either from
- * {@link ControllerCallback#onPlaylistMetadataChanged(
- * MediaController2, MediaPlaylistAgent, MediaMetadata2)} or
- * {@link ControllerCallback#onPlaylistChanged(
- * MediaController2, MediaPlaylistAgent, List, MediaMetadata2)}.
+ * {@link ControllerCallback#onPlaylistMetadataChanged(MediaController2, MediaMetadata2)} or
+ * {@link ControllerCallback#onPlaylistChanged(MediaController2, List, MediaMetadata2)}.
*
* @return metadata metadata of the playlist, or null if none is set
*/
@@ -788,7 +791,7 @@
/**
* Skips to the previous item in the playlist.
* <p>
- * This calls {@link MediaPlaylistAgent#skipToPreviousItem()}.
+ * This calls {@link MediaSession2#skipToPreviousItem()} if the session allows.
*/
public void skipToPreviousItem() {
mProvider.skipToPreviousItem_impl();
@@ -797,7 +800,7 @@
/**
* Skips to the next item in the playlist.
* <p>
- * This calls {@link MediaPlaylistAgent#skipToNextItem()}.
+ * This calls {@link MediaSession2#skipToNextItem()} if the session allows.
*/
public void skipToNextItem() {
mProvider.skipToNextItem_impl();
@@ -806,7 +809,7 @@
/**
* Skips to the item in the playlist.
* <p>
- * This calls {@link MediaPlaylistAgent#skipToPlaylistItem(MediaItem2)}.
+ * This calls {@link MediaSession2#skipToPlaylistItem(MediaItem2)} if the session allows.
*
* @param item The item in the playlist you want to play
*/
@@ -816,7 +819,7 @@
/**
* Gets the cached repeat mode from the {@link ControllerCallback#onRepeatModeChanged(
- * MediaController2, MediaPlaylistAgent, int)}.
+ * MediaController2, int)}.
*
* @return repeat mode
* @see MediaPlaylistAgent#REPEAT_MODE_NONE
@@ -843,7 +846,7 @@
/**
* Gets the cached shuffle mode from the {@link ControllerCallback#onShuffleModeChanged(
- * MediaController2, MediaPlaylistAgent, int)}.
+ * MediaController2, int)}.
*
* @return The shuffle mode
* @see MediaPlaylistAgent#SHUFFLE_MODE_NONE
diff --git a/media/java/android/media/MediaItem2.java b/media/java/android/media/MediaItem2.java
index 1967a1c..423a1fd 100644
--- a/media/java/android/media/MediaItem2.java
+++ b/media/java/android/media/MediaItem2.java
@@ -19,7 +19,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.Context;
import android.media.update.ApiLoader;
import android.media.update.MediaItem2Provider;
import android.os.Bundle;
@@ -81,8 +80,8 @@
return mProvider.toBundle_impl();
}
- public static MediaItem2 fromBundle(Context context, Bundle bundle) {
- return ApiLoader.getProvider().fromBundle_MediaItem2(context, bundle);
+ public static MediaItem2 fromBundle(Bundle bundle) {
+ return ApiLoader.getProvider().fromBundle_MediaItem2(bundle);
}
public String toString() {
@@ -161,11 +160,10 @@
/**
* Constructor for {@link Builder}
*
- * @param context
* @param flags
*/
- public Builder(@NonNull Context context, @Flags int flags) {
- mProvider = ApiLoader.getProvider().createMediaItem2Builder(context, this, flags);
+ public Builder(@Flags int flags) {
+ mProvider = ApiLoader.getProvider().createMediaItem2Builder(this, flags);
}
/**
diff --git a/media/java/android/media/MediaLibraryService2.java b/media/java/android/media/MediaLibraryService2.java
index 034d17e..f29d386 100644
--- a/media/java/android/media/MediaLibraryService2.java
+++ b/media/java/android/media/MediaLibraryService2.java
@@ -20,7 +20,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.PendingIntent;
-import android.content.Context;
import android.media.MediaLibraryService2.MediaLibrarySession.Builder;
import android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback;
import android.media.MediaSession2.ControllerInfo;
@@ -74,8 +73,8 @@
* Callback for the {@link MediaLibrarySession}.
*/
public static class MediaLibrarySessionCallback extends MediaSession2.SessionCallback {
- public MediaLibrarySessionCallback(@NonNull Context context) {
- super(context);
+ public MediaLibrarySessionCallback() {
+ super();
}
/**
@@ -401,10 +400,9 @@
* @param rootId The root id for browsing.
* @param extras Any extras about the library service.
*/
- public LibraryRoot(@NonNull Context context,
- @NonNull String rootId, @Nullable Bundle extras) {
+ public LibraryRoot(@NonNull String rootId, @Nullable Bundle extras) {
mProvider = ApiLoader.getProvider().createMediaLibraryService2LibraryRoot(
- context, this, rootId, extras);
+ this, rootId, extras);
}
/**
diff --git a/media/java/android/media/MediaMetadata2.java b/media/java/android/media/MediaMetadata2.java
index 1a15962..7b03ae0 100644
--- a/media/java/android/media/MediaMetadata2.java
+++ b/media/java/android/media/MediaMetadata2.java
@@ -19,7 +19,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
-import android.content.Context;
import android.graphics.Bitmap;
import android.media.update.ApiLoader;
import android.media.update.MediaMetadata2Provider;
@@ -357,28 +356,6 @@
public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
/**
- * The metadata key for a {@link Float} typed value to retrieve the information about the
- * radio frequency if this metadata represents radio content.
- *
- * @see Builder#putFloat(String, float)
- * @see #getFloat(String)
- */
- public static final String METADATA_KEY_RADIO_FREQUENCY =
- "android.media.metadata.RADIO_FREQUENCY";
-
- /**
- * The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
- * information about the radio callsign if this metadata represents radio content.
- *
- * @see Builder#putText(String, CharSequence)
- * @see Builder#putString(String, String)
- * @see #getText(String)
- * @see #getString(String)
- */
- public static final String METADATA_KEY_RADIO_CALLSIGN =
- "android.media.metadata.RADIO_CALLSIGN";
-
- /**
* The metadata key for a {@link Long} typed value to retrieve the information about the
* bluetooth folder type of the media specified in the section 6.10.2.2 of the Bluetooth
* AVRCP 1.5. It should be one of the following:
@@ -502,7 +479,7 @@
METADATA_KEY_DATE, METADATA_KEY_GENRE, METADATA_KEY_ALBUM_ARTIST, METADATA_KEY_ART_URI,
METADATA_KEY_ALBUM_ART_URI, METADATA_KEY_DISPLAY_TITLE, METADATA_KEY_DISPLAY_SUBTITLE,
METADATA_KEY_DISPLAY_DESCRIPTION, METADATA_KEY_DISPLAY_ICON_URI,
- METADATA_KEY_MEDIA_ID, METADATA_KEY_MEDIA_URI, METADATA_KEY_RADIO_CALLSIGN})
+ METADATA_KEY_MEDIA_ID, METADATA_KEY_MEDIA_URI})
@Retention(RetentionPolicy.SOURCE)
public @interface TextKey {}
@@ -532,7 +509,7 @@
/**
* @hide
*/
- @StringDef({METADATA_KEY_RADIO_FREQUENCY})
+ // TODO(jaewan): Add predefined float key.
@Retention(RetentionPolicy.SOURCE)
public @interface FloatKey {}
@@ -679,13 +656,11 @@
* Creates the {@link MediaMetadata2} from the bundle that previously returned by
* {@link #toBundle()}.
*
- * @param context context
* @param bundle bundle for the metadata
* @return a new MediaMetadata2
*/
- public static @NonNull MediaMetadata2 fromBundle(@NonNull Context context,
- @Nullable Bundle bundle) {
- return ApiLoader.getProvider().fromBundle_MediaMetadata2(context, bundle);
+ public static @NonNull MediaMetadata2 fromBundle(@Nullable Bundle bundle) {
+ return ApiLoader.getProvider().fromBundle_MediaMetadata2(bundle);
}
/**
@@ -699,8 +674,8 @@
* Create an empty Builder. Any field that should be included in the
* {@link MediaMetadata2} must be added.
*/
- public Builder(@NonNull Context context) {
- mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(context, this);
+ public Builder() {
+ mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(this);
}
/**
@@ -710,8 +685,8 @@
*
* @param source
*/
- public Builder(@NonNull Context context, @NonNull MediaMetadata2 source) {
- mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(context, this, source);
+ public Builder(@NonNull MediaMetadata2 source) {
+ mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(this, source);
}
/**
@@ -741,7 +716,6 @@
* <li>{@link #METADATA_KEY_DISPLAY_SUBTITLE}</li>
* <li>{@link #METADATA_KEY_DISPLAY_DESCRIPTION}</li>
* <li>{@link #METADATA_KEY_DISPLAY_ICON_URI}</li>
- * <li>{@link #METADATA_KEY_RADIO_CALLSIGN}</li>
* </ul>
*
* @param key The key for referencing this value
@@ -773,7 +747,6 @@
* <li>{@link #METADATA_KEY_DISPLAY_SUBTITLE}</li>
* <li>{@link #METADATA_KEY_DISPLAY_DESCRIPTION}</li>
* <li>{@link #METADATA_KEY_DISPLAY_ICON_URI}</li>
- * <li>{@link #METADATA_KEY_RADIO_CALLSIGN}</li>
* </ul>
*
* @param key The key for referencing this value
@@ -848,12 +821,7 @@
}
/**
- * Put a float value into the metadata. Custom keys may be used, but if
- * the METADATA_KEYs defined in this class are used they may only be one
- * of the following:
- * <ul>
- * <li>{@link #METADATA_KEY_RADIO_FREQUENCY}</li>
- * </ul>
+ * Put a float value into the metadata. Custom keys may be used.
*
* @param key The key for referencing this value
* @param value The float value to store
diff --git a/media/java/android/media/MediaPlayerBase.java b/media/java/android/media/MediaPlayerBase.java
index 1fcf02b..a426552 100644
--- a/media/java/android/media/MediaPlayerBase.java
+++ b/media/java/android/media/MediaPlayerBase.java
@@ -130,33 +130,6 @@
*/
public abstract void seekTo(long pos);
- /**
- * Fast forwards playback. If playback is already fast forwarding this may increase the rate.
- * <p>
- * Default implementation sets the playback speed to the 2.0f
- * @see #setPlaybackSpeed(float)
- * @hide
- */
- // TODO(jaewan): Unhide (b/74724709)
- public void fastForward() {
- setPlaybackSpeed(2.0f);
- }
-
- /**
- * Rewinds playback. If playback is already rewinding this may increase the rate.
- * <p>
- * Default implementation sets the playback speed to the -1.0f if
- * {@link #isReversePlaybackSupported()} returns {@code true}.
- * @see #setPlaybackSpeed(float)
- * @hide
- */
- // TODO(jaewan): Unhide (b/74724709)
- public void rewind() {
- if (isReversePlaybackSupported()) {
- setPlaybackSpeed(-1.0f);
- }
- }
-
public static final long UNKNOWN_TIME = -1;
/**
@@ -337,6 +310,22 @@
*/
public void onBufferingStateChanged(@NonNull MediaPlayerBase mpb,
@NonNull DataSourceDesc dsd, @BuffState int state) { }
+
+ /**
+ * Called to indicate that the playback speed has changed.
+ * @param mpb the player that has changed the playback speed.
+ * @param speed the new playback speed.
+ */
+ public void onPlaybackSpeedChanged(@NonNull MediaPlayerBase mpb, float speed) { }
+
+ /**
+ * Called to indicate that {@link #seekTo(long)} is completed.
+ *
+ * @param mpb the player that has completed seeking.
+ * @param position the previous seeking request.
+ * @see #seekTo(long)
+ */
+ public void onSeekCompleted(@NonNull MediaPlayerBase mpb, long position) { }
}
}
diff --git a/media/java/android/media/MediaPlaylistAgent.java b/media/java/android/media/MediaPlaylistAgent.java
index 453e24a..88f37e7 100644
--- a/media/java/android/media/MediaPlaylistAgent.java
+++ b/media/java/android/media/MediaPlaylistAgent.java
@@ -20,7 +20,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.Context;
import android.media.update.ApiLoader;
import android.media.update.MediaPlaylistAgentProvider;
@@ -148,8 +147,8 @@
@RepeatMode int repeatMode) { }
}
- public MediaPlaylistAgent(@NonNull Context context) {
- mProvider = ApiLoader.getProvider().createMediaPlaylistAgent(context, this);
+ public MediaPlaylistAgent() {
+ mProvider = ApiLoader.getProvider().createMediaPlaylistAgent(this);
}
/**
@@ -337,16 +336,21 @@
}
/**
- * Gets a {@link MediaItem2} in the playlist that matches given {@code dsd}.
- * You can override this method to have more finer control of updating {@link DataSourceDesc}
- * on items in the playlist.
+ * Called by {@link MediaSession2} when it wants to translate {@link DataSourceDesc} from the
+ * {@link MediaPlayerBase.PlayerEventCallback} to the {@link MediaItem2}. Override this method
+ * if you want to create {@link DataSourceDesc}s dynamically, instead of specifying them with
+ * {@link #setPlaylist(List, MediaMetadata2)}.
+ * <p>
+ * Session would throw an exception if this returns {@code null} for {@param dsd} from the
+ * {@link MediaPlayerBase.PlayerEventCallback}.
+ * <p>
+ * Default implementation calls the {@link #getPlaylist()} and searches the {@link MediaItem2}
+ * with the {@param dsd}.
*
+ * @param dsd The dsd to query.
* @return A {@link MediaItem2} object in the playlist that matches given {@code dsd}.
- * {@code null} if playlist is not set, or if the playlist has no matching item.
* @throws IllegalArgumentException if {@code dsd} is null
- * @hide
*/
- // TODO(jaewan): Unhide
public @Nullable MediaItem2 getMediaItem(@NonNull DataSourceDesc dsd) {
return mProvider.getMediaItem_impl(dsd);
}
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 9d2c2828..f476a6c 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -946,6 +946,7 @@
values.put(Audio.Media.IS_MUSIC, music);
values.put(Audio.Media.IS_PODCAST, podcasts);
} else if ((mFileType == MediaFile.FILE_TYPE_JPEG
+ || mFileType == MediaFile.FILE_TYPE_HEIF
|| MediaFile.isRawImageFileType(mFileType)) && !mNoMedia) {
ExifInterface exif = null;
try {
diff --git a/media/java/android/media/MediaSession2.java b/media/java/android/media/MediaSession2.java
index 0f4b5da..2b3c2b4 100644
--- a/media/java/android/media/MediaSession2.java
+++ b/media/java/android/media/MediaSession2.java
@@ -16,7 +16,7 @@
package android.media;
-import static android.media.MediaPlayerBase.PLAYER_STATE_IDLE;
+import static android.media.MediaPlayerBase.BUFFERING_STATE_UNKNOWN;
import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
@@ -26,7 +26,6 @@
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayerBase.BuffState;
-import android.media.MediaPlayerBase.PlayerEventCallback;
import android.media.MediaPlayerBase.PlayerState;
import android.media.MediaPlaylistAgent.RepeatMode;
import android.media.MediaPlaylistAgent.ShuffleMode;
@@ -34,8 +33,6 @@
import android.media.update.MediaSession2Provider;
import android.media.update.MediaSession2Provider.BuilderBaseProvider;
import android.media.update.MediaSession2Provider.CommandButtonProvider;
-import android.media.update.MediaSession2Provider.CommandGroupProvider;
-import android.media.update.MediaSession2Provider.CommandProvider;
import android.media.update.MediaSession2Provider.ControllerInfoProvider;
import android.media.update.ProviderCreator;
import android.net.Uri;
@@ -85,241 +82,6 @@
private final MediaSession2Provider mProvider;
/**
- * Command code for the custom command which can be defined by string action in the
- * {@link Command}.
- */
- public static final int COMMAND_CODE_CUSTOM = 0;
-
- /**
- * Command code for {@link MediaController2#play()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_PLAY = 1;
-
- /**
- * Command code for {@link MediaController2#pause()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_PAUSE = 2;
-
- /**
- * Command code for {@link MediaController2#stop()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_STOP = 3;
-
- /**
- * Command code for {@link MediaController2#skipToNextItem()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_SKIP_NEXT_ITEM = 4;
-
- /**
- * Command code for {@link MediaController2#skipToPreviousItem()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_SKIP_PREV_ITEM = 5;
-
- /**
- * Command code for {@link MediaController2#prepare()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_PREPARE = 6;
-
- /**
- * Command code for {@link MediaController2#fastForward()}.
- * <p>
- * This is transport control command. Command would be sent directly to the player if the
- * session doesn't reject the request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_FAST_FORWARD = 7;
-
- /**
- * Command code for {@link MediaController2#rewind()}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_REWIND = 8;
-
- /**
- * Command code for {@link MediaController2#seekTo(long)}.
- * <p>
- * Command would be sent directly to the player if the session doesn't reject the request
- * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_SEEK_TO = 9;
-
- /**
- * Command code for both {@link MediaController2#setVolumeTo(int, int)}.
- * <p>
- * Command would set the device volume or send to the volume provider directly if the session
- * doesn't reject the request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_SET_VOLUME = 10;
-
- /**
- * Command code for both {@link MediaController2#adjustVolume(int, int)}.
- * <p>
- * Command would adjust the device volume or send to the volume provider directly if the session
- * doesn't reject the request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYBACK_ADJUST_VOLUME = 11;
-
- /**
- * Command code for {@link MediaController2#skipToPlaylistItem(MediaItem2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM = 12;
-
- /**
- * Command code for {@link MediaController2#setShuffleMode(int)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_SET_SHUFFLE_MODE = 13;
-
- /**
- * Command code for {@link MediaController2#setRepeatMode(int)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_SET_REPEAT_MODE = 14;
-
- /**
- * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_ADD_ITEM = 15;
-
- /**
- * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_REMOVE_ITEM = 16;
-
- /**
- * Command code for {@link MediaController2#replacePlaylistItem(int, MediaItem2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_REPLACE_ITEM = 17;
-
- /**
- * Command code for {@link MediaController2#getPlaylist()}. This will expose metadata
- * information to the controller.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_GET_LIST = 18;
-
- /**
- * Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_SET_LIST = 19;
-
- /**
- * Command code for {@link MediaController2#getPlaylistMetadata()}. This will expose
- * metadata information to the controller.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_GET_LIST_METADATA = 20;
-
- /**
- * Command code for {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}.
- * <p>
- * Command would be sent directly to the playlist agent if the session doesn't reject the
- * request through the
- * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
- */
- public static final int COMMAND_CODE_PLAYLIST_SET_LIST_METADATA = 21;
-
- /**
- * Command code for {@link MediaController2#playFromMediaId(String, Bundle)}.
- */
- public static final int COMMAND_CODE_PLAY_FROM_MEDIA_ID = 22;
-
- /**
- * Command code for {@link MediaController2#playFromUri(Uri, Bundle)}.
- */
- public static final int COMMAND_CODE_PLAY_FROM_URI = 23;
-
- /**
- * Command code for {@link MediaController2#playFromSearch(String, Bundle)}.
- */
- public static final int COMMAND_CODE_PLAY_FROM_SEARCH = 24;
-
- /**
- * Command code for {@link MediaController2#prepareFromMediaId(String, Bundle)}.
- */
- public static final int COMMAND_CODE_PREPARE_FROM_MEDIA_ID = 25;
-
- /**
- * Command code for {@link MediaController2#prepareFromUri(Uri, Bundle)}.
- */
- public static final int COMMAND_CODE_PREPARE_FROM_URI = 26;
-
- /**
- * Command code for {@link MediaController2#prepareFromSearch(String, Bundle)}.
- */
- public static final int COMMAND_CODE_PREPARE_FROM_SEARCH = 27;
-
- /**
- * Command code for {@link MediaController2#setRating(String, Rating2)}.
- * @hide
- */
- // TODO(jaewan): Unhide
- public static final int COMMAND_CODE_SET_RATING = 29;
-
- /**
- * Command code for {@link MediaBrowser2} specific functions that allows navigation and search
- * from the {@link MediaLibraryService2}. This would be ignored for a {@link MediaSession2},
- * not {@link android.media.MediaLibraryService2.MediaLibrarySession}.
- *
- * @see MediaBrowser2
- */
- public static final int COMMAND_CODE_BROWSER = 28;
-
- /**
* @hide
*/
@IntDef({ERROR_CODE_UNKNOWN_ERROR, ERROR_CODE_APP_ERROR, ERROR_CODE_NOT_SUPPORTED,
@@ -422,149 +184,6 @@
}
/**
- * Define a command that a {@link MediaController2} can send to a {@link MediaSession2}.
- * <p>
- * If {@link #getCommandCode()} isn't {@link #COMMAND_CODE_CUSTOM}), it's predefined command.
- * If {@link #getCommandCode()} is {@link #COMMAND_CODE_CUSTOM}), it's custom command and
- * {@link #getCustomCommand()} shouldn't be {@code null}.
- */
- public static final class Command {
- private final CommandProvider mProvider;
-
- public Command(@NonNull Context context, int commandCode) {
- mProvider = ApiLoader.getProvider().createMediaSession2Command(
- this, commandCode, null, null);
- }
-
- public Command(@NonNull Context context, @NonNull String action, @Nullable Bundle extras) {
- if (action == null) {
- throw new IllegalArgumentException("action shouldn't be null");
- }
- mProvider = ApiLoader.getProvider().createMediaSession2Command(
- this, COMMAND_CODE_CUSTOM, action, extras);
- }
-
- /**
- * @hide
- */
- public CommandProvider getProvider() {
- return mProvider;
- }
-
- public int getCommandCode() {
- return mProvider.getCommandCode_impl();
- }
-
- public @Nullable String getCustomCommand() {
- return mProvider.getCustomCommand_impl();
- }
-
- public @Nullable Bundle getExtras() {
- return mProvider.getExtras_impl();
- }
-
- /**
- * @return a new Bundle instance from the Command
- * @hide
- */
- public Bundle toBundle() {
- return mProvider.toBundle_impl();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof Command)) {
- return false;
- }
- return mProvider.equals_impl(((Command) obj).mProvider);
- }
-
- @Override
- public int hashCode() {
- return mProvider.hashCode_impl();
- }
-
- /**
- * @return a new Command instance from the Bundle
- * @hide
- */
- public static Command fromBundle(@NonNull Context context, @NonNull Bundle command) {
- return ApiLoader.getProvider().fromBundle_MediaSession2Command(context, command);
- }
- }
-
- /**
- * Represent set of {@link Command}.
- */
- public static final class CommandGroup {
- private final CommandGroupProvider mProvider;
-
- public CommandGroup(@NonNull Context context) {
- mProvider = ApiLoader.getProvider().createMediaSession2CommandGroup(
- context, this, null);
- }
-
- public CommandGroup(@NonNull Context context, @Nullable CommandGroup others) {
- mProvider = ApiLoader.getProvider().createMediaSession2CommandGroup(
- context, this, others);
- }
-
- /**
- * @hide
- */
- public CommandGroup(@NonNull CommandGroupProvider provider) {
- mProvider = provider;
- }
-
- public void addCommand(@NonNull Command command) {
- mProvider.addCommand_impl(command);
- }
-
- public void addAllPredefinedCommands() {
- mProvider.addAllPredefinedCommands_impl();
- }
-
- public void removeCommand(@NonNull Command command) {
- mProvider.removeCommand_impl(command);
- }
-
- public boolean hasCommand(@NonNull Command command) {
- return mProvider.hasCommand_impl(command);
- }
-
- public boolean hasCommand(int code) {
- return mProvider.hasCommand_impl(code);
- }
-
- public @NonNull List<Command> getCommands() {
- return mProvider.getCommands_impl();
- }
-
- /**
- * @hide
- */
- public @NonNull CommandGroupProvider getProvider() {
- return mProvider;
- }
-
- /**
- * @return new bundle from the CommandGroup
- * @hide
- */
- public @NonNull Bundle toBundle() {
- return mProvider.toBundle_impl();
- }
-
- /**
- * @return new instance of CommandGroup from the bundle
- * @hide
- */
- public static @Nullable CommandGroup fromBundle(Context context, Bundle commands) {
- return ApiLoader.getProvider().fromBundle_MediaSession2CommandGroup(context, commands);
- }
- }
-
- /**
* Callback to be called for all incoming commands from {@link MediaController2}s.
* <p>
* If it's not set, the session will accept all controllers and all incoming commands by
@@ -572,15 +191,6 @@
*/
// TODO(jaewan): Move this to updatable for default implementation (b/74091963)
public static abstract class SessionCallback {
- private final Context mContext;
-
- public SessionCallback(@NonNull Context context) {
- if (context == null) {
- throw new IllegalArgumentException("context shouldn't be null");
- }
- mContext = context;
- }
-
/**
* Called when a controller is created for this session. Return allowed commands for
* controller. By default it allows all connection requests and commands.
@@ -593,9 +203,9 @@
* @param controller controller information.
* @return allowed commands. Can be {@code null} to reject connection.
*/
- public @Nullable CommandGroup onConnect(@NonNull MediaSession2 session,
+ public @Nullable SessionCommandGroup2 onConnect(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller) {
- CommandGroup commands = new CommandGroup(mContext);
+ SessionCommandGroup2 commands = new SessionCommandGroup2();
commands.addAllPredefinedCommands();
return commands;
}
@@ -617,23 +227,23 @@
* @param controller controller information.
* @param command a command. This method will be called for every single command.
* @return {@code true} if you want to accept incoming command. {@code false} otherwise.
- * @see #COMMAND_CODE_PLAYBACK_PLAY
- * @see #COMMAND_CODE_PLAYBACK_PAUSE
- * @see #COMMAND_CODE_PLAYBACK_STOP
- * @see #COMMAND_CODE_PLAYBACK_SKIP_NEXT_ITEM
- * @see #COMMAND_CODE_PLAYBACK_SKIP_PREV_ITEM
- * @see #COMMAND_CODE_PLAYBACK_PREPARE
- * @see #COMMAND_CODE_PLAYBACK_FAST_FORWARD
- * @see #COMMAND_CODE_PLAYBACK_REWIND
- * @see #COMMAND_CODE_PLAYBACK_SEEK_TO
- * @see #COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM
- * @see #COMMAND_CODE_PLAYLIST_ADD_ITEM
- * @see #COMMAND_CODE_PLAYLIST_REMOVE_ITEM
- * @see #COMMAND_CODE_PLAYLIST_GET_LIST
- * @see #COMMAND_CODE_PLAYBACK_SET_VOLUME
+ * @see SessionCommand2#COMMAND_CODE_PLAYBACK_PLAY
+ * @see SessionCommand2#COMMAND_CODE_PLAYBACK_PAUSE
+ * @see SessionCommand2#COMMAND_CODE_PLAYBACK_STOP
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_SKIP_NEXT_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_SKIP_PREV_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYBACK_PREPARE
+ * @see SessionCommand2#COMMAND_CODE_SESSION_FAST_FORWARD
+ * @see SessionCommand2#COMMAND_CODE_SESSION_REWIND
+ * @see SessionCommand2#COMMAND_CODE_PLAYBACK_SEEK_TO
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_ADD_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_REMOVE_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_GET_LIST
+ * @see SessionCommand2#COMMAND_CODE_SET_VOLUME
*/
public boolean onCommandRequest(@NonNull MediaSession2 session,
- @NonNull ControllerInfo controller, @NonNull Command command) {
+ @NonNull ControllerInfo controller, @NonNull SessionCommand2 command) {
return true;
}
@@ -656,7 +266,7 @@
/**
* Called when a controller sent a custom command through
- * {@link MediaController2#sendCustomCommand(Command, Bundle, ResultReceiver)}.
+ * {@link MediaController2#sendCustomCommand(SessionCommand2, Bundle, ResultReceiver)}.
*
* @param session the session for this event
* @param controller controller information
@@ -665,7 +275,7 @@
* @param cb optional result receiver
*/
public void onCustomCommand(@NonNull MediaSession2 session,
- @NonNull ControllerInfo controller, @NonNull Command customCommand,
+ @NonNull ControllerInfo controller, @NonNull SessionCommand2 customCommand,
@Nullable Bundle args, @Nullable ResultReceiver cb) { }
/**
@@ -676,7 +286,7 @@
* @param controller controller information
* @param mediaId media id
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PLAY_FROM_MEDIA_ID
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID
*/
public void onPlayFromMediaId(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull String mediaId,
@@ -693,7 +303,7 @@
* @param controller controller information
* @param query query string. Can be empty to indicate any suggested media
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PLAY_FROM_SEARCH
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_SEARCH
*/
public void onPlayFromSearch(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull String query,
@@ -707,7 +317,7 @@
* @param controller controller information
* @param uri uri
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PLAY_FROM_URI
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PLAY_FROM_URI
*/
public void onPlayFromUri(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull Uri uri,
@@ -731,7 +341,7 @@
* @param controller controller information
* @param mediaId media id to prepare
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PREPARE_FROM_MEDIA_ID
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID
*/
public void onPrepareFromMediaId(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull String mediaId,
@@ -755,7 +365,7 @@
* @param controller controller information
* @param query query string. Can be empty to indicate any suggested media
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PREPARE_FROM_SEARCH
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH
*/
public void onPrepareFromSearch(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull String query,
@@ -779,12 +389,26 @@
* @param controller controller information
* @param uri uri
* @param extras optional extra bundle
- * @see #COMMAND_CODE_PREPARE_FROM_URI
+ * @see SessionCommand2#COMMAND_CODE_SESSION_PREPARE_FROM_URI
*/
public void onPrepareFromUri(@NonNull MediaSession2 session,
@NonNull ControllerInfo controller, @NonNull Uri uri, @Nullable Bundle extras) { }
/**
+ * Called when a controller called {@link MediaController2#fastForward()}
+ *
+ * @param session the session for this event
+ */
+ public void onFastForward(@NonNull MediaSession2 session) { }
+
+ /**
+ * Called when a controller called {@link MediaController2#rewind()}
+ *
+ * @param session the session for this event
+ */
+ public void onRewind(@NonNull MediaSession2 session) { }
+
+ /**
* Called when the player's current playing item is changed
* <p>
* When it's called, you should invalidate previous playback information and wait for later
@@ -830,6 +454,26 @@
@NonNull MediaPlayerBase player, @NonNull MediaItem2 item, @BuffState int state) { }
/**
+ * Called to indicate that the playback speed has changed.
+ * @param session the session for this event
+ * @param player the player for this event
+ * @param speed the new playback speed.
+ */
+ public void onPlaybackSpeedChanged(@NonNull MediaSession2 session,
+ @NonNull MediaPlayerBase player, float speed) { }
+
+ /**
+ * Called to indicate that {@link #seekTo(long)} is completed.
+ *
+ * @param session the session for this event.
+ * @param mpb the player that has completed seeking.
+ * @param position the previous seeking request.
+ * @see #seekTo(long)
+ */
+ public void onSeekCompleted(@NonNull MediaSession2 session, @NonNull MediaPlayerBase mpb,
+ long position) { }
+
+ /**
* Called when a playlist is changed from the {@link MediaPlaylistAgent}.
* <p>
* This is called when the underlying agent has called
@@ -1115,7 +759,7 @@
}
/**
- * Button for a {@link Command} that will be shown by the controller.
+ * Button for a {@link SessionCommand2} that will be shown by the controller.
* <p>
* It's up to the controller's decision to respect or ignore this customization request.
*/
@@ -1135,7 +779,8 @@
*
* @return command or {@code null}
*/
- public @Nullable Command getCommand() {
+ public @Nullable
+ SessionCommand2 getCommand() {
return mProvider.getCommand_impl();
}
@@ -1190,12 +835,11 @@
public static final class Builder {
private final CommandButtonProvider.BuilderProvider mProvider;
- public Builder(@NonNull Context context) {
- mProvider = ApiLoader.getProvider().createMediaSession2CommandButtonBuilder(
- context, this);
+ public Builder() {
+ mProvider = ApiLoader.getProvider().createMediaSession2CommandButtonBuilder(this);
}
- public @NonNull Builder setCommand(@Nullable Command command) {
+ public @NonNull Builder setCommand(@Nullable SessionCommand2 command) {
return mProvider.setCommand_impl(command);
}
@@ -1332,7 +976,8 @@
* expanded row: layout[5] layout[6] layout[7] layout[8] layout[9]
* main row: layout[3] layout[1] layout[0] layout[2] layout[4]
* <p>
- * This API can be called in the {@link SessionCallback#onConnect(MediaSession2, ControllerInfo)}.
+ * This API can be called in the {@link SessionCallback#onConnect(
+ * MediaSession2, ControllerInfo)}.
*
* @param controller controller to specify layout.
* @param layout ordered list of layout.
@@ -1349,7 +994,7 @@
* @param commands new allowed commands
*/
public void setAllowedCommands(@NonNull ControllerInfo controller,
- @NonNull CommandGroup commands) {
+ @NonNull SessionCommandGroup2 commands) {
mProvider.setAllowedCommands_impl(controller, commands);
}
@@ -1359,7 +1004,7 @@
* @param command a command
* @param args optional argument
*/
- public void sendCustomCommand(@NonNull Command command, @Nullable Bundle args) {
+ public void sendCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args) {
mProvider.sendCustomCommand_impl(command, args);
}
@@ -1370,8 +1015,9 @@
* @param args optional argument
* @param receiver result receiver for the session
*/
- public void sendCustomCommand(@NonNull ControllerInfo controller, @NonNull Command command,
- @Nullable Bundle args, @Nullable ResultReceiver receiver) {
+ public void sendCustomCommand(@NonNull ControllerInfo controller,
+ @NonNull SessionCommand2 command, @Nullable Bundle args,
+ @Nullable ResultReceiver receiver) {
// Equivalent to the MediaController.sendCustomCommand(Action action, ResultReceiver r);
mProvider.sendCustomCommand_impl(controller, command, args, receiver);
}
@@ -1417,20 +1063,6 @@
}
/**
- * Fast forwards playback. If playback is already fast forwarding this may increase the rate.
- */
- public void fastForward() {
- mProvider.fastForward_impl();
- }
-
- /**
- * Rewinds playback. If playback is already rewinding this may increase the rate.
- */
- public void rewind() {
- mProvider.rewind_impl();
- }
-
- /**
* Move to a new location in the media stream.
*
* @param pos Position to move to, in milliseconds.
@@ -1467,9 +1099,7 @@
* Gets the current player state.
*
* @return the current player state
- * @hide
*/
- // TODO(jaewan): Unhide (b/74578458)
public @PlayerState int getPlayerState() {
return mProvider.getPlayerState_impl();
}
@@ -1479,25 +1109,33 @@
*
* @return the current playback position in ms, or {@link MediaPlayerBase#UNKNOWN_TIME} if
* unknown.
- * @hide
*/
- // TODO(jaewan): Unhide (b/74578458)
- public long getPosition() {
- return mProvider.getPosition_impl();
+ public long getCurrentPosition() {
+ return mProvider.getCurrentPosition_impl();
}
/**
* Gets the buffered position, or {@link MediaPlayerBase#UNKNOWN_TIME} if unknown.
*
* @return the buffered position in ms, or {@link MediaPlayerBase#UNKNOWN_TIME}.
- * @hide
*/
- // TODO(jaewan): Unhide (b/74578458)
public long getBufferedPosition() {
return mProvider.getBufferedPosition_impl();
}
/**
+ * Gets the current buffering state of the player.
+ * During buffering, see {@link #getBufferedPosition()} for the quantifying the amount already
+ * buffered.
+ *
+ * @return the buffering state.
+ */
+ public @BuffState int getBufferingState() {
+ // TODO(jaewan): Implement this
+ return BUFFERING_STATE_UNKNOWN;
+ }
+
+ /**
* Get the playback speed.
*
* @return speed
@@ -1525,7 +1163,8 @@
* <li>{@link MediaItem2} specified by {@link #setPlaylist(List, MediaMetadata2)} doesn't
* have {@link DataSourceDesc}</li>
* <li>{@link MediaController2#addPlaylistItem(int, MediaItem2)} is called and accepted
- * by {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)}.
+ * by {@link SessionCallback#onCommandRequest(
+ * MediaSession2, ControllerInfo, SessionCommand2)}.
* In that case, an item would be added automatically without the data source.</li>
* </ul>
* <p>
@@ -1537,9 +1176,9 @@
* @param helper a data source missing helper.
* @throws IllegalStateException when the helper is set when the playlist agent is set
* @see #setPlaylist(List, MediaMetadata2)
- * @see SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, Command)
- * @see #COMMAND_CODE_PLAYLIST_ADD_ITEM
- * @see #COMMAND_CODE_PLAYLIST_REPLACE_ITEM
+ * @see SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_ADD_ITEM
+ * @see SessionCommand2#COMMAND_CODE_PLAYLIST_REPLACE_ITEM
*/
public void setOnDataSourceMissingHelper(@NonNull OnDataSourceMissingHelper helper) {
mProvider.setOnDataSourceMissingHelper_impl(helper);
diff --git a/media/java/android/media/MediaSessionService2.java b/media/java/android/media/MediaSessionService2.java
index 85ac9b2..6c3a4bf 100644
--- a/media/java/android/media/MediaSessionService2.java
+++ b/media/java/android/media/MediaSessionService2.java
@@ -21,7 +21,6 @@
import android.annotation.Nullable;
import android.app.Notification;
import android.app.Service;
-import android.content.Context;
import android.content.Intent;
import android.media.MediaSession2.ControllerInfo;
import android.media.update.ApiLoader;
@@ -213,16 +212,14 @@
/**
* Default constructor
*
- * @param context context
* @param notificationId notification id to be used for
* {@link android.app.NotificationManager#notify(int, Notification)}.
* @param notification a notification to make session service foreground service. Media
* style notification is recommended here.
*/
- public MediaNotification(@NonNull Context context,
- int notificationId, @NonNull Notification notification) {
+ public MediaNotification(int notificationId, @NonNull Notification notification) {
mProvider = ApiLoader.getProvider().createMediaSessionService2MediaNotification(
- context, this, notificationId, notification);
+ this, notificationId, notification);
}
public int getNotificationId() {
diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java
index 09449a1..80049ba5 100644
--- a/media/java/android/media/PlayerBase.java
+++ b/media/java/android/media/PlayerBase.java
@@ -47,10 +47,10 @@
public abstract class PlayerBase {
private static final String TAG = "PlayerBase";
- private static final boolean DEBUG = false;
- private static IAudioService sService; //lazy initialization, use getService()
/** Debug app ops */
private static final boolean DEBUG_APP_OPS = false;
+ private static final boolean DEBUG = DEBUG_APP_OPS || false;
+ private static IAudioService sService; //lazy initialization, use getService()
// parameters of the player that affect AppOps
protected AudioAttributes mAttributes;
@@ -102,6 +102,7 @@
mAppOps.startWatchingMode(AppOpsManager.OP_PLAY_AUDIO,
ActivityThread.currentPackageName(), mAppOpsCallback);
} catch (RemoteException e) {
+ Log.e(TAG, "Error registering appOps callback", e);
mHasAppOpsPlayAudio = false;
}
try {
diff --git a/media/java/android/media/Rating2.java b/media/java/android/media/Rating2.java
index 5f7a334..9213190 100644
--- a/media/java/android/media/Rating2.java
+++ b/media/java/android/media/Rating2.java
@@ -19,7 +19,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.IntDef;
-import android.content.Context;
import android.media.update.ApiLoader;
import android.media.update.Rating2Provider;
import android.os.Bundle;
@@ -29,6 +28,7 @@
import java.lang.annotation.RetentionPolicy;
/**
+ * @hide
* A class to encapsulate rating information used as content metadata.
* A rating is defined by its rating style (see {@link #RATING_HEART},
* {@link #RATING_THUMB_UP_DOWN}, {@link #RATING_3_STARS}, {@link #RATING_4_STARS},
@@ -126,12 +126,11 @@
/**
* Create an instance from bundle object, previoulsy created by {@link #toBundle()}
*
- * @param context context
* @param bundle bundle
* @return new Rating2 instance or {@code null} for error
*/
- public static Rating2 fromBundle(@NonNull Context context, @Nullable Bundle bundle) {
- return ApiLoader.getProvider().fromBundle_Rating2(context, bundle);
+ public static Rating2 fromBundle(@Nullable Bundle bundle) {
+ return ApiLoader.getProvider().fromBundle_Rating2(bundle);
}
/**
@@ -146,39 +145,35 @@
* Return a Rating2 instance with no rating.
* Create and return a new Rating2 instance with no rating known for the given
* rating style.
- * @param context context
* @param ratingStyle one of {@link #RATING_HEART}, {@link #RATING_THUMB_UP_DOWN},
* {@link #RATING_3_STARS}, {@link #RATING_4_STARS}, {@link #RATING_5_STARS},
* or {@link #RATING_PERCENTAGE}.
* @return null if an invalid rating style is passed, a new Rating2 instance otherwise.
*/
- public static @Nullable Rating2 newUnratedRating(@NonNull Context context,
- @Style int ratingStyle) {
- return ApiLoader.getProvider().newUnratedRating_Rating2(context, ratingStyle);
+ public static @Nullable Rating2 newUnratedRating(@Style int ratingStyle) {
+ return ApiLoader.getProvider().newUnratedRating_Rating2(ratingStyle);
}
/**
* Return a Rating2 instance with a heart-based rating.
* Create and return a new Rating2 instance with a rating style of {@link #RATING_HEART},
* and a heart-based rating.
- * @param context context
* @param hasHeart true for a "heart selected" rating, false for "heart unselected".
* @return a new Rating2 instance.
*/
- public static @Nullable Rating2 newHeartRating(@NonNull Context context, boolean hasHeart) {
- return ApiLoader.getProvider().newHeartRating_Rating2(context, hasHeart);
+ public static @Nullable Rating2 newHeartRating(boolean hasHeart) {
+ return ApiLoader.getProvider().newHeartRating_Rating2(hasHeart);
}
/**
* Return a Rating2 instance with a thumb-based rating.
* Create and return a new Rating2 instance with a {@link #RATING_THUMB_UP_DOWN}
* rating style, and a "thumb up" or "thumb down" rating.
- * @param context context
* @param thumbIsUp true for a "thumb up" rating, false for "thumb down".
* @return a new Rating2 instance.
*/
- public static @Nullable Rating2 newThumbRating(@NonNull Context context, boolean thumbIsUp) {
- return ApiLoader.getProvider().newThumbRating_Rating2(context, thumbIsUp);
+ public static @Nullable Rating2 newThumbRating(boolean thumbIsUp) {
+ return ApiLoader.getProvider().newThumbRating_Rating2(thumbIsUp);
}
/**
@@ -186,7 +181,6 @@
* Create and return a new Rating2 instance with one of the star-base rating styles
* and the given integer or fractional number of stars. Non integer values can for instance
* be used to represent an average rating value, which might not be an integer number of stars.
- * @param context context
* @param starRatingStyle one of {@link #RATING_3_STARS}, {@link #RATING_4_STARS},
* {@link #RATING_5_STARS}.
* @param starRating a number ranging from 0.0f to 3.0f, 4.0f or 5.0f according to
@@ -194,26 +188,25 @@
* @return null if the rating style is invalid, or the rating is out of range,
* a new Rating2 instance otherwise.
*/
- public static @Nullable Rating2 newStarRating(@NonNull Context context,
+ public static @Nullable Rating2 newStarRating(
@StarStyle int starRatingStyle, float starRating) {
- return ApiLoader.getProvider().newStarRating_Rating2(context, starRatingStyle, starRating);
+ return ApiLoader.getProvider().newStarRating_Rating2(starRatingStyle, starRating);
}
/**
* Return a Rating2 instance with a percentage-based rating.
* Create and return a new Rating2 instance with a {@link #RATING_PERCENTAGE}
* rating style, and a rating of the given percentage.
- * @param context context
* @param percent the value of the rating
* @return null if the rating is out of range, a new Rating2 instance otherwise.
*/
- public static @Nullable Rating2 newPercentageRating(@NonNull Context context, float percent) {
- return ApiLoader.getProvider().newPercentageRating_Rating2(context, percent);
+ public static @Nullable Rating2 newPercentageRating(float percent) {
+ return ApiLoader.getProvider().newPercentageRating_Rating2(percent);
}
/**
* Return whether there is a rating value available.
- * @return true if the instance was not created with {@link #newUnratedRating(Context, int)}.
+ * @return true if the instance was not created with {@link #newUnratedRating(int)}.
*/
public boolean isRated() {
return mProvider.isRated_impl();
diff --git a/media/java/android/media/SessionCommand2.java b/media/java/android/media/SessionCommand2.java
new file mode 100644
index 0000000..fe86a3a
--- /dev/null
+++ b/media/java/android/media/SessionCommand2.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.media.update.ApiLoader;
+import android.media.update.MediaSession2Provider;
+import android.media.MediaSession2.ControllerInfo;
+import android.media.MediaSession2.SessionCallback;
+import android.net.Uri;
+import android.os.Bundle;
+
+import java.util.List;
+
+/**
+ * @hide
+ * Define a command that a {@link MediaController2} can send to a {@link MediaSession2}.
+ * <p>
+ * If {@link #getCommandCode()} isn't {@link #COMMAND_CODE_CUSTOM}), it's predefined command.
+ * If {@link #getCommandCode()} is {@link #COMMAND_CODE_CUSTOM}), it's custom command and
+ * {@link #getCustomCommand()} shouldn't be {@code null}.
+ */
+public final class SessionCommand2 {
+ /**
+ * Command code for the custom command which can be defined by string action in the
+ * {@link SessionCommand2}.
+ */
+ public static final int COMMAND_CODE_CUSTOM = 0;
+
+ /**
+ * Command code for {@link MediaController2#play()}.
+ * <p>
+ * Command would be sent directly to the player if the session doesn't reject the request
+ * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
+ * SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYBACK_PLAY = 1;
+
+ /**
+ * Command code for {@link MediaController2#pause()}.
+ * <p>
+ * Command would be sent directly to the player if the session doesn't reject the request
+ * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
+ * SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYBACK_PAUSE = 2;
+
+ /**
+ * Command code for {@link MediaController2#stop()}.
+ * <p>
+ * Command would be sent directly to the player if the session doesn't reject the request
+ * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
+ * SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYBACK_STOP = 3;
+
+ /**
+ * Command code for {@link MediaController2#skipToNextItem()}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the {@link SessionCallback#onCommandRequest(
+ * MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SKIP_NEXT_ITEM = 4;
+
+ /**
+ * Command code for {@link MediaController2#skipToPreviousItem()}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the {@link SessionCallback#onCommandRequest(
+ * MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SKIP_PREV_ITEM = 5;
+
+ /**
+ * Command code for {@link MediaController2#prepare()}.
+ * <p>
+ * Command would be sent directly to the player if the session doesn't reject the request
+ * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
+ * SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYBACK_PREPARE = 6;
+
+ /**
+ * Command code for {@link MediaController2#fastForward()}.
+ */
+ public static final int COMMAND_CODE_SESSION_FAST_FORWARD = 7;
+
+ /**
+ * Command code for {@link MediaController2#rewind()}.
+ */
+ public static final int COMMAND_CODE_SESSION_REWIND = 8;
+
+ /**
+ * Command code for {@link MediaController2#seekTo(long)}.
+ * <p>
+ * Command would be sent directly to the player if the session doesn't reject the request
+ * through the {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo,
+ * SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYBACK_SEEK_TO = 9;
+
+ /**
+ * Command code for both {@link MediaController2#setVolumeTo(int, int)}.
+ * <p>
+ * Command would set the device volume or send to the volume provider directly if the session
+ * doesn't reject the request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_SET_VOLUME = 10;
+
+ /**
+ * Command code for both {@link MediaController2#adjustVolume(int, int)}.
+ * <p>
+ * Command would adjust the device volume or send to the volume provider directly if the session
+ * doesn't reject the request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_ADJUST_VOLUME = 11;
+
+ /**
+ * Command code for {@link MediaController2#skipToPlaylistItem(MediaItem2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SKIP_TO_PLAYLIST_ITEM = 12;
+
+ /**
+ * Command code for {@link MediaController2#setShuffleMode(int)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SET_SHUFFLE_MODE = 13;
+
+ /**
+ * Command code for {@link MediaController2#setRepeatMode(int)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SET_REPEAT_MODE = 14;
+
+ /**
+ * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_ADD_ITEM = 15;
+
+ /**
+ * Command code for {@link MediaController2#addPlaylistItem(int, MediaItem2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_REMOVE_ITEM = 16;
+
+ /**
+ * Command code for {@link MediaController2#replacePlaylistItem(int, MediaItem2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_REPLACE_ITEM = 17;
+
+ /**
+ * Command code for {@link MediaController2#getPlaylist()}. This will expose metadata
+ * information to the controller.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_GET_LIST = 18;
+
+ /**
+ * Command code for {@link MediaController2#setPlaylist(List, MediaMetadata2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SET_LIST = 19;
+
+ /**
+ * Command code for {@link MediaController2#getPlaylistMetadata()}. This will expose
+ * metadata information to the controller.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_GET_LIST_METADATA = 20;
+
+ /**
+ * Command code for {@link MediaController2#updatePlaylistMetadata(MediaMetadata2)}.
+ * <p>
+ * Command would be sent directly to the playlist agent if the session doesn't reject the
+ * request through the
+ * {@link SessionCallback#onCommandRequest(MediaSession2, ControllerInfo, SessionCommand2)}.
+ */
+ public static final int COMMAND_CODE_PLAYLIST_SET_LIST_METADATA = 21;
+
+ /**
+ * Command code for {@link MediaController2#playFromMediaId(String, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID = 22;
+
+ /**
+ * Command code for {@link MediaController2#playFromUri(Uri, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PLAY_FROM_URI = 23;
+
+ /**
+ * Command code for {@link MediaController2#playFromSearch(String, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PLAY_FROM_SEARCH = 24;
+
+ /**
+ * Command code for {@link MediaController2#prepareFromMediaId(String, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID = 25;
+
+ /**
+ * Command code for {@link MediaController2#prepareFromUri(Uri, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PREPARE_FROM_URI = 26;
+
+ /**
+ * Command code for {@link MediaController2#prepareFromSearch(String, Bundle)}.
+ */
+ public static final int COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH = 27;
+
+ /**
+ * Command code for {@link MediaController2#setRating(String, Rating2)}.
+ */
+ public static final int COMMAND_CODE_SESSION_SET_RATING = 28;
+
+ // TODO(jaewan): Add javadoc
+ public static final int COMMAND_CODE_LIBRARY_GET_CHILDREN = 29;
+ public static final int COMMAND_CODE_LIBRARY_GET_ITEM = 30;
+ public static final int COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT = 31;
+ public static final int COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT = 32;
+ public static final int COMMAND_CODE_LIBRARY_SEARCH = 33;
+ public static final int COMMAND_CODE_LIBRARY_SUBSCRIBE = 34;
+ public static final int COMMAND_CODE_LIBRARY_UNSUBSCRIBE = 35;
+
+ // TODO(jaewan): Rename and move provider
+ private final MediaSession2Provider.CommandProvider mProvider;
+
+ public SessionCommand2(int commandCode) {
+ mProvider = ApiLoader.getProvider().createMediaSession2Command(
+ this, commandCode, null, null);
+ }
+
+ public SessionCommand2(@NonNull String action, @Nullable Bundle extras) {
+ if (action == null) {
+ throw new IllegalArgumentException("action shouldn't be null");
+ }
+ mProvider = ApiLoader.getProvider().createMediaSession2Command(
+ this, COMMAND_CODE_CUSTOM, action, extras);
+ }
+
+ /**
+ * @hide
+ */
+ public MediaSession2Provider.CommandProvider getProvider() {
+ return mProvider;
+ }
+
+ public int getCommandCode() {
+ return mProvider.getCommandCode_impl();
+ }
+
+ public @Nullable String getCustomCommand() {
+ return mProvider.getCustomCommand_impl();
+ }
+
+ public @Nullable Bundle getExtras() {
+ return mProvider.getExtras_impl();
+ }
+
+ /**
+ * @return a new Bundle instance from the Command
+ * @hide
+ */
+ public Bundle toBundle() {
+ return mProvider.toBundle_impl();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof SessionCommand2)) {
+ return false;
+ }
+ return mProvider.equals_impl(((SessionCommand2) obj).mProvider);
+ }
+
+ @Override
+ public int hashCode() {
+ return mProvider.hashCode_impl();
+ }
+
+ /**
+ * @return a new Command instance from the Bundle
+ * @hide
+ */
+ public static SessionCommand2 fromBundle(@NonNull Bundle command) {
+ return ApiLoader.getProvider().fromBundle_MediaSession2Command(command);
+ }
+}
diff --git a/media/java/android/media/SessionCommandGroup2.java b/media/java/android/media/SessionCommandGroup2.java
new file mode 100644
index 0000000..399765e
--- /dev/null
+++ b/media/java/android/media/SessionCommandGroup2.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.media.update.ApiLoader;
+import android.media.update.MediaSession2Provider;
+import android.os.Bundle;
+
+import java.util.Set;
+
+/**
+ * @hide
+ * Represent set of {@link SessionCommand2}.
+ */
+public final class SessionCommandGroup2 {
+ // TODO(jaewan): Rename and move provider
+ private final MediaSession2Provider.CommandGroupProvider mProvider;
+
+ public SessionCommandGroup2() {
+ mProvider = ApiLoader.getProvider().createMediaSession2CommandGroup(this, null);
+ }
+
+ public SessionCommandGroup2(@Nullable SessionCommandGroup2 others) {
+ mProvider = ApiLoader.getProvider().createMediaSession2CommandGroup(this, others);
+ }
+
+ /**
+ * @hide
+ */
+ public SessionCommandGroup2(@NonNull MediaSession2Provider.CommandGroupProvider provider) {
+ mProvider = provider;
+ }
+
+ public void addCommand(@NonNull SessionCommand2 command) {
+ mProvider.addCommand_impl(command);
+ }
+
+ public void addCommand(int commandCode) {
+ // TODO(jaewna): Implement
+ }
+
+ public void addAllPredefinedCommands() {
+ mProvider.addAllPredefinedCommands_impl();
+ }
+
+ public void removeCommand(@NonNull SessionCommand2 command) {
+ mProvider.removeCommand_impl(command);
+ }
+
+ public void removeCommand(int commandCode) {
+ // TODO(jaewan): Implement.
+ }
+
+ public boolean hasCommand(@NonNull SessionCommand2 command) {
+ return mProvider.hasCommand_impl(command);
+ }
+
+ public boolean hasCommand(int code) {
+ return mProvider.hasCommand_impl(code);
+ }
+
+ public @NonNull
+ Set<SessionCommand2> getCommands() {
+ return mProvider.getCommands_impl();
+ }
+
+ /**
+ * @hide
+ */
+ public @NonNull MediaSession2Provider.CommandGroupProvider getProvider() {
+ return mProvider;
+ }
+
+ /**
+ * @return new bundle from the CommandGroup
+ * @hide
+ */
+ public @NonNull Bundle toBundle() {
+ return mProvider.toBundle_impl();
+ }
+
+ /**
+ * @return new instance of CommandGroup from the bundle
+ * @hide
+ */
+ public static @Nullable SessionCommandGroup2 fromBundle(Bundle commands) {
+ return ApiLoader.getProvider().fromBundle_MediaSession2CommandGroup(commands);
+ }
+}
diff --git a/media/java/android/media/SessionToken2.java b/media/java/android/media/SessionToken2.java
index f088be3..bf2d445 100644
--- a/media/java/android/media/SessionToken2.java
+++ b/media/java/android/media/SessionToken2.java
@@ -150,8 +150,8 @@
* @param bundle
* @return
*/
- public static SessionToken2 fromBundle(@NonNull Context context, @NonNull Bundle bundle) {
- return ApiLoader.getProvider().fromBundle_SessionToken2(context, bundle);
+ public static SessionToken2 fromBundle(@NonNull Bundle bundle) {
+ return ApiLoader.getProvider().fromBundle_SessionToken2(bundle);
}
/**
diff --git a/media/java/android/media/VolumeProvider2.java b/media/java/android/media/VolumeProvider2.java
index 2d96d096..1a4608f 100644
--- a/media/java/android/media/VolumeProvider2.java
+++ b/media/java/android/media/VolumeProvider2.java
@@ -18,7 +18,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
-import android.content.Context;
import android.media.update.ApiLoader;
import android.media.update.VolumeProvider2Provider;
@@ -75,10 +74,9 @@
* @param maxVolume The maximum allowed volume.
* @param currentVolume The current volume on the output.
*/
- public VolumeProvider2(@NonNull Context context, @ControlType int controlType,
- int maxVolume, int currentVolume) {
+ public VolumeProvider2(@ControlType int controlType, int maxVolume, int currentVolume) {
mProvider = ApiLoader.getProvider().createVolumeProvider2(
- context, this, controlType, maxVolume, currentVolume);
+ this, controlType, maxVolume, currentVolume);
}
/**
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index b7f4998..3b12fca 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -407,7 +407,7 @@
List<Bundle> bundles = mService.getSessionTokens(
/* activeSessionOnly */ true, /* sessionServiceOnly */ false,
mContext.getPackageName());
- return toTokenList(mContext, bundles);
+ return toTokenList(bundles);
} catch (RemoteException e) {
Log.wtf(TAG, "Cannot communicate with the service.", e);
return Collections.emptyList();
@@ -430,7 +430,7 @@
List<Bundle> bundles = mService.getSessionTokens(
/* activeSessionOnly */ false, /* sessionServiceOnly */ true,
mContext.getPackageName());
- return toTokenList(mContext, bundles);
+ return toTokenList(bundles);
} catch (RemoteException e) {
Log.wtf(TAG, "Cannot communicate with the service.", e);
return Collections.emptyList();
@@ -455,7 +455,7 @@
List<Bundle> bundles = mService.getSessionTokens(
/* activeSessionOnly */ false, /* sessionServiceOnly */ false,
mContext.getPackageName());
- return toTokenList(mContext, bundles);
+ return toTokenList(bundles);
} catch (RemoteException e) {
Log.wtf(TAG, "Cannot communicate with the service.", e);
return Collections.emptyList();
@@ -540,11 +540,11 @@
}
}
- private static List<SessionToken2> toTokenList(Context context, List<Bundle> bundles) {
+ private static List<SessionToken2> toTokenList(List<Bundle> bundles) {
List<SessionToken2> tokens = new ArrayList<>();
if (bundles != null) {
for (int i = 0; i < bundles.size(); i++) {
- SessionToken2 token = SessionToken2.fromBundle(context, bundles.get(i));
+ SessionToken2 token = SessionToken2.fromBundle(bundles.get(i));
if (token != null) {
tokens.add(token);
}
@@ -829,7 +829,7 @@
final Context context = mContext;
final OnSessionTokensChangedListener listener = mListener;
if (context != null && listener != null) {
- listener.onSessionTokensChanged(toTokenList(context, bundles));
+ listener.onSessionTokensChanged(toTokenList(bundles));
}
});
}
diff --git a/media/java/android/media/update/MediaController2Provider.java b/media/java/android/media/update/MediaController2Provider.java
index 22e5b18..7234f7b 100644
--- a/media/java/android/media/update/MediaController2Provider.java
+++ b/media/java/android/media/update/MediaController2Provider.java
@@ -21,7 +21,7 @@
import android.media.MediaController2.PlaybackInfo;
import android.media.MediaItem2;
import android.media.MediaMetadata2;
-import android.media.MediaSession2.Command;
+import android.media.SessionCommand2;
import android.media.Rating2;
import android.media.SessionToken2;
import android.net.Uri;
@@ -52,9 +52,11 @@
void playFromSearch_impl(String query, Bundle extras);
void playFromUri_impl(Uri uri, Bundle extras);
void playFromMediaId_impl(String mediaId, Bundle extras);
+ void fastForward_impl();
+ void rewind_impl();
void setRating_impl(String mediaId, Rating2 rating);
- void sendCustomCommand_impl(Command command, Bundle args, ResultReceiver cb);
+ void sendCustomCommand_impl(SessionCommand2 command, Bundle args, ResultReceiver cb);
List<MediaItem2> getPlaylist_impl();
void setPlaylist_impl(List<MediaItem2> list, MediaMetadata2 metadata);
MediaMetadata2 getPlaylistMetadata_impl();
@@ -65,7 +67,7 @@
void removePlaylistItem_impl(MediaItem2 item);
int getPlayerState_impl();
- long getPosition_impl();
+ long getCurrentPosition_impl();
float getPlaybackSpeed_impl();
long getBufferedPosition_impl();
MediaItem2 getCurrentMediaItem_impl();
diff --git a/media/java/android/media/update/MediaSession2Provider.java b/media/java/android/media/update/MediaSession2Provider.java
index 0faed9d..4751348 100644
--- a/media/java/android/media/update/MediaSession2Provider.java
+++ b/media/java/android/media/update/MediaSession2Provider.java
@@ -23,10 +23,10 @@
import android.media.MediaPlayerBase;
import android.media.MediaPlaylistAgent;
import android.media.MediaSession2;
-import android.media.MediaSession2.Command;
+import android.media.SessionCommand2;
import android.media.MediaSession2.CommandButton;
import android.media.MediaSession2.CommandButton.Builder;
-import android.media.MediaSession2.CommandGroup;
+import android.media.SessionCommandGroup2;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.OnDataSourceMissingHelper;
import android.media.MediaSession2.SessionCallback;
@@ -36,6 +36,7 @@
import android.os.ResultReceiver;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.Executor;
/**
@@ -54,10 +55,10 @@
List<ControllerInfo> getConnectedControllers_impl();
void setCustomLayout_impl(ControllerInfo controller, List<CommandButton> layout);
void setAudioFocusRequest_impl(AudioFocusRequest afr);
- void setAllowedCommands_impl(ControllerInfo controller, CommandGroup commands);
- void sendCustomCommand_impl(ControllerInfo controller, Command command, Bundle args,
+ void setAllowedCommands_impl(ControllerInfo controller, SessionCommandGroup2 commands);
+ void sendCustomCommand_impl(ControllerInfo controller, SessionCommand2 command, Bundle args,
ResultReceiver receiver);
- void sendCustomCommand_impl(Command command, Bundle args);
+ void sendCustomCommand_impl(SessionCommand2 command, Bundle args);
void addPlaylistItem_impl(int index, MediaItem2 item);
void removePlaylistItem_impl(MediaItem2 item);
void replacePlaylistItem_impl(int index, MediaItem2 item);
@@ -66,11 +67,12 @@
MediaItem2 getCurrentPlaylistItem_impl();
void notifyError_impl(int errorCode, Bundle extras);
int getPlayerState_impl();
- long getPosition_impl();
+ long getCurrentPosition_impl();
long getBufferedPosition_impl();
void setOnDataSourceMissingHelper_impl(OnDataSourceMissingHelper helper);
void clearOnDataSourceMissingHelper_impl();
+ // TODO(jaewan): Rename and move provider
interface CommandProvider {
int getCommandCode_impl();
String getCustomCommand_impl();
@@ -81,25 +83,26 @@
int hashCode_impl();
}
+ // TODO(jaewan): Rename and move provider
interface CommandGroupProvider {
- void addCommand_impl(Command command);
+ void addCommand_impl(SessionCommand2 command);
void addAllPredefinedCommands_impl();
- void removeCommand_impl(Command command);
- boolean hasCommand_impl(Command command);
+ void removeCommand_impl(SessionCommand2 command);
+ boolean hasCommand_impl(SessionCommand2 command);
boolean hasCommand_impl(int code);
- List<Command> getCommands_impl();
+ Set<SessionCommand2> getCommands_impl();
Bundle toBundle_impl();
}
interface CommandButtonProvider {
- Command getCommand_impl();
+ SessionCommand2 getCommand_impl();
int getIconResId_impl();
String getDisplayName_impl();
Bundle getExtras_impl();
boolean isEnabled_impl();
interface BuilderProvider {
- Builder setCommand_impl(Command command);
+ Builder setCommand_impl(SessionCommand2 command);
Builder setIconResId_impl(int resId);
Builder setDisplayName_impl(String displayName);
Builder setEnabled_impl(boolean enabled);
diff --git a/media/java/android/media/update/StaticProvider.java b/media/java/android/media/update/StaticProvider.java
index 1c0e255..8687b80 100644
--- a/media/java/android/media/update/StaticProvider.java
+++ b/media/java/android/media/update/StaticProvider.java
@@ -35,6 +35,8 @@
import android.media.MediaSessionService2;
import android.media.MediaSessionService2.MediaNotification;
import android.media.Rating2;
+import android.media.SessionCommand2;
+import android.media.SessionCommandGroup2;
import android.media.SessionToken2;
import android.media.VolumeProvider2;
import android.media.update.MediaLibraryService2Provider.LibraryRootProvider;
@@ -67,16 +69,16 @@
ViewGroupProvider superProvider, ViewGroupProvider privateProvider,
@Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes);
- CommandProvider createMediaSession2Command(MediaSession2.Command instance,
+ CommandProvider createMediaSession2Command(SessionCommand2 instance,
int commandCode, String action, Bundle extra);
- MediaSession2.Command fromBundle_MediaSession2Command(Context context, Bundle bundle);
- CommandGroupProvider createMediaSession2CommandGroup(Context context,
- MediaSession2.CommandGroup instance, MediaSession2.CommandGroup others);
- MediaSession2.CommandGroup fromBundle_MediaSession2CommandGroup(Context context, Bundle bundle);
+ SessionCommand2 fromBundle_MediaSession2Command(Bundle bundle);
+ CommandGroupProvider createMediaSession2CommandGroup(SessionCommandGroup2 instance,
+ SessionCommandGroup2 others);
+ SessionCommandGroup2 fromBundle_MediaSession2CommandGroup(Bundle bundle);
ControllerInfoProvider createMediaSession2ControllerInfo(Context context,
MediaSession2.ControllerInfo instance, int uid, int pid,
String packageName, IInterface callback);
- CommandButtonProvider.BuilderProvider createMediaSession2CommandButtonBuilder(Context context,
+ CommandButtonProvider.BuilderProvider createMediaSession2CommandButtonBuilder(
MediaSession2.CommandButton.Builder instance);
BuilderBaseProvider<MediaSession2, SessionCallback> createMediaSession2Builder(
Context context, MediaSession2.Builder instance);
@@ -88,7 +90,7 @@
SessionToken2 token, Executor executor, BrowserCallback callback);
MediaSessionService2Provider createMediaSessionService2(MediaSessionService2 instance);
- MediaNotificationProvider createMediaSessionService2MediaNotification(Context context,
+ MediaNotificationProvider createMediaSessionService2MediaNotification(
MediaNotification mediaNotification, int notificationId, Notification notification);
MediaSessionService2Provider createMediaLibraryService2(MediaLibraryService2 instance);
@@ -96,33 +98,32 @@
createMediaLibraryService2Builder(
MediaLibraryService2 service, MediaLibrarySession.Builder instance,
Executor callbackExecutor, MediaLibrarySessionCallback callback);
- LibraryRootProvider createMediaLibraryService2LibraryRoot(Context context, LibraryRoot instance,
- String rootId, Bundle extras);
+ LibraryRootProvider createMediaLibraryService2LibraryRoot(LibraryRoot instance, String rootId,
+ Bundle extras);
SessionToken2Provider createSessionToken2(Context context, SessionToken2 instance,
String packageName, String serviceName, int uid);
- SessionToken2 fromBundle_SessionToken2(Context context, Bundle bundle);
+ SessionToken2 fromBundle_SessionToken2(Bundle bundle);
- MediaItem2Provider.BuilderProvider createMediaItem2Builder(
- Context context, MediaItem2.Builder instance, int flags);
- MediaItem2 fromBundle_MediaItem2(Context context, Bundle bundle);
+ MediaItem2Provider.BuilderProvider createMediaItem2Builder(MediaItem2.Builder instance,
+ int flags);
+ MediaItem2 fromBundle_MediaItem2(Bundle bundle);
- VolumeProvider2Provider createVolumeProvider2(Context context, VolumeProvider2 instance,
- int controlType, int maxVolume, int currentVolume);
+ VolumeProvider2Provider createVolumeProvider2(VolumeProvider2 instance, int controlType,
+ int maxVolume, int currentVolume);
- MediaMetadata2 fromBundle_MediaMetadata2(Context context, Bundle bundle);
+ MediaMetadata2 fromBundle_MediaMetadata2(Bundle bundle);
MediaMetadata2Provider.BuilderProvider createMediaMetadata2Builder(
- Context context, MediaMetadata2.Builder instance);
+ MediaMetadata2.Builder instance);
MediaMetadata2Provider.BuilderProvider createMediaMetadata2Builder(
- Context context, MediaMetadata2.Builder instance, MediaMetadata2 source);
+ MediaMetadata2.Builder instance, MediaMetadata2 source);
- Rating2 newUnratedRating_Rating2(Context context, int ratingStyle);
- Rating2 fromBundle_Rating2(Context context, Bundle bundle);
- Rating2 newHeartRating_Rating2(Context context, boolean hasHeart);
- Rating2 newThumbRating_Rating2(Context context, boolean thumbIsUp);
- Rating2 newStarRating_Rating2(Context context, int starRatingStyle, float starRating);
- Rating2 newPercentageRating_Rating2(Context context, float percent);
+ Rating2 newUnratedRating_Rating2(int ratingStyle);
+ Rating2 fromBundle_Rating2(Bundle bundle);
+ Rating2 newHeartRating_Rating2(boolean hasHeart);
+ Rating2 newThumbRating_Rating2(boolean thumbIsUp);
+ Rating2 newStarRating_Rating2(int starRatingStyle, float starRating);
+ Rating2 newPercentageRating_Rating2(float percent);
- MediaPlaylistAgentProvider createMediaPlaylistAgent(Context context,
- MediaPlaylistAgent instance);
+ MediaPlaylistAgentProvider createMediaPlaylistAgent(MediaPlaylistAgent instance);
}
diff --git a/media/java/android/media/update/TransportControlProvider.java b/media/java/android/media/update/TransportControlProvider.java
index 03944d2..d89a88a 100644
--- a/media/java/android/media/update/TransportControlProvider.java
+++ b/media/java/android/media/update/TransportControlProvider.java
@@ -29,8 +29,6 @@
void skipToNextItem_impl();
void prepare_impl();
- void fastForward_impl();
- void rewind_impl();
void seekTo_impl(long pos);
void skipToPlaylistItem_impl(MediaItem2 item);
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 32a00d5..1244d7f 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -243,11 +243,11 @@
}
};
- public MtpDatabase(Context context, Context userContext, String volumeName,
+ public MtpDatabase(Context context, String volumeName,
String[] subDirectories) {
native_setup();
mContext = context;
- mMediaProvider = userContext.getContentResolver()
+ mMediaProvider = context.getContentResolver()
.acquireContentProviderClient(MediaStore.AUTHORITY);
mVolumeName = volumeName;
mObjectsUri = Files.getMtpObjectsUri(volumeName);
diff --git a/media/java/android/mtp/MtpServer.java b/media/java/android/mtp/MtpServer.java
index f2b1106..8af5ff7 100644
--- a/media/java/android/mtp/MtpServer.java
+++ b/media/java/android/mtp/MtpServer.java
@@ -18,6 +18,8 @@
import com.android.internal.util.Preconditions;
+import java.io.FileDescriptor;
+
/**
* Java wrapper for MTP/PTP support as USB responder.
* {@hide}
@@ -34,6 +36,7 @@
public MtpServer(
MtpDatabase database,
+ FileDescriptor controlFd,
boolean usePtp,
Runnable onTerminate,
String deviceInfoManufacturer,
@@ -44,6 +47,7 @@
mOnTerminate = Preconditions.checkNotNull(onTerminate);
native_setup(
database,
+ controlFd,
usePtp,
deviceInfoManufacturer,
deviceInfoModel,
@@ -92,6 +96,7 @@
public static native final void native_configure(boolean usePtp);
private native final void native_setup(
MtpDatabase database,
+ FileDescriptor controlFd,
boolean usePtp,
String deviceInfoManufacturer,
String deviceInfoModel,
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index c76cebe..8730e06 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -55,22 +55,17 @@
return (MtpServer*)env->GetLongField(thiz, field_MtpServer_nativeContext);
}
-static void android_mtp_configure(JNIEnv *, jobject, jboolean usePtp) {
- MtpServer::configure(usePtp);
-}
-
static void
-android_mtp_MtpServer_setup(JNIEnv *env, jobject thiz, jobject javaDatabase, jboolean usePtp,
- jstring deviceInfoManufacturer,
- jstring deviceInfoModel,
- jstring deviceInfoDeviceVersion,
- jstring deviceInfoSerialNumber)
+android_mtp_MtpServer_setup(JNIEnv *env, jobject thiz, jobject javaDatabase, jobject jControlFd,
+ jboolean usePtp, jstring deviceInfoManufacturer, jstring deviceInfoModel,
+ jstring deviceInfoDeviceVersion, jstring deviceInfoSerialNumber)
{
const char *deviceInfoManufacturerStr = env->GetStringUTFChars(deviceInfoManufacturer, NULL);
const char *deviceInfoModelStr = env->GetStringUTFChars(deviceInfoModel, NULL);
const char *deviceInfoDeviceVersionStr = env->GetStringUTFChars(deviceInfoDeviceVersion, NULL);
const char *deviceInfoSerialNumberStr = env->GetStringUTFChars(deviceInfoSerialNumber, NULL);
- MtpServer* server = new MtpServer(getMtpDatabase(env, javaDatabase),
+ int controlFd = dup(jniGetFDFromFileDescriptor(env, jControlFd));
+ MtpServer* server = new MtpServer(getMtpDatabase(env, javaDatabase), controlFd,
usePtp,
MtpString((deviceInfoManufacturerStr != NULL) ? deviceInfoManufacturerStr : ""),
MtpString((deviceInfoModelStr != NULL) ? deviceInfoModelStr : ""),
@@ -201,8 +196,7 @@
// ----------------------------------------------------------------------------
static const JNINativeMethod gMethods[] = {
- {"native_configure", "(Z)V", (void *)android_mtp_configure},
- {"native_setup", "(Landroid/mtp/MtpDatabase;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
+ {"native_setup", "(Landroid/mtp/MtpDatabase;Ljava/io/FileDescriptor;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
(void *)android_mtp_MtpServer_setup},
{"native_run", "()V", (void *)android_mtp_MtpServer_run},
{"native_cleanup", "()V", (void *)android_mtp_MtpServer_cleanup},
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index 4db0034..7828c4c 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -42,6 +42,7 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.webkit.CookieManager;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
@@ -147,6 +148,7 @@
final WebView webview = getWebview();
webview.clearCache(true);
+ CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
diff --git a/packages/Osu2/Android.mk b/packages/Osu2/Android.mk
index 063ac7e..7de8908 100644
--- a/packages/Osu2/Android.mk
+++ b/packages/Osu2/Android.mk
@@ -12,6 +12,7 @@
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
+LOCAL_COMPATIBILITY_SUITE := device-tests
include $(BUILD_PACKAGE)
diff --git a/packages/Osu2/tests/AndroidTest.xml b/packages/Osu2/tests/AndroidTest.xml
new file mode 100644
index 0000000..9514dab
--- /dev/null
+++ b/packages/Osu2/tests/AndroidTest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- This test config file is auto-generated. -->
+<configuration description="Runs OSU App Tests.">
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-suite-tag" value="apct-instrumentation" />
+ <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+ <option name="cleanup-apks" value="true" />
+ <option name="test-file-name" value="Osu2.apk" />
+ <option name="test-file-name" value="OsuTests.apk" />
+ </target_preparer>
+
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="com.android.osu.tests" />
+ <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+ </test>
+</configuration>
diff --git a/packages/SettingsLib/Android.mk b/packages/SettingsLib/Android.mk
index 4338d26..859f86f 100644
--- a/packages/SettingsLib/Android.mk
+++ b/packages/SettingsLib/Android.mk
@@ -13,7 +13,6 @@
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
- android-support-v14-preference \
android-arch-lifecycle-runtime
LOCAL_SHARED_JAVA_LIBRARIES := \
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 5defd4a..e8a3cd8 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Ongeveer <xliff:g id="TIME">%1$s</xliff:g> oor gegrond op jou gebruik"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Omtrent <xliff:g id="TIME">%1$s</xliff:g> oor op grond van jou gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> oor"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Sal op grond van jou gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>) hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Sal op grond van jou gebruik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Sal hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Sal hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meer as <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreer"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nie geregistreer nie"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Onbeskikbaar"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d toestelle is gekoppel</item>
<item quantity="one">%1$d toestel is gekoppel</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tydsduur"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vra elke keer"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 1dbf60b1..70107f3 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"በእርስዎ አጠቃቀም ላይ በመመስረት <xliff:g id="TIME">%1$s</xliff:g> ገደማ ቀርቷል"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"በአጠቃቀምዎ (<xliff:g id="LEVEL">%2$s</xliff:g>) መሠረት <xliff:g id="TIME">%1$s</xliff:g> ገደማ ቀርቷል"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ቀርቷል"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"በአጠቃቀምዎ መሠረት እስከ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ገደማ ይቆያል"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"በአጠቃቀምዎ መሠረት እስከ <xliff:g id="TIME">%1$s</xliff:g> ገደማ ይቆያል"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"እስከ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ገደማ ይቆያል"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"እስከ <xliff:g id="TIME">%1$s</xliff:g> ገደማ ይቆያል"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"ከ<xliff:g id="TIME_REMAINING">%1$s</xliff:g> በላይ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"የተመዘገበ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"አልተመዘገበም"</string>
<string name="status_unavailable" msgid="7862009036663793314">"አይገኝም"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d መሣሪያዎች ተገናኝተዋል</item>
<item quantity="other">%1$d መሣሪያዎች ተገናኝተዋል</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"በ<xliff:g id="WHEN">%1$s</xliff:g> ላይ"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"የቆይታ ጊዜ"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ሁልጊዜ ጠይቅ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index ba31973..20e245b 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"يتبقى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا بناءً على استخدامك"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"يتبقى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا، بناءً على استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"يتبقى <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"سيعمل حتى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا، بناءً على استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"سيعمل حتى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا، بناءً على استخدامك."</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"سيعمل حتى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"سيعمل حتى <xliff:g id="TIME">%1$s</xliff:g> تقريبًا."</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"مُسجَّل"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"غير مُسجَّل"</string>
<string name="status_unavailable" msgid="7862009036663793314">"غير متاح"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="zero">عدد الأجهزة المتصلة %1$d</item>
<item quantity="two">عدد الأجهزة المتصلة %1$d</item>
@@ -441,4 +447,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"يوم <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"المدة"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"الطلب في كل مرة"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 2b502ed..d44ce40 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -381,13 +381,13 @@
<!-- no translation found for power_discharging_duration_enhanced (5726302316642148671) -->
<skip />
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> বাকী"</string>
- <!-- no translation found for power_discharge_by_enhanced (8305422490607220844) -->
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
<skip />
- <!-- no translation found for power_discharge_by_only_enhanced (896515698736070025) -->
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
<skip />
- <!-- no translation found for power_discharge_by (6052127431194780229) -->
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
<skip />
- <!-- no translation found for power_discharge_by_only (4850425421176271395) -->
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
<skip />
<!-- no translation found for power_remaining_less_than_duration_only (5996752448813295329) -->
<skip />
@@ -453,6 +453,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"পঞ্জীকৃত"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"পঞ্জীকৃত নহয়"</string>
<string name="status_unavailable" msgid="7862009036663793314">"উপলব্ধ নহয়"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<!-- no translation found for wifi_tether_connected_summary (3871603864314407780) -->
<!-- no translation found for accessibility_manual_zen_more_time (1636187409258564291) -->
<skip />
@@ -481,4 +483,6 @@
<skip />
<!-- no translation found for zen_mode_duration_always_prompt_title (6478923750878945501) -->
<skip />
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 14d809f..ce362ce 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"İstifadəyə əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> qalıb"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"İstifadənizə <xliff:g id="LEVEL">%2$s</xliff:g> əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> qalıb"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> qalıb"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"İstifadəyə (<xliff:g id="LEVEL">%2$s</xliff:g>) əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> davam edəcək"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"İstifadəyə əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> davam edəcək"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) davam edəcək"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> davam edəcək"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Qalan vaxt <xliff:g id="TIME_REMAINING">%1$s</xliff:g> və daha çoxdur (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Qeydiyyatlı"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Qeydiyyatsız"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Əlçatmazdır"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d cihaz qoşuludur</item>
<item quantity="one">%1$d cihaz qoşuludur</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> olduqda"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Müddət"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Hər dəfə soruşun"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 0e194b4..7dbf7b3 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Na osnovu potrošnje imate još otprilike <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Na osnovu korišćenja imate još približno <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Preostalo vreme: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Na osnovu korišćenja trajaće približno do TIME <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Na osnovu korišćenja trajaće približno do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrovan je"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrovan"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nedostupno"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Povezan je %1$d uređaj</item>
<item quantity="few">Povezana su %1$d uređaja</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uvek pitaj"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index edbbf41..f2efd7e 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Засталося каля <xliff:g id="TIME">%1$s</xliff:g> на аснове вашага выкарыстання"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Зараду (<xliff:g id="LEVEL">%2$s</xliff:g>) хопіць на <xliff:g id="TIME">%1$s</xliff:g> пры цяперашнім узроўні выкарыстання"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Засталося <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Зараду хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g> пры цяперашнім узроўні выкарыстання (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Зараду хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g> пры цяперашнім узроўні выкарыстання"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Зараду (<xliff:g id="LEVEL">%2$s</xliff:g>) хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Зараду хопіць да <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Засталося менш за <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць менш чым на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць больш чым на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Зарэгістраваны"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зарэгістраваны"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Адсутнічае"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d прылада падключана</item>
<item quantity="few">%1$d прылады падключаны</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"у <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Працягласць"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Заўсёды пытацца"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index efdf760..4b765d0 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Още около <xliff:g id="TIME">%1$s</xliff:g> въз основа на използването"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Още около <xliff:g id="TIME">%1$s</xliff:g> въз основа на използването (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Оставащо време: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Ще издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> въз основа на употребата (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Ще издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> въз основа на употребата"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Ще издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Ще издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Регистрирано"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не е регистрирано"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Няма данни"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d устройства са свързани</item>
<item quantity="one">%1$d устройство е свързано</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"в/ъв <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Времетраене"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Да се пита винаги"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 691ffb4..f6e22b4 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"বর্তমান ব্যাটারি ব্যবহার অনুযায়ী আর <xliff:g id="TIME">%1$s</xliff:g> বাকি"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"বর্তমান ব্যবহার অনুযায়ী আর আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> বাকী আছে"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"বর্তমান ব্যবহার অনুযায়ী আর আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"বর্তমান ব্যবহার অনুযায়ী আর আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> চলবে"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"আর আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"আর আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> চলবে"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> এর থেকেও কম বাকি আছে"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"আর <xliff:g id="THRESHOLD">%1$s</xliff:g>-এর কম চার্জ বাকি আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"আরও <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-এর বেশি চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"রেজিস্টার করা"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"রেজিস্টার করা নয়"</string>
<string name="status_unavailable" msgid="7862009036663793314">"অনুপলব্ধ"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$dটি ডিভাইস সংযুক্ত</item>
<item quantity="other">%1$dটি ডিভাইস সংযুক্ত</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"তারিখ ও সময় <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"সময়কাল"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"প্রতিবার জিজ্ঞেস করা হবে"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 8fadbce..172fb3c 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Preostalo je još oko <xliff:g id="TIME">%1$s</xliff:g>, na osnovu vašeg korištenja"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Preostalo je još oko <xliff:g id="TIME">%1$s</xliff:g> na osnovu vaše upotrebe (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Imate još <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> na osnovu vaše upotrebe (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> na osnovu vaše upotrebe"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirano"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrirano"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nije dostupno"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Povezan je %1$d uređaj</item>
<item quantity="few">Povezana su %1$duređaja</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 69a368b..56acc36 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Temps restant aproximat segons l\'ús que en fas: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Temps restant aproximat segons l\'ús que en fas: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Temps restant: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"La bateria durarà aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> segons l\'ús que en fas (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"La bateria durarà aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> segons l\'ús que en fas"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"La bateria durarà aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"La bateria durarà aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Temps restant superior a <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrat"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Sense registrar"</string>
<string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositius connectats</item>
<item quantity="one">%1$d dispositiu connectat</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"Data: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durada"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pregunta sempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 594ea3b..cbad3ef 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Při vašem obvyklém využití zbývá asi <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Při vašem obvyklém využití (<xliff:g id="LEVEL">%2$s</xliff:g>) zbývá asi <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Zbývající čas: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Při vašem obvyklém využití (<xliff:g id="LEVEL">%2$s</xliff:g>) vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Při vašem obvyklém využití vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zbývá více než <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrováno"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neregistrováno"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Není k dispozici"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="few">Připojena %1$d zařízení</item>
<item quantity="many">Připojeno %1$d zařízení</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"v <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trvání"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pokaždé se zeptat"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 942847d..33f09cb 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Der er ca. <xliff:g id="TIME">%1$s</xliff:g> tilbage, alt efter hvordan du bruger enheden"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Ca. <xliff:g id="TIME">%1$s</xliff:g> tilbage, alt efter hvordan du bruger enheden (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> tilbage"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Batteriet kan holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> baseret på dit forbrug (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Batteriet kan holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> baseret på dit forbrug"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Batteriet kan holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Batteriet kan holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Der er mere end <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registreret"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ikke registreret"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Utilgængelig"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d enhed er tilsluttet</item>
<item quantity="other">%1$d enheder er tilsluttet</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"på <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varighed"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spørg hver gang"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index d42e294..a704850 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Noch ca. <xliff:g id="TIME">%1$s</xliff:g>, basierend auf deiner Nutzung"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Noch ca. <xliff:g id="TIME">%1$s</xliff:g>, basierend auf deiner Nutzung (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Noch <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Reicht noch bis ca. <xliff:g id="TIME">%1$s</xliff:g>, basierend auf deiner Nutzung (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Reicht noch bis ca. <xliff:g id="TIME">%1$s</xliff:g>, basierend auf deiner Nutzung"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Reicht noch bis ca. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Reicht noch bis ca. <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mehr als <xliff:g id="TIME_REMAINING">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registriert"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nicht registriert"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nicht verfügbar"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d Geräte verbunden</item>
<item quantity="one">%1$d Gerät verbunden</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"am <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Dauer"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Jedes Mal fragen"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 1a86e33..53713f0 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Απομένει/ουν περίπου <xliff:g id="TIME">%1$s</xliff:g> με βάση τη χρήση σας"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Απομένει/ουν περίπου <xliff:g id="TIME">%1$s</xliff:g>, ανάλογα με τη χρήση σας (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Απομένει/ουν <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου, ανάλογα με τη χρήση σας (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου, ανάλογα με τη χρήση σας"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Απομένουν περισσότερα/ες από <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Εγγεγραμμένη"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Μη εγγεγραμμένη"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Μη διαθέσιμο"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d συσκευές συνδέθηκαν</item>
<item quantity="one">%1$d συσκευή συνδέθηκε</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"το/τη(ν) <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Διάρκεια"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Να ερωτώμαι κάθε φορά"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 027f1c5..8ad2f89 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> left"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Will last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomised"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d devices connected</item>
<item quantity="one">%1$d device connected</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 027f1c5..8ad2f89 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> left"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Will last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomised"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d devices connected</item>
<item quantity="one">%1$d device connected</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 027f1c5..8ad2f89 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> left"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Will last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomised"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d devices connected</item>
<item quantity="one">%1$d device connected</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 027f1c5..8ad2f89 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> left"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Will last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomised"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d devices connected</item>
<item quantity="one">%1$d device connected</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 086e795..6cbb23d 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> left"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Will last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Will last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomized"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d devices connected</item>
<item quantity="one">%1$d device connected</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index bc74da4..2a54c13 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Aproximadamente <xliff:g id="TIME">%1$s</xliff:g> restantes en función del uso"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tiempo restante: <xliff:g id="TIME">%1$s</xliff:g> aproximadamente según el uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Tiempo restante: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Sin registrar"</string>
<string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositivos conectados</item>
<item quantity="one">%1$d dispositivo conectado</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"el <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 952fe1a..f4fb7f3 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Tiempo restante aproximado según tu uso: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tiempo restante aproximado según tu uso: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Tiempo restante: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Durará aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Queda menos del <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Queda más del <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"No registrado"</string>
<string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositivos conectados</item>
<item quantity="one">%1$d dispositivo conectado</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"Fecha: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 6f904e5..de256af 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Teie kasutuse alusel on jäänud ligikaudu <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Teie kasutuse põhjal on jäänud umbes <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> on jäänud"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Kestab teie kasutuse põhjal umbes kuni <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Kestab teie kasutuse põhjal umbes kuni <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Kestab umbes kuni <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Kestab umbes kuni <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Jäänud on üle <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registreeritud"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ei ole registreeritud"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Pole saadaval"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d seadet on ühendatud</item>
<item quantity="one">%1$d seade on ühendatud</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"– <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kestus"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Küsi iga kord"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 73f5435..1fd4639 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"<xliff:g id="TIME">%1$s</xliff:g> inguru gelditzen dira, erabileraren arabera"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Erabilera kontuan izanda, <xliff:g id="TIME">%1$s</xliff:g> inguru gelditzen dira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> guztiz kargatu arte"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Erabilera kontuan izanda, bateriak ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Erabilera kontuan izanda, bateriak ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Bateriak ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Bateriak ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen dira"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> baino gehiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Erregistratuta"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Erregistratu gabe"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ez dago erabilgarri"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d gailu daude konektatuta</item>
<item quantity="one">%1$d gailu dago konektatuta</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"data: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Iraupena"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Galdetu beti"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 5ace968..140ce4b 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"براساس میزان مصرف شما، <xliff:g id="TIME">%1$s</xliff:g> باقیمانده است"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"بسته به مصرفتان، حدوداً <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) شارژ باقی است"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> باقی مانده"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"بسته به مصرفتان (<xliff:g id="LEVEL">%2$s</xliff:g>)، حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ دارید"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"بسته به مصرفتان، حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ دارید"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ دارید (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ دارید"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> باقی مانده"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"بیش از <xliff:g id="TIME_REMAINING">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ثبتشده"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ثبت نشده است"</string>
<string name="status_unavailable" msgid="7862009036663793314">"در دسترس نیست"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d دستگاه متصل</item>
<item quantity="other">%1$d دستگاه متصل</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"روز <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"مدت"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"هربار پرسیده شود"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 2a6becc3..3f1d036 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Noin <xliff:g id="TIME">%1$s</xliff:g> jäljellä käytön perusteella"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Noin <xliff:g id="TIME">%1$s</xliff:g> jäljellä käyttösi perusteella (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> jäljellä"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Akun varaus loppuu käyttösi perusteella noin <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Akun varaus loppuu käyttösi perusteella noin <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Akun varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Akun varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Yli <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Rekisteröity"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ei rekisteröity"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ei käytettävissä"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d laitetta liitetty</item>
<item quantity="one">%1$d laite liitetty</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kesto"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Kysy aina"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 4304fea..e3d7896 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Il reste environ <xliff:g id="TIME">%1$s</xliff:g> en fonction de votre usage"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Il reste environ <xliff:g id="TIME">%1$s</xliff:g> en fonction de votre usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Temps restant : <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Durera jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>, en fonction de votre usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Durera jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>, en fonction de votre usage"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Durera jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Durera jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Enregistré"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non enregistré"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Non accessible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d appareil connecté</item>
<item quantity="other">%1$d appareils connectés</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"le <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durée"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index b48b337..2fa0364 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Temps restant en fonction de votre utilisation : environ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Temps restant en fonction de votre utilisation (<xliff:g id="LEVEL">%2$s</xliff:g>) : environ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Temps restant : <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Temps restant en fonction de votre utilisation (<xliff:g id="LEVEL">%2$s</xliff:g>) : jusqu\'à <xliff:g id="TIME">%1$s</xliff:g> environ"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Temps restant en fonction de votre utilisation : jusqu\'à <xliff:g id="TIME">%1$s</xliff:g> environ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Temps restant : jusqu\'à <xliff:g id="TIME">%1$s</xliff:g> environ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Temps restant : jusqu\'à <xliff:g id="TIME">%1$s</xliff:g> environ"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Enregistré"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non enregistré"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Non disponible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d appareil connecté</item>
<item quantity="other">%1$d appareils connectés</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"le <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durée"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index ddd6ce8..995658d 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -180,9 +180,9 @@
<string name="vpn_settings_not_available" msgid="956841430176985598">"A configuración da VPN non está dispoñible para este usuario"</string>
<string name="tethering_settings_not_available" msgid="6765770438438291012">"A configuración da conexión compartida non está dispoñible para este usuario"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"A configuración do nome do punto de acceso non está dispoñible para este usuario"</string>
- <string name="enable_adb" msgid="7982306934419797485">"Depuración de USB"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuración por USB"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuración de erros cando o USB está conectado"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar as autorizacións de depuración USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar as autorizacións de depuración por USB"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Atallo do informe de erros"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar un botón no menú de acendido para crear un informe de erros"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
@@ -239,9 +239,9 @@
<string name="debug_view_attributes" msgid="6485448367803310384">"Activar a inspección de atributos de visualización"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén sempre os datos móbiles activos, aínda que a wifi estea activada (para un rápido cambio de rede)."</string>
<string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Se está dispoñible, úsase a aceleración de hardware para conexión compartida"</string>
- <string name="adb_warning_title" msgid="6234463310896563253">"Queres permitir a depuración USB?"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Queres permitir a depuración por USB?"</string>
<string name="adb_warning_message" msgid="7316799925425402244">"A depuración de erros USB está deseñada unicamente para fins de programación. Utilízaa para copiar datos entre o ordenador e o dispositivo, instalar aplicacións no dispositivo sen enviar notificacións e ler os datos do rexistro."</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"Queres revogar o acceso á depuración USB desde todos os ordenadores que autorizaches previamente?"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Queres revogar o acceso á depuración por USB desde todos os ordenadores que autorizaches previamente?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Permitir a configuración de programación?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Esta configuración só está destinada á programación. Esta pode provocar que o dispositivo e as aplicacións fallen ou se comporten incorrectamente."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicacións por USB"</string>
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Tempo restante aproximado en función do uso: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tempo restante aproximado en función do uso: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Tempo restante: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Duración aproximada en función do uso: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Duración aproximada en función do uso: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Duración aproximada: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Duración aproximada: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tempo restante inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tempo restante: máis de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Rexistrado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non rexistrado"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Non dispoñible"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositivos conectados</item>
<item quantity="one">%1$d dispositivo conectado</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"na seguinte data: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar sempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index d723da5..5522a74 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"તમારા વપરાશનાં આધારે લગભગ <xliff:g id="TIME">%1$s</xliff:g> બાકી છે"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"તમારા વપરાશના આધારે લગભગ <xliff:g id="TIME">%1$s</xliff:g> બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> બાકી"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"તમારા વપરાશના આધારે લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલશે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"તમારા વપરાશના આધારે લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલશે"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલશે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલશે"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> કરતાં વધુ સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"રજિસ્ટર કરેલ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"રજિસ્ટર કરેલ નથી"</string>
<string name="status_unavailable" msgid="7862009036663793314">"અનુપલબ્ધ"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d ઉપકરણ કનેક્ટ કર્યું</item>
<item quantity="other">%1$d ઉપકરણો કનેક્ટ કર્યા</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> વાગ્યે"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"અવધિ"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"દર વખતે પૂછો"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index a13c4d8..13047fd 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"आपके उपयोग के आधार पर लगभग <xliff:g id="TIME">%1$s</xliff:g> का समय बचा है"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"आपके इस्तेमाल के हिसाब से बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> में खत्म हो जाएगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> शेष"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"आपके इस्तेमाल के हिसाब से बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"आपके इस्तेमाल के हिसाब से बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम समय बचा है"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> से ज़्यादा चलने लायक बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"रजिस्टर है"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"रजिस्टर नहीं है"</string>
<string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d डिवाइस जुड़े हैं</item>
<item quantity="other">%1$d डिवाइस जुड़े हैं</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"अलार्म <xliff:g id="WHEN">%1$s</xliff:g> को बजेगा"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"अवधि"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"हर बार पूछें"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index d5baf3a..97298bb 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Još otprilike <xliff:g id="TIME">%1$s</xliff:g> na temelju vaše upotrebe"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Još otprilike <xliff:g id="TIME">%1$s</xliff:g> na temelju vaše upotrebe (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Još <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> na temelju vaše upotrebe (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> na temelju vaše upotrebe"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Trajat će otprilike do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirano"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrirano"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nije dostupno"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Povezan je %1$d uređaj</item>
<item quantity="few">Povezana su %1$d uređaja</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 3af7045..0b27780 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Körülbelül <xliff:g id="TIME">%1$s</xliff:g> van hátra az eszköz igénybevétele alapján"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"A használat alapján nagyjából <xliff:g id="TIME">%1$s</xliff:g> maradt (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> van hátra"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"A használat alapján nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"A használat alapján nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Kevesebb mint <xliff:g id="TIME_REMAINING">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Regisztrált"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nem regisztrált"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nem érhető el"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d eszköz csatlakozik</item>
<item quantity="one">%1$d eszköz csatlakozik</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"ezen a napon: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Időtartam"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Mindig kérdezzen rá"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 36880d8..bf7f492 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Մնացել է մոտ <xliff:g id="TIME">%1$s</xliff:g>՝ օգտագործման եղանակից կախված"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Լիցքը (<xliff:g id="LEVEL">%2$s</xliff:g>) կբավարարի մոտ <xliff:g id="TIME">%1$s</xliff:g>՝ կախված օգտագործման եղանակից"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Մնացել է <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Լիցքը (<xliff:g id="LEVEL">%2$s</xliff:g>) կբավարարի մոտ <xliff:g id="TIME">%1$s</xliff:g>՝ կախված օգտագործման եղանակից"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Լիցքը կբավարարի մոտ <xliff:g id="TIME">%1$s</xliff:g>՝ կախված օգտագործման եղանակից"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Լիցքը (<xliff:g id="LEVEL">%2$s</xliff:g>) կբավարարի մոտ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Լիցքը կբավարարի մոտ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Մնացել է ավելի քան <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Գրանցված է"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Գրանցված չէ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Անհասանելի"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Միացված է %1$d սարք</item>
<item quantity="other">Միացված է %1$d սարք</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ին"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Տևողություն"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Հարցնել ամեն անգամ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 323d14f..4bf0790 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Kira-kira <xliff:g id="TIME">%1$s</xliff:g> lagi berdasarkan penggunaan Anda"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tersisa kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan Anda (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> tersisa"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan Anda (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan Anda"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tersisa lebih dari <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Terdaftar"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Tidak terdaftar"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Tidak Tersedia"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d perangkat terhubung</item>
<item quantity="one">%1$d perangkat terhubung</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"pada <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durasi"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Selalu tanya"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index f8a4d1b..913f2f8 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"U.þ.b. <xliff:g id="TIME">%1$s</xliff:g> eftir miðað við notkun þína"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Um það bil <xliff:g id="TIME">%1$s</xliff:g> eftir miðað við notkun þína (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> eftir"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Endist til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> miðað við notkun þína (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Endist til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> miðað við notkun þína"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Endist til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Endist til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meira en <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Skráð"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ekki skráð"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ekki tiltækt"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d tæki tengt</item>
<item quantity="other">%1$d tæki tengd</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"á/í <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Lengd"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spyrja í hvert skipti"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index d478be1..6627618 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Tempo rimanente in base al tuo utilizzo: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tempo rimanente in base al tuo utilizzo (<xliff:g id="LEVEL">%2$s</xliff:g>): <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Tempo rimanente: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Tempo rimanente in base al tuo utilizzo (<xliff:g id="LEVEL">%2$s</xliff:g>): <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Tempo rimanente in base al tuo utilizzo: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Tempo rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Tempo rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tempo rimanente: più di <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrato"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non registrato"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Non disponibile"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositivi connessi</item>
<item quantity="one">%1$d dispositivo connesso</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"il giorno <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durata"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Chiedi ogni volta"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 23efd15..0822493 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"על סמך השימוש במכשיר, הסוללה תתרוקן בעוד <xliff:g id="TIME">%1$s</xliff:g>, בקירוב"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"נותרו בערך <xliff:g id="TIME">%1$s</xliff:g> על סמך השימוש במכשיר (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"נותרו <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"תחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> על סמך השימוש במכשיר (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"תחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> על סמך השימוש במכשיר"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"תחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"תחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"נותרו יותר מ-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"רשום"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"לא רשום"</string>
<string name="status_unavailable" msgid="7862009036663793314">"לא זמין"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="two">%1$d מכשירים מחוברים</item>
<item quantity="many">%1$d מכשירים מחוברים</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"ב-<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"משך"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"שאל בכל פעם"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index e60b09f..200cf8b 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>(使用状況に基づく)"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>(使用状況に基づく)(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g>(残り時間)"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>(使用状況に基づく)(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>(使用状況に基づく)"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"残り時間: 約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"残り時間: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>以上(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -420,6 +424,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"登録済み"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未登録"</string>
<string name="status_unavailable" msgid="7862009036663793314">"不明"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d 台の端末が接続されています</item>
<item quantity="one">%1$d 台の端末が接続されています</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"期間"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"毎回確認"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index a726ba1..a80ffb1 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"დარჩა დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>, ბატარეის მოხმარების გათვალისწინებით"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"იმუშავებს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>, ბატარეის მოხმარების გათვალისწინებით (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"დარჩენილია <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"იმუშავებს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>, მოხმარების გათვალისწინებით (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"იმუშავებს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>, მოხმარების გათვალისწინებით"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"იმუშავებს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"იმუშავებს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"დარჩენილია <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ზე მეტი დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"რეგისტრირებული"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"არარეგისტრირებული"</string>
<string name="status_unavailable" msgid="7862009036663793314">"მიუწვდომელია"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">დაკავშირებულია %1$d მოწყობილობა</item>
<item quantity="one">დაკავშირებულია %1$d მოწყობილობა</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ზე"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ხანგრძლივობა"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ყოველთვის მკითხეთ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 640e632..efcb072 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Пайдалану негізінде шамамен <xliff:g id="TIME">%1$s</xliff:g> қалды"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Пайдалануға байланысты шамамен <xliff:g id="TIME">%1$s</xliff:g> қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> қалды"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Пайдалануға байланысты шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Пайдаланылуына қарай шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа дейін жетеді (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> шамасынан көп уақыт қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Тіркелген"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Тіркелмеген"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Қол жетімсіз"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d құрылғы қосылды</item>
<item quantity="one">%1$d құрылғы қосылды</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"Уақыты: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ұзақтығы"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Әрдайым сұрау"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index eac700a..dee37e8 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"សល់ប្រហែល <xliff:g id="TIME">%1$s</xliff:g> ទៀតផ្អែកលើការប្រើប្រាស់របស់អ្នក"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"នៅសល់ប្រហែល <xliff:g id="TIME">%1$s</xliff:g> ទៀត ផ្អែកលើការប្រើប្រាស់របស់អ្នក (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"នៅសល់ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"នឹងអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> ដោយអាស្រ័យលើការប្រើប្រាស់របស់អ្នក (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"នឹងអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> ដោយអាស្រ័យលើការប្រើប្រាស់របស់អ្នក"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"នឹងអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"នឹងអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"នៅសល់ច្រើនជាង <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"បានចុះឈ្មោះ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"មិនបានចុះឈ្មោះ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"មិនមាន"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">បានភ្ជាប់ឧបករណ៍ %1$d</item>
<item quantity="one">បានភ្ជាប់ឧបករណ៍ %1$d</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"នៅថ្ងៃ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"រយៈពេល"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"សួរគ្រប់ពេល"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index b4e89b3..10236b8 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"ನಿಮ್ಮ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ ಸುಮಾರು <xliff:g id="TIME">%1$s</xliff:g> ಉಳಿದಿದೆ"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ನಿಮ್ಮ ಬಳಕೆಯ <xliff:g id="LEVEL">%2$s</xliff:g> ಆಧಾರದ ಮೇಲೆ ಸುಮಾರು <xliff:g id="TIME">%1$s</xliff:g> ಉಳಿದಿದೆ"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ಉಳಿದಿದೆ"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"ನಿಮ್ಮ ಬಳಕೆ (<xliff:g id="LEVEL">%2$s</xliff:g>) ಆಧರಿಸಿ <xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ರನ್ ಆಗುತ್ತದೆ"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"ನಿಮ್ಮ ಬಳಕೆ ಆಧರಿಸಿ <xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ರನ್ ಆಗುತ್ತದೆ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ಆಗುತ್ತದೆ"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"<xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ರನ್ ಆಗುತ್ತದೆ"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯ ಉಳಿದಿದೆ"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ಕ್ಕಿಂತ ಕಡಿಮೆ (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ನೋಂದಾಯಿಸಲಾಗಿದೆ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ನೋಂದಾಯಿಸಲಾಗಿಲ್ಲ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ಲಭ್ಯವಿಲ್ಲ"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d ಸಾಧನಗಳನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</item>
<item quantity="other">%1$d ಸಾಧನಗಳನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ಕ್ಕೆ"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ಅವಧಿ"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ಪ್ರತಿ ಬಾರಿ ಕೇಳಿ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index ac265b1..b6b2f56 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"내 사용량을 기준으로 약 <xliff:g id="TIME">%1$s</xliff:g> 남음"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"내 사용량(<xliff:g id="LEVEL">%2$s</xliff:g>)을 기준으로 약 <xliff:g id="TIME">%1$s</xliff:g> 남음"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> 남음"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"내 사용량에 따르면 <xliff:g id="TIME">%1$s</xliff:g> 정도까지 사용 가능(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"내 사용량에 따르면 <xliff:g id="TIME">%1$s</xliff:g> 정도까지 사용 가능"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"<xliff:g id="TIME">%1$s</xliff:g> 정도까지 사용 가능(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"<xliff:g id="TIME">%1$s</xliff:g> 정도까지 사용 가능"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> 이상 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"등록됨"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"등록되지 않음"</string>
<string name="status_unavailable" msgid="7862009036663793314">"사용할 수 없음"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">기기 %1$d개 연결됨</item>
<item quantity="one">기기 %1$d개 연결됨</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"일시: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"지속 시간"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"항상 확인"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index ff6bc8c..13174bc 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Колдонушуңузга караганда болжол менен <xliff:g id="TIME">%1$s</xliff:g> калды"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Колдонгонуңузга караганда болжол менен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) калды"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> калды"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Колдонгонуңузга караганда болжол менен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) кийин өчөт"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Колдонгонуңузга караганда болжол менен <xliff:g id="TIME">%1$s</xliff:g> кийин өчөт"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) кийин өчөт"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> кийин өчөт"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ашыгыраак убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Катталган"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Катталган эмес"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Жеткиликсиз"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d түзмөк туташып турат</item>
<item quantity="one">%1$d түзмөк туташып турат</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Узактыгы"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ар дайым суралсын"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 424164e..b01defb 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"ເຫຼືອອີກປະມານ <xliff:g id="TIME">%1$s</xliff:g> ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ເຫຼືອອີກປະມານ <xliff:g id="TIME">%1$s</xliff:g> ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"ຍັງເຫຼືອ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"ຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g> ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"ຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g> ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"ຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"ຈະໃຊ້ໄດ້ຈົນຮອດປະມານ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"ຍັງເຫຼືອຫຼາຍກວ່າ <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ລົງທະບຽນແລ້ວ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ບໍ່ໄດ້ລົງທະບຽນ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ບໍ່ມີຂໍ້ມູນ"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">ເຊື່ອມຕໍ່ %1$d ອຸປະກອນແລ້ວ</item>
<item quantity="one">ເຊື່ອມຕໍ່ %1$d ອຸປະກອນແລ້ວ</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"ເວລາ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ໄລຍະເວລາ"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ຖາມທຸກເທື່ອ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 377bfc6..0fc3916 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Liko maždaug <xliff:g id="TIME">%1$s</xliff:g>, atsižvelgiant į naudojimą"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Liko maždaug <xliff:g id="TIME">%1$s</xliff:g>, atsižvelgiant į naudojimą (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Liko <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Išsikraus maždaug po <xliff:g id="TIME">%1$s</xliff:g>, atsižvelgiant į naudojimą (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Išsikraus maždaug po <xliff:g id="TIME">%1$s</xliff:g>, atsižvelgiant į naudojimą"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Išsikraus maždaug po <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Išsikraus maždaug po <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Liko daugiau nei <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Užregistruota"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neužregistruota"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Užimta"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Prijungtas %1$d įrenginys</item>
<item quantity="few">Prijungti %1$d įrenginiai</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trukmė"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Klausti kaskart"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index d278129..e22d44a 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Atlikušais laiks: aptuveni <xliff:g id="TIME">%1$s</xliff:g> (ņemot vērā lietojumu)"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Ņemot vērā lietojumu, atlikušais laiks: aptuveni <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Atlicis: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Ņemot vērā lietojumu, darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Ņemot vērā lietojumu, darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Atlikušais laiks — mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Atlicis mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Atlicis vairāk nekā <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Reģistrēts"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nav reģistrēts"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nepieejams"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="zero">Pievienotas %1$d ierīces</item>
<item quantity="one">Pievienota %1$d ierīce</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ilgums"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vaicāt katru reizi"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index cd9af2d..c47083b 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Уште околу <xliff:g id="TIME">%1$s</xliff:g> според користењето"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Уште околу <xliff:g id="TIME">%1$s</xliff:g> според вашето користење (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"уште <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Ќе трае до околу <xliff:g id="TIME">%1$s</xliff:g> според вашето користење (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Ќе трае до околу <xliff:g id="TIME">%1$s</xliff:g> според вашето користење"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Ќе трае до околу <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Ќе трае до околу <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Уште повеќе од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Регистриран"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не е регистриран"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Недостапен"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Поврзан е %1$d уред</item>
<item quantity="other">Поврзани се %1$d уреди</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"во <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Времетраење"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Секогаш прашувај"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 74d1bcd..5b33ba8 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏതാണ്ട് <xliff:g id="TIME">%1$s</xliff:g> ശേഷിക്കുന്നു"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏതാണ്ട് <xliff:g id="TIME">%1$s</xliff:g> ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ശേഷിക്കുന്നു"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി, ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കും (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി, ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കും"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) വരെ നീണ്ടുനിൽക്കും"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കും"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"രജിസ്റ്റർ ചെയ്തു"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"രജിസ്റ്റർ ചെയ്തിട്ടില്ല"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ലഭ്യമല്ല"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d ഉപകരണങ്ങൾ കണക്റ്റ് ചെയ്തു</item>
<item quantity="one">%1$d ഉപകരണം കണക്റ്റ് ചെയ്തു</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ന്"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ദൈർഘ്യം"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"എപ്പോഴും ചോദിക്കുക"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index faded02..14db713 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Таны хэрэглээнд тулгуурлан <xliff:g id="TIME">%1$s</xliff:g> орчмын хугацаа үлдсэн байна"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Таны хэрэглээнд тулгуурлан ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> үлдсэн"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Таны хэрэглээнд тулгуурлан ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> үргэлжилнэ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Таны хэрэглээнд тулгуурлан ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> үргэлжилнэ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> үргэлжилнэ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> үргэлжилнэ"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-с их хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Бүртгэсэн"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Бүртгээгүй"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Байхгүй"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d төхөөрөмж холбосон</item>
<item quantity="one">%1$d төхөөрөмж холбосон</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-д"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Хугацаа"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Тухай бүрт асуух"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 6e8793a..d6ac653 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"तुमच्या वापरानुसार अंदाजे <xliff:g id="TIME">%1$s</xliff:g> पुरेल इतकी बॅटरी शिल्लक आहे"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"तुमच्या वापराच्या (<xliff:g id="LEVEL">%2$s</xliff:g>) आधारावर <xliff:g id="TIME">%1$s</xliff:g> शिल्लक आहे"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> शिल्लक"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"तुमच्या वापरावर आधारित (<xliff:g id="LEVEL">%2$s</xliff:g>) अंदाजे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत चालेल"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"तुमच्या वापरावर आधारित अंदाजे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत चालेल"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"अंदाजे <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) पर्यंत चालेल"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"अंदाजे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत चालेल"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी शिल्लक आहे"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> पेक्षा जास्त वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"नोंदवलेले"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"नोंदवलेले नाही"</string>
<string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d डिव्हाइस कनेक्ट केले आहे</item>
<item quantity="other">%1$d डिव्हाइस कनेक्ट केली आहेत</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> रोजी"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"कालावधी"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक वेळी विचारा"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 1c4e668..7d2fb8a 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Tinggal kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan anda"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Tinggal kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan anda (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> lagi"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan anda (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan anda"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tinggal kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Lebih daripada <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Berdaftar"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Tidak didaftarkan"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Tidak tersedia"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d peranti disambungkan</item>
<item quantity="one">%1$d peranti disambungkan</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"pada <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tempoh"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Tanya setiap kali"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index e5e9ad8..1ee6414 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"သင့်အသုံးပြုမှုအရ <xliff:g id="TIME">%1$s</xliff:g> ခန့် ကျန်ပါသည်"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"သင်၏ အသုံးပြုမှု အပေါ် မူတည်၍ <xliff:g id="TIME">%1$s</xliff:g> ခန့် ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ကျန်သည်"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"သင်၏ အသုံးပြုမှုအပေါ် မူတည်၍ <xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"သင်၏ အသုံးပြုမှုအပေါ် အခြေခံ၍ <xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည်"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည်"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ခန့်သာ ကျန်တော့သည်"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> အောက်သာ ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ကျော် ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"မှတ်ပုံတင်ထားသည်"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"မှတ်ပုံတင်မထားပါ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"မရရှိနိုင်ပါ။"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">စက် %1$d ခု ချိတ်ဆက်ထားသည်</item>
<item quantity="one">စက် %1$d ခု ချိတ်ဆက်ထားသည်</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> တွင်"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ကြာချိန်"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"အမြဲမေးပါ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 13fa5cc..8ffa69a 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Omtrent <xliff:g id="TIME">%1$s</xliff:g> igjen basert på bruken din"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Omtrent <xliff:g id="TIME">%1$s</xliff:g> gjenstår basert på bruken din (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> gjenstår"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Varer til omtrent <xliff:g id="TIME">%1$s</xliff:g> basert på bruken din (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Varer til omtrent <xliff:g id="TIME">%1$s</xliff:g> basert på bruken din"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Varer til omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Varer til omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mer enn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrert"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ikke registrert"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ikke tilgjengelig"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d enheter er tilkoblet</item>
<item quantity="one">%1$d enhet er tilkoblet</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varighet"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spør hver gang"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 2a62a56..668a5b6 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> बाँकी"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"तपाईंको प्रयोगका आधारमा <xliff:g id="TIME">%1$s</xliff:g> बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"बाँकी समय <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्ने छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्ने छ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्ने छ <xliff:g id="LEVEL">%2$s</xliff:g>"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्ने छ"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी छ"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> भन्दा बढी समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"दर्ता गरिएको"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"दर्ता नगरिएको"</string>
<string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d यन्त्रहरू जडान गरिए</item>
<item quantity="one">%1$d यन्त्र जडान गरियो</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> मा"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"अवधि"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक पटक सोध्नुहोस्"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 3565e21..a41bab7 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> over op basis van je gebruik"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> resterend op basis van je gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> resterend"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Gaat nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> mee op basis van je gebruik (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Gaat nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> mee op basis van je gebruik"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Gaat nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) mee"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Gaat nog ongeveer <xliff:g id="TIME">%1$s</xliff:g> mee"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreerd"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Niet geregistreerd"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Niet beschikbaar"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d apparaten verbonden</item>
<item quantity="one">%1$d apparaat verbonden</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duur"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Altijd vragen"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index fec4818..b5936c2 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -53,25 +53,16 @@
<string name="bluetooth_disconnected" msgid="6557104142667339895">"ବିଛିନ୍ନ ହେଲା"</string>
<string name="bluetooth_disconnecting" msgid="8913264760027764974">"ବିଚ୍ଛିନ୍ନ କରୁଛି…"</string>
<string name="bluetooth_connecting" msgid="8555009514614320497">"ସଂଯୋଗ କରାଯାଉଛି…"</string>
- <!-- no translation found for bluetooth_connected (5427152882755735944) -->
- <skip />
+ <string name="bluetooth_connected" msgid="5427152882755735944">"ସଂଯୁକ୍ତ ହେଲା<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_pairing" msgid="1426882272690346242">"ପେୟାର୍ କରୁଛି…"</string>
- <!-- no translation found for bluetooth_connected_no_headset (616068069034994802) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_a2dp (3736431800395923868) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_map (3200033913678466453) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_headset_no_a2dp (2047403011284187056) -->
- <skip />
- <!-- no translation found for bluetooth_connected_battery_level (5162924691231307748) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_headset_battery_level (1610296229139400266) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_a2dp_battery_level (3908466636369853652) -->
- <skip />
- <!-- no translation found for bluetooth_connected_no_headset_no_a2dp_battery_level (1163440823807659316) -->
- <skip />
+ <string name="bluetooth_connected_no_headset" msgid="616068069034994802">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_a2dp" msgid="3736431800395923868">"ସଂଯୁକ୍ତ ହେଲା (ମିଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_map" msgid="3200033913678466453">"ସଂଯୁକ୍ତ ହେଲା (ମେସେଜ୍ ଆକ୍ସେସ୍ ନାହିଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2047403011284187056">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ କିମ୍ବା ମେଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_connected_battery_level" msgid="5162924691231307748">"ସଂଯୁକ୍ତ ହେଲା, ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_headset_battery_level" msgid="1610296229139400266">"ସଂଯୁକ୍ତ ନାହିଁ (ଫୋନ୍ ନୁହେଁ), ବ୍ୟାଟେରୀ<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"ସଂଯୁକ୍ତ ହେଲା (ମିଡିଆ ନୁହେଁ), ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
+ <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ କିମ୍ବା ମେଡିଆ ନୁହେଁ), ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"ମିଡିଆ ଅଡିଓ"</string>
<string name="bluetooth_profile_headset" msgid="7815495680863246034">"ଫୋନ୍ କଲ୍ଗୁଡ଼ିକ"</string>
<string name="bluetooth_profile_opp" msgid="9168139293654233697">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍"</string>
@@ -84,10 +75,8 @@
<string name="bluetooth_profile_sap" msgid="5764222021851283125">"ସିମ୍ ଆକ୍ସେସ୍"</string>
<string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD ଅଡିଓ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD ଅଡିଓ"</string>
- <!-- no translation found for bluetooth_profile_hearing_aid (7999237886427812595) -->
- <skip />
- <!-- no translation found for bluetooth_hearing_aid_profile_summary_connected (7188282786730266159) -->
- <skip />
+ <string name="bluetooth_profile_hearing_aid" msgid="7999237886427812595">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
+ <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="7188282786730266159">"ଶ୍ରବଣ ଯନ୍ତ୍ର ସହିତ ସଂଯୁକ୍ତ ହେଲା"</string>
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ମିଡିଆ ଅଡିଓ ସହ ସଂଯୁକ୍ତ"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ଫୋନ୍ ଅଡିଓ ସହିତ ସଂଯୁକ୍ତ"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ ସର୍ଭର୍ ସହ ସଂଯୁକ୍ତ"</string>
@@ -104,8 +93,7 @@
<string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ଫୋନ୍ ଅଡିଓ ପାଇଁ ବ୍ୟବହାର କର"</string>
<string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"ଇନ୍ପୁଟ୍ ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <!-- no translation found for bluetooth_hearing_aid_profile_summary_use_for (908775281788309484) -->
- <skip />
+ <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="908775281788309484">"ଶ୍ରବଣ ଯନ୍ତ୍ର ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="bluetooth_pairing_accept" msgid="6163520056536604875">"ପେୟାର୍"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ପେୟାର୍"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"କ୍ୟାନ୍ସଲ୍ କରନ୍ତୁ"</string>
@@ -211,8 +199,7 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ନେଟ୍ୱର୍କିଙ୍ଗ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ୱାୟର୍ଲେସ୍ ଡିସ୍ପ୍ଲେ ସର୍ଟିଫିକେଶନ୍"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ଭରବୋସ୍ ଲଗିଙ୍ଗ ସକ୍ଷମ କରନ୍ତୁ"</string>
- <!-- no translation found for wifi_connected_mac_randomization (3168165236877957767) -->
- <skip />
+ <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"କନେକ୍ଟ ହୋଇଥିବା MACର ରେଣ୍ଡୋମାଇଜେଶନ୍"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ମୋବାଇଲ୍ ଡାଟା ସର୍ବଦା ସକ୍ରିୟ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ବେଗ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ବ୍ଲୁଟୂଥ୍ ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ନାମ ବିନା ଦେଖନ୍ତୁ"</string>
@@ -233,14 +220,12 @@
<string name="select_private_dns_configuration_title" msgid="3700456559305263922">"ବ୍ୟକ୍ତିଗତ DNS"</string>
<string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍ ବାଛନ୍ତୁ"</string>
<string name="private_dns_mode_off" msgid="8236575187318721684">"ଅଫ୍"</string>
- <!-- no translation found for private_dns_mode_opportunistic (8314986739896927399) -->
- <skip />
+ <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"ସ୍ଵଚାଳିତ"</string>
<string name="private_dns_mode_provider" msgid="8354935160639360804">"ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ"</string>
<string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ପ୍ରବେଶ କରନ୍ତୁ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ୱେୟାରଲେସ୍ ପ୍ରଦର୍ଶନ ସାର୍ଟିଫିକେସନ୍ ପାଇଁ ବିକଳ୍ପଗୁଡିକ ଦେଖାନ୍ତୁ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ୱାଇ-ଫାଇ ଲଗିଙ୍ଗ ସ୍ତର ବଢ଼ାନ୍ତୁ, ୱାଇ-ଫାଇ ପିକର୍ରେ ପ୍ରତି SSID RSSI ଦେଖାନ୍ତୁ"</string>
- <!-- no translation found for wifi_connected_mac_randomization_summary (1743059848752201485) -->
- <skip />
+ <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ୱାଇ-ଫାଇ ନେଟ୍ୱର୍କଗୁଡ଼ିକ ସହିତ କନେକ୍ଟ କରିବାବେଳେ MAC ଠିକଣାକୁ ରେଣ୍ଡୋମାଇଜ୍ କରନ୍ତୁ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ଲଗର୍ ବଫର୍ ଆକାରଗୁଡ଼ିକ"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ଲଗ୍ ବଫର୍ ପିଛା ଲଗର୍ ଆକାରଗୁଡିକର ଚୟନ କରନ୍ତୁ"</string>
<string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"ଲଗର୍ ରୋଧି ଷ୍ଟୋରେଜ୍ ଖାଲି କରିବେ?"</string>
@@ -319,10 +304,8 @@
<string name="immediately_destroy_activities" msgid="1579659389568133959">"କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ ରଖନ୍ତୁ ନାହିଁ"</string>
<string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ଉପଯୋଗକର୍ତ୍ତା ଏହାକୁ ଛାଡ଼ିବା କ୍ଷଣି ସମସ୍ତ କାର୍ଯ୍ୟକଳାପକୁ ନଷ୍ଟ କରିଦିଅନ୍ତୁ"</string>
<string name="app_process_limit_title" msgid="4280600650253107163">"ପୃଷ୍ଠପଟ ପ୍ରକ୍ରିୟା ସୀମା"</string>
- <!-- no translation found for show_all_anrs (4924885492787069007) -->
- <skip />
- <!-- no translation found for show_all_anrs_summary (6636514318275139826) -->
- <skip />
+ <string name="show_all_anrs" msgid="4924885492787069007">"ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଥିବା ANRଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ"</string>
+ <string name="show_all_anrs_summary" msgid="6636514318275139826">"ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ ଆପ୍ଗୁଡ଼ିକ ପାଇଁ \"ଆପ୍ ଉତ୍ତର ଦେଉନାହିଁ\" ଡାୟଲଗ୍ ଦେଖାନ୍ତୁ"</string>
<string name="show_notification_channel_warnings" msgid="1399948193466922683">"ବିଜ୍ଞପ୍ତି ଚାନେଲ୍ ଚେତାବନୀ ଦେଖାଦେଉ"</string>
<string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ଏକ ବୈଧ ଚ୍ୟାନେଲ୍ ବିନା ଏକ ଆପ୍ ଗୋଟିଏ ବିଜ୍ଞପ୍ତି ପୋଷ୍ଠ କରିବା ବେଳେ ଅନ୍-ସ୍କ୍ରୀନ୍ ସତର୍କତା ଦେଖାଏ"</string>
<string name="force_allow_on_external" msgid="3215759785081916381">"ଏକ୍ସଟର୍ନଲ୍ ଆପ୍ଗୁଡ଼ିକୁ ଜବରଦସ୍ତି ଅନୁମତି ଦିଅନ୍ତୁ"</string>
@@ -347,12 +330,10 @@
<item msgid="8280754435979370728">"ଆଖି ଦ୍ୱାରା ଦେଖାଯାଇଥିବା ପରି ପ୍ରାକୃତିକ ରଙ୍ଗ"</item>
<item msgid="5363960654009010371">"ଡିଜିଟାଲ୍ କଣ୍ଟେଣ୍ଟ ପାଇଁ ରଙ୍ଗଗୁଡ଼ିକ ଅନୁକୂଳିତ ହୋଇଛି"</item>
</string-array>
- <!-- no translation found for inactive_apps_title (9042996804461901648) -->
- <skip />
+ <string name="inactive_apps_title" msgid="9042996804461901648">"ଷ୍ଟାଣ୍ଡବାଏ ଆପ୍"</string>
<string name="inactive_app_inactive_summary" msgid="5091363706699855725">"ନିଷ୍କ୍ରିୟ। ଟୋଗଲ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="inactive_app_active_summary" msgid="4174921824958516106">"ସକ୍ରିୟ। ବଦଳାଇବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
- <!-- no translation found for standby_bucket_summary (6567835350910684727) -->
- <skip />
+ <string name="standby_bucket_summary" msgid="6567835350910684727">"ଆପ୍ ଷ୍ଟାଣ୍ଡବାଏ ଅବସ୍ଥା:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
<string name="runningservices_settings_title" msgid="8097287939865165213">"ଚାଲୁଥିବା ସେବାଗୁଡ଼ିକ"</string>
<string name="runningservices_settings_summary" msgid="854608995821032748">"ଏବେ ଚାଲୁଥିବା ସେବାଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ଓ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"</string>
<string name="select_webview_provider_title" msgid="4628592979751918907">"ୱେବ୍ଦୃଶ୍ୟ ପ୍ରୟୋଗ"</string>
@@ -375,40 +356,28 @@
<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="845431008899029842">"ପ୍ରାୟ <xliff:g id="TIME">%1$s</xliff:g> ଅବଶିଷ୍ଟ ରହିଛି"</string>
- <!-- no translation found for power_discharging_duration (6655472132189365839) -->
- <skip />
+ <string name="power_discharging_duration" msgid="6655472132189365839">"ପାଖାପାଖି <xliff:g id="TIME">%1$s</xliff:g> ବାକି ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"ଆପଣଙ୍କ ବ୍ୟବହାରକୁ ଆଧାର କରି ପ୍ରାୟ <xliff:g id="TIME">%1$s</xliff:g> ଅବଶିଷ୍ଟ"</string>
- <!-- no translation found for power_discharging_duration_enhanced (5726302316642148671) -->
- <skip />
+ <string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ଆପଣଙ୍କ ବ୍ୟବହାରକୁ ଭିତ୍ତି କରି ପାଖାପାଖି <xliff:g id="TIME">%1$s</xliff:g> ବାକି ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ଅବଶିଷ୍ଟ"</string>
- <!-- no translation found for power_discharge_by_enhanced (8305422490607220844) -->
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
<skip />
- <!-- no translation found for power_discharge_by_only_enhanced (896515698736070025) -->
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
<skip />
- <!-- no translation found for power_discharge_by (6052127431194780229) -->
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
<skip />
- <!-- no translation found for power_discharge_by_only (4850425421176271395) -->
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
<skip />
- <!-- no translation found for power_remaining_less_than_duration_only (5996752448813295329) -->
- <skip />
- <!-- no translation found for power_remaining_less_than_duration (5751885147712659423) -->
- <skip />
- <!-- no translation found for power_remaining_more_than_subtext (3176771815132876675) -->
- <skip />
- <!-- no translation found for power_remaining_only_more_than_subtext (8931654680569617380) -->
- <skip />
- <!-- no translation found for power_remaining_duration_only_shutdown_imminent (1181059207608751924) -->
- <skip />
- <!-- no translation found for power_remaining_duration_only_shutdown_imminent (2606370266981054691) -->
- <skip />
- <!-- no translation found for power_remaining_duration_only_shutdown_imminent (2918084807716859985) -->
- <skip />
- <!-- no translation found for power_remaining_duration_shutdown_imminent (3090926004324573908) -->
- <skip />
- <!-- no translation found for power_remaining_duration_shutdown_imminent (7466484148515796216) -->
- <skip />
- <!-- no translation found for power_remaining_duration_shutdown_imminent (603933521600231649) -->
- <skip />
+ <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ରୁ କମ୍ ସମୟ ବଳକା ଅଛି"</string>
+ <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ରୁ କମ୍ ସମୟ ବଳକା ଅଛି (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ସମୟ ବଳକା ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+ <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ବଳକା ଅଛି"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"ଖୁବ୍ ଶୀଘ୍ର ଫୋନ୍ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"ଖୁବ୍ ଶୀଘ୍ର ଟାବଲେଟ୍ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"ଡିଭାଇସ୍ ଶୀଘ୍ର ବନ୍ଦ ହୋଇଯାଇପାରେ"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="3090926004324573908">"ଖୁବ୍ ଶୀଘ୍ର ଫୋନ୍ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7466484148515796216">"ଖୁବ୍ ଶୀଘ୍ର ଟାବଲେଟ୍ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="603933521600231649">"ଖୁବ୍ ଶୀଘ୍ର ଡିଭାଇସ୍ଟି ବନ୍ଦ ହୋଇଯାଇପାରେ(<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
<string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
<string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବାପାଇଁ <xliff:g id="TIME">%1$s</xliff:g> ଅବଶିଷ୍ଟ ଅଛି"</string>
<string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପର୍ଯ୍ୟନ୍ତ"</string>
@@ -453,30 +422,27 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ପଞ୍ଜିକୃତ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ପଞ୍ଜିକୃତ ହୋଇନାହିଁ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ଉପଲବ୍ଧ ନାହିଁ"</string>
- <!-- no translation found for wifi_tether_connected_summary (3871603864314407780) -->
- <!-- no translation found for accessibility_manual_zen_more_time (1636187409258564291) -->
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
<skip />
- <!-- no translation found for accessibility_manual_zen_less_time (6590887204171164991) -->
- <skip />
+ <plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
+ <item quantity="other">%1$dଟି ଡିଭାଇସ୍ ସଂଯୁକ୍ତ ହୋଇଛି</item>
+ <item quantity="one">%1$dଟି ଡିଭାଇସ୍ ସଂଯୁକ୍ତ ହୋଇଛି</item>
+ </plurals>
+ <string name="accessibility_manual_zen_more_time" msgid="1636187409258564291">"ଅଧିକ ସମୟ।"</string>
+ <string name="accessibility_manual_zen_less_time" msgid="6590887204171164991">"କମ୍ ସମୟ।"</string>
<string name="cancel" msgid="6859253417269739139">"କ୍ୟାନ୍ସଲ୍"</string>
<string name="okay" msgid="1997666393121016642">"ଠିକ୍ ଅଛି"</string>
- <!-- no translation found for zen_mode_enable_dialog_turn_on (8287824809739581837) -->
- <skip />
- <!-- no translation found for zen_mode_settings_turn_on_dialog_title (2297134204747331078) -->
- <skip />
+ <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"ଅନ୍ କରନ୍ତୁ"</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ କରନ୍ତୁ"</string>
<string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"କଦାପି ନୁହେଁ"</string>
- <!-- no translation found for zen_interruption_level_priority (2078370238113347720) -->
- <skip />
- <!-- no translation found for zen_mode_and_condition (4927230238450354412) -->
- <skip />
- <!-- no translation found for zen_alarm_warning_indef (3007988140196673193) -->
- <skip />
- <!-- no translation found for zen_alarm_warning (6236690803924413088) -->
- <skip />
- <!-- no translation found for alarm_template (4996153414057676512) -->
- <skip />
- <!-- no translation found for alarm_template_far (3779172822607461675) -->
- <skip />
+ <string name="zen_interruption_level_priority" msgid="2078370238113347720">"କେବଳ ପ୍ରାଥମିକତା"</string>
+ <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+ <string name="zen_alarm_warning_indef" msgid="3007988140196673193">"ଆପଣ <xliff:g id="WHEN">%1$s</xliff:g> ପୂର୍ବରୁ ଏହାକୁ ଅଫ୍ ନକଲେ ନିଜର ପରବର୍ତ୍ତୀ ଆଲାର୍ମ ଶୁଣିପାରିବେ ନାହିଁ"</string>
+ <string name="zen_alarm_warning" msgid="6236690803924413088">"<xliff:g id="WHEN">%1$s</xliff:g>ବେଳେ ଆପଣ ନିଜର ପରବର୍ତ୍ତୀ ଆଲାର୍ମ ଶୁଣିପାରିବେ ନାହିଁ"</string>
+ <string name="alarm_template" msgid="4996153414057676512">"<xliff:g id="WHEN">%1$s</xliff:g>ରେ"</string>
+ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ବେଳେ"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ଅବଧି"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ପ୍ରତ୍ୟେକ ଥର ପଚାରନ୍ତୁ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index f28d7ac..1d80e77 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ਬਾਕੀ"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਬਾਕੀ"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ਰਜਿਸਟਰ ਕੀਤੀ ਗਈ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ਅਣਉਪਲਬਧ"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ</item>
<item quantity="other">%1$d ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੇ ਗਏ</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ਵਜੇ"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ਮਿਆਦ"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ਹਰ ਵਾਰ ਪੁੱਛੋ"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index ec77b15..1a6321c 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Jeszcze około <xliff:g id="TIME">%1$s</xliff:g> (na podstawie Twojego sposobu korzystania)"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Na podstawie Twojego sposobu korzystania jeszcze około <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Zostało <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Na podstawie Twojego sposobu korzystania jeszcze około <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Na podstawie Twojego sposobu korzystania jeszcze około <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Jeszcze około <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Jeszcze około <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Pozostało ponad: <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Zarejestrowane"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Niezarejestrowane"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Niedostępny"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="few">%1$d urządzenia podłączone</item>
<item quantity="many">%1$d urządzeń podłączonych</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"w: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Czas"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Zawsze pytaj"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 15afa87..bdefad84 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Cerca de <xliff:g id="TIME">%1$s</xliff:g> restante(s) com base no seu uso"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Cerca de <xliff:g id="TIME">%1$s</xliff:g> restante(s) com base no seu uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> restante(s)"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> de acordo com seu uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> de acordo com seu uso"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Durará a até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registrado"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Não disponível"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d dispositivo conectado</item>
<item quantity="other">%1$d dispositivos conectados</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 6721e03..acd105d 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -183,7 +183,7 @@
<string name="enable_adb" msgid="7982306934419797485">"Depuração USB"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuração com USB ligado"</string>
<string name="clear_adb_keys" msgid="4038889221503122743">"Revogar autorizações de depur. USB"</string>
- <string name="bugreport_in_power" msgid="7923901846375587241">"Atalho para relatório de erros"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atalho para relatório de erro"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar um botão no menu ligar/desligar para criar um relatório de erro"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Manter ativo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"O ecrã nunca entrará em suspensão durante o carregamento"</string>
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Resta(m) cerca de <xliff:g id="TIME">%1$s</xliff:g> com base na sua utilização"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Resta(m) cerca de <xliff:g id="TIME">%1$s</xliff:g> com base na sua utilização (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Resta(m) <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Dura até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> com base na sua utilização (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Dura até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> com base na sua utilização."</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Dura até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Dura até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g>."</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Resta(m) mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registado"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Indisponível"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d dispositivos ligados</item>
<item quantity="one">%1$d dispositivo ligado</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"no(a) <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 15afa87..bdefad84 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Cerca de <xliff:g id="TIME">%1$s</xliff:g> restante(s) com base no seu uso"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Cerca de <xliff:g id="TIME">%1$s</xliff:g> restante(s) com base no seu uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> restante(s)"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> de acordo com seu uso (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> de acordo com seu uso"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Durará a até aproximadamente <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Durará até aproximadamente <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registrado"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Não disponível"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d dispositivo conectado</item>
<item quantity="other">%1$d dispositivos conectados</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 46a2ebd..e5912c6 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"În baza utilizării, timpul aproximativ rămas este: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"În baza utilizării, timpul rămas este de aproximativ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Timp rămas: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"În baza utilizării, va rezista până la aproximativ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"În baza utilizării, va rezista până la aproximativ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Va rezista până la aproximativ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Va rezista până la aproximativ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"a mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"A mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"A mai rămas mai mult de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Înregistrat"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neînregistrat"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Indisponibilă"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="few">%1$d dispozitive conectate</item>
<item quantity="other">%1$d de dispozitive conectate</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durată"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Întreabă de fiecare dată"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 50c8fb1..e9283f3 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Осталось примерно <xliff:g id="TIME">%1$s</xliff:g> при текущем уровне использования"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Заряда (<xliff:g id="LEVEL">%2$s</xliff:g>) хватит примерно на <xliff:g id="TIME">%1$s</xliff:g> при текущем уровне расхода"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Осталось: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Заряда (<xliff:g id="LEVEL">%2$s</xliff:g>) хватит примерно до <xliff:g id="TIME">%1$s</xliff:g> при текущем уровне использования"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Заряда хватит примерно до <xliff:g id="TIME">%1$s</xliff:g> при текущем уровне использования"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Заряда (<xliff:g id="LEVEL">%2$s</xliff:g>) хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Заряда хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Осталось менее <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит менее чем на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит более чем на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Зарегистрирован"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зарегистрирован"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Подключено %1$d устройство</item>
<item quantity="few">Подключено %1$d устройства</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Длительность"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Всегда спрашивать"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index d499632..865d05c 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -360,10 +360,10 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"ඔබගේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමණ ඉතිරිව ඇත"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ඔබේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමණ ඉතිරිව ඇත <xliff:g id="LEVEL">%2$s</xliff:g>"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"ඉතිරි <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"ඔබේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමණ තෙක් පවතිනු ඇත <xliff:g id="LEVEL">%2$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"ඔබේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමණ තෙක් පවතිනු ඇත"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) පමණ තෙක් පවතිනු ඇත"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"<xliff:g id="TIME">%1$s</xliff:g> පමණ තෙක් පවතිනු ඇත"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"<xliff:g id="TIME">%1$s</xliff:g> පමණ වන තෙක් (<xliff:g id="LEVEL">%2$s</xliff:g>) ඔබේ භාවිතය මත පදනම්ව තිබිය යුුතුය"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"ඔබේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමන වන තෙක් තිබිය යුතුය"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) පමණ වන තෙක් තිබිය යුතුය"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> පමණ වන තෙක් තිබිය යුතුය"</string>
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිව ඇත"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ට වඩා වැඩියෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +418,7 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ලියාපදිංචි වී ඇත"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ලියාපදිංචි වී නැත"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ලබාගත නොහැක"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC සසම්භාවී වේ"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">උපාංග %1$dක් සම්බන්ධ කරන ලදී</item>
<item quantity="other">උපාංග %1$dක් සම්බන්ධ කරන ලදී</item>
@@ -437,4 +438,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>හිදී"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"කාල සීමාව"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"සෑම විටම ඉල්ලන්න"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 47b8bd5..09dc508 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Zostáva približne <xliff:g id="TIME">%1$s</xliff:g> v závislosti od intenzity využitia"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Zostáva približne <xliff:g id="TIME">%1$s</xliff:g> v závislosti od využitia (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Zostávajúci čas: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Vydrží približne <xliff:g id="TIME">%1$s</xliff:g> v závislosti od využitia (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Vydrží približne <xliff:g id="TIME">%1$s</xliff:g> v závislosti od využitia"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Vydrží približne <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Vydrží približne <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zostáva viac ako <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrované"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neregistrované"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nie je k dispozícii"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="few">%1$d pripojené zariadenia</item>
<item quantity="many">%1$d pripojeného zariadenia</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"o <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trvanie"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vždy sa opýtať"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 68e8a0a..e4aa7c0 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Glede na način uporabe imate na voljo še približno <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Približen preostali čas glede na način uporabe: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Še <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Naprava bo glede na način uporabe (<xliff:g id="LEVEL">%2$s</xliff:g>) delovala do približno <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Naprava bo glede na način uporabe delovala do približno <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Naprava bo delovala do približno <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Naprava bo delovala do približno <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostanek: manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostali čas delovanja: manj kot <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirana"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ni registrirana"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ni na voljo"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Povezana je %1$d naprava</item>
<item quantity="two">Povezani sta %1$d napravi</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"v <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vedno vprašaj"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 07a987c..dd436b9 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Rreth <xliff:g id="TIME">%1$s</xliff:g> të mbetura bazuar në përdorimin tënd"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Mbeten rreth <xliff:g id="TIME">%1$s</xliff:g> bazuar në përdorimin tënd (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> të mbetura"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Do të vazhdojë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> bazuar në përdorimin tënd (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Do të vazhdojë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> bazuar në përdorimin tënd"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Do të vazhdojë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Do të vazhdojë deri në rreth <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> të mbetura"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mbeten më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mbeten më shumë se <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Regjistruar"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Paregjistruar"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Nuk ofrohet"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d pajisje të lidhura</item>
<item quantity="one">%1$d pajisje e lidhur</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"ditën <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kohëzgjatja"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pyet çdo herë"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index ae3ddc0..d93fda7 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"На основу потрошње имате још отприлике <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"На основу коришћења имате још приближно <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Преостало време: <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"На основу коришћења трајаће приближно до TIME <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"На основу коришћења трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Преостало је више од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Регистрован je"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Није регистрован"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Повезан је %1$d уређај</item>
<item quantity="few">Повезана су %1$d уређаја</item>
@@ -438,4 +444,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Трајање"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Увек питај"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 0b0071e..3949a0c 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Cirka <xliff:g id="TIME">%1$s</xliff:g> kvar utifrån din användning"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"About <xliff:g id="TIME">%1$s</xliff:g> kvar utifrån din användning (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> kvar"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Batteriet räcker ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> utifrån din användning (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Batteriet räcker ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> utifrån din användning"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Batteriet räcker ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Batteriet räcker ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mer än <xliff:g id="TIME_REMAINING">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registrerad"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ej registrerad"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Inte tillgängligt"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d enheter är anslutna</item>
<item quantity="one">%1$d enhet är ansluten</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"på <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varaktighet"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Fråga varje gång"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 95ebad8..f03a9d3 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Takriban <xliff:g id="TIME">%1$s</xliff:g> zimesalia kulingana na matumizi yako"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Zimesalia takribani <xliff:g id="TIME">%1$s</xliff:g> kulingana na jinsi utakavyoitumia (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Zimesalia <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Itatudumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g> kulingana na jinsi utakavyoitumia (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Itadumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g> kulingana na jinsi utakavyoitumia"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Itadumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Itadumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zimesalia zaidi ya <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Imesajiliwa"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Haijasajiliwa"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Hapatikani"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">Imeunganisha vifaa %1$d</item>
<item quantity="one">Imeunganisha kifaa %1$d</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"siku ya <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Muda"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uliza kila wakati"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index c0bb73d..e70da67 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"உபயோகத்தின் அடிப்படையில் கிட்டத்தட்ட <xliff:g id="TIME">%1$s</xliff:g> மீதமுள்ளது"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"பயன்படுத்துவதன் அடிப்படையில், <xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> மீதமுள்ளது"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"நீங்கள் பயன்படுத்துவதன் அடிப்படையில், <xliff:g id="TIME">%1$s</xliff:g> வரை உபயோகிக்க முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"நீங்கள் பயன்படுத்துவதன் அடிப்படையில், <xliff:g id="TIME">%1$s</xliff:g> வரை உபயோகிக்க முடியும்"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும்"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும்"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"பதிவு செய்யப்பட்டது"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"பதிவு செய்யப்படவில்லை"</string>
<string name="status_unavailable" msgid="7862009036663793314">"கிடைக்கவில்லை"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d சாதனங்கள் இணைக்கப்பட்டன</item>
<item quantity="one">%1$d சாதனம் இணைக்கப்பட்டது</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"அலாரம்: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"கால அளவு"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ஒவ்வொரு முறையும் கேள்"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 0d2d2b7..bfe54a0 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"మీ వినియోగం ఆధారంగా సుమారు <xliff:g id="TIME">%1$s</xliff:g> సమయం మిగిలి ఉంది"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"మీ వినియోగం ఆధారంగా దాదాపు <xliff:g id="TIME">%1$s</xliff:g> ఉండవచ్చు (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> మిగిలి ఉంది"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"మీ వినియోగం ఆధారంగా దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు కొనసాగవచ్చు (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"మీ వినియోగం ఆధారంగా దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు కొనసాగవచ్చు"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు కొనసాగవచ్చు (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు కొనసాగవచ్చు"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> కంటే ఎక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"నమోదు చేయబడింది"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"నమోదు కాలేదు"</string>
<string name="status_unavailable" msgid="7862009036663793314">"అందుబాటులో లేదు"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d పరికరాలు కనెక్ట్ చేయబడ్డాయి</item>
<item quantity="one">%1$d పరికరం కనెక్ట్ చేయబడింది</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"వ్యవధి"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ప్రతిసారి అడుగు"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index ff3a084..6952ba3 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"เหลืออีกราว <xliff:g id="TIME">%1$s</xliff:g> ขึ้นอยู่กับการใช้งานของคุณ"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"ใช้งานได้อีกประมาณ <xliff:g id="TIME">%1$s</xliff:g> ขึ้นอยู่กับการใช้งานของคุณ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"เหลืออีก <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"ใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> ขึ้นอยู่กับการใช้งานของคุณ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"ใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> ขึ้นอยู่กับการใช้งานของคุณ"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"ใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"ใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"เหลืออีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"เหลือเวลาอีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"เหลือเวลามากกว่า <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"ลงทะเบียนแล้ว"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ไม่ได้ลงทะเบียน"</string>
<string name="status_unavailable" msgid="7862009036663793314">"ไม่ว่าง"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">มีอุปกรณ์ที่เชื่อมต่อ %1$d เครื่อง</item>
<item quantity="one">มีอุปกรณ์ที่เชื่อมต่อ %1$d เครื่อง</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"วัน<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ระยะเวลา"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ถามทุกครั้ง"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index f289608..ef228d5 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> ang natitira batay sa iyong paggamit"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"May humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> pa batay sa iyong paggamit (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> pa"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Tatagal nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> batay sa iyong paggamit (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Tatagal nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> batay sa iyong paggamit"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Tatagal nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Tatagal nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Nakarehistro"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Hindi nakarehistro"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Hindi available"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d device ang nakakonekta</item>
<item quantity="other">%1$d na device ang nakakonekta</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"sa <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tagal"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Magtanong palagi"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index c8a643c..64ee676 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Kullanımınıza dayalı olarak yaklaşık <xliff:g id="TIME">%1$s</xliff:g> kaldı"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Kullanımınıza dayalı olarak yaklaşık <xliff:g id="TIME">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> kaldı"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Kullanımınıza göre saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilecek (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Kullanımınıza göre saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilecek"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilecek (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilecek"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"En fazla <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"En çok <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"En az <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Kaydettirildi"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Kaydettirilmedi"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Kullanılamıyor"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d cihaz bağlı</item>
<item quantity="one">%1$d cihaz bağlı</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"zaman: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Süre"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Her zaman sor"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index e88ae01..2bf7564 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"На основі використання залишилося близько <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Відповідно до даних про використання, залишилося близько <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Залишилося <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Згідно з даними про використання (<xliff:g id="LEVEL">%2$s</xliff:g>) вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Згідно з даними про використання вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Залишилося понад <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Зареєстровано"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зареєстровано"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">Під’єднано %1$d пристрій</item>
<item quantity="few">Під’єднано %1$d пристрої</item>
@@ -439,4 +445,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Тривалість"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Запитувати щоразу"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 9cb1446..4228f54 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%1$s</xliff:g> باقی ہے"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%1$s</xliff:g> باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> باقی ہے"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"رجسٹر شدہ"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"رجسٹر نہیں ہے"</string>
<string name="status_unavailable" msgid="7862009036663793314">"غیر دستیاب"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d آلات منسلک ہیں</item>
<item quantity="one">%1$d آلہ منسلک ہے</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> بجے"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"مدت"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ہر بار پوچھیں"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index b36db35..ebd873c 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> qoldi"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> qoldi"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>dan ko‘proq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Registratsiya qilingan"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Registratsiya qilinmagan"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Mavjud emas"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d ta qurilma ulangan</item>
<item quantity="one">%1$d ta qurilma ulangan</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Davomiyligi"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Har safar so‘ralsin"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 1a6ff3d..8e71bf3 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Còn khoảng <xliff:g id="TIME">%1$s</xliff:g> dựa trên mức sử dụng của bạn"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Còn khoảng <xliff:g id="TIME">%1$s</xliff:g> dựa vào mức sử dụng của bạn (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Còn lại <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Sẽ kết thúc cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> dựa vào mức sử dụng của bạn (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Sẽ kết thúc cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> dựa vào mức sử dụng của bạn"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Sẽ kết thúc cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Sẽ kết thúc cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Còn lại hơn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Đã đăng ký"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Chưa được đăng ký"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Không có"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d thiết bị được kết nối</item>
<item quantity="one">%1$d thiết bị được kết nối</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"vào <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Thời lượng"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Luôn hỏi"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index e4f6328..cc4d7e9 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"根据您的使用情况,大约还可使用 <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"根据您的使用情况,剩余时间大约还有 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"还可用 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"根据您的使用情况,电量大约还可继续使用 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"根据您的使用情况,电量大约还可继续使用 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"电量大约还可继续使用 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"电量大约还可继续使用 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"剩余电池续航时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"电量剩余使用时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"电量剩余使用时间超过 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"已注册"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未注册"</string>
<string name="status_unavailable" msgid="7862009036663793314">"无法获取"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">已连接 %1$d 个设备</item>
<item quantity="one">已连接 %1$d 个设备</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"时间:<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"持续时间"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都询问"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index be7afb2..daf83a9 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"根據您的使用情況,剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"根據您的使用情況,還有大約 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"尚餘 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"根據您的使用情況 (<xliff:g id="LEVEL">%2$s</xliff:g>),電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"根據您的使用情況,電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"剩餘電量時間少於 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"還有少於 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"還有超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"已註冊"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未註冊"</string>
<string name="status_unavailable" msgid="7862009036663793314">"無法使用"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d 部已連線的裝置</item>
<item quantity="one">%1$d 部已連線的裝置</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"長度"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 7b88a02..7b90e73 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"根據你的使用情形,剩餘時間大約還有 <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"根據你的使用情形,目前電量為 <xliff:g id="LEVEL">%2$s</xliff:g>,還能持續使用 <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"還剩 <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"根據你的使用情形,裝置電量 (<xliff:g id="LEVEL">%2$s</xliff:g>) 將於<xliff:g id="TIME">%1$s</xliff:g> 耗盡"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"根據你的使用情形,裝置電量將於<xliff:g id="TIME">%1$s</xliff:g> 耗盡"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"裝置電量 (<xliff:g id="LEVEL">%2$s</xliff:g>) 將於<xliff:g id="TIME">%1$s</xliff:g> 耗盡"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"裝置電量將於<xliff:g id="TIME">%1$s</xliff:g> 耗盡"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"電池可用時間超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"已註冊"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未註冊"</string>
<string name="status_unavailable" msgid="7862009036663793314">"無法取得"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="other">%1$d 個已連線的裝置</item>
<item quantity="one">%1$d 個已連線的裝置</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"時間長度"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 3c94895..24bf7bb 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -360,10 +360,14 @@
<string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Cishe kusele okungu-<xliff:g id="TIME">%1$s</xliff:g> kusukela ekusetshenzisweni kwakho"</string>
<string name="power_discharging_duration_enhanced" msgid="5726302316642148671">"Cishe u-<xliff:g id="TIME">%1$s</xliff:g> osele ngokuya ngokusebenzisa kwakho (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> esisele"</string>
- <string name="power_discharge_by_enhanced" msgid="8305422490607220844">"Izohlala cishe kuze kube ngu-<xliff:g id="TIME">%1$s</xliff:g> kusukela ekusetshenzisweni kwakho (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only_enhanced" msgid="896515698736070025">"Izohlala kuze cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g> kusukela ekusetshenzisweni kwakho"</string>
- <string name="power_discharge_by" msgid="6052127431194780229">"Izohlala cishe kuze kube ngu-<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
- <string name="power_discharge_by_only" msgid="4850425421176271395">"Izohlala cishe kuze kube ngu-<xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <!-- no translation found for power_discharge_by_enhanced (2095821536747992464) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only_enhanced (2175151772952365149) -->
+ <skip />
+ <!-- no translation found for power_discharge_by (6453537733650125582) -->
+ <skip />
+ <!-- no translation found for power_discharge_by_only (107616694963545745) -->
+ <skip />
<string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Kusele okungaphansi kunokungu-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Ngaphansi kuka-<xliff:g id="THRESHOLD">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Ngaphezu kuka-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -418,6 +422,8 @@
<string name="ims_reg_status_registered" msgid="933003316932739188">"Kubhalisiwe"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Akubhalisiwe"</string>
<string name="status_unavailable" msgid="7862009036663793314">"Ayitholakali"</string>
+ <!-- no translation found for wifi_status_mac_randomized (5589328382467438245) -->
+ <skip />
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
<item quantity="one">%1$d amadivayisi axhunyiwe</item>
<item quantity="other">%1$d amadivayisi axhunyiwe</item>
@@ -437,4 +443,6 @@
<string name="alarm_template_far" msgid="3779172822607461675">"nge-<xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ubude besikhathi"</string>
<string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Buza njalo"</string>
+ <!-- no translation found for time_unit_just_now (6363336622778342422) -->
+ <skip />
</resources>
diff --git a/packages/SettingsLib/res/values/attrs.xml b/packages/SettingsLib/res/values/attrs.xml
index a8a1793..9aed54e 100644
--- a/packages/SettingsLib/res/values/attrs.xml
+++ b/packages/SettingsLib/res/values/attrs.xml
@@ -48,4 +48,8 @@
<attr name="footerPreferenceStyle" format="reference" />
+ <!-- Workaround for b/74248169. These are duplicates of attrs in AndroidX preferences. -->
+ <attr name="preferenceStyle" format="reference" />
+ <attr name="switchPreferenceStyle" format="reference" />
+
</resources>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 1a9ce95..584fc34 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -97,6 +97,12 @@
<!-- Summary for Connected wifi network without internet -->
<string name="wifi_connected_no_internet">Connected, no internet</string>
+ <!-- Wi-Fi status indicating that the current network is connected, but has no internet access. -->
+ <string name="wifi_status_no_internet">No internet</string>
+
+ <!-- Wi-Fi status indicating that the current network is connected requires sign in to access the internet. -->
+ <string name="wifi_status_sign_in_required">Sign in required</string>
+
<!-- Summary for networks failing to connect due to association rejection status 17, AP full -->
<string name="wifi_ap_unable_to_handle_new_sta">Access point temporarily full</string>
@@ -270,6 +276,15 @@
<!-- Message for telling the user the kind of BT device being displayed in list. [CHAR LIMIT=30 BACKUP_MESSAGE_ID=5615463912185280812] -->
<string name="bluetooth_talkback_bluetooth">Bluetooth</string>
+ <!-- Message for telling the user the left-side hearing aid device is doing its pairing operation [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_hearingaid_left_pairing_message">Pairing left hearing aid\u2026</string>
+ <!-- Message for telling the user the right-side hearing aid device is doing its pairing operation [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_hearingaid_right_pairing_message">Pairing right hearing aid\u2026</string>
+ <!-- Bluetooth settings. Message when connected to a left-side Hearing Aid device, showing remote device battery level. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_hearingaid_left_battery_level">Left - <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <!-- Bluetooth settings. Message when connected to a right-side Hearing Aid device, showing remote device battery level. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_hearingaid_right_battery_level">Right - <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+
<!-- Content description of the WIFI signal when WIFI is disabled for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_wifi_off">Wifi off.</string>
<!-- Content description of the WIFI signal when no signal for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
@@ -563,6 +578,7 @@
<string name="private_dns_mode_opportunistic">Automatic</string>
<string name="private_dns_mode_provider">Private DNS provider hostname</string>
<string name="private_dns_mode_provider_hostname_hint">Enter hostname of DNS provider</string>
+ <string name="private_dns_mode_provider_failure">Couldn\'t connect</string>
<!-- setting Checkbox summary whether to show options for wireless display certification -->
<string name="wifi_display_certification_summary">Show options for wireless display certification</string>
@@ -570,6 +586,10 @@
<string name="wifi_verbose_logging_summary">Increase Wi\u2011Fi logging level, show per SSID RSSI in Wi\u2011Fi Picker</string>
<!-- Setting Checkbox title whether to enable connected MAC randomization -->
<string name="wifi_connected_mac_randomization_summary">Randomize MAC address when connecting to Wi\u2011Fi networks</string>
+ <!-- Label indicating network has been manually marked as metered -->
+ <string name="wifi_metered_label">Metered</string>
+ <!-- Label indicating network has been manually marked as unmetered -->
+ <string name="wifi_unmetered_label">Unmetered</string>
<!-- UI debug setting: limit size of Android logger buffers -->
<string name="select_logd_size_title">Logger buffer sizes</string>
<!-- UI debug setting: limit size of Android logger buffers [CHAR LIMIT=59] -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java
index 9f21dd2..b4a3b51 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java
@@ -44,8 +44,7 @@
}
public RestrictedPreference(Context context, AttributeSet attrs) {
- this(context, attrs, TypedArrayUtils.getAttr(context,
- android.support.v7.preference.R.attr.preferenceStyle,
+ this(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceStyle,
android.R.attr.preferenceStyle));
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java
index 1ad710a..48b7c35 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedSwitchPreference.java
@@ -82,8 +82,7 @@
}
public RestrictedSwitchPreference(Context context, AttributeSet attrs) {
- this(context, attrs, TypedArrayUtils.getAttr(context,
- android.support.v7.preference.R.attr.switchPreferenceStyle,
+ this(context, attrs, TypedArrayUtils.getAttr(context, R.attr.switchPreferenceStyle,
android.R.attr.switchPreferenceStyle));
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index c5c1169..78045f9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -1154,7 +1154,7 @@
@Nullable
@Speed
- private int roundToClosestSpeedEnum(int speed) {
+ private static int roundToClosestSpeedEnum(int speed) {
if (speed < Speed.SLOW) {
return Speed.NONE;
} else if (speed < (Speed.SLOW + Speed.MODERATE) / 2) {
@@ -1170,21 +1170,31 @@
@Nullable
String getSpeedLabel(@Speed int speed) {
+ return getSpeedLabel(mContext, speed);
+ }
+
+ private static String getSpeedLabel(Context context, int speed) {
switch (speed) {
case Speed.VERY_FAST:
- return mContext.getString(R.string.speed_label_very_fast);
+ return context.getString(R.string.speed_label_very_fast);
case Speed.FAST:
- return mContext.getString(R.string.speed_label_fast);
+ return context.getString(R.string.speed_label_fast);
case Speed.MODERATE:
- return mContext.getString(R.string.speed_label_okay);
+ return context.getString(R.string.speed_label_okay);
case Speed.SLOW:
- return mContext.getString(R.string.speed_label_slow);
+ return context.getString(R.string.speed_label_slow);
case Speed.NONE:
default:
return null;
}
}
+ /** Return the speed label for a {@link ScoredNetwork} at the specified {@code rssi} level. */
+ @Nullable
+ public static String getSpeedLabel(Context context, ScoredNetwork scoredNetwork, int rssi) {
+ return getSpeedLabel(context, roundToClosestSpeedEnum(scoredNetwork.calculateBadge(rssi)));
+ }
+
/** Return true if the current RSSI is reachable, and false otherwise. */
public boolean isReachable() {
return mRssi != UNREACHABLE_RSSI;
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index 6e12e20..4cd23f9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
@@ -10,28 +10,90 @@
package com.android.settingslib.wifi;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+
+import android.content.Context;
import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
+import android.net.NetworkKey;
+import android.net.NetworkRequest;
+import android.net.NetworkScoreManager;
+import android.net.ScoredNetwork;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkScoreCache;
import android.net.wifi.WifiSsid;
+import android.os.Handler;
+import android.os.Looper;
+
+import com.android.settingslib.R;
import java.util.List;
-public class WifiStatusTracker {
-
+public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
+ private final Context mContext;
+ private final WifiNetworkScoreCache mWifiNetworkScoreCache;
private final WifiManager mWifiManager;
+ private final NetworkScoreManager mNetworkScoreManager;
+ private final ConnectivityManager mConnectivityManager;
+ private final WifiNetworkScoreCache.CacheListener mCacheListener =
+ new WifiNetworkScoreCache.CacheListener(new Handler(Looper.getMainLooper())) {
+ @Override
+ public void networkCacheUpdated(List<ScoredNetwork> updatedNetworks) {
+ updateStatusLabel();
+ mCallback.run();
+ }
+ };
+ private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
+ .clearCapabilities().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build();
+ private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager
+ .NetworkCallback() {
+ @Override
+ public void onCapabilitiesChanged(
+ Network network, NetworkCapabilities networkCapabilities) {
+ updateStatusLabel();
+ mCallback.run();
+ }
+ };
+ private final Runnable mCallback;
+
+ private WifiInfo mWifiInfo;
public boolean enabled;
public int state;
public boolean connected;
- public boolean connecting;
public String ssid;
public int rssi;
public int level;
+ public String statusLabel;
- public WifiStatusTracker(WifiManager wifiManager) {
+ public WifiStatusTracker(Context context, WifiManager wifiManager,
+ NetworkScoreManager networkScoreManager, ConnectivityManager connectivityManager,
+ Runnable callback) {
+ mContext = context;
mWifiManager = wifiManager;
+ mWifiNetworkScoreCache = new WifiNetworkScoreCache(context);
+ mNetworkScoreManager = networkScoreManager;
+ mConnectivityManager = connectivityManager;
+ mCallback = callback;
+ }
+
+ public void setListening(boolean listening) {
+ if (listening) {
+ mNetworkScoreManager.registerNetworkScoreCache(NetworkKey.TYPE_WIFI,
+ mWifiNetworkScoreCache, NetworkScoreManager.CACHE_FILTER_CURRENT_NETWORK);
+ mWifiNetworkScoreCache.registerListener(mCacheListener);
+ mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
+ } else {
+ mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI,
+ mWifiNetworkScoreCache);
+ mWifiNetworkScoreCache.unregisterListener();
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ }
}
public void handleBroadcast(Intent intent) {
@@ -40,34 +102,59 @@
state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
enabled = state == WifiManager.WIFI_STATE_ENABLED;
-
-
- enabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
- WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED;
} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
- final NetworkInfo networkInfo = (NetworkInfo)
+ final NetworkInfo networkInfo =
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
- connecting = networkInfo != null && !networkInfo.isConnected()
- && networkInfo.isConnectedOrConnecting();
connected = networkInfo != null && networkInfo.isConnected();
- // If Connected grab the signal strength and ssid.
+ mWifiInfo = null;
+ ssid = null;
if (connected) {
- WifiInfo info = mWifiManager.getConnectionInfo();
- if (info != null) {
- ssid = getValidSsid(info);
- } else {
- ssid = null;
+ mWifiInfo = mWifiManager.getConnectionInfo();
+ if (mWifiInfo != null) {
+ ssid = getValidSsid(mWifiInfo);
+ updateRssi(mWifiInfo.getRssi());
+ maybeRequestNetworkScore();
}
- } else if (!connected) {
- ssid = null;
}
+ updateStatusLabel();
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
// Default to -200 as its below WifiManager.MIN_RSSI.
- rssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
- level = WifiManager.calculateSignalLevel(rssi, 5);
+ updateRssi(intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200));
+ updateStatusLabel();
}
}
+ private void updateRssi(int newRssi) {
+ rssi = newRssi;
+ level = WifiManager.calculateSignalLevel(rssi, WifiManager.RSSI_LEVELS);
+ }
+
+ private void maybeRequestNetworkScore() {
+ NetworkKey networkKey = NetworkKey.createFromWifiInfo(mWifiInfo);
+ if (mWifiNetworkScoreCache.getScoredNetwork(networkKey) == null) {
+ mNetworkScoreManager.requestScores(new NetworkKey[]{ networkKey });
+ }
+ }
+
+ private void updateStatusLabel() {
+ final NetworkCapabilities networkCapabilities
+ = mConnectivityManager.getNetworkCapabilities(mWifiManager.getCurrentNetwork());
+ if (networkCapabilities != null) {
+ if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) {
+ statusLabel = mContext.getString(R.string.wifi_status_sign_in_required);
+ return;
+ } else if (!networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) {
+ statusLabel = mContext.getString(R.string.wifi_status_no_internet);
+ return;
+ }
+ }
+
+ ScoredNetwork scoredNetwork =
+ mWifiNetworkScoreCache.getScoredNetwork(NetworkKey.createFromWifiInfo(mWifiInfo));
+ statusLabel = scoredNetwork == null
+ ? null : AccessPoint.getSpeedLabel(mContext, scoredNetwork, rssi);
+ }
+
private String getValidSsid(WifiInfo info) {
String ssid = info.getSSID();
if (ssid != null && !WifiSsid.NONE.equals(ssid)) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 2047f58..6d9da9b 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -85,22 +85,23 @@
private static void dumpProtoGlobalSettingsLocked(
@NonNull ProtoOutputStream p, long fieldId, @NonNull SettingsState s) {
final long token = p.start(fieldId);
-
s.dumpHistoricalOperations(p, GlobalSettingsProto.HISTORICAL_OPERATIONS);
- // This uses the same order as in Settings.Global.
+ // This uses the same order as in GlobalSettingsProto.
+ dumpSetting(s, p,
+ Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
+ GlobalSettingsProto.ACTIVITY_MANAGER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.ADB_ENABLED,
+ GlobalSettingsProto.ADB_ENABLED);
dumpSetting(s, p,
Settings.Global.ADD_USERS_WHEN_LOCKED,
GlobalSettingsProto.ADD_USERS_WHEN_LOCKED);
- dumpSetting(s, p,
- Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
- GlobalSettingsProto.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED);
+
+ final long airplaneModeToken = p.start(GlobalSettingsProto.AIRPLANE_MODE);
dumpSetting(s, p,
Settings.Global.AIRPLANE_MODE_ON,
- GlobalSettingsProto.AIRPLANE_MODE_ON);
- dumpSetting(s, p,
- Settings.Global.THEATER_MODE_ON,
- GlobalSettingsProto.THEATER_MODE_ON);
+ GlobalSettingsProto.AirplaneMode.ON);
// RADIO_BLUETOOTH is just a constant and not an actual setting.
// RADIO_WIFI is just a constant and not an actual setting.
// RADIO_WIMAX is just a constant and not an actual setting.
@@ -108,352 +109,1186 @@
// RADIO_NFC is just a constant and not an actual setting.
dumpSetting(s, p,
Settings.Global.AIRPLANE_MODE_RADIOS,
- GlobalSettingsProto.AIRPLANE_MODE_RADIOS);
+ GlobalSettingsProto.AirplaneMode.RADIOS);
dumpSetting(s, p,
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
- GlobalSettingsProto.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+ GlobalSettingsProto.AirplaneMode.TOGGLEABLE_RADIOS);
+ p.end(airplaneModeToken);
+
dumpSetting(s, p,
- Settings.Global.BLUETOOTH_CLASS_OF_DEVICE,
- GlobalSettingsProto.BLUETOOTH_CLASS_OF_DEVICE);
+ Settings.Global.ALARM_MANAGER_CONSTANTS,
+ GlobalSettingsProto.ALARM_MANAGER_CONSTANTS);
dumpSetting(s, p,
- Settings.Global.BLUETOOTH_DISABLED_PROFILES,
- GlobalSettingsProto.BLUETOOTH_DISABLED_PROFILES);
+ Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED,
+ GlobalSettingsProto.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED);
dumpSetting(s, p,
- Settings.Global.BLUETOOTH_INTEROPERABILITY_LIST,
- GlobalSettingsProto.BLUETOOTH_INTEROPERABILITY_LIST);
+ Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS,
+ GlobalSettingsProto.ALWAYS_ON_DISPLAY_CONSTANTS);
dumpSetting(s, p,
- Settings.Global.WIFI_SLEEP_POLICY,
- GlobalSettingsProto.WIFI_SLEEP_POLICY);
+ Settings.Global.ALWAYS_FINISH_ACTIVITIES,
+ GlobalSettingsProto.ALWAYS_FINISH_ACTIVITIES);
dumpSetting(s, p,
- Settings.Global.AUTO_TIME,
- GlobalSettingsProto.AUTO_TIME);
+ Settings.Global.ANIMATOR_DURATION_SCALE,
+ GlobalSettingsProto.ANIMATOR_DURATION_SCALE);
+
+ final long anomalyToken = p.start(GlobalSettingsProto.ANOMALY);
dumpSetting(s, p,
- Settings.Global.AUTO_TIME_ZONE,
- GlobalSettingsProto.AUTO_TIME_ZONE);
+ Settings.Global.ANOMALY_DETECTION_CONSTANTS,
+ GlobalSettingsProto.Anomaly.DETECTION_CONSTANTS);
dumpSetting(s, p,
- Settings.Global.CAR_DOCK_SOUND,
- GlobalSettingsProto.CAR_DOCK_SOUND);
+ Settings.Global.ANOMALY_CONFIG_VERSION,
+ GlobalSettingsProto.Anomaly.CONFIG_VERSION);
dumpSetting(s, p,
- Settings.Global.CAR_UNDOCK_SOUND,
- GlobalSettingsProto.CAR_UNDOCK_SOUND);
+ Settings.Global.ANOMALY_CONFIG,
+ GlobalSettingsProto.Anomaly.CONFIG);
+ p.end(anomalyToken);
+
+ final long apnDbToken = p.start(GlobalSettingsProto.APN_DB);
dumpSetting(s, p,
- Settings.Global.DESK_DOCK_SOUND,
- GlobalSettingsProto.DESK_DOCK_SOUND);
+ Settings.Global.APN_DB_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.ApnDb.UPDATE_CONTENT_URL);
dumpSetting(s, p,
- Settings.Global.DESK_UNDOCK_SOUND,
- GlobalSettingsProto.DESK_UNDOCK_SOUND);
+ Settings.Global.APN_DB_UPDATE_METADATA_URL,
+ GlobalSettingsProto.ApnDb.UPDATE_METADATA_URL);
+ p.end(apnDbToken);
+
+ final long appToken = p.start(GlobalSettingsProto.APP);
dumpSetting(s, p,
- Settings.Global.DOCK_SOUNDS_ENABLED,
- GlobalSettingsProto.DOCK_SOUNDS_ENABLED);
+ Settings.Global.APP_IDLE_CONSTANTS,
+ GlobalSettingsProto.App.IDLE_CONSTANTS);
dumpSetting(s, p,
- Settings.Global.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY,
- GlobalSettingsProto.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY);
+ Settings.Global.APP_STANDBY_ENABLED,
+ GlobalSettingsProto.App.STANDBY_ENABLED);
dumpSetting(s, p,
- Settings.Global.LOCK_SOUND,
- GlobalSettingsProto.LOCK_SOUND);
+ Settings.Global.APP_AUTO_RESTRICTION_ENABLED,
+ GlobalSettingsProto.App.AUTO_RESTRICTION_ENABLED);
dumpSetting(s, p,
- Settings.Global.UNLOCK_SOUND,
- GlobalSettingsProto.UNLOCK_SOUND);
+ Settings.Global.FORCED_APP_STANDBY_ENABLED,
+ GlobalSettingsProto.App.FORCED_APP_STANDBY_ENABLED);
dumpSetting(s, p,
- Settings.Global.TRUSTED_SOUND,
- GlobalSettingsProto.TRUSTED_SOUND);
- dumpSetting(s, p,
- Settings.Global.LOW_BATTERY_SOUND,
- GlobalSettingsProto.LOW_BATTERY_SOUND);
- dumpSetting(s, p,
- Settings.Global.POWER_SOUNDS_ENABLED,
- GlobalSettingsProto.POWER_SOUNDS_ENABLED);
- dumpSetting(s, p,
- Settings.Global.CHARGING_STARTED_SOUND,
- GlobalSettingsProto.WIRELESS_CHARGING_STARTED_SOUND);
- dumpSetting(s, p,
- Settings.Global.CHARGING_SOUNDS_ENABLED,
- GlobalSettingsProto.CHARGING_SOUNDS_ENABLED);
- dumpSetting(s, p,
- Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
- GlobalSettingsProto.STAY_ON_WHILE_PLUGGED_IN);
- dumpSetting(s, p,
- Settings.Global.BUGREPORT_IN_POWER_MENU,
- GlobalSettingsProto.BUGREPORT_IN_POWER_MENU);
- dumpSetting(s, p,
- Settings.Global.ADB_ENABLED,
- GlobalSettingsProto.ADB_ENABLED);
- dumpSetting(s, p,
- Settings.Global.DEBUG_VIEW_ATTRIBUTES,
- GlobalSettingsProto.DEBUG_VIEW_ATTRIBUTES);
+ Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED,
+ GlobalSettingsProto.App.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED);
+ p.end(appToken);
+
dumpSetting(s, p,
Settings.Global.ASSISTED_GPS_ENABLED,
GlobalSettingsProto.ASSISTED_GPS_ENABLED);
dumpSetting(s, p,
+ Settings.Global.AUDIO_SAFE_VOLUME_STATE,
+ GlobalSettingsProto.AUDIO_SAFE_VOLUME_STATE);
+
+ final long autoToken = p.start(GlobalSettingsProto.AUTO);
+ dumpSetting(s, p,
+ Settings.Global.AUTO_TIME,
+ GlobalSettingsProto.Auto.TIME);
+ dumpSetting(s, p,
+ Settings.Global.AUTO_TIME_ZONE,
+ GlobalSettingsProto.Auto.TIME_ZONE);
+ p.end(autoToken);
+
+ dumpSetting(s, p,
+ Settings.Global.AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES,
+ GlobalSettingsProto.AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES);
+ dumpSetting(s, p,
+ Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS,
+ GlobalSettingsProto.BACKUP_AGENT_TIMEOUT_PARAMETERS);
+
+ final long batteryToken = p.start(GlobalSettingsProto.BATTERY);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
+ GlobalSettingsProto.Battery.DISCHARGE_DURATION_THRESHOLD);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
+ GlobalSettingsProto.Battery.DISCHARGE_THRESHOLD);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_SAVER_CONSTANTS,
+ GlobalSettingsProto.Battery.SAVER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS,
+ GlobalSettingsProto.Battery.SAVER_DEVICE_SPECIFIC_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_STATS_CONSTANTS,
+ GlobalSettingsProto.Battery.STATS_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.BATTERY_TIP_CONSTANTS,
+ GlobalSettingsProto.Battery.TIP_CONSTANTS);
+ p.end(batteryToken);
+
+ final long bleScanToken = p.start(GlobalSettingsProto.BLE_SCAN);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE,
+ GlobalSettingsProto.BleScan.ALWAYS_AVAILABLE);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_LOW_POWER_WINDOW_MS,
+ GlobalSettingsProto.BleScan.LOW_POWER_WINDOW_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_BALANCED_WINDOW_MS,
+ GlobalSettingsProto.BleScan.BALANCED_WINDOW_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_LOW_LATENCY_WINDOW_MS,
+ GlobalSettingsProto.BleScan.LOW_LATENCY_WINDOW_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_LOW_POWER_INTERVAL_MS,
+ GlobalSettingsProto.BleScan.LOW_POWER_INTERVAL_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_BALANCED_INTERVAL_MS,
+ GlobalSettingsProto.BleScan.BALANCED_INTERVAL_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_LOW_LATENCY_INTERVAL_MS,
+ GlobalSettingsProto.BleScan.LOW_LATENCY_INTERVAL_MS);
+ dumpSetting(s, p,
+ Settings.Global.BLE_SCAN_BACKGROUND_MODE,
+ GlobalSettingsProto.BleScan.BACKGROUND_MODE);
+ p.end(bleScanToken);
+
+ final long bluetoothToken = p.start(GlobalSettingsProto.BLUETOOTH);
+ dumpSetting(s, p,
+ Settings.Global.BLUETOOTH_CLASS_OF_DEVICE,
+ GlobalSettingsProto.Bluetooth.CLASS_OF_DEVICE);
+ dumpSetting(s, p,
+ Settings.Global.BLUETOOTH_DISABLED_PROFILES,
+ GlobalSettingsProto.Bluetooth.DISABLED_PROFILES);
+ dumpSetting(s, p,
+ Settings.Global.BLUETOOTH_INTEROPERABILITY_LIST,
+ GlobalSettingsProto.Bluetooth.INTEROPERABILITY_LIST);
+ dumpSetting(s, p,
Settings.Global.BLUETOOTH_ON,
- GlobalSettingsProto.BLUETOOTH_ON);
+ GlobalSettingsProto.Bluetooth.ON);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.HEADSET_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.A2DP_SINK_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.A2DP_SRC_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX,
+ GlobalSettingsProto.Bluetooth.A2DP_SUPPORTS_OPTIONAL_CODECS);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX,
+ GlobalSettingsProto.Bluetooth.A2DP_OPTIONAL_CODECS_ENABLED);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.INPUT_DEVICE_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_MAP_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.MAP_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.MAP_CLIENT_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.PBAP_CLIENT_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_SAP_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.SAP_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_PAN_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.PAN_PRIORITIES);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.BLUETOOTH_HEARING_AID_PRIORITY_PREFIX,
+ GlobalSettingsProto.Bluetooth.HEARING_AID_PRIORITIES);
+ p.end(bluetoothToken);
+
+ dumpSetting(s, p,
+ Settings.Global.BOOT_COUNT,
+ GlobalSettingsProto.BOOT_COUNT);
+ dumpSetting(s, p,
+ Settings.Global.BUGREPORT_IN_POWER_MENU,
+ GlobalSettingsProto.BUGREPORT_IN_POWER_MENU);
+ dumpSetting(s, p,
+ Settings.Global.CALL_AUTO_RETRY,
+ GlobalSettingsProto.CALL_AUTO_RETRY);
+
+ final long captivePortalToken = p.start(GlobalSettingsProto.CAPTIVE_PORTAL);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_MODE,
+ GlobalSettingsProto.CaptivePortal.MODE);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
+ GlobalSettingsProto.CaptivePortal.DETECTION_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_SERVER,
+ GlobalSettingsProto.CaptivePortal.SERVER);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
+ GlobalSettingsProto.CaptivePortal.HTTPS_URL);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
+ GlobalSettingsProto.CaptivePortal.HTTP_URL);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
+ GlobalSettingsProto.CaptivePortal.FALLBACK_URL);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
+ GlobalSettingsProto.CaptivePortal.OTHER_FALLBACK_URLS);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_USE_HTTPS,
+ GlobalSettingsProto.CaptivePortal.USE_HTTPS);
+ dumpSetting(s, p,
+ Settings.Global.CAPTIVE_PORTAL_USER_AGENT,
+ GlobalSettingsProto.CaptivePortal.USER_AGENT);
+ p.end(captivePortalToken);
+
+ final long carrierToken = p.start(GlobalSettingsProto.CARRIER);
+ dumpSetting(s, p,
+ Settings.Global.CARRIER_APP_WHITELIST,
+ GlobalSettingsProto.Carrier.APP_WHITELIST);
+ dumpSetting(s, p,
+ Settings.Global.CARRIER_APP_NAMES,
+ GlobalSettingsProto.Carrier.APP_NAMES);
+ dumpSetting(s, p,
+ Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT,
+ GlobalSettingsProto.Carrier.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT);
+ dumpSetting(s, p,
+ Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS,
+ GlobalSettingsProto.Carrier.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS);
+ p.end(carrierToken);
+
+ final long cdmaToken = p.start(GlobalSettingsProto.CDMA);
dumpSetting(s, p,
Settings.Global.CDMA_CELL_BROADCAST_SMS,
- GlobalSettingsProto.CDMA_CELL_BROADCAST_SMS);
+ GlobalSettingsProto.Cdma.CELL_BROADCAST_SMS);
dumpSetting(s, p,
Settings.Global.CDMA_ROAMING_MODE,
- GlobalSettingsProto.CDMA_ROAMING_MODE);
+ GlobalSettingsProto.Cdma.ROAMING_MODE);
dumpSetting(s, p,
Settings.Global.CDMA_SUBSCRIPTION_MODE,
- GlobalSettingsProto.CDMA_SUBSCRIPTION_MODE);
+ GlobalSettingsProto.Cdma.SUBSCRIPTION_MODE);
+ p.end(cdmaToken);
+
+ dumpSetting(s, p,
+ Settings.Global.CELL_ON,
+ GlobalSettingsProto.CELL_ON);
+
+ final long certPinToken = p.start(GlobalSettingsProto.CERT_PIN);
+ dumpSetting(s, p,
+ Settings.Global.CERT_PIN_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.CertPin.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.CERT_PIN_UPDATE_METADATA_URL,
+ GlobalSettingsProto.CertPin.UPDATE_METADATA_URL);
+ p.end(certPinToken);
+
+ dumpSetting(s, p,
+ Global.CHAINED_BATTERY_ATTRIBUTION_ENABLED,
+ GlobalSettingsProto.CHAINED_BATTERY_ATTRIBUTION_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.COMPATIBILITY_MODE,
+ GlobalSettingsProto.COMPATIBILITY_MODE);
+
+ final long connectivityToken = p.start(GlobalSettingsProto.CONNECTIVITY);
+ dumpSetting(s, p,
+ Settings.Global.CONNECTIVITY_METRICS_BUFFER_SIZE,
+ GlobalSettingsProto.Connectivity.METRICS_BUFFER_SIZE);
+ dumpSetting(s, p,
+ Settings.Global.CONNECTIVITY_CHANGE_DELAY,
+ GlobalSettingsProto.Connectivity.CHANGE_DELAY);
+ dumpSetting(s, p,
+ Settings.Global.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS,
+ GlobalSettingsProto.Connectivity.SAMPLING_INTERVAL_IN_SECONDS);
+ p.end(connectivityToken);
+
+ // Settings.Global.CONTACT_METADATA_SYNC intentionally excluded since it's deprecated.
+ dumpSetting(s, p,
+ Settings.Global.CONTACT_METADATA_SYNC_ENABLED,
+ GlobalSettingsProto.CONTACT_METADATA_SYNC_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.CONTACTS_DATABASE_WAL_ENABLED,
+ GlobalSettingsProto.CONTACTS_DATABASE_WAL_ENABLED);
+
+ final long dataToken = p.start(GlobalSettingsProto.DATA);
// Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA intentionally excluded.
dumpSetting(s, p,
Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE,
- GlobalSettingsProto.DATA_ACTIVITY_TIMEOUT_MOBILE);
+ GlobalSettingsProto.Data.ACTIVITY_TIMEOUT_MOBILE);
dumpSetting(s, p,
Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI,
- GlobalSettingsProto.DATA_ACTIVITY_TIMEOUT_WIFI);
+ GlobalSettingsProto.Data.ACTIVITY_TIMEOUT_WIFI);
dumpSetting(s, p,
Settings.Global.DATA_ROAMING,
- GlobalSettingsProto.DATA_ROAMING);
+ GlobalSettingsProto.Data.ROAMING);
dumpSetting(s, p,
- Settings.Global.MDC_INITIAL_MAX_RETRY,
- GlobalSettingsProto.MDC_INITIAL_MAX_RETRY);
+ Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
+ GlobalSettingsProto.Data.STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
+ dumpSetting(s, p,
+ Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
+ GlobalSettingsProto.Data.STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
+ p.end(dataToken);
+
+ final long databaseToken = p.start(GlobalSettingsProto.DATABASE);
+ dumpSetting(s, p,
+ Settings.Global.DATABASE_DOWNGRADE_REASON,
+ GlobalSettingsProto.Database.DOWNGRADE_REASON);
+ dumpSetting(s, p,
+ Settings.Global.DATABASE_CREATION_BUILDID,
+ GlobalSettingsProto.Database.CREATION_BUILDID);
+ p.end(databaseToken);
+
+ final long debugToken = p.start(GlobalSettingsProto.DEBUG);
+ dumpSetting(s, p,
+ Settings.Global.DEBUG_APP,
+ GlobalSettingsProto.Debug.APP);
+ dumpSetting(s, p,
+ Settings.Global.DEBUG_VIEW_ATTRIBUTES,
+ GlobalSettingsProto.Debug.VIEW_ATTRIBUTES);
+ p.end(debugToken);
+
+ final long defaultToken = p.start(GlobalSettingsProto.DEFAULT);
+ // Settings.Global.DEFAULT_SM_DP_PLUS intentionally excluded.
+ dumpSetting(s, p,
+ Settings.Global.DEFAULT_INSTALL_LOCATION,
+ GlobalSettingsProto.Default.INSTALL_LOCATION);
+ dumpSetting(s, p,
+ Settings.Global.DEFAULT_DNS_SERVER,
+ GlobalSettingsProto.Default.DNS_SERVER);
+ p.end(defaultToken);
+
+ final long developmentToken = p.start(GlobalSettingsProto.DEVELOPMENT);
+ dumpSetting(s, p,
+ Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES,
+ GlobalSettingsProto.Development.FORCE_RESIZABLE_ACTIVITIES);
+ dumpSetting(s, p,
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
+ GlobalSettingsProto.Development.ENABLE_FREEFORM_WINDOWS_SUPPORT);
+ dumpSetting(s, p,
+ Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
+ GlobalSettingsProto.Development.SETTINGS_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.DEVELOPMENT_FORCE_RTL,
+ GlobalSettingsProto.Development.FORCE_RTL);
+ dumpSetting(s, p,
+ Settings.Global.EMULATE_DISPLAY_CUTOUT,
+ GlobalSettingsProto.Development.EMULATE_DISPLAY_CUTOUT);
+ p.end(developmentToken);
+
+ final long deviceToken = p.start(GlobalSettingsProto.DEVICE);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_NAME,
+ GlobalSettingsProto.Device.NAME);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_PROVISIONED,
+ GlobalSettingsProto.Device.PROVISIONED);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED,
+ GlobalSettingsProto.Device.PROVISIONING_MOBILE_DATA_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_IDLE_CONSTANTS,
+ GlobalSettingsProto.Device.IDLE_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_POLICY_CONSTANTS,
+ GlobalSettingsProto.Device.POLICY_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.DEVICE_DEMO_MODE,
+ GlobalSettingsProto.Device.DEMO_MODE);
+ p.end(deviceToken);
+
+ dumpSetting(s, p,
+ Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
+ GlobalSettingsProto.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
+
+ final long displayToken = p.start(GlobalSettingsProto.DISPLAY);
+ dumpSetting(s, p,
+ Settings.Global.DISPLAY_SIZE_FORCED,
+ GlobalSettingsProto.Display.SIZE_FORCED);
+ dumpSetting(s, p,
+ Settings.Global.DISPLAY_SCALING_FORCE,
+ GlobalSettingsProto.Display.SCALING_FORCE);
+ dumpSetting(s, p,
+ Settings.Global.DISPLAY_PANEL_LPM,
+ GlobalSettingsProto.Display.PANEL_LPM);
+ p.end(displayToken);
+
+ final long dnsResolverToken = p.start(GlobalSettingsProto.DNS_RESOLVER);
+ dumpSetting(s, p,
+ Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS,
+ GlobalSettingsProto.DnsResolver.SAMPLE_VALIDITY_SECONDS);
+ dumpSetting(s, p,
+ Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT,
+ GlobalSettingsProto.DnsResolver.SUCCESS_THRESHOLD_PERCENT);
+ dumpSetting(s, p,
+ Settings.Global.DNS_RESOLVER_MIN_SAMPLES,
+ GlobalSettingsProto.DnsResolver.MIN_SAMPLES);
+ dumpSetting(s, p,
+ Settings.Global.DNS_RESOLVER_MAX_SAMPLES,
+ GlobalSettingsProto.DnsResolver.MAX_SAMPLES);
+ p.end(dnsResolverToken);
+
+ dumpSetting(s, p,
+ Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
+ GlobalSettingsProto.DOCK_AUDIO_MEDIA_ENABLED);
+
+ final long downloadToken = p.start(GlobalSettingsProto.DOWNLOAD);
+ dumpSetting(s, p,
+ Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
+ GlobalSettingsProto.Download.MAX_BYTES_OVER_MOBILE);
+ dumpSetting(s, p,
+ Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
+ GlobalSettingsProto.Download.RECOMMENDED_MAX_BYTES_OVER_MOBILE);
+ p.end(downloadToken);
+
+ final long dropboxToken = p.start(GlobalSettingsProto.DROPBOX);
+ dumpSetting(s, p,
+ Settings.Global.DROPBOX_AGE_SECONDS,
+ GlobalSettingsProto.Dropbox.AGE_SECONDS);
+ dumpSetting(s, p,
+ Settings.Global.DROPBOX_MAX_FILES,
+ GlobalSettingsProto.Dropbox.MAX_FILES);
+ dumpSetting(s, p,
+ Settings.Global.DROPBOX_QUOTA_KB,
+ GlobalSettingsProto.Dropbox.QUOTA_KB);
+ dumpSetting(s, p,
+ Settings.Global.DROPBOX_QUOTA_PERCENT,
+ GlobalSettingsProto.Dropbox.QUOTA_PERCENT);
+ dumpSetting(s, p,
+ Settings.Global.DROPBOX_RESERVE_PERCENT,
+ GlobalSettingsProto.Dropbox.RESERVE_PERCENT);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.DROPBOX_TAG_PREFIX,
+ GlobalSettingsProto.Dropbox.SETTINGS);
+ p.end(dropboxToken);
+
+ final long emergencyToken = p.start(GlobalSettingsProto.EMERGENCY);
+ dumpSetting(s, p,
+ Settings.Global.EMERGENCY_TONE,
+ GlobalSettingsProto.Emergency.TONE);
+ dumpSetting(s, p,
+ Settings.Global.EMERGENCY_AFFORDANCE_NEEDED,
+ GlobalSettingsProto.Emergency.AFFORDANCE_NEEDED);
+ p.end(emergencyToken);
+
+ final long enableToken = p.start(GlobalSettingsProto.ENABLE);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
+ GlobalSettingsProto.Enable.ACCESSIBILITY_GLOBAL_GESTURE_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS,
+ GlobalSettingsProto.Enable.GPU_DEBUG_LAYERS);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_EPHEMERAL_FEATURE,
+ GlobalSettingsProto.Enable.EPHEMERAL_FEATURE);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_CELLULAR_ON_BOOT,
+ GlobalSettingsProto.Enable.CELLULAR_ON_BOOT);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_DISKSTATS_LOGGING,
+ GlobalSettingsProto.Enable.DISKSTATS_LOGGING);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_CACHE_QUOTA_CALCULATION,
+ GlobalSettingsProto.Enable.CACHE_QUOTA_CALCULATION);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE,
+ GlobalSettingsProto.Enable.DELETION_HELPER_NO_THRESHOLD_TOGGLE);
+ dumpSetting(s, p,
+ Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING,
+ GlobalSettingsProto.Enable.GNSS_RAW_MEAS_FULL_TRACKING);
+ p.end(enableToken);
+
+ dumpSetting(s, p,
+ Settings.Global.ENCODED_SURROUND_OUTPUT,
+ GlobalSettingsProto.ENCODED_SURROUND_OUTPUT);
+ dumpSetting(s, p,
+ Settings.Global.ENHANCED_4G_MODE_ENABLED,
+ GlobalSettingsProto.ENHANCED_4G_MODE_ENABLED);
+ dumpRepeatedSetting(s, p,
+ Settings.Global.ERROR_LOGCAT_PREFIX,
+ GlobalSettingsProto.ERROR_LOGCAT_LINES);
+
+ final long euiccToken = p.start(GlobalSettingsProto.EUICC);
+ dumpSetting(s, p,
+ Settings.Global.EUICC_PROVISIONED,
+ GlobalSettingsProto.Euicc.PROVISIONED);
+ dumpSetting(s, p,
+ Settings.Global.EUICC_FACTORY_RESET_TIMEOUT_MILLIS,
+ GlobalSettingsProto.Euicc.FACTORY_RESET_TIMEOUT_MILLIS);
+ p.end(euiccToken);
+
+ dumpSetting(s, p,
+ Settings.Global.FANCY_IME_ANIMATIONS,
+ GlobalSettingsProto.FANCY_IME_ANIMATIONS);
dumpSetting(s, p,
Settings.Global.FORCE_ALLOW_ON_EXTERNAL,
GlobalSettingsProto.FORCE_ALLOW_ON_EXTERNAL);
- // Settings.Global.DEFAULT_SM_DP_PLUS intentionally excluded.
dumpSetting(s, p,
- Settings.Global.EUICC_PROVISIONED,
- GlobalSettingsProto.EUICC_PROVISIONED);
+ Settings.Global.FPS_DEVISOR,
+ GlobalSettingsProto.FPS_DIVISOR);
dumpSetting(s, p,
- Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES,
- GlobalSettingsProto.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES);
+ Settings.Global.FSTRIM_MANDATORY_INTERVAL,
+ GlobalSettingsProto.FSTRIM_MANDATORY_INTERVAL);
+
+ final long ghpToken = p.start(GlobalSettingsProto.GLOBAL_HTTP_PROXY);
dumpSetting(s, p,
- Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
- GlobalSettingsProto.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT);
+ Settings.Global.GLOBAL_HTTP_PROXY_HOST,
+ GlobalSettingsProto.GlobalHttpProxy.HOST);
dumpSetting(s, p,
- Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
- GlobalSettingsProto.DEVELOPMENT_SETTINGS_ENABLED);
+ Settings.Global.GLOBAL_HTTP_PROXY_PORT,
+ GlobalSettingsProto.GlobalHttpProxy.PORT);
dumpSetting(s, p,
- Settings.Global.DEVICE_PROVISIONED,
- GlobalSettingsProto.DEVICE_PROVISIONED);
+ Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
+ GlobalSettingsProto.GlobalHttpProxy.EXCLUSION_LIST);
dumpSetting(s, p,
- Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED,
- GlobalSettingsProto.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED);
+ Settings.Global.GLOBAL_HTTP_PROXY_PAC,
+ GlobalSettingsProto.GlobalHttpProxy.PAC);
dumpSetting(s, p,
- Settings.Global.DISPLAY_SIZE_FORCED,
- GlobalSettingsProto.DISPLAY_SIZE_FORCED);
+ Settings.Global.SET_GLOBAL_HTTP_PROXY,
+ GlobalSettingsProto.GlobalHttpProxy.SETTING_UI_ENABLED);
+ p.end(ghpToken);
+
dumpSetting(s, p,
- Settings.Global.DISPLAY_SCALING_FORCE,
- GlobalSettingsProto.DISPLAY_SCALING_FORCE);
+ Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS,
+ GlobalSettingsProto.GPRS_REGISTER_CHECK_PERIOD_MS);
+
+ final long gpuToken = p.start(GlobalSettingsProto.GPU);
dumpSetting(s, p,
- Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
- GlobalSettingsProto.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
+ Settings.Global.GPU_DEBUG_APP,
+ GlobalSettingsProto.Gpu.DEBUG_APP);
dumpSetting(s, p,
- Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
- GlobalSettingsProto.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
- // Settings.Global.INSTALL_NON_MARKET_APPS intentionally excluded since it's deprecated.
+ Settings.Global.GPU_DEBUG_LAYERS,
+ GlobalSettingsProto.Gpu.DEBUG_LAYERS);
+ p.end(gpuToken);
+
+ final long hdmiToken = p.start(GlobalSettingsProto.HDMI);
dumpSetting(s, p,
Settings.Global.HDMI_CONTROL_ENABLED,
- GlobalSettingsProto.HDMI_CONTROL_ENABLED);
+ GlobalSettingsProto.Hdmi.CONTROL_ENABLED);
dumpSetting(s, p,
Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
- GlobalSettingsProto.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED);
+ GlobalSettingsProto.Hdmi.SYSTEM_AUDIO_CONTROL_ENABLED);
dumpSetting(s, p,
Settings.Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED,
- GlobalSettingsProto.HDMI_CONTROL_AUTO_WAKEUP_ENABLED);
+ GlobalSettingsProto.Hdmi.CONTROL_AUTO_WAKEUP_ENABLED);
dumpSetting(s, p,
Settings.Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
- GlobalSettingsProto.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED);
+ GlobalSettingsProto.Hdmi.CONTROL_AUTO_DEVICE_OFF_ENABLED);
+ p.end(hdmiToken);
+
dumpSetting(s, p,
- Settings.Global.PRIV_APP_OOB_ENABLED,
- GlobalSettingsProto.PRIV_APP_OOB_ENABLED);
+ Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+ GlobalSettingsProto.HEADS_UP_NOTIFICATIONS_ENABLED);
+ dumpSetting(s, p,
+ Global.HIDDEN_API_BLACKLIST_EXEMPTIONS,
+ GlobalSettingsProto.HIDDEN_API_BLACKLIST_EXEMPTIONS);
+
+ final long inetCondToken = p.start(GlobalSettingsProto.INET_CONDITION);
+ dumpSetting(s, p,
+ Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
+ GlobalSettingsProto.InetCondition.DEBOUNCE_UP_DELAY);
+ dumpSetting(s, p,
+ Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
+ GlobalSettingsProto.InetCondition.DEBOUNCE_DOWN_DELAY);
+ p.end(inetCondToken);
+
+ final long instantAppToken = p.start(GlobalSettingsProto.INSTANT_APP);
+ dumpSetting(s, p,
+ Settings.Global.INSTANT_APP_DEXOPT_ENABLED,
+ GlobalSettingsProto.InstantApp.DEXOPT_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES,
+ GlobalSettingsProto.InstantApp.EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
+ dumpSetting(s, p,
+ Settings.Global.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
+ GlobalSettingsProto.InstantApp.INSTALLED_MIN_CACHE_PERIOD);
+ dumpSetting(s, p,
+ Settings.Global.INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
+ GlobalSettingsProto.InstantApp.INSTALLED_MAX_CACHE_PERIOD);
+ dumpSetting(s, p,
+ Settings.Global.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
+ GlobalSettingsProto.InstantApp.UNINSTALLED_MIN_CACHE_PERIOD);
+ dumpSetting(s, p,
+ Settings.Global.UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
+ GlobalSettingsProto.InstantApp.UNINSTALLED_MAX_CACHE_PERIOD);
+ p.end(instantAppToken);
+
+ final long intentFirewallToken = p.start(GlobalSettingsProto.INTENT_FIREWALL);
+ dumpSetting(s, p,
+ Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.IntentFirewall.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL,
+ GlobalSettingsProto.IntentFirewall.UPDATE_METADATA_URL);
+ p.end(intentFirewallToken);
+
+ dumpSetting(s, p,
+ Settings.Global.JOB_SCHEDULER_CONSTANTS,
+ GlobalSettingsProto.JOB_SCHEDULER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.KEEP_PROFILE_IN_BACKGROUND,
+ GlobalSettingsProto.KEEP_PROFILE_IN_BACKGROUND);
+
+ final long langIdToken = p.start(GlobalSettingsProto.LANG_ID);
+ dumpSetting(s, p,
+ Settings.Global.LANG_ID_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.LangId.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.LANG_ID_UPDATE_METADATA_URL,
+ GlobalSettingsProto.LangId.UPDATE_METADATA_URL);
+ p.end(langIdToken);
+
+ final long locationToken = p.start(GlobalSettingsProto.LOCATION);
dumpSetting(s, p,
Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS,
- GlobalSettingsProto.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS);
+ GlobalSettingsProto.Location.BACKGROUND_THROTTLE_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS,
- GlobalSettingsProto.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS);
+ GlobalSettingsProto.Location.BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST,
- GlobalSettingsProto.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST);
+ GlobalSettingsProto.Location.BACKGROUND_THROTTLE_PACKAGE_WHITELIST);
+ dumpSetting(s, p,
+ Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
+ GlobalSettingsProto.Location.SETTINGS_LINK_TO_PERMISSIONS_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.LOCATION_GLOBAL_KILL_SWITCH,
+ GlobalSettingsProto.Location.GLOBAL_KILL_SWITCH);
+ p.end(locationToken);
+
+ final long lpmToken = p.start(GlobalSettingsProto.LOW_POWER_MODE);
+ dumpSetting(s, p,
+ Settings.Global.LOW_POWER_MODE,
+ GlobalSettingsProto.LowPowerMode.ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
+ GlobalSettingsProto.LowPowerMode.TRIGGER_LEVEL);
+ dumpSetting(s, p,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX,
+ GlobalSettingsProto.LowPowerMode.TRIGGER_LEVEL_MAX);
+ p.end(lpmToken);
+
+ dumpSetting(s, p,
+ Settings.Global.LTE_SERVICE_FORCED,
+ GlobalSettingsProto.LTE_SERVICE_FORCED);
+ dumpSetting(s, p,
+ Settings.Global.MDC_INITIAL_MAX_RETRY,
+ GlobalSettingsProto.MDC_INITIAL_MAX_RETRY);
+
+ final long mhlToken = p.start(GlobalSettingsProto.MHL);
dumpSetting(s, p,
Settings.Global.MHL_INPUT_SWITCHING_ENABLED,
- GlobalSettingsProto.MHL_INPUT_SWITCHING_ENABLED);
+ GlobalSettingsProto.Mhl.INPUT_SWITCHING_ENABLED);
dumpSetting(s, p,
Settings.Global.MHL_POWER_CHARGE_ENABLED,
- GlobalSettingsProto.MHL_POWER_CHARGE_ENABLED);
+ GlobalSettingsProto.Mhl.POWER_CHARGE_ENABLED);
+ p.end(mhlToken);
+
+ final long mobileDataToken = p.start(GlobalSettingsProto.MOBILE_DATA);
dumpSetting(s, p,
Settings.Global.MOBILE_DATA,
- GlobalSettingsProto.MOBILE_DATA);
+ GlobalSettingsProto.MobileData.ALLOWED);
dumpSetting(s, p,
Settings.Global.MOBILE_DATA_ALWAYS_ON,
- GlobalSettingsProto.MOBILE_DATA_ALWAYS_ON);
+ GlobalSettingsProto.MobileData.ALWAYS_ON);
+ p.end(mobileDataToken);
+
dumpSetting(s, p,
- Settings.Global.CONNECTIVITY_METRICS_BUFFER_SIZE,
- GlobalSettingsProto.CONNECTIVITY_METRICS_BUFFER_SIZE);
+ Settings.Global.MODE_RINGER,
+ GlobalSettingsProto.MODE_RINGER);
+
+ final long multiSimToken = p.start(GlobalSettingsProto.MULTI_SIM);
+ dumpSetting(s, p,
+ Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION,
+ GlobalSettingsProto.MultiSim.VOICE_CALL_SUBSCRIPTION);
+ dumpSetting(s, p,
+ Settings.Global.MULTI_SIM_VOICE_PROMPT,
+ GlobalSettingsProto.MultiSim.VOICE_PROMPT);
+ dumpSetting(s, p,
+ Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION,
+ GlobalSettingsProto.MultiSim.DATA_CALL_SUBSCRIPTION);
+ dumpSetting(s, p,
+ Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION,
+ GlobalSettingsProto.MultiSim.SMS_SUBSCRIPTION);
+ dumpSetting(s, p,
+ Settings.Global.MULTI_SIM_SMS_PROMPT,
+ GlobalSettingsProto.MultiSim.SMS_PROMPT);
+ p.end(multiSimToken);
+
+ final long netstatsToken = p.start(GlobalSettingsProto.NETSTATS);
dumpSetting(s, p,
Settings.Global.NETSTATS_ENABLED,
- GlobalSettingsProto.NETSTATS_ENABLED);
+ GlobalSettingsProto.Netstats.ENABLED);
dumpSetting(s, p,
Settings.Global.NETSTATS_POLL_INTERVAL,
- GlobalSettingsProto.NETSTATS_POLL_INTERVAL);
+ GlobalSettingsProto.Netstats.POLL_INTERVAL);
dumpSetting(s, p,
Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE,
- GlobalSettingsProto.NETSTATS_TIME_CACHE_MAX_AGE);
+ GlobalSettingsProto.Netstats.TIME_CACHE_MAX_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES,
- GlobalSettingsProto.NETSTATS_GLOBAL_ALERT_BYTES);
+ GlobalSettingsProto.Netstats.GLOBAL_ALERT_BYTES);
dumpSetting(s, p,
Settings.Global.NETSTATS_SAMPLE_ENABLED,
- GlobalSettingsProto.NETSTATS_SAMPLE_ENABLED);
+ GlobalSettingsProto.Netstats.SAMPLE_ENABLED);
dumpSetting(s, p,
Settings.Global.NETSTATS_AUGMENT_ENABLED,
- GlobalSettingsProto.NETSTATS_AUGMENT_ENABLED);
+ GlobalSettingsProto.Netstats.AUGMENT_ENABLED);
dumpSetting(s, p,
Settings.Global.NETSTATS_DEV_BUCKET_DURATION,
- GlobalSettingsProto.NETSTATS_DEV_BUCKET_DURATION);
+ GlobalSettingsProto.Netstats.DEV_BUCKET_DURATION);
dumpSetting(s, p,
Settings.Global.NETSTATS_DEV_PERSIST_BYTES,
- GlobalSettingsProto.NETSTATS_DEV_PERSIST_BYTES);
+ GlobalSettingsProto.Netstats.DEV_PERSIST_BYTES);
dumpSetting(s, p,
Settings.Global.NETSTATS_DEV_ROTATE_AGE,
- GlobalSettingsProto.NETSTATS_DEV_ROTATE_AGE);
+ GlobalSettingsProto.Netstats.DEV_ROTATE_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_DEV_DELETE_AGE,
- GlobalSettingsProto.NETSTATS_DEV_DELETE_AGE);
+ GlobalSettingsProto.Netstats.DEV_DELETE_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_BUCKET_DURATION,
- GlobalSettingsProto.NETSTATS_UID_BUCKET_DURATION);
+ GlobalSettingsProto.Netstats.UID_BUCKET_DURATION);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_PERSIST_BYTES,
- GlobalSettingsProto.NETSTATS_UID_PERSIST_BYTES);
+ GlobalSettingsProto.Netstats.UID_PERSIST_BYTES);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_ROTATE_AGE,
- GlobalSettingsProto.NETSTATS_UID_ROTATE_AGE);
+ GlobalSettingsProto.Netstats.UID_ROTATE_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_DELETE_AGE,
- GlobalSettingsProto.NETSTATS_UID_DELETE_AGE);
+ GlobalSettingsProto.Netstats.UID_DELETE_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION,
- GlobalSettingsProto.NETSTATS_UID_TAG_BUCKET_DURATION);
+ GlobalSettingsProto.Netstats.UID_TAG_BUCKET_DURATION);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES,
- GlobalSettingsProto.NETSTATS_UID_TAG_PERSIST_BYTES);
+ GlobalSettingsProto.Netstats.UID_TAG_PERSIST_BYTES);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE,
- GlobalSettingsProto.NETSTATS_UID_TAG_ROTATE_AGE);
+ GlobalSettingsProto.Netstats.UID_TAG_ROTATE_AGE);
dumpSetting(s, p,
Settings.Global.NETSTATS_UID_TAG_DELETE_AGE,
- GlobalSettingsProto.NETSTATS_UID_TAG_DELETE_AGE);
+ GlobalSettingsProto.Netstats.UID_TAG_DELETE_AGE);
+ p.end(netstatsToken);
+
+ final long networkToken = p.start(GlobalSettingsProto.NETWORK);
dumpSetting(s, p,
Settings.Global.NETWORK_PREFERENCE,
- GlobalSettingsProto.NETWORK_PREFERENCE);
+ GlobalSettingsProto.Network.PREFERENCE);
+ dumpSetting(s, p,
+ Settings.Global.PREFERRED_NETWORK_MODE,
+ GlobalSettingsProto.Network.PREFERRED_NETWORK_MODE);
dumpSetting(s, p,
Settings.Global.NETWORK_SCORER_APP,
- GlobalSettingsProto.NETWORK_SCORER_APP);
+ GlobalSettingsProto.Network.SCORER_APP);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
+ GlobalSettingsProto.Network.SWITCH_NOTIFICATION_DAILY_LIMIT);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
+ GlobalSettingsProto.Network.SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_AVOID_BAD_WIFI,
+ GlobalSettingsProto.Network.AVOID_BAD_WIFI);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE,
+ GlobalSettingsProto.Network.METERED_MULTIPATH_PREFERENCE);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_WATCHLIST_LAST_REPORT_TIME,
+ GlobalSettingsProto.Network.WATCHLIST_LAST_REPORT_TIME);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_SCORING_UI_ENABLED,
+ GlobalSettingsProto.Network.SCORING_UI_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+ GlobalSettingsProto.Network.RECOMMENDATIONS_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE,
+ GlobalSettingsProto.Network.RECOMMENDATIONS_PACKAGE);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS,
+ GlobalSettingsProto.Network.RECOMMENDATION_REQUEST_TIMEOUT_MS);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_WATCHLIST_ENABLED,
+ GlobalSettingsProto.Network.WATCHLIST_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_SCORING_PROVISIONED,
+ GlobalSettingsProto.Network.SCORING_PROVISIONED);
+ dumpSetting(s, p,
+ Settings.Global.NETWORK_ACCESS_TIMEOUT_MS,
+ GlobalSettingsProto.Network.ACCESS_TIMEOUT_MS);
+ dumpSetting(s, p,
+ Settings.Global.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS,
+ GlobalSettingsProto.Network.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS);
+ p.end(networkToken);
+
+ dumpSetting(s, p,
+ Settings.Global.NEW_CONTACT_AGGREGATOR,
+ GlobalSettingsProto.NEW_CONTACT_AGGREGATOR);
dumpSetting(s, p,
Settings.Global.NIGHT_DISPLAY_FORCED_AUTO_MODE_AVAILABLE,
GlobalSettingsProto.NIGHT_DISPLAY_FORCED_AUTO_MODE_AVAILABLE);
+
+ final long nitzUpdateToken = p.start(GlobalSettingsProto.NITZ_UPDATE);
dumpSetting(s, p,
Settings.Global.NITZ_UPDATE_DIFF,
- GlobalSettingsProto.NITZ_UPDATE_DIFF);
+ GlobalSettingsProto.NitzUpdate.DIFF);
dumpSetting(s, p,
Settings.Global.NITZ_UPDATE_SPACING,
- GlobalSettingsProto.NITZ_UPDATE_SPACING);
+ GlobalSettingsProto.NitzUpdate.SPACING);
+ p.end(nitzUpdateToken);
+
+ final long notificationToken = p.start(GlobalSettingsProto.NOTIFICATION);
+ dumpSetting(s, p,
+ Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
+ GlobalSettingsProto.Notification.MAX_NOTIFICATION_ENQUEUE_RATE);
+ dumpSetting(s, p,
+ Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS,
+ GlobalSettingsProto.Notification.SHOW_NOTIFICATION_CHANNEL_WARNINGS);
+ // The list of snooze options for notifications. This is encoded as a key=value list,
+ // separated by commas.
+ dumpSetting(s, p,
+ Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
+ GlobalSettingsProto.Notification.SNOOZE_OPTIONS);
+ dumpSetting(s, p,
+ Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS,
+ GlobalSettingsProto.Notification.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS);
+ p.end(notificationToken);
+
+ dumpSetting(s, p,
+ Settings.Global.NSD_ON,
+ GlobalSettingsProto.NSD_ON);
+
+ final long ntpToken = p.start(GlobalSettingsProto.NTP);
dumpSetting(s, p,
Settings.Global.NTP_SERVER,
- GlobalSettingsProto.NTP_SERVER);
+ GlobalSettingsProto.Ntp.SERVER);
dumpSetting(s, p,
Settings.Global.NTP_TIMEOUT,
- GlobalSettingsProto.NTP_TIMEOUT);
+ GlobalSettingsProto.Ntp.TIMEOUT_MS);
+ p.end(ntpToken);
+
+ final long obroToken = p.start(GlobalSettingsProto.OFF_BODY_RADIOS_OFF);
dumpSetting(s, p,
- Settings.Global.STORAGE_BENCHMARK_INTERVAL,
- GlobalSettingsProto.STORAGE_BENCHMARK_INTERVAL);
+ Settings.Global.OFF_BODY_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED,
+ GlobalSettingsProto.OffBodyRadiosOff.ENABLED_FOR_SMALL_BATTERY);
dumpSetting(s, p,
- Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS,
- GlobalSettingsProto.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS);
- dumpSetting(s, p,
- Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT,
- GlobalSettingsProto.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT);
- dumpSetting(s, p,
- Settings.Global.DNS_RESOLVER_MIN_SAMPLES,
- GlobalSettingsProto.DNS_RESOLVER_MIN_SAMPLES);
- dumpSetting(s, p,
- Settings.Global.DNS_RESOLVER_MAX_SAMPLES,
- GlobalSettingsProto.DNS_RESOLVER_MAX_SAMPLES);
+ Settings.Global.OFF_BODY_RADIOS_OFF_DELAY_MS,
+ GlobalSettingsProto.OffBodyRadiosOff.DELAY_MS);
+ p.end(obroToken);
+
dumpSetting(s, p,
Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE,
GlobalSettingsProto.OTA_DISABLE_AUTOMATIC_UPDATE);
dumpSetting(s, p,
+ Settings.Global.OVERLAY_DISPLAY_DEVICES,
+ GlobalSettingsProto.OVERLAY_DISPLAY_DEVICES);
+ dumpSetting(s, p,
+ Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION,
+ GlobalSettingsProto.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION);
+ dumpSetting(s, p,
+ Settings.Global.PAC_CHANGE_DELAY,
+ GlobalSettingsProto.PAC_CHANGE_DELAY);
+
+ final long pkgVerifierToken = p.start(GlobalSettingsProto.PACKAGE_VERIFIER);
+ dumpSetting(s, p,
Settings.Global.PACKAGE_VERIFIER_ENABLE,
- GlobalSettingsProto.PACKAGE_VERIFIER_ENABLE);
+ GlobalSettingsProto.PackageVerifier.ENABLED);
dumpSetting(s, p,
Settings.Global.PACKAGE_VERIFIER_TIMEOUT,
- GlobalSettingsProto.PACKAGE_VERIFIER_TIMEOUT);
+ GlobalSettingsProto.PackageVerifier.TIMEOUT);
dumpSetting(s, p,
Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE,
- GlobalSettingsProto.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
+ GlobalSettingsProto.PackageVerifier.DEFAULT_RESPONSE);
dumpSetting(s, p,
Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE,
- GlobalSettingsProto.PACKAGE_VERIFIER_SETTING_VISIBLE);
+ GlobalSettingsProto.PackageVerifier.SETTING_VISIBLE);
dumpSetting(s, p,
Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB,
- GlobalSettingsProto.PACKAGE_VERIFIER_INCLUDE_ADB);
- dumpSetting(s, p,
- Settings.Global.FSTRIM_MANDATORY_INTERVAL,
- GlobalSettingsProto.FSTRIM_MANDATORY_INTERVAL);
+ GlobalSettingsProto.PackageVerifier.INCLUDE_ADB);
+ p.end(pkgVerifierToken);
+
+ final long pdpWatchdogToken = p.start(GlobalSettingsProto.PDP_WATCHDOG);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS,
- GlobalSettingsProto.PDP_WATCHDOG_POLL_INTERVAL_MS);
+ GlobalSettingsProto.PdpWatchdog.POLL_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS,
- GlobalSettingsProto.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
+ GlobalSettingsProto.PdpWatchdog.LONG_POLL_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS,
- GlobalSettingsProto.PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS);
+ GlobalSettingsProto.PdpWatchdog.ERROR_POLL_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT,
- GlobalSettingsProto.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
+ GlobalSettingsProto.PdpWatchdog.TRIGGER_PACKET_COUNT);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT,
- GlobalSettingsProto.PDP_WATCHDOG_ERROR_POLL_COUNT);
+ GlobalSettingsProto.PdpWatchdog.ERROR_POLL_COUNT);
dumpSetting(s, p,
Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT,
- GlobalSettingsProto.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
+ GlobalSettingsProto.PdpWatchdog.MAX_PDP_RESET_FAIL_COUNT);
+ p.end(pdpWatchdogToken);
+
+ dumpSetting(s, p,
+ Settings.Global.POLICY_CONTROL,
+ GlobalSettingsProto.POLICY_CONTROL);
+ dumpSetting(s, p,
+ Settings.Global.POWER_MANAGER_CONSTANTS,
+ GlobalSettingsProto.POWER_MANAGER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.PRIV_APP_OOB_ENABLED,
+ GlobalSettingsProto.PRIV_APP_OOB_ENABLED);
+
+ final long prepaidSetupToken = p.start(GlobalSettingsProto.PREPAID_SETUP);
dumpSetting(s, p,
Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL,
- GlobalSettingsProto.SETUP_PREPAID_DATA_SERVICE_URL);
+ GlobalSettingsProto.PrepaidSetup.DATA_SERVICE_URL);
dumpSetting(s, p,
Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL,
- GlobalSettingsProto.SETUP_PREPAID_DETECTION_TARGET_URL);
+ GlobalSettingsProto.PrepaidSetup.DETECTION_TARGET_URL);
dumpSetting(s, p,
Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST,
- GlobalSettingsProto.SETUP_PREPAID_DETECTION_REDIR_HOST);
+ GlobalSettingsProto.PrepaidSetup.DETECTION_REDIR_HOST);
+ p.end(prepaidSetupToken);
+
+ final long privateToken = p.start(GlobalSettingsProto.PRIVATE);
+ dumpSetting(s, p,
+ Settings.Global.PRIVATE_DNS_MODE,
+ GlobalSettingsProto.Private.DNS_MODE);
+ dumpSetting(s, p,
+ Settings.Global.PRIVATE_DNS_SPECIFIER,
+ GlobalSettingsProto.Private.DNS_SPECIFIER);
+ p.end(privateToken);
+
+ dumpSetting(s, p,
+ Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS,
+ GlobalSettingsProto.PROVISIONING_APN_ALARM_DELAY_IN_MS);
+ dumpSetting(s, p,
+ Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
+ GlobalSettingsProto.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
+ dumpSetting(s, p,
+ Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT,
+ GlobalSettingsProto.REQUIRE_PASSWORD_TO_DECRYPT);
+ dumpSetting(s, p,
+ Settings.Global.SAFE_BOOT_DISALLOWED,
+ GlobalSettingsProto.SAFE_BOOT_DISALLOWED);
+
+ final long selinuxToken = p.start(GlobalSettingsProto.SELINUX);
+ dumpSetting(s, p,
+ Settings.Global.SELINUX_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.Selinux.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.SELINUX_UPDATE_METADATA_URL,
+ GlobalSettingsProto.Selinux.UPDATE_METADATA_URL);
+ dumpSetting(s, p,
+ Settings.Global.SELINUX_STATUS,
+ GlobalSettingsProto.Selinux.STATUS);
+ p.end(selinuxToken);
+
+ dumpSetting(s, p,
+ Settings.Global.SEND_ACTION_APP_ERROR,
+ GlobalSettingsProto.SEND_ACTION_APP_ERROR);
+ dumpSetting(s, p,
+ Settings.Global.SET_INSTALL_LOCATION,
+ GlobalSettingsProto.SET_INSTALL_LOCATION);
+ dumpSetting(s, p,
+ Settings.Global.SHORTCUT_MANAGER_CONSTANTS,
+ GlobalSettingsProto.SHORTCUT_MANAGER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.SHOW_FIRST_CRASH_DIALOG,
+ GlobalSettingsProto.SHOW_FIRST_CRASH_DIALOG);
+ // Settings.Global.SHOW_PROCESSES intentionally excluded since it's deprecated.
+ dumpSetting(s, p,
+ Settings.Global.SHOW_RESTART_IN_CRASH_DIALOG,
+ GlobalSettingsProto.SHOW_RESTART_IN_CRASH_DIALOG);
+ dumpSetting(s, p,
+ Settings.Global.SHOW_MUTE_IN_CRASH_DIALOG,
+ GlobalSettingsProto.SHOW_MUTE_IN_CRASH_DIALOG);
+
+ final long smartSelectToken = p.start(GlobalSettingsProto.SMART_SELECTION);
+ dumpSetting(s, p,
+ Settings.Global.SMART_SELECTION_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.SmartSelection.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.SMART_SELECTION_UPDATE_METADATA_URL,
+ GlobalSettingsProto.SmartSelection.UPDATE_METADATA_URL);
+ p.end(smartSelectToken);
+
+ final long smsToken = p.start(GlobalSettingsProto.SMS);
dumpSetting(s, p,
Settings.Global.SMS_OUTGOING_CHECK_INTERVAL_MS,
- GlobalSettingsProto.SMS_OUTGOING_CHECK_INTERVAL_MS);
+ GlobalSettingsProto.Sms.OUTGOING_CHECK_INTERVAL_MS);
dumpSetting(s, p,
Settings.Global.SMS_OUTGOING_CHECK_MAX_COUNT,
- GlobalSettingsProto.SMS_OUTGOING_CHECK_MAX_COUNT);
+ GlobalSettingsProto.Sms.OUTGOING_CHECK_MAX_COUNT);
dumpSetting(s, p,
Settings.Global.SMS_SHORT_CODE_CONFIRMATION,
- GlobalSettingsProto.SMS_SHORT_CODE_CONFIRMATION);
+ GlobalSettingsProto.Sms.SHORT_CODE_CONFIRMATION);
dumpSetting(s, p,
Settings.Global.SMS_SHORT_CODE_RULE,
- GlobalSettingsProto.SMS_SHORT_CODE_RULE);
+ GlobalSettingsProto.Sms.SHORT_CODE_RULE);
+ dumpSetting(s, p,
+ Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.Sms.SHORT_CODES_UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL,
+ GlobalSettingsProto.Sms.SHORT_CODES_UPDATE_METADATA_URL);
+ p.end(smsToken);
+
+ final long soundsToken = p.start(GlobalSettingsProto.SOUNDS);
+ dumpSetting(s, p,
+ Settings.Global.CAR_DOCK_SOUND,
+ GlobalSettingsProto.Sounds.CAR_DOCK);
+ dumpSetting(s, p,
+ Settings.Global.CAR_UNDOCK_SOUND,
+ GlobalSettingsProto.Sounds.CAR_UNDOCK);
+ dumpSetting(s, p,
+ Settings.Global.DESK_DOCK_SOUND,
+ GlobalSettingsProto.Sounds.DESK_DOCK);
+ dumpSetting(s, p,
+ Settings.Global.DESK_UNDOCK_SOUND,
+ GlobalSettingsProto.Sounds.DESK_UNDOCK);
+ dumpSetting(s, p,
+ Settings.Global.DOCK_SOUNDS_ENABLED,
+ GlobalSettingsProto.Sounds.DOCK_SOUNDS_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY,
+ GlobalSettingsProto.Sounds.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY);
+ dumpSetting(s, p,
+ Settings.Global.LOCK_SOUND,
+ GlobalSettingsProto.Sounds.LOCK);
+ dumpSetting(s, p,
+ Settings.Global.UNLOCK_SOUND,
+ GlobalSettingsProto.Sounds.UNLOCK);
+ dumpSetting(s, p,
+ Settings.Global.TRUSTED_SOUND,
+ GlobalSettingsProto.Sounds.TRUSTED);
+ dumpSetting(s, p,
+ Settings.Global.LOW_BATTERY_SOUND,
+ GlobalSettingsProto.Sounds.LOW_BATTERY);
+ dumpSetting(s, p,
+ Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
+ GlobalSettingsProto.Sounds.LOW_BATTERY_SOUND_TIMEOUT);
+ dumpSetting(s, p,
+ Settings.Global.POWER_SOUNDS_ENABLED,
+ GlobalSettingsProto.Sounds.LOW_BATTERY_SOUNDS_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.CHARGING_STARTED_SOUND,
+ GlobalSettingsProto.Sounds.CHARGING_STARTED);
+ dumpSetting(s, p,
+ Settings.Global.CHARGING_SOUNDS_ENABLED,
+ GlobalSettingsProto.Sounds.CHARGING_SOUNDS_ENABLED);
+ p.end(soundsToken);
+
+ final long soundTriggerToken = p.start(GlobalSettingsProto.SOUND_TRIGGER);
+ dumpSetting(s, p,
+ Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY,
+ GlobalSettingsProto.SoundTrigger.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY);
+ dumpSetting(s, p,
+ Global.SOUND_TRIGGER_DETECTION_SERVICE_OP_TIMEOUT,
+ GlobalSettingsProto.SoundTrigger.DETECTION_SERVICE_OP_TIMEOUT_MS);
+ p.end(soundTriggerToken);
+
+ dumpSetting(s, p,
+ Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
+ GlobalSettingsProto.SPEED_LABEL_CACHE_EVICTION_AGE_MS);
+ dumpSetting(s, p,
+ Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS,
+ GlobalSettingsProto.SQLITE_COMPATIBILITY_WAL_FLAGS);
+ dumpSetting(s, p,
+ Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
+ GlobalSettingsProto.STAY_ON_WHILE_PLUGGED_IN);
+
+ final long storageToken = p.start(GlobalSettingsProto.STORAGE);
+ dumpSetting(s, p,
+ Settings.Global.STORAGE_BENCHMARK_INTERVAL,
+ GlobalSettingsProto.Storage.BENCHMARK_INTERVAL);
+ dumpSetting(s, p,
+ Settings.Global.STORAGE_SETTINGS_CLOBBER_THRESHOLD,
+ GlobalSettingsProto.Storage.SETTINGS_CLOBBER_THRESHOLD);
+ p.end(storageToken);
+
+ final long syncToken = p.start(GlobalSettingsProto.SYNC);
+ dumpSetting(s, p,
+ Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
+ GlobalSettingsProto.Sync.MAX_RETRY_DELAY_IN_SECONDS);
+ dumpSetting(s, p,
+ Settings.Global.SYNC_MANAGER_CONSTANTS,
+ GlobalSettingsProto.Sync.MANAGER_CONSTANTS);
+ p.end(syncToken);
+
+ final long sysToken = p.start(GlobalSettingsProto.SYS);
+ dumpSetting(s, p,
+ Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
+ GlobalSettingsProto.Sys.FREE_STORAGE_LOG_INTERVAL_MINS);
+ dumpSetting(s, p,
+ Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
+ GlobalSettingsProto.Sys.STORAGE_THRESHOLD_PERCENTAGE);
+ dumpSetting(s, p,
+ Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
+ GlobalSettingsProto.Sys.STORAGE_THRESHOLD_MAX_BYTES);
+ dumpSetting(s, p,
+ Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
+ GlobalSettingsProto.Sys.STORAGE_FULL_THRESHOLD_BYTES);
+ dumpSetting(s, p,
+ Settings.Global.SYS_STORAGE_CACHE_PERCENTAGE,
+ GlobalSettingsProto.Sys.STORAGE_CACHE_PERCENTAGE);
+ dumpSetting(s, p,
+ Settings.Global.SYS_STORAGE_CACHE_MAX_BYTES,
+ GlobalSettingsProto.Sys.STORAGE_CACHE_MAX_BYTES);
+ dumpSetting(s, p,
+ Settings.Global.SYS_VDSO,
+ GlobalSettingsProto.Sys.VDSO);
+ dumpSetting(s, p,
+ Settings.Global.SYS_UIDCPUPOWER,
+ GlobalSettingsProto.Sys.UIDCPUPOWER);
+ p.end(sysToken);
+
dumpSetting(s, p,
Settings.Global.TCP_DEFAULT_INIT_RWND,
GlobalSettingsProto.TCP_DEFAULT_INIT_RWND);
+
+ final long tempWarningToken = p.start(GlobalSettingsProto.TEMPERATURE_WARNING);
+ dumpSetting(s, p,
+ Settings.Global.SHOW_TEMPERATURE_WARNING,
+ GlobalSettingsProto.TemperatureWarning.SHOW_TEMPERATURE_WARNING);
+ dumpSetting(s, p,
+ Settings.Global.WARNING_TEMPERATURE,
+ GlobalSettingsProto.TemperatureWarning.WARNING_TEMPERATURE_LEVEL);
+ p.end(tempWarningToken);
+
+ final long tetherToken = p.start(GlobalSettingsProto.TETHER);
dumpSetting(s, p,
Settings.Global.TETHER_SUPPORTED,
- GlobalSettingsProto.TETHER_SUPPORTED);
+ GlobalSettingsProto.Tether.SUPPORTED);
dumpSetting(s, p,
Settings.Global.TETHER_DUN_REQUIRED,
- GlobalSettingsProto.TETHER_DUN_REQUIRED);
+ GlobalSettingsProto.Tether.DUN_REQUIRED);
dumpSetting(s, p,
Settings.Global.TETHER_DUN_APN,
- GlobalSettingsProto.TETHER_DUN_APN);
+ GlobalSettingsProto.Tether.DUN_APN);
dumpSetting(s, p,
Settings.Global.TETHER_OFFLOAD_DISABLED,
- GlobalSettingsProto.TETHER_OFFLOAD_DISABLED);
+ GlobalSettingsProto.Tether.OFFLOAD_DISABLED);
dumpSetting(s, p,
- Settings.Global.CARRIER_APP_WHITELIST,
- GlobalSettingsProto.CARRIER_APP_WHITELIST);
+ Settings.Global.SOFT_AP_TIMEOUT_ENABLED,
+ GlobalSettingsProto.Tether.TIMEOUT_ENABLED);
+ p.end(tetherToken);
+
dumpSetting(s, p,
- Settings.Global.CARRIER_APP_NAMES,
- GlobalSettingsProto.CARRIER_APP_NAMES);
+ Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
+ GlobalSettingsProto.TEXT_CLASSIFIER_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.THEATER_MODE_ON,
+ GlobalSettingsProto.THEATER_MODE_ON);
+ dumpSetting(s, p,
+ Settings.Global.TIME_ONLY_MODE_CONSTANTS,
+ GlobalSettingsProto.TIME_ONLY_MODE_CONSTANTS);
+ dumpSetting(s, p,
+ Settings.Global.TRANSITION_ANIMATION_SCALE,
+ GlobalSettingsProto.TRANSITION_ANIMATION_SCALE);
+
+ final long tzinfoToken = p.start(GlobalSettingsProto.TZINFO);
+ dumpSetting(s, p,
+ Settings.Global.TZINFO_UPDATE_CONTENT_URL,
+ GlobalSettingsProto.Tzinfo.UPDATE_CONTENT_URL);
+ dumpSetting(s, p,
+ Settings.Global.TZINFO_UPDATE_METADATA_URL,
+ GlobalSettingsProto.Tzinfo.UPDATE_METADATA_URL);
+ p.end(tzinfoToken);
+
+ dumpSetting(s, p,
+ Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
+ GlobalSettingsProto.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD_MS);
dumpSetting(s, p,
Settings.Global.USB_MASS_STORAGE_ENABLED,
GlobalSettingsProto.USB_MASS_STORAGE_ENABLED);
@@ -461,807 +1296,186 @@
Settings.Global.USE_GOOGLE_MAIL,
GlobalSettingsProto.USE_GOOGLE_MAIL);
dumpSetting(s, p,
- Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY,
- GlobalSettingsProto.WEBVIEW_DATA_REDUCTION_PROXY_KEY);
- dumpSetting(s, p,
- Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED,
- GlobalSettingsProto.WEBVIEW_FALLBACK_LOGIC_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WEBVIEW_PROVIDER,
- GlobalSettingsProto.WEBVIEW_PROVIDER);
- dumpSetting(s, p,
- Settings.Global.WEBVIEW_MULTIPROCESS,
- GlobalSettingsProto.WEBVIEW_MULTIPROCESS);
- dumpSetting(s, p,
- Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
- GlobalSettingsProto.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT);
- dumpSetting(s, p,
- Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
- GlobalSettingsProto.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS);
- dumpSetting(s, p,
- Settings.Global.NETWORK_AVOID_BAD_WIFI,
- GlobalSettingsProto.NETWORK_AVOID_BAD_WIFI);
- dumpSetting(s, p,
- Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE,
- GlobalSettingsProto.NETWORK_METERED_MULTIPATH_PREFERENCE);
- dumpSetting(s, p,
- Settings.Global.NETWORK_WATCHLIST_LAST_REPORT_TIME,
- GlobalSettingsProto.NETWORK_WATCHLIST_LAST_REPORT_TIME);
- dumpSetting(s, p,
- Settings.Global.WIFI_BADGING_THRESHOLDS,
- GlobalSettingsProto.WIFI_BADGING_THRESHOLDS);
- dumpSetting(s, p,
- Settings.Global.WIFI_DISPLAY_ON,
- GlobalSettingsProto.WIFI_DISPLAY_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
- GlobalSettingsProto.WIFI_DISPLAY_CERTIFICATION_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_DISPLAY_WPS_CONFIG,
- GlobalSettingsProto.WIFI_DISPLAY_WPS_CONFIG);
- dumpSetting(s, p,
- Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
- GlobalSettingsProto.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_CARRIER_NETWORKS_AVAILABLE_NOTIFICATION_ON,
- GlobalSettingsProto.WIFI_CARRIER_NETWORKS_AVAILABLE_NOTIFICATION_ON);
- dumpSetting(s, p,
- Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON,
- GlobalSettingsProto.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
- GlobalSettingsProto.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
- dumpSetting(s, p,
- Settings.Global.WIFI_COUNTRY_CODE,
- GlobalSettingsProto.WIFI_COUNTRY_CODE);
- dumpSetting(s, p,
- Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
- GlobalSettingsProto.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_IDLE_MS,
- GlobalSettingsProto.WIFI_IDLE_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT,
- GlobalSettingsProto.WIFI_NUM_OPEN_NETWORKS_KEPT);
- dumpSetting(s, p,
- Settings.Global.WIFI_ON,
- GlobalSettingsProto.WIFI_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
- GlobalSettingsProto.WIFI_SCAN_ALWAYS_AVAILABLE);
- dumpSetting(s, p,
- Settings.Global.SOFT_AP_TIMEOUT_ENABLED,
- GlobalSettingsProto.SOFT_AP_TIMEOUT_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WIFI_WAKEUP_ENABLED,
- GlobalSettingsProto.WIFI_WAKEUP_ENABLED);
- dumpSetting(s, p,
- Settings.Global.NETWORK_SCORING_UI_ENABLED,
- GlobalSettingsProto.NETWORK_SCORING_UI_ENABLED);
- dumpSetting(s, p,
- Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
- GlobalSettingsProto.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS);
- dumpSetting(s, p,
- Settings.Global.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS,
- GlobalSettingsProto.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS);
- dumpSetting(s, p,
- Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
- GlobalSettingsProto.NETWORK_RECOMMENDATIONS_ENABLED);
- dumpSetting(s, p,
- Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE,
- GlobalSettingsProto.NETWORK_RECOMMENDATIONS_PACKAGE);
- dumpSetting(s, p,
Settings.Global.USE_OPEN_WIFI_PACKAGE,
GlobalSettingsProto.USE_OPEN_WIFI_PACKAGE);
dumpSetting(s, p,
- Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS,
- GlobalSettingsProto.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE,
- GlobalSettingsProto.BLE_SCAN_ALWAYS_AVAILABLE);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_LOW_POWER_WINDOW_MS,
- GlobalSettingsProto.BLE_SCAN_LOW_POWER_WINDOW_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_BALANCED_WINDOW_MS,
- GlobalSettingsProto.BLE_SCAN_BALANCED_WINDOW_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_LOW_LATENCY_WINDOW_MS,
- GlobalSettingsProto.BLE_SCAN_LOW_LATENCY_WINDOW_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_LOW_POWER_INTERVAL_MS,
- GlobalSettingsProto.BLE_SCAN_LOW_POWER_INTERVAL_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_BALANCED_INTERVAL_MS,
- GlobalSettingsProto.BLE_SCAN_BALANCED_INTERVAL_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_LOW_LATENCY_INTERVAL_MS,
- GlobalSettingsProto.BLE_SCAN_LOW_LATENCY_INTERVAL_MS);
- dumpSetting(s, p,
- Settings.Global.BLE_SCAN_BACKGROUND_MODE,
- GlobalSettingsProto.BLE_SCAN_BACKGROUND_MODE);
- dumpSetting(s, p,
- Settings.Global.WIFI_SAVED_STATE,
- GlobalSettingsProto.WIFI_SAVED_STATE);
- dumpSetting(s, p,
- Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
- GlobalSettingsProto.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_ENHANCED_AUTO_JOIN,
- GlobalSettingsProto.WIFI_ENHANCED_AUTO_JOIN);
- dumpSetting(s, p,
- Settings.Global.WIFI_NETWORK_SHOW_RSSI,
- GlobalSettingsProto.WIFI_NETWORK_SHOW_RSSI);
- dumpSetting(s, p,
- Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
- GlobalSettingsProto.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_WATCHDOG_ON,
- GlobalSettingsProto.WIFI_WATCHDOG_ON);
- dumpSetting(s, p,
- Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED,
- GlobalSettingsProto.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED,
- GlobalSettingsProto.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED,
- GlobalSettingsProto.WIFI_VERBOSE_LOGGING_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
- GlobalSettingsProto.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED);
- dumpSetting(s, p,
- Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
- GlobalSettingsProto.WIFI_MAX_DHCP_RETRY_COUNT);
- dumpSetting(s, p,
- Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS,
- GlobalSettingsProto.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN,
- GlobalSettingsProto.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN);
- dumpSetting(s, p,
- Settings.Global.WIFI_FREQUENCY_BAND,
- GlobalSettingsProto.WIFI_FREQUENCY_BAND);
- dumpSetting(s, p,
- Settings.Global.WIFI_P2P_DEVICE_NAME,
- GlobalSettingsProto.WIFI_P2P_DEVICE_NAME);
- dumpSetting(s, p,
- Settings.Global.WIFI_REENABLE_DELAY_MS,
- GlobalSettingsProto.WIFI_REENABLE_DELAY_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS,
- GlobalSettingsProto.WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS);
- dumpSetting(s, p,
- Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
- GlobalSettingsProto.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
- dumpSetting(s, p,
- Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
- GlobalSettingsProto.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
- dumpSetting(s, p,
- Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS,
- GlobalSettingsProto.PROVISIONING_APN_ALARM_DELAY_IN_MS);
- dumpSetting(s, p,
- Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS,
- GlobalSettingsProto.GPRS_REGISTER_CHECK_PERIOD_MS);
- dumpSetting(s, p,
- Settings.Global.WTF_IS_FATAL,
- GlobalSettingsProto.WTF_IS_FATAL);
- dumpSetting(s, p,
- Settings.Global.MODE_RINGER,
- GlobalSettingsProto.MODE_RINGER);
- dumpSetting(s, p,
- Settings.Global.OVERLAY_DISPLAY_DEVICES,
- GlobalSettingsProto.OVERLAY_DISPLAY_DEVICES);
- dumpSetting(s, p,
- Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
- GlobalSettingsProto.BATTERY_DISCHARGE_DURATION_THRESHOLD);
- dumpSetting(s, p,
- Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
- GlobalSettingsProto.BATTERY_DISCHARGE_THRESHOLD);
- dumpSetting(s, p,
- Settings.Global.SEND_ACTION_APP_ERROR,
- GlobalSettingsProto.SEND_ACTION_APP_ERROR);
- dumpSetting(s, p,
- Settings.Global.DROPBOX_AGE_SECONDS,
- GlobalSettingsProto.DROPBOX_AGE_SECONDS);
- dumpSetting(s, p,
- Settings.Global.DROPBOX_MAX_FILES,
- GlobalSettingsProto.DROPBOX_MAX_FILES);
- dumpSetting(s, p,
- Settings.Global.DROPBOX_QUOTA_KB,
- GlobalSettingsProto.DROPBOX_QUOTA_KB);
- dumpSetting(s, p,
- Settings.Global.DROPBOX_QUOTA_PERCENT,
- GlobalSettingsProto.DROPBOX_QUOTA_PERCENT);
- dumpSetting(s, p,
- Settings.Global.DROPBOX_RESERVE_PERCENT,
- GlobalSettingsProto.DROPBOX_RESERVE_PERCENT);
- dumpRepeatedSetting(s, p,
- Settings.Global.DROPBOX_TAG_PREFIX,
- GlobalSettingsProto.DROPBOX_SETTINGS);
- dumpRepeatedSetting(s, p,
- Settings.Global.ERROR_LOGCAT_PREFIX,
- GlobalSettingsProto.ERROR_LOGCAT_LINES);
- dumpSetting(s, p,
- Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
- GlobalSettingsProto.SYS_FREE_STORAGE_LOG_INTERVAL);
- dumpSetting(s, p,
- Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
- GlobalSettingsProto.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
- dumpSetting(s, p,
- Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
- GlobalSettingsProto.SYS_STORAGE_THRESHOLD_PERCENTAGE);
- dumpSetting(s, p,
- Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
- GlobalSettingsProto.SYS_STORAGE_THRESHOLD_MAX_BYTES);
- dumpSetting(s, p,
- Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
- GlobalSettingsProto.SYS_STORAGE_FULL_THRESHOLD_BYTES);
- dumpSetting(s, p,
- Settings.Global.SYS_STORAGE_CACHE_PERCENTAGE,
- GlobalSettingsProto.SYS_STORAGE_CACHE_PERCENTAGE);
- dumpSetting(s, p,
- Settings.Global.SYS_STORAGE_CACHE_MAX_BYTES,
- GlobalSettingsProto.SYS_STORAGE_CACHE_MAX_BYTES);
- dumpSetting(s, p,
- Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
- GlobalSettingsProto.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
- dumpSetting(s, p,
- Settings.Global.CONNECTIVITY_CHANGE_DELAY,
- GlobalSettingsProto.CONNECTIVITY_CHANGE_DELAY);
- dumpSetting(s, p,
- Settings.Global.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS,
- GlobalSettingsProto.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS);
- dumpSetting(s, p,
- Settings.Global.PAC_CHANGE_DELAY,
- GlobalSettingsProto.PAC_CHANGE_DELAY);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_MODE,
- GlobalSettingsProto.CAPTIVE_PORTAL_MODE);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
- GlobalSettingsProto.CAPTIVE_PORTAL_DETECTION_ENABLED);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_SERVER,
- GlobalSettingsProto.CAPTIVE_PORTAL_SERVER);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
- GlobalSettingsProto.CAPTIVE_PORTAL_HTTPS_URL);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
- GlobalSettingsProto.CAPTIVE_PORTAL_HTTP_URL);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
- GlobalSettingsProto.CAPTIVE_PORTAL_FALLBACK_URL);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
- GlobalSettingsProto.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_USE_HTTPS,
- GlobalSettingsProto.CAPTIVE_PORTAL_USE_HTTPS);
- dumpSetting(s, p,
- Settings.Global.CAPTIVE_PORTAL_USER_AGENT,
- GlobalSettingsProto.CAPTIVE_PORTAL_USER_AGENT);
- dumpSetting(s, p,
- Settings.Global.NSD_ON,
- GlobalSettingsProto.NSD_ON);
- dumpSetting(s, p,
- Settings.Global.SET_INSTALL_LOCATION,
- GlobalSettingsProto.SET_INSTALL_LOCATION);
- dumpSetting(s, p,
- Settings.Global.DEFAULT_INSTALL_LOCATION,
- GlobalSettingsProto.DEFAULT_INSTALL_LOCATION);
- dumpSetting(s, p,
- Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
- GlobalSettingsProto.INET_CONDITION_DEBOUNCE_UP_DELAY);
- dumpSetting(s, p,
- Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
- GlobalSettingsProto.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
- dumpSetting(s, p,
- Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
- GlobalSettingsProto.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
- dumpSetting(s, p,
- Settings.Global.HTTP_PROXY,
- GlobalSettingsProto.HTTP_PROXY);
- dumpSetting(s, p,
- Settings.Global.GLOBAL_HTTP_PROXY_HOST,
- GlobalSettingsProto.GLOBAL_HTTP_PROXY_HOST);
- dumpSetting(s, p,
- Settings.Global.GLOBAL_HTTP_PROXY_PORT,
- GlobalSettingsProto.GLOBAL_HTTP_PROXY_PORT);
- dumpSetting(s, p,
- Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
- GlobalSettingsProto.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
- dumpSetting(s, p,
- Settings.Global.GLOBAL_HTTP_PROXY_PAC,
- GlobalSettingsProto.GLOBAL_HTTP_PROXY_PAC);
- dumpSetting(s, p,
- Settings.Global.SET_GLOBAL_HTTP_PROXY,
- GlobalSettingsProto.SET_GLOBAL_HTTP_PROXY);
- dumpSetting(s, p,
- Settings.Global.DEFAULT_DNS_SERVER,
- GlobalSettingsProto.DEFAULT_DNS_SERVER);
- dumpSetting(s, p,
- Settings.Global.PRIVATE_DNS_MODE,
- GlobalSettingsProto.PRIVATE_DNS_MODE);
- dumpSetting(s, p,
- Settings.Global.PRIVATE_DNS_SPECIFIER,
- GlobalSettingsProto.PRIVATE_DNS_SPECIFIER);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_HEADSET_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_A2DP_SINK_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_A2DP_SRC_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX,
- GlobalSettingsProto.BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX,
- GlobalSettingsProto.BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_INPUT_DEVICE_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_MAP_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_MAP_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_MAP_CLIENT_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_PBAP_CLIENT_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_SAP_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_SAP_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_PAN_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_PAN_PRIORITIES);
- dumpRepeatedSetting(s, p,
- Settings.Global.BLUETOOTH_HEARING_AID_PRIORITY_PREFIX,
- GlobalSettingsProto.BLUETOOTH_HEARING_AID_PRIORITIES);
- dumpSetting(s, p,
- Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
- GlobalSettingsProto.ACTIVITY_MANAGER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.DEVICE_IDLE_CONSTANTS,
- GlobalSettingsProto.DEVICE_IDLE_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.BATTERY_SAVER_CONSTANTS,
- GlobalSettingsProto.BATTERY_SAVER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS,
- GlobalSettingsProto.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.BATTERY_TIP_CONSTANTS,
- GlobalSettingsProto.BATTERY_TIP_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.ANOMALY_DETECTION_CONSTANTS,
- GlobalSettingsProto.ANOMALY_DETECTION_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.ANOMALY_CONFIG_VERSION,
- GlobalSettingsProto.ANOMALY_CONFIG_VERSION);
- dumpSetting(s, p,
- Settings.Global.ANOMALY_CONFIG,
- GlobalSettingsProto.ANOMALY_CONFIG);
- dumpSetting(s, p,
- Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS,
- GlobalSettingsProto.ALWAYS_ON_DISPLAY_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.SYS_VDSO,
- GlobalSettingsProto.SYS_VDSO);
- dumpSetting(s, p,
- Settings.Global.SYS_UIDCPUPOWER,
- GlobalSettingsProto.SYS_UIDCPUPOWER);
- dumpSetting(s, p,
- Settings.Global.FPS_DEVISOR,
- GlobalSettingsProto.FPS_DIVISOR);
- dumpSetting(s, p,
- Settings.Global.DISPLAY_PANEL_LPM,
- GlobalSettingsProto.DISPLAY_PANEL_LPM);
- dumpSetting(s, p,
- Settings.Global.APP_IDLE_CONSTANTS,
- GlobalSettingsProto.APP_IDLE_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.POWER_MANAGER_CONSTANTS,
- GlobalSettingsProto.POWER_MANAGER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.ALARM_MANAGER_CONSTANTS,
- GlobalSettingsProto.ALARM_MANAGER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.JOB_SCHEDULER_CONSTANTS,
- GlobalSettingsProto.JOB_SCHEDULER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.SHORTCUT_MANAGER_CONSTANTS,
- GlobalSettingsProto.SHORTCUT_MANAGER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.DEVICE_POLICY_CONSTANTS,
- GlobalSettingsProto.DEVICE_POLICY_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
- GlobalSettingsProto.TEXT_CLASSIFIER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.BATTERY_STATS_CONSTANTS,
- GlobalSettingsProto.BATTERY_STATS_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.SYNC_MANAGER_CONSTANTS,
- GlobalSettingsProto.SYNC_MANAGER_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.APP_STANDBY_ENABLED,
- GlobalSettingsProto.APP_STANDBY_ENABLED);
- dumpSetting(s, p,
- Settings.Global.APP_AUTO_RESTRICTION_ENABLED,
- GlobalSettingsProto.APP_AUTO_RESTRICTION_ENABLED);
- dumpSetting(s, p,
- Settings.Global.FORCED_APP_STANDBY_ENABLED,
- GlobalSettingsProto.FORCED_APP_STANDBY_ENABLED);
- dumpSetting(s, p,
- Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED,
- GlobalSettingsProto.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED);
- dumpSetting(s, p,
- Settings.Global.OFF_BODY_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED,
- GlobalSettingsProto.OFF_BODY_RADIOS_OFF_FOR_SMALL_BATTERY_ENABLED);
- dumpSetting(s, p,
- Settings.Global.OFF_BODY_RADIOS_OFF_DELAY_MS,
- GlobalSettingsProto.OFF_BODY_RADIOS_OFF_DELAY_MS);
- dumpSetting(s, p,
- Settings.Global.WIFI_ON_WHEN_PROXY_DISCONNECTED,
- GlobalSettingsProto.WIFI_ON_WHEN_PROXY_DISCONNECTED);
- dumpSetting(s, p,
- Settings.Global.TIME_ONLY_MODE_CONSTANTS,
- GlobalSettingsProto.TIME_ONLY_MODE_CONSTANTS);
- dumpSetting(s, p,
- Settings.Global.NETWORK_WATCHLIST_ENABLED,
- GlobalSettingsProto.NETWORK_WATCHLIST_ENABLED);
- dumpSetting(s, p,
- Settings.Global.KEEP_PROFILE_IN_BACKGROUND,
- GlobalSettingsProto.KEEP_PROFILE_IN_BACKGROUND);
- dumpSetting(s, p,
- Settings.Global.WINDOW_ANIMATION_SCALE,
- GlobalSettingsProto.WINDOW_ANIMATION_SCALE);
- dumpSetting(s, p,
- Settings.Global.TRANSITION_ANIMATION_SCALE,
- GlobalSettingsProto.TRANSITION_ANIMATION_SCALE);
- dumpSetting(s, p,
- Settings.Global.ANIMATOR_DURATION_SCALE,
- GlobalSettingsProto.ANIMATOR_DURATION_SCALE);
- dumpSetting(s, p,
- Settings.Global.FANCY_IME_ANIMATIONS,
- GlobalSettingsProto.FANCY_IME_ANIMATIONS);
- dumpSetting(s, p,
- Settings.Global.COMPATIBILITY_MODE,
- GlobalSettingsProto.COMPATIBILITY_MODE);
- dumpSetting(s, p,
- Settings.Global.EMERGENCY_TONE,
- GlobalSettingsProto.EMERGENCY_TONE);
- dumpSetting(s, p,
- Settings.Global.CALL_AUTO_RETRY,
- GlobalSettingsProto.CALL_AUTO_RETRY);
- dumpSetting(s, p,
- Settings.Global.EMERGENCY_AFFORDANCE_NEEDED,
- GlobalSettingsProto.EMERGENCY_AFFORDANCE_NEEDED);
- dumpSetting(s, p,
- Settings.Global.PREFERRED_NETWORK_MODE,
- GlobalSettingsProto.PREFERRED_NETWORK_MODE);
- dumpSetting(s, p,
- Settings.Global.DEBUG_APP,
- GlobalSettingsProto.DEBUG_APP);
- dumpSetting(s, p,
- Settings.Global.WAIT_FOR_DEBUGGER,
- GlobalSettingsProto.WAIT_FOR_DEBUGGER);
- dumpSetting(s, p,
- Settings.Global.ENABLE_GPU_DEBUG_LAYERS,
- GlobalSettingsProto.ENABLE_GPU_DEBUG_LAYERS);
- dumpSetting(s, p,
- Settings.Global.GPU_DEBUG_APP,
- GlobalSettingsProto.GPU_DEBUG_APP);
- dumpSetting(s, p,
- Settings.Global.GPU_DEBUG_LAYERS,
- GlobalSettingsProto.GPU_DEBUG_LAYERS);
- // Settings.Global.SHOW_PROCESSES intentionally excluded since it's deprecated.
- dumpSetting(s, p,
- Settings.Global.LOW_POWER_MODE,
- GlobalSettingsProto.LOW_POWER_MODE);
- dumpSetting(s, p,
- Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
- GlobalSettingsProto.LOW_POWER_MODE_TRIGGER_LEVEL);
- dumpSetting(s, p,
- Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX,
- GlobalSettingsProto.LOW_POWER_MODE_TRIGGER_LEVEL_MAX);
- dumpSetting(s, p,
- Settings.Global.ALWAYS_FINISH_ACTIVITIES,
- GlobalSettingsProto.ALWAYS_FINISH_ACTIVITIES);
- dumpSetting(s, p,
- Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
- GlobalSettingsProto.DOCK_AUDIO_MEDIA_ENABLED);
- dumpSetting(s, p,
- Settings.Global.ENCODED_SURROUND_OUTPUT,
- GlobalSettingsProto.ENCODED_SURROUND_OUTPUT);
- dumpSetting(s, p,
- Settings.Global.AUDIO_SAFE_VOLUME_STATE,
- GlobalSettingsProto.AUDIO_SAFE_VOLUME_STATE);
- dumpSetting(s, p,
- Settings.Global.TZINFO_UPDATE_CONTENT_URL,
- GlobalSettingsProto.TZINFO_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.TZINFO_UPDATE_METADATA_URL,
- GlobalSettingsProto.TZINFO_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.SELINUX_UPDATE_CONTENT_URL,
- GlobalSettingsProto.SELINUX_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.SELINUX_UPDATE_METADATA_URL,
- GlobalSettingsProto.SELINUX_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL,
- GlobalSettingsProto.SMS_SHORT_CODES_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL,
- GlobalSettingsProto.SMS_SHORT_CODES_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.APN_DB_UPDATE_CONTENT_URL,
- GlobalSettingsProto.APN_DB_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.APN_DB_UPDATE_METADATA_URL,
- GlobalSettingsProto.APN_DB_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.CERT_PIN_UPDATE_CONTENT_URL,
- GlobalSettingsProto.CERT_PIN_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.CERT_PIN_UPDATE_METADATA_URL,
- GlobalSettingsProto.CERT_PIN_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL,
- GlobalSettingsProto.INTENT_FIREWALL_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL,
- GlobalSettingsProto.INTENT_FIREWALL_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.LANG_ID_UPDATE_CONTENT_URL,
- GlobalSettingsProto.LANG_ID_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.LANG_ID_UPDATE_METADATA_URL,
- GlobalSettingsProto.LANG_ID_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.SMART_SELECTION_UPDATE_CONTENT_URL,
- GlobalSettingsProto.SMART_SELECTION_UPDATE_CONTENT_URL);
- dumpSetting(s, p,
- Settings.Global.SMART_SELECTION_UPDATE_METADATA_URL,
- GlobalSettingsProto.SMART_SELECTION_UPDATE_METADATA_URL);
- dumpSetting(s, p,
- Settings.Global.SELINUX_STATUS,
- GlobalSettingsProto.SELINUX_STATUS);
- dumpSetting(s, p,
- Settings.Global.DEVELOPMENT_FORCE_RTL,
- GlobalSettingsProto.DEVELOPMENT_FORCE_RTL);
- dumpSetting(s, p,
- Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
- GlobalSettingsProto.LOW_BATTERY_SOUND_TIMEOUT);
- dumpSetting(s, p,
- Settings.Global.WIFI_BOUNCE_DELAY_OVERRIDE_MS,
- GlobalSettingsProto.WIFI_BOUNCE_DELAY_OVERRIDE_MS);
- dumpSetting(s, p,
- Settings.Global.POLICY_CONTROL,
- GlobalSettingsProto.POLICY_CONTROL);
- dumpSetting(s, p,
- Settings.Global.EMULATE_DISPLAY_CUTOUT,
- GlobalSettingsProto.EMULATE_DISPLAY_CUTOUT);
- dumpSetting(s, p,
- Settings.Global.ZEN_MODE,
- GlobalSettingsProto.ZEN_MODE);
- dumpSetting(s, p,
- Settings.Global.ZEN_MODE_RINGER_LEVEL,
- GlobalSettingsProto.ZEN_MODE_RINGER_LEVEL);
- dumpSetting(s, p,
- Settings.Global.ZEN_MODE_CONFIG_ETAG,
- GlobalSettingsProto.ZEN_MODE_CONFIG_ETAG);
- dumpSetting(s, p,
- Settings.Global.ZEN_DURATION,
- GlobalSettingsProto.ZEN_DURATION);
- dumpSetting(s, p,
- Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
- GlobalSettingsProto.HEADS_UP_NOTIFICATIONS_ENABLED);
- dumpSetting(s, p,
- Settings.Global.DEVICE_NAME,
- GlobalSettingsProto.DEVICE_NAME);
- dumpSetting(s, p,
- Settings.Global.NETWORK_SCORING_PROVISIONED,
- GlobalSettingsProto.NETWORK_SCORING_PROVISIONED);
- dumpSetting(s, p,
- Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT,
- GlobalSettingsProto.REQUIRE_PASSWORD_TO_DECRYPT);
- dumpSetting(s, p,
- Settings.Global.ENHANCED_4G_MODE_ENABLED,
- GlobalSettingsProto.ENHANCED_4G_MODE_ENABLED);
- dumpSetting(s, p,
Settings.Global.VT_IMS_ENABLED,
GlobalSettingsProto.VT_IMS_ENABLED);
dumpSetting(s, p,
+ Settings.Global.WAIT_FOR_DEBUGGER,
+ GlobalSettingsProto.WAIT_FOR_DEBUGGER);
+
+ final long webviewToken = p.start(GlobalSettingsProto.WEBVIEW);
+ dumpSetting(s, p,
+ Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY,
+ GlobalSettingsProto.Webview.DATA_REDUCTION_PROXY_KEY);
+ dumpSetting(s, p,
+ Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED,
+ GlobalSettingsProto.Webview.FALLBACK_LOGIC_ENABLED);
+ dumpSetting(s, p,
+ Settings.Global.WEBVIEW_PROVIDER,
+ GlobalSettingsProto.Webview.PROVIDER);
+ dumpSetting(s, p,
+ Settings.Global.WEBVIEW_MULTIPROCESS,
+ GlobalSettingsProto.Webview.MULTIPROCESS);
+ p.end(webviewToken);
+
+ final long wfcToken = p.start(GlobalSettingsProto.WFC);
+ dumpSetting(s, p,
Settings.Global.WFC_IMS_ENABLED,
- GlobalSettingsProto.WFC_IMS_ENABLED);
+ GlobalSettingsProto.Wfc.IMS_ENABLED);
dumpSetting(s, p,
Settings.Global.WFC_IMS_MODE,
- GlobalSettingsProto.WFC_IMS_MODE);
+ GlobalSettingsProto.Wfc.IMS_MODE);
dumpSetting(s, p,
Settings.Global.WFC_IMS_ROAMING_MODE,
- GlobalSettingsProto.WFC_IMS_ROAMING_MODE);
+ GlobalSettingsProto.Wfc.IMS_ROAMING_MODE);
dumpSetting(s, p,
Settings.Global.WFC_IMS_ROAMING_ENABLED,
- GlobalSettingsProto.WFC_IMS_ROAMING_ENABLED);
+ GlobalSettingsProto.Wfc.IMS_ROAMING_ENABLED);
+ p.end(wfcToken);
+
+ final long wifiToken = p.start(GlobalSettingsProto.WIFI);
dumpSetting(s, p,
- Settings.Global.LTE_SERVICE_FORCED,
- GlobalSettingsProto.LTE_SERVICE_FORCED);
+ Settings.Global.WIFI_SLEEP_POLICY,
+ GlobalSettingsProto.Wifi.SLEEP_POLICY);
dumpSetting(s, p,
- Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES,
- GlobalSettingsProto.EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
+ Settings.Global.WIFI_BADGING_THRESHOLDS,
+ GlobalSettingsProto.Wifi.BADGING_THRESHOLDS);
dumpSetting(s, p,
- Settings.Global.ENABLE_EPHEMERAL_FEATURE,
- GlobalSettingsProto.ENABLE_EPHEMERAL_FEATURE);
+ Settings.Global.WIFI_DISPLAY_ON,
+ GlobalSettingsProto.Wifi.DISPLAY_ON);
dumpSetting(s, p,
- Settings.Global.INSTANT_APP_DEXOPT_ENABLED,
- GlobalSettingsProto.INSTANT_APP_DEXOPT_ENABLED);
+ Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
+ GlobalSettingsProto.Wifi.DISPLAY_CERTIFICATION_ON);
dumpSetting(s, p,
- Settings.Global.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
- GlobalSettingsProto.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD);
+ Settings.Global.WIFI_DISPLAY_WPS_CONFIG,
+ GlobalSettingsProto.Wifi.DISPLAY_WPS_CONFIG);
dumpSetting(s, p,
- Settings.Global.INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
- GlobalSettingsProto.INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD);
+ Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+ GlobalSettingsProto.Wifi.NETWORKS_AVAILABLE_NOTIFICATION_ON);
dumpSetting(s, p,
- Settings.Global.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
- GlobalSettingsProto.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD);
+ Settings.Global.WIFI_CARRIER_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+ GlobalSettingsProto.Wifi.CARRIER_NETWORKS_AVAILABLE_NOTIFICATION_ON);
dumpSetting(s, p,
- Settings.Global.UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
- GlobalSettingsProto.UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD);
+ Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
+ GlobalSettingsProto.Wifi.NETWORKS_AVAILABLE_REPEAT_DELAY);
dumpSetting(s, p,
- Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
- GlobalSettingsProto.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD);
+ Settings.Global.WIFI_COUNTRY_CODE,
+ GlobalSettingsProto.Wifi.COUNTRY_CODE);
dumpSetting(s, p,
- Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED,
- GlobalSettingsProto.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED);
+ Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
+ GlobalSettingsProto.Wifi.FRAMEWORK_SCAN_INTERVAL_MS);
dumpSetting(s, p,
- Settings.Global.BOOT_COUNT,
- GlobalSettingsProto.BOOT_COUNT);
+ Settings.Global.WIFI_IDLE_MS,
+ GlobalSettingsProto.Wifi.IDLE_MS);
dumpSetting(s, p,
- Settings.Global.SAFE_BOOT_DISALLOWED,
- GlobalSettingsProto.SAFE_BOOT_DISALLOWED);
+ Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT,
+ GlobalSettingsProto.Wifi.NUM_OPEN_NETWORKS_KEPT);
dumpSetting(s, p,
- Settings.Global.DEVICE_DEMO_MODE,
- GlobalSettingsProto.DEVICE_DEMO_MODE);
+ Settings.Global.WIFI_ON,
+ GlobalSettingsProto.Wifi.ON);
dumpSetting(s, p,
- Settings.Global.NETWORK_ACCESS_TIMEOUT_MS,
- GlobalSettingsProto.NETWORK_ACCESS_TIMEOUT_MS);
+ Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
+ GlobalSettingsProto.Wifi.SCAN_ALWAYS_AVAILABLE);
dumpSetting(s, p,
- Settings.Global.DATABASE_DOWNGRADE_REASON,
- GlobalSettingsProto.DATABASE_DOWNGRADE_REASON);
+ Settings.Global.WIFI_WAKEUP_ENABLED,
+ GlobalSettingsProto.Wifi.WAKEUP_ENABLED);
dumpSetting(s, p,
- Settings.Global.DATABASE_CREATION_BUILDID,
- GlobalSettingsProto.DATABASE_CREATION_BUILDID);
+ Settings.Global.WIFI_SAVED_STATE,
+ GlobalSettingsProto.Wifi.SAVED_STATE);
dumpSetting(s, p,
- Settings.Global.CONTACTS_DATABASE_WAL_ENABLED,
- GlobalSettingsProto.CONTACTS_DATABASE_WAL_ENABLED);
+ Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
+ GlobalSettingsProto.Wifi.SUPPLICANT_SCAN_INTERVAL_MS);
dumpSetting(s, p,
- Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
- GlobalSettingsProto.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED);
+ Settings.Global.WIFI_ENHANCED_AUTO_JOIN,
+ GlobalSettingsProto.Wifi.ENHANCED_AUTO_JOIN);
dumpSetting(s, p,
- Settings.Global.EUICC_FACTORY_RESET_TIMEOUT_MILLIS,
- GlobalSettingsProto.EUICC_FACTORY_RESET_TIMEOUT_MILLIS);
+ Settings.Global.WIFI_NETWORK_SHOW_RSSI,
+ GlobalSettingsProto.Wifi.NETWORK_SHOW_RSSI);
dumpSetting(s, p,
- Settings.Global.STORAGE_SETTINGS_CLOBBER_THRESHOLD,
- GlobalSettingsProto.STORAGE_SETTINGS_CLOBBER_THRESHOLD);
+ Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
+ GlobalSettingsProto.Wifi.SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS);
dumpSetting(s, p,
- Settings.Global.LOCATION_GLOBAL_KILL_SWITCH,
- GlobalSettingsProto.LOCATION_GLOBAL_KILL_SWITCH);
+ Settings.Global.WIFI_WATCHDOG_ON,
+ GlobalSettingsProto.Wifi.WATCHDOG_ON);
dumpSetting(s, p,
- Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION,
- GlobalSettingsProto.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION);
+ Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED,
+ GlobalSettingsProto.Wifi.WATCHDOG_POOR_NETWORK_TEST_ENABLED);
dumpSetting(s, p,
- Global.CHAINED_BATTERY_ATTRIBUTION_ENABLED,
- GlobalSettingsProto.CHAINED_BATTERY_ATTRIBUTION_ENABLED);
+ Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED,
+ GlobalSettingsProto.Wifi.SUSPEND_OPTIMIZATIONS_ENABLED);
dumpSetting(s, p,
- Settings.Global.AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES,
- GlobalSettingsProto.AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES);
+ Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED,
+ GlobalSettingsProto.Wifi.VERBOSE_LOGGING_ENABLED);
dumpSetting(s, p,
- Global.HIDDEN_API_BLACKLIST_EXEMPTIONS,
- GlobalSettingsProto.HIDDEN_API_BLACKLIST_EXEMPTIONS);
+ Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
+ GlobalSettingsProto.Wifi.CONNECTED_MAC_RANDOMIZATION_ENABLED);
dumpSetting(s, p,
- Global.SOUND_TRIGGER_DETECTION_SERVICE_OP_TIMEOUT,
- GlobalSettingsProto.SOUND_TRIGGER_DETECTION_SERVICE_OP_TIMEOUT);
+ Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
+ GlobalSettingsProto.Wifi.MAX_DHCP_RETRY_COUNT);
dumpSetting(s, p,
- Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY,
- GlobalSettingsProto.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY);
+ Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS,
+ GlobalSettingsProto.Wifi.MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
dumpSetting(s, p,
- Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION,
- GlobalSettingsProto.MULTI_SIM_VOICE_CALL_SUBSCRIPTION);
+ Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN,
+ GlobalSettingsProto.Wifi.DEVICE_OWNER_CONFIGS_LOCKDOWN);
dumpSetting(s, p,
- Settings.Global.MULTI_SIM_VOICE_PROMPT,
- GlobalSettingsProto.MULTI_SIM_VOICE_PROMPT);
+ Settings.Global.WIFI_FREQUENCY_BAND,
+ GlobalSettingsProto.Wifi.FREQUENCY_BAND);
dumpSetting(s, p,
- Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION,
- GlobalSettingsProto.MULTI_SIM_DATA_CALL_SUBSCRIPTION);
+ Settings.Global.WIFI_P2P_DEVICE_NAME,
+ GlobalSettingsProto.Wifi.P2P_DEVICE_NAME);
dumpSetting(s, p,
- Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION,
- GlobalSettingsProto.MULTI_SIM_SMS_SUBSCRIPTION);
+ Settings.Global.WIFI_REENABLE_DELAY_MS,
+ GlobalSettingsProto.Wifi.REENABLE_DELAY_MS);
dumpSetting(s, p,
- Settings.Global.MULTI_SIM_SMS_PROMPT,
- GlobalSettingsProto.MULTI_SIM_SMS_PROMPT);
+ Settings.Global.WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS,
+ GlobalSettingsProto.Wifi.EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS);
dumpSetting(s, p,
- Settings.Global.NEW_CONTACT_AGGREGATOR,
- GlobalSettingsProto.NEW_CONTACT_AGGREGATOR);
- // Settings.Global.CONTACT_METADATA_SYNC intentionally excluded since it's deprecated.
+ Settings.Global.WIFI_ON_WHEN_PROXY_DISCONNECTED,
+ GlobalSettingsProto.Wifi.ON_WHEN_PROXY_DISCONNECTED);
dumpSetting(s, p,
- Settings.Global.CONTACT_METADATA_SYNC_ENABLED,
- GlobalSettingsProto.CONTACT_METADATA_SYNC_ENABLED);
+ Settings.Global.WIFI_BOUNCE_DELAY_OVERRIDE_MS,
+ GlobalSettingsProto.Wifi.BOUNCE_DELAY_OVERRIDE_MS);
+ p.end(wifiToken);
+
dumpSetting(s, p,
- Settings.Global.ENABLE_CELLULAR_ON_BOOT,
- GlobalSettingsProto.ENABLE_CELLULAR_ON_BOOT);
+ Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+ GlobalSettingsProto.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
dumpSetting(s, p,
- Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
- GlobalSettingsProto.MAX_NOTIFICATION_ENQUEUE_RATE);
+ Settings.Global.WINDOW_ANIMATION_SCALE,
+ GlobalSettingsProto.WINDOW_ANIMATION_SCALE);
dumpSetting(s, p,
- Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS,
- GlobalSettingsProto.SHOW_NOTIFICATION_CHANNEL_WARNINGS);
+ Settings.Global.WTF_IS_FATAL,
+ GlobalSettingsProto.WTF_IS_FATAL);
+
+ final long zenToken = p.start(GlobalSettingsProto.ZEN);
dumpSetting(s, p,
- Settings.Global.CELL_ON,
- GlobalSettingsProto.CELL_ON);
+ Settings.Global.ZEN_MODE,
+ GlobalSettingsProto.Zen.MODE);
dumpSetting(s, p,
- Settings.Global.SHOW_TEMPERATURE_WARNING,
- GlobalSettingsProto.SHOW_TEMPERATURE_WARNING);
+ Settings.Global.ZEN_MODE_RINGER_LEVEL,
+ GlobalSettingsProto.Zen.MODE_RINGER_LEVEL);
dumpSetting(s, p,
- Settings.Global.WARNING_TEMPERATURE,
- GlobalSettingsProto.WARNING_TEMPERATURE);
+ Settings.Global.ZEN_MODE_CONFIG_ETAG,
+ GlobalSettingsProto.Zen.MODE_CONFIG_ETAG);
dumpSetting(s, p,
- Settings.Global.ENABLE_DISKSTATS_LOGGING,
- GlobalSettingsProto.ENABLE_DISKSTATS_LOGGING);
+ Settings.Global.ZEN_DURATION,
+ GlobalSettingsProto.Zen.DURATION);
dumpSetting(s, p,
- Settings.Global.ENABLE_CACHE_QUOTA_CALCULATION,
- GlobalSettingsProto.ENABLE_CACHE_QUOTA_CALCULATION);
- dumpSetting(s, p,
- Settings.Global.ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE,
- GlobalSettingsProto.ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE);
- // The list of snooze options for notifications. This is encoded as a key=value list,
- // separated by commas.
- dumpSetting(s, p,
- Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
- GlobalSettingsProto.NOTIFICATION_SNOOZE_OPTIONS);
- dumpSetting(s, p,
- Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS,
- GlobalSettingsProto.SQLITE_COMPATIBILITY_WAL_FLAGS);
- dumpSetting(s, p,
- Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING,
- GlobalSettingsProto.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING);
- dumpSetting(s, p,
- Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT,
- GlobalSettingsProto.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT);
- dumpSetting(s, p,
- Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS,
- GlobalSettingsProto.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS);
+ Settings.Global.SHOW_ZEN_UPGRADE_NOTIFICATION,
+ GlobalSettingsProto.Zen.SHOW_ZEN_UPGRADE_NOTIFICATION);
+ p.end(zenToken);
+
dumpSetting(s, p,
Settings.Global.ZRAM_ENABLED,
GlobalSettingsProto.ZRAM_ENABLED);
- dumpSetting(s, p,
- Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS,
- GlobalSettingsProto.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS);
- dumpSetting(s, p,
- Settings.Global.SHOW_FIRST_CRASH_DIALOG,
- GlobalSettingsProto.SHOW_FIRST_CRASH_DIALOG);
- dumpSetting(s, p,
- Settings.Global.SHOW_RESTART_IN_CRASH_DIALOG,
- GlobalSettingsProto.SHOW_RESTART_IN_CRASH_DIALOG);
- dumpSetting(s, p,
- Settings.Global.SHOW_MUTE_IN_CRASH_DIALOG,
- GlobalSettingsProto.SHOW_MUTE_IN_CRASH_DIALOG);
- dumpSetting(s, p,
- Settings.Global.SHOW_ZEN_UPGRADE_NOTIFICATION,
- GlobalSettingsProto.SHOW_ZEN_UPGRADE_NOTIFICATION);
- dumpSetting(s, p,
- Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS,
- GlobalSettingsProto.BACKUP_AGENT_TIMEOUT_PARAMETERS);
- // Please insert new settings using the same order as in Settings.Global.
p.end(token);
+ // Please insert new settings using the same order as in GlobalSettingsProto.
+
+ // Settings.Global.INSTALL_NON_MARKET_APPS intentionally excluded since it's deprecated.
}
/** Dumps settings that use a common prefix into a repeated field. */
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 7fd0698..a6d6250 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -2750,31 +2750,39 @@
}
private void notifyForSettingsChange(int key, String name) {
- final int userId = getUserIdFromKey(key);
- Uri uri = getNotificationUriFor(key, name);
-
+ // Increment the generation first, so observers always see the new value
mGenerationRegistry.incrementGeneration(key);
- mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED,
- userId, 0, uri).sendToTarget();
-
- if (isSecureSettingsKey(key)) {
- maybeNotifyProfiles(getTypeFromKey(key), userId, uri, name,
- sSecureCloneToManagedSettings);
- maybeNotifyProfiles(SETTINGS_TYPE_SYSTEM, userId, uri, name,
- sSystemCloneFromParentOnDependency.values());
- } else if (isSystemSettingsKey(key)) {
- maybeNotifyProfiles(getTypeFromKey(key), userId, uri, name,
- sSystemCloneToManagedSettings);
+ if (isGlobalSettingsKey(key)) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ if (Global.LOCATION_GLOBAL_KILL_SWITCH.equals(name)) {
+ // When the global kill switch is updated, send the
+ // change notification for the location setting.
+ notifyLocationChangeForRunningUsers();
+ }
+ notifyGlobalSettingChangeForRunningUsers(key, name);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ } else {
+ final int userId = getUserIdFromKey(key);
+ final Uri uri = getNotificationUriFor(key, name);
+ mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED,
+ userId, 0, uri).sendToTarget();
+ if (isSecureSettingsKey(key)) {
+ maybeNotifyProfiles(getTypeFromKey(key), userId, uri, name,
+ sSecureCloneToManagedSettings);
+ maybeNotifyProfiles(SETTINGS_TYPE_SYSTEM, userId, uri, name,
+ sSystemCloneFromParentOnDependency.values());
+ } else if (isSystemSettingsKey(key)) {
+ maybeNotifyProfiles(getTypeFromKey(key), userId, uri, name,
+ sSystemCloneToManagedSettings);
+ }
}
+ // Always notify that our data changed
mHandler.obtainMessage(MyHandler.MSG_NOTIFY_DATA_CHANGED).sendToTarget();
-
- // When the global kill switch is updated, send the change notification for
- // the location setting.
- if (isGlobalSettingsKey(key) && Global.LOCATION_GLOBAL_KILL_SWITCH.equals(name)) {
- notifyLocationChangeForRunningUsers();
- }
}
private void maybeNotifyProfiles(int type, int userId, Uri uri, String name,
@@ -2783,33 +2791,46 @@
for (int profileId : mUserManager.getProfileIdsWithDisabled(userId)) {
// the notification for userId has already been sent.
if (profileId != userId) {
+ final int key = makeKey(type, profileId);
+ // Increment the generation first, so observers always see the new value
+ mGenerationRegistry.incrementGeneration(key);
mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED,
profileId, 0, uri).sendToTarget();
- final int key = makeKey(type, profileId);
- mGenerationRegistry.incrementGeneration(key);
-
- mHandler.obtainMessage(MyHandler.MSG_NOTIFY_DATA_CHANGED).sendToTarget();
}
}
}
}
+ private void notifyGlobalSettingChangeForRunningUsers(int key, String name) {
+ // Important: No need to update generation for each user as there
+ // is a singleton generation entry for the global settings which
+ // is already incremented be the caller.
+ final Uri uri = getNotificationUriFor(key, name);
+ final List<UserInfo> users = mUserManager.getUsers(/*excludeDying*/ true);
+ for (int i = 0; i < users.size(); i++) {
+ final int userId = users.get(i).id;
+ if (mUserManager.isUserRunning(UserHandle.of(userId))) {
+ mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED,
+ userId, 0, uri).sendToTarget();
+ }
+ }
+ }
+
private void notifyLocationChangeForRunningUsers() {
final List<UserInfo> users = mUserManager.getUsers(/*excludeDying=*/ true);
for (int i = 0; i < users.size(); i++) {
final int userId = users.get(i).id;
- // Do we have to increment the generation for users that are not running?
- // Yeah let's assume so...
- final int key = makeKey(SETTINGS_TYPE_SECURE, userId);
- mGenerationRegistry.incrementGeneration(key);
-
if (!mUserManager.isUserRunning(UserHandle.of(userId))) {
continue;
}
- final Uri uri = getNotificationUriFor(key, Secure.LOCATION_PROVIDERS_ALLOWED);
+ // Increment the generation first, so observers always see the new value
+ final int key = makeKey(SETTINGS_TYPE_SECURE, userId);
+ mGenerationRegistry.incrementGeneration(key);
+
+ final Uri uri = getNotificationUriFor(key, Secure.LOCATION_PROVIDERS_ALLOWED);
mHandler.obtainMessage(MyHandler.MSG_NOTIFY_URI_CHANGED,
userId, 0, uri).sendToTarget();
}
diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml
index 3f5f76f..3d4f4e2 100644
--- a/packages/SystemUI/res-keyguard/values-af/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-af/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Raak om wagwoord in te tik"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Voer wagwoord in om te ontsluit"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Tik PIN in om te ontsluit"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Voer jou PIN in"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Voer jou patroon in"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Voer jou wagwoord in"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Verkeerde PIN-kode."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ongeldige kaart."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Gelaai"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Laai"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Laai tans vinnig"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Laai tans stadig"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laai tans"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laai tans vinnig"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laai tans stadig"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Koppel jou laaier."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Druk Kieslys om te ontsluit."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Netwerk is gesluit"</string>
diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml
index 3ab93c5..e39c136 100644
--- a/packages/SystemUI/res-keyguard/values-az/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-az/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Parol daxil etmək üçün toxunun"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Kilidi açmaq üçün parol daxil edin"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Kilidi açmaq üçün PIN daxil edin"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN kodu daxil edin"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Modeli daxil edin"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Parol daxil edin"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Yanlış PIN kod."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Yanlış Kart."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Enerji yığdı"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Enerji yığır"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Sürətlə enerji yığır"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Yavaş enerji yığır"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Enerji yığır"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Sürətlə enerji yığır"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Yavaş enerji yığır"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Adapteri qoşun."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Kilidi açmaq üçün Menyu düyməsinə basın."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Şəbəkə kilidlidir"</string>
diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml
index 9b929fe..aa92e3d 100644
--- a/packages/SystemUI/res-keyguard/values-be/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-be/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Увядзіце пароль для разблакіравання"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Каб разблакіраваць, увядзіце PIN-код"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Няправільны PIN-код."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Несапраўдная картка."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Зараджаны"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml
index 3c94610..71228d9 100644
--- a/packages/SystemUI/res-keyguard/values-bg/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Докоснете и въведете парола"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Въведете парола, за да отключите"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Въведете ПИН кода, за да отключите"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Въведете ПИН кода си"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Въведете фигурата си"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Въведете паролата си"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Неправилен ПИН код."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Картата е невалидна."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Заредена"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Зарежда се"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Зарежда се бързо"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Зарежда се бавно"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарежда се"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарежда се бързо"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарежда се бавно"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Свържете зарядното си устройство."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Натиснете „Меню“, за да отключите."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Мрежата е заключена"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml
index 215928d..17e52d3 100644
--- a/packages/SystemUI/res-keyguard/values-bn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"পাসওয়ার্ড লিখতে স্পর্শ করুন"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"আনলক করতে পাসওয়ার্ড লিখুন"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"আনলক করতে পিন লিখুন"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ভুল পিন কোড দেওয়া হয়েছে।"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ভুল কার্ড।"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"চার্জ হয়েছে"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"চার্জ হচ্ছে"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"দ্রুত চার্জ হচ্ছে"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"ধীরে ধীরে চার্জ হচ্ছে"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • চার্জ হচ্ছে"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • দ্রুত চার্জ হচ্ছে"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ধীরে চার্জ হচ্ছে"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"আপনার চার্জার সংযুক্ত করুন।"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"আনলক করতে মেনুতে টিপুন।"</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"নেটওয়ার্ক লক করা আছে"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index d778c9f..c9574f2 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Dodirnite da upišete lozinku"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Upišite lozinku za otključavanje"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Upišite PIN za otključavanje"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Pogrešan PIN."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Nevažeća kartica."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Napunjeno"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml
index 0c53b55..a299e10 100644
--- a/packages/SystemUI/res-keyguard/values-ca/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toca per escriure la contrasenya"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Escriu la contrasenya per desbloquejar"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Escriu el PIN per desbloquejar"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Introdueix el PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Introdueix el patró"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Introdueix la contrasenya"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"El codi PIN no és correcte."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"La targeta no és vàlida."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Bateria carregada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index 9287629..7677aef 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Tryk for at angive adgangskode"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Indtast adgangskoden for at låse op"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Indtast pinkoden for at låse op"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Forkert pinkode."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ugyldigt kort."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Opladet"</string>
diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml
index 6451ca8..f269421 100644
--- a/packages/SystemUI/res-keyguard/values-de/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-de/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Zur Passworteingabe berühren"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Bitte gib das Passwort zum Entsperren ein"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Bitte gib die PIN zum Entsperren ein"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Falscher PIN-Code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ungültige Karte."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Aufgeladen"</string>
diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml
index 4c3390b..d38bcb6 100644
--- a/packages/SystemUI/res-keyguard/values-el/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-el/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Αγγίξτε για εισαγ. κωδ. πρόσβ."</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Πληκτρολογήστε τον κωδικό πρόσβασης για ξεκλείδωμα"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Πληκτρολογήστε τον αριθμό PIN για ξεκλείδωμα"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Εισαγάγετε τον αριθμό PIN σας"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Εισαγάγετε το μοτίβο σας"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Εισαγάγετε τον κωδικό πρόσβ."</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Λανθασμένος κωδικός PIN."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Μη έγκυρη κάρτα."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Φορτίστηκε"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Φόρτιση σε εξέλιξη"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Ταχεία φόρτιση"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Αργή φόρτιση"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Φόρτιση"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Γρήγορη φόρτιση"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Αργή φόρτιση"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Συνδέστε τον φορτιστή."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Πατήστε \"Μενού\" για ξεκλείδωμα."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Κλειδωμένο δίκτυο"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
index 30c0fdd..f09bb9e 100644
--- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Touch to type password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Enter your PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Enter your pattern"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Enter your password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
index fc7e134..6f3644c 100644
--- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Touch to type password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Enter your PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Enter your pattern"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Enter your password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
index 30c0fdd..f09bb9e 100644
--- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Touch to type password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Enter your PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Enter your pattern"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Enter your password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
index 30c0fdd..f09bb9e 100644
--- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Touch to type password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Enter your PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Enter your pattern"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Enter your password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid card."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
index 682b2b8..492df0d 100644
--- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482">""<font size="17">"Touch to type password"</font>""</string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Enter your PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Enter your Pattern"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Enter your Password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Invalid Card."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
index a145d5c..28415ff 100644
--- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toca para ingresar contraseña"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Ingresa la contraseña para desbloquearlo"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Ingresa el PIN para desbloquearlo"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorrecto"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Tarjeta no válida"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Cargada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml
index 780d8d4..b1c99da 100644
--- a/packages/SystemUI/res-keyguard/values-es/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toca para escribir contraseña"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Escribe la contraseña para desbloquear"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Escribe el código PIN para desbloquear"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Introduce tu PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Introduce tu patrón"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Introduce tu contraseña"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"El código PIN es incorrecto."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Tarjeta no válida."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Cargada"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Cargando"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Cargando rápidamente"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Cargando lentamente"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando rápidamente"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando lentamente"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Conecta el cargador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Pulsa el menú para desbloquear la pantalla."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Bloqueada para la red"</string>
diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml
index eaf1400..1868523 100644
--- a/packages/SystemUI/res-keyguard/values-et/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-et/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Puudut. parooli sisestamiseks"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Avamiseks sisestage parool"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Avamiseks sisestage PIN-kood"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Sisestage PIN-kood"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Sisestage muster"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Sisestage parool"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Vale PIN-kood."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Kehtetu kaart."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Laetud"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Laadimine"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Kiiresti laadimine"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Aeglaselt laadimine"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laadimine"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Kiirlaadimine"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Aeglane laadimine"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Ühendage laadija."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Vajutage avamiseks menüüklahvi."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Võrk on lukus"</string>
diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml
index 9cf81e2..372bac2 100644
--- a/packages/SystemUI/res-keyguard/values-eu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Pasahitza idazteko, sakatu hau"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Idatzi desblokeatzeko pasahitza"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Idatzi desblokeatzeko PIN kodea"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Idatzi PIN kodea"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Marraztu eredua"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Idatzi pasahitza"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN kode hori ez da zuzena."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Txartelak ez du balio."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Kargatuta"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml
index 9ebea4d..3d1eca9 100644
--- a/packages/SystemUI/res-keyguard/values-fi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Kosketa ja anna salasana"</font>"."</string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Poista lukitus antamalla salasana."</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Poista lukitus antamalla PIN-koodi."</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Syötä PIN-koodi"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Piirrä kuvio"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Kirjoita salasana"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Väärä PIN-koodi"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Virheellinen kortti"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Ladattu"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml
index 5e967b2..d76fdd5 100644
--- a/packages/SystemUI/res-keyguard/values-fr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Appuyez pour saisir mot passe"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Saisissez le mot de passe pour déverrouiller le clavier"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Saisissez le code pour déverrouiller le clavier"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Le code est incorrect."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Carte non valide."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Chargé"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml
index 720b79e..d4fc36a 100644
--- a/packages/SystemUI/res-keyguard/values-gl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toca e escribe o contrasinal"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Escribe o contrasinal para desbloquear"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Escribe o PIN para desbloquear"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Introduce o teu PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Introduce o teu padrón"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Introduce o teu contrasinal"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorrecto"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"A tarxeta non é válida."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Cargada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml
index d7faa2a..331a8ba 100644
--- a/packages/SystemUI/res-keyguard/values-gu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"પાસવર્ડ લખવા માટે સ્પર્શ કરો"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"અનલૉક કરવા માટે પાસવર્ડ લખો"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"અનલૉક કરવા માટે પિન લખો"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ખોટો પિન કોડ."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"અમાન્ય કાર્ડ."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ચાર્જ થઈ ગયું"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"ચાર્જ થઈ રહ્યું છે"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ઝડપથી ચાર્જ થઈ રહ્યું છે"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"ધીમેથી ચાર્જ થઈ રહ્યું છે"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ચાર્જિંગ"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ઝડપથી ચાર્જિંગ"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ધીમેથી ચાર્જિંગ"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"તમારું ચાર્જર કનેક્ટ કરો."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"અનલૉક કરવા માટે મેનૂ દબાવો."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"નેટવર્ક લૉક થયું"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index 746e883..a64eb17 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"पासवर्ड लिखने के लिए छुएं"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"अनलॉक करने के लिए पासवर्ड लिखें"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"अनलॉक करने के लिए पिन लिखें"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"गलत पिन कोड."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"गलत कार्ड."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"चार्ज हो गई है"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"चार्ज हो रही है"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"तेज़ी से चार्ज हो रही है"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"धीरे चार्ज हो रही है"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • चार्ज हो रहा है"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • तेज़ चार्ज हो रहा है"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • धीरे चार्ज हो रहा है"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"अपना चार्जर कनेक्ट करें."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"लॉक खोलने के लिए मेन्यू दबाएं."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"नेटवर्क लॉक किया हुआ है"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml
index f4dca4c..77cd1b5 100644
--- a/packages/SystemUI/res-keyguard/values-hr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Dodirnite za unos zaporke"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Unesite zaporku da biste otključali"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Unesite PIN da biste otključali"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN kôd nije točan."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Nevažeća kartica."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Napunjeno"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Punjenje"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Brzo punjenje"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Sporo punjenje"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • punjenje"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • brzo punjenje"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • sporo punjenje"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Priključite punjač."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Pritisnite Izbornik da biste otključali."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Mreža je zaključana"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml
index 4aa44cc..b844f19 100644
--- a/packages/SystemUI/res-keyguard/values-hu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Érintse meg jelszó megadásához"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"A feloldáshoz írja be a jelszót"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"A feloldáshoz írja be a PIN-kódot"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Adja meg PIN-kódját"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Adja meg mintáját"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Adja meg jelszavát"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Helytelen PIN-kód."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Érvénytelen kártya."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Feltöltve"</string>
diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml
index ed80442..02c1fa6 100644
--- a/packages/SystemUI/res-keyguard/values-in/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-in/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Sentuh untuk mengetik sandi"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Ketik sandi untuk membuka kunci"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Ketik PIN untuk membuka kunci"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Masukkan PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Masukkan Pola"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Masukkan Sandi"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Kode PIN salah."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Kartu Tidak Valid"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Terisi"</string>
diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml
index 96bcb10..9efef84 100644
--- a/packages/SystemUI/res-keyguard/values-it/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-it/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Tocca per inserire la password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Inserisci password per sbloccare"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Inserisci PIN per sbloccare"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Inserisci il PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Inserisci la sequenza"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Inserisci la password"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Codice PIN errato."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Scheda non valida."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Carico"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"In carica"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Ricarica veloce"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Ricarica lenta"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • In carica"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ricarica veloce"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ricarica lenta"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Collega il caricabatterie."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Premi Menu per sbloccare."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Rete bloccata"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml
index 0442849..5f0d6b2 100644
--- a/packages/SystemUI/res-keyguard/values-ja/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"タップしてパスワードを入力"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ロックを解除するにはパスワードを入力してください"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ロックを解除するには PIN を入力してください"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN を入力してください"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"パターンを入力してください"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"パスワードを入力してください"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN コードが無効です。"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"無効なカードです。"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"充電が完了しました"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"充電しています"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"急速充電しています"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"低速充電しています"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 充電中"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 急速充電中"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 低速充電中"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"充電してください。"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"メニューからロックを解除できます。"</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"ネットワークがロックされました"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml
index fc9b666..625a0a1 100644
--- a/packages/SystemUI/res-keyguard/values-ka/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"შეეხეთ პაროლის ასაკრეფად"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"განსაბლოკად აკრიფეთ პაროლი"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"განსაბლოკად აკრიფეთ PIN-კოდი"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"შეიყვანეთ PIN-კოდი"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"შეიყვანეთ განმბლოკავი ნიმუში"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"შეიყვანეთ პაროლი"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN-კოდი არასწორია."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ბარათი არასწორია."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"დატენილია"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml
index d6b5b34..ed3790a 100644
--- a/packages/SystemUI/res-keyguard/values-kk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Құпия сөзді енгізу үшін түртіңіз"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Құлпын ашу үшін құпия сөзді теріңіз"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Құлпын ашу үшін PIN кодын енгізіңіз"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN кодын енгізіңіз"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Өрнекті енгізіңіз"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Құпия сөзді енгізіңіз"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN коды қате"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Жарамсыз карта."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Зарядталды"</string>
diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml
index c446fac..baf4022 100644
--- a/packages/SystemUI/res-keyguard/values-km/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-km/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ចុចដើម្បីបញ្ចូលពាក្យសម្ងាត់"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"វាយបញ្ចូលពាក្យសម្ងាត់ ដើម្បីដោះសោ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"វាយបញ្ចូលកូដ PIN ដើម្បីដោះសោ"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"បញ្ចូលកូដ PIN របស់អ្នក"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"បញ្ចូលលំនាំរបស់អ្នក"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"បញ្ចូលពាក្យសម្ងាត់របស់អ្នក"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"កូដ PIN មិនត្រឹមត្រូវទេ។"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"បណ្ណមិនត្រឹមត្រូវទេ។"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"បានសាកថ្ម"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml
index 6a62a02..d00f4a6 100644
--- a/packages/SystemUI/res-keyguard/values-kn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಿ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಿನ್ ಟೈಪ್ ಮಾಡಿ"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ತಪ್ಪಾದ ಪಿನ್ ಕೋಡ್."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ಅಮಾನ್ಯ ಕಾರ್ಡ್."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml
index e40d500..27f2241 100644
--- a/packages/SystemUI/res-keyguard/values-ko/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"터치하여 비밀번호 입력"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"잠금 해제하려면 비밀번호 입력"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"잠금 해제하려면 PIN 입력"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN을 입력해 주세요."</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"패턴을 입력해 주세요."</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"비밀번호를 입력해 주세요."</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"잘못된 PIN 코드입니다."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"유효하지 않은 카드"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"충전됨"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml
index 04c71bf..daa8699 100644
--- a/packages/SystemUI/res-keyguard/values-ky/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Сырсөздү терүү үчүн тийип коюңуз"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Кулпуну ачуу үчүн сырсөздү териңиз"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Кулпуну ачуу үчүн PIN-кодду териңиз"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN кодуңузду киргизиңиз"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Графикалык ачкычты киргизиңиз"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Сырсөзүңүздү киргизиңиз"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN-код туура эмес."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"SIM-карта жараксыз."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Кубатталды"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml
index 97a5dcf..79a08d3 100644
--- a/packages/SystemUI/res-keyguard/values-lo/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ແຕະເພື່ອພິມລະຫັດຜ່ານ"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ພິມລະຫັດເພື່ອປົດລັອກ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ພິມລະຫັດ PIN ເພື່ອປົດລັອກ"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"ໃສ່ລະຫັດ PIN ຂອງທ່ານ"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"ໃສ່ຮູບແບບປົດລັອກຂອງທ່ານ"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"ໃສ່ລະຫັດຜ່ານຂອງທ່ານ"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ລະຫັດ PIN ບໍ່ຖືກຕ້ອງ."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ບັດບໍ່ຖືກຕ້ອງ."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ສາກເຕັມແລ້ວ."</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"ກຳລັງສາກໄຟ"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ກຳລັງສາກດ່ວນ"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"ກຳລັງສາກຊ້າໆ"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກ"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກແບບດ່ວນ"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກແບບຊ້າ"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"ເຊື່ອມຕໍ່ສາຍສາກຂອງທ່ານ."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"ກົດ \"ເມນູ\" ເພື່ອປົດລັອກ."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"ເຄືອຂ່າຍຖືກລັອກ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml
index 045e9b0..4d235cd 100644
--- a/packages/SystemUI/res-keyguard/values-mk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Допрете за да напишете лозинка"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Напишете ја лозинката за да отклучите"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Напишете PIN-код за да отклучите"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Внесете го PIN-кодот"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Внесете ја шемата"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Внесете ја лозинката"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Погрешен PIN-код."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Неважечка картичка."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Полна"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml
index 5cc635c0..214bc1d 100644
--- a/packages/SystemUI/res-keyguard/values-ml/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"പാസ്വേഡ് ടൈപ്പുചെയ്യുന്നതിന് സ്പർശിക്കുക"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"അൺലോക്കുചെയ്യുന്നതിന് പാസ്വേഡ് ടൈപ്പുചെയ്യുക"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"അൺലോക്കുചെയ്യുന്നതിന് പിൻ ടൈപ്പുചെയ്യുക"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"പിൻ കോഡ് തെറ്റാണ്."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"അസാധുവായ കാർഡ്."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ചാർജായി"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"ചാർജ്ജുചെയ്യുന്നു"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"വേഗത്തിൽ ചാർജുചെയ്യുന്നു"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"പതുക്കെ ചാർജുചെയ്യുന്നു"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ചാർജ് ചെയ്യുന്നു"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • വേഗത്തിൽ ചാർജ് ചെയ്യുന്നു"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • പതുക്കെ ചാർജ് ചെയ്യുന്നു"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"നിങ്ങളുടെ ചാർജർ കണക്റ്റുചെയ്യുക."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"അൺലോക്കുചെയ്യാൻ മെനു അമർത്തുക."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"നെറ്റ്വർക്ക് ലോക്കുചെയ്തു"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml
index 50bec07..98d6e49 100644
--- a/packages/SystemUI/res-keyguard/values-mn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Нууц үг оруулах бол хүрнэ үү"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Түгжээг тайлахын тулд нууц үгийг оруулна уу"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Түгжээг тайлахын тулд ПИН кодыг оруулна уу"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"ПИН-ээ оруулна уу"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Загвараа оруулна уу"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Нууц үгээ оруулна уу"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ПИН код буруу байна."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Карт хүчингүй байна."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Цэнэглэсэн"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml
index 90fa34e..044e5de 100644
--- a/packages/SystemUI/res-keyguard/values-mr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"पासवर्ड टाइप करण्यासाठी स्पर्श करा"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"अनलॉक करण्यासाठी पासवर्ड टाइप करा"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"अनलॉक करण्यासाठी पिन टाइप करा"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"चुकीचा पिन कोड."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"अवैध कार्ड."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"चार्ज झाली"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml
index 6055ef5..a538e40 100644
--- a/packages/SystemUI/res-keyguard/values-ms/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Sentuh untuk menaip kata laluan"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Taip kata laluan untuk membuka kunci"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Taip PIN untuk membuka kunci"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Masukkan PIN anda"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Masukkan Corak anda"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Masukkan Kata Laluan anda"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Kod PIN salah."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Kad Tidak Sah."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Sudah dicas"</string>
diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml
index baf9ff7..75b025d 100644
--- a/packages/SystemUI/res-keyguard/values-my/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-my/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"စကားဝှက် ရိုက်ရန် ထိပါ"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"လော့ခ်ဖွင့်ရန် စကားဝှက်ကို ထည့်ပါ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"လော့ခ်ဖွင့်ရန် ပင်နံပါတ်ထည့်ပါ"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"သင့်ပင်နံပါတ် ထည့်ပါ"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"သင့်လော့ခ်ဖွင့်ပုံစံ ထည့်ပါ"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"သင့်စကားဝှက် ထည့်ပါ"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ပင်နံပါတ် မှားနေသည်။"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ကဒ် မမှန်ကန်ပါ။"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"အားသွင်းပြီးပါပြီ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml
index 305266a..4ffb778 100644
--- a/packages/SystemUI/res-keyguard/values-nb/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Trykk for å skrive inn passord"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Skriv inn passordet for å låse opp"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Skriv inn PIN-koden for å låse opp"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Skriv inn PIN-koden din"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Skriv inn mønsteret ditt"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Skriv inn passordet ditt"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Feil PIN-kode."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ugyldig kort."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Oppladet"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index 8079d70..70dfb88 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"पासवर्ड टाइप गर्न छुनुहोस्"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"अनलक गर्न पासवर्ड टाइप गर्नुहोस्"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"अनलक गर्न PIN कोड टाइप गर्नुहोस्"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN कोड गलत छ।"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"अमान्य कार्ड।"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"चार्ज भयो"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"चार्ज हुँदै"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"छिटो चार्ज हुँदै"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"बिस्तारै चार्ज हुँदै"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • चार्ज गरिँदै"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • द्रुत गतिमा चार्ज गरिँदै"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • मन्द गतिमा चार्ज गरिँदै"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"तपाईंको चार्जर जोड्नुहोस्।"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"अनलक गर्न मेनु थिच्नुहोस्।"</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"नेटवर्क लक भएको छ"</string>
@@ -76,7 +82,7 @@
<string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"रूचाइएको PIN कोड पुष्टि गर्नुहोस्"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"SIM कार्ड अनलक गरिँदै..."</string>
<string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"४ देखि ८ वटा नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK कोड ८ वा सो भन्दा बढी नम्बरको हुनुपर्छ।"</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK कोड ८ वा सो भन्दा बढी नम्बरको हुनु पर्छ।"</string>
<string name="kg_invalid_puk" msgid="5399287873762592502">"PUK कोड पुन: प्रविष्ट गर्नुहोस्। पटक-पटकको प्रयासले SIM सदाका लागि असक्षम हुनेछ।"</string>
<string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"PIN कोडहरू मिलेनन्"</string>
<string name="kg_login_too_many_attempts" msgid="6604574268387867255">"अत्यन्त धेरै ढाँचा कोर्ने प्रयासहरू"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index de4d509..19b715c 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Tik om wachtwoord te typen"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Typ het wachtwoord om te ontgrendelen"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Typ pincode om te ontgrendelen"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Geef je pincode op"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Geef je patroon op"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Geef je wachtwoord op"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Onjuiste pincode."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ongeldige kaart."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Opgeladen"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 4728211..e09b584 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ਪਾਸਵਰਡ ਟਾਈਪ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ਗਲਤ ਪਿੰਨ ਕੋਡ।"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"ਅਵੈਧ ਕਾਰਡ।"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ਚਾਰਜ ਹੋ ਗਿਆ"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"ਆਪਣਾ ਚਾਰਜਰ ਕਨੈਕਟ ਕਰੋ।"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"ਅਣਲਾਕ ਕਰਨ ਲਈ \"ਮੀਨੂ\" ਦਬਾਓ।"</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"ਨੈੱਟਵਰਕ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml
index 194daec..d60ff97 100644
--- a/packages/SystemUI/res-keyguard/values-pl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Dotknij, by wpisać hasło"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Wpisz hasło, aby odblokować"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Wpisz kod PIN, aby odblokować"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Nieprawidłowy kod PIN."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Nieprawidłowa karta."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Naładowana"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
index 1f8254a..7d19b14 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toque para inserir a senha"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Digite a senha para desbloquear"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Insira o PIN para desbloquear"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorreto."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Carregada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
index 3369d45..b6c6724 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toque p/ introd. palavra-passe"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Introduza a palavra-passe para desbloquear"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Introduza o PIN para desbloquear"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Introduza o PIN."</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Introduza o padrão."</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Introduza a palavra-passe."</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorreto."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Carregada"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"A carregar…"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"A carregar rapidamente…"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"A carregar lentamente…"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • A carregar…"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • A carregar rapidamente…"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • A carregar lentamente…"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Ligue o carregador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Prima Menu para desbloquear."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Rede bloqueada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml
index 5c02d4f..7d19b14 100644
--- a/packages/SystemUI/res-keyguard/values-pt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Toque para inserir a senha"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Digite a senha para desbloquear"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Insira o PIN para desbloquear"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Código PIN incorreto."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Carregada"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Carregando"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Carregando rapidamente"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Carregando lentamente"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Carregando"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Carregando rapidamente"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Carregando lentamente"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Conecte o seu carregador."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Pressione Menu para desbloquear."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Rede bloqueada"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml
index f449701..bdc60ab 100644
--- a/packages/SystemUI/res-keyguard/values-ro/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Atingeți și introduceți parola"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Introduceți parola pentru a debloca"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Introduceți codul PIN pentru a debloca"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Introduceți codul PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Introduceți modelul"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Introduceți parola"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Cod PIN incorect."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Card nevalid"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Încărcată"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Se încarcă"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Se încarcă rapid"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Se încarcă lent"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă rapid"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă lent"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Conectați încărcătorul."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Apăsați pe Meniu pentru a debloca."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Rețea blocată"</string>
diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml
index 5173000..8f45c3b 100644
--- a/packages/SystemUI/res-keyguard/values-si/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-si/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"මුරපදය ටයිප් කිරීමට ස්පර්ශ කරන්න"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"අගුළු ඇරීමට මුරපදය ටයිප් කරන්න"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"අගුළු හැරීමට PIN එක ටයිප් කරන්න"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"ඔබේ PIN ඇතුළු කරන්න"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"ඔබගේ රටාව ඇතුළු කරන්න"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"ඔබගේ මුරපදය ඇතුළු කරන්න"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"වැරදි PIN කේතයකි."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"වලංගු නොවන කාඩ්පත."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"අරෝපිතයි"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml
index bb74cd3..5f86e71 100644
--- a/packages/SystemUI/res-keyguard/values-sk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Heslo zadajte po klepnutí"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Zadajte heslo na odomknutie"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Zadajte kód PIN na odomknutie"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Zadajte PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Zadajte vzor"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Zadajte heslo"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Nesprávny kód PIN."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Neplatná karta."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Nabité"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Nabíja sa"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Rýchle nabíjanie"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Pomalé nabíjanie"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Nabíja sa"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Nabíja sa rýchlo"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Nabíja sa pomaly"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Pripojte nabíjačku."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Odomknete stlačením tlačidla ponuky."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Sieť je zablokovaná"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml
index 4fbb950..936d702 100644
--- a/packages/SystemUI/res-keyguard/values-sl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Dotaknite se za vnos gesla"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Vnesite geslo za odklepanje"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Vnesite kodo PIN za odklepanje"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Vnesite kodo PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Vnesite vzorec"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Vnesite geslo"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Napačna koda PIN."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Neveljavna kartica"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Akumulator napolnjen"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml
index 04088ad..049b08b 100644
--- a/packages/SystemUI/res-keyguard/values-sq/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Prek për të shkruar fjalëkalimin"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Shkruaj fjalëkalimin për të shkyçur"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Shkruaj kodin PIN për ta shkyçur"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Fut kodin PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Fut motivin"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Fut fjalëkalimin"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Kodi PIN është i pasaktë."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Karta e pavlefshme."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"I ngarkuar"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml
index 81f1dd5..2456644 100644
--- a/packages/SystemUI/res-keyguard/values-sv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Tryck om du vill ange lösenord"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Lås upp med lösenordet"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Lås upp med pinkoden"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Ange pinkoden"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Ange det grafiska lösenordet"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Ange lösenordet"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Fel pinkod."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ogiltigt kort."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Laddat"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml
index 9ae510e..057da47 100644
--- a/packages/SystemUI/res-keyguard/values-sw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Gusa ili uandike nenosiri"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Andika nenosiri ili ufungue"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Andika PIN ili ufungue"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Weka PIN yako"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Weka Mchoro wako"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Weka Nenosiri lako"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Nambari ya PIN si sahihi."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Kadi si Sahihi."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Betri imejaa"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml
index 5ba5692..0bbc470 100644
--- a/packages/SystemUI/res-keyguard/values-ta/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"கடவுச்சொல்லை உள்ளிட, தொடவும்"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"திறக்க, கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"திறக்க, பின்னை உள்ளிடவும்"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"தவறான பின் குறியீடு."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"செல்லாத சிம் கார்டு."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"சார்ஜ் செய்யப்பட்டது"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"சார்ஜ் ஆகிறது"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"வேகமாகச் சார்ஜாகிறது"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"மெதுவாகச் சார்ஜாகிறது"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • சார்ஜாகிறது"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • வேகமாகச் சார்ஜாகிறது"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • மெதுவாகச் சார்ஜாகிறது"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"சார்ஜரை இணைக்கவும்."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"திறக்க, மெனுவை அழுத்தவும்."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"நெட்வொர்க் பூட்டப்பட்டது"</string>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 4aa9dfa..b024c3e 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -28,6 +28,12 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"పాస్వర్డ్ను టైప్ చేయడానికి తాకండి"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"అన్లాక్ చేయడానికి పాస్వర్డ్ను టైప్ చేయండి"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"అన్లాక్ చేయడానికి పిన్ టైప్ చేయండి"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"పిన్ కోడ్ తప్పు."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"చెల్లని కార్డ్."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ఛార్జ్ చేయబడింది"</string>
diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml
index c8b6281..f42d40a 100644
--- a/packages/SystemUI/res-keyguard/values-th/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-th/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"แตะเพื่อพิมพ์รหัสผ่าน"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"พิมพ์รหัสผ่านเพื่อปลดล็อก"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"พิมพ์ PIN เพื่อปลดล็อก"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"ป้อน PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"ป้อนรูปแบบ"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"ป้อนรหัสผ่าน"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"รหัส PIN ไม่ถูกต้อง"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"การ์ดไม่ถูกต้อง"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"ชาร์จแล้ว"</string>
diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml
index ec80d34..5d13405 100644
--- a/packages/SystemUI/res-keyguard/values-tr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Şifre yazmak için dokunun"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Kilidi açmak için şifreyi yazın"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Kilidi açmak için PIN kodunu yazın"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN kodunuzu girin"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Deseninizi girin"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Şifrenizi girin"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Yanlış PIN kodu."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Geçersiz Kart."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Ödeme alındı"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml
index 277b103..827f78e 100644
--- a/packages/SystemUI/res-keyguard/values-uk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Торкніться, щоб ввести пароль"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Введіть пароль, щоб розблокувати"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Введіть PIN-код, щоб розблокувати"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Неправильний PIN-код."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Недійсна картка."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Заряджено"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Заряджається"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Швидке заряджання"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Повільне заряджання"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Заряджання"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Швидке заряджання"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Повільне заряджання"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Підключіть зарядний пристрій."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Натисніть меню, щоб розблокувати."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Мережу заблоковано"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml
index 877e566..1fcce81 100644
--- a/packages/SystemUI/res-keyguard/values-ur/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"پاسورڈ ٹائپ کرنے کیلئے ٹچ کریں"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"غیر مقفل کرنے کیلئے پاس ورڈ ٹائپ کریں"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"غیر مقفل کرنے کیلئے PIN ٹائپ کریں"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"غلط PIN کوڈ۔"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"غلط کارڈ۔"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"چارج ہوگئی"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"چارج ہو رہا ہے"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"تیزی سے چارج ہو رہا ہے"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"آہستہ چارج ہو رہا ہے"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • چارج ہو رہا ہے"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • تیزی سے چارج ہو رہا ہے"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • آہستہ چارج ہو رہا ہے"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"اپنا چارجر منسلک کریں۔"</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"غیر مقفل کرنے کیلئے مینو دبائیں۔"</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"نیٹ ورک مقفل ہو گیا"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml
index 07198c7c..4514eb1 100644
--- a/packages/SystemUI/res-keyguard/values-uz/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml
@@ -28,12 +28,15 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Parolni kiritish uchun bosing"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Qulfni ochish uchun parolni kiriting"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Qulfni ochish uchun PIN kodni kiriting"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"PIN kodni kiriting"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Grafik kalitni kiriting"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Parolni kiriting"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN kodi xato."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"SIM karta yaroqsiz."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Batareya quvvati to‘ldi"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Quvvatlash"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Tezkor quvvat olmoqda"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Sekin quvvat olmoqda"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Quvvat olmoqda"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Tezkor quvvat olmoqda"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Sekin quvvat olmoqda"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Quvvatlash moslamasini ulang."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Qulfdan chiqarish uchun Menyu tugmasini bosing."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Tarmoq qulflangan"</string>
diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml
index d9f3506..8fe0429 100644
--- a/packages/SystemUI/res-keyguard/values-vi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Chạm để nhập mật khẩu"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Nhập mật khẩu để mở khóa"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Nhập mã PIN để mở khóa"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"Nhập mã PIN của bạn"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"Nhập hình mở khóa của bạn"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"Nhập mật khẩu của bạn"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Mã PIN không chính xác."</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Thẻ không hợp lệ."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Đã sạc đầy"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
index 12bc052..6f7387e7 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"輕觸即可輸入密碼"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"輸入密碼即可解鎖"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"輸入 PIN 碼即可解鎖"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"請輸入 PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"請輸入圖案"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"請輸入密碼"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN 碼不正確。"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"SIM 卡無效。"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"已完成充電"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
index c23a75a..ec2f1f2 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
@@ -28,6 +28,9 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"輕觸即可輸入密碼"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"輸入密碼即可解鎖"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"輸入 PIN 碼即可解鎖"</string>
+ <string name="keyguard_enter_your_pin" msgid="7152989016739952871">"輸入 PIN 碼"</string>
+ <string name="keyguard_enter_your_pattern" msgid="3915717164691787047">"輸入解鎖圖案"</string>
+ <string name="keyguard_enter_your_password" msgid="5761514484663983731">"輸入密碼"</string>
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"PIN 碼不正確。"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"卡片無效。"</string>
<string name="keyguard_charged" msgid="2222329688813033109">"充電完成"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml
index 2415bf3..b959933 100644
--- a/packages/SystemUI/res-keyguard/values-zu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml
@@ -28,12 +28,18 @@
<string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Thinta ukuze uthayiphe iphasiwedi"</font></string>
<string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Bhala iphasiwedi ukuze kuvuleke"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Faka i-PIN ukuvula"</string>
+ <!-- no translation found for keyguard_enter_your_pin (7152989016739952871) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_pattern (3915717164691787047) -->
+ <skip />
+ <!-- no translation found for keyguard_enter_your_password (5761514484663983731) -->
+ <skip />
<string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Ikhodi ye-PIN engalungile!"</string>
<string name="keyguard_sim_error_message_short" msgid="592109500618448312">"Ikhadi elingavumelekile."</string>
<string name="keyguard_charged" msgid="2222329688813033109">"Kushajiwe"</string>
- <string name="keyguard_plugged_in" msgid="89308975354638682">"Iyashaja"</string>
- <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Ishaja ngokushesha"</string>
- <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Ishaja kancane"</string>
+ <string name="keyguard_plugged_in" msgid="3161102098900158923">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Iyashaja"</string>
+ <string name="keyguard_plugged_in_charging_fast" msgid="3684592786276709342">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ishaja kaningi"</string>
+ <string name="keyguard_plugged_in_charging_slowly" msgid="509533586841478405">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ishaja kancane"</string>
<string name="keyguard_low_battery" msgid="9218432555787624490">"Xhuma ishaja yakho."</string>
<string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Chofoza Menyu ukuvula."</string>
<string name="keyguard_network_locked_message" msgid="6743537524631420759">"Inethiwekhi ivaliwe"</string>
diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml
index ea1ad2d1..ef18725 100644
--- a/packages/SystemUI/res/layout/qs_footer_impl.xml
+++ b/packages/SystemUI/res/layout/qs_footer_impl.xml
@@ -22,6 +22,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/qs_footer_height"
android:elevation="4dp"
+ android:background="@android:color/transparent"
android:baselineAligned="false"
android:clickable="false"
android:clipChildren="false"
diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml
index 1c9ce18..72ff653 100644
--- a/packages/SystemUI/res/layout/qs_panel.xml
+++ b/packages/SystemUI/res/layout/qs_panel.xml
@@ -56,9 +56,9 @@
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/qs_footer_height"
android:elevation="4dp"
+ android:background="@android:color/transparent"
/>
-
<include layout="@layout/quick_status_bar_expanded_header" />
<include layout="@layout/qs_footer_impl" />
diff --git a/packages/SystemUI/res/layout/qs_tile_label.xml b/packages/SystemUI/res/layout/qs_tile_label.xml
index b138df0..74c22b0 100644
--- a/packages/SystemUI/res/layout/qs_tile_label.xml
+++ b/packages/SystemUI/res/layout/qs_tile_label.xml
@@ -44,7 +44,7 @@
android:maxLines="2"
android:padding="0dp"
android:gravity="center"
- android:ellipsize="end"
+ android:ellipsize="marquee"
android:textAppearance="@style/TextAppearance.QS.TileLabel"
android:textColor="?android:attr/textColorPrimary"/>
@@ -75,6 +75,7 @@
android:layout_alignEnd="@id/label_group"
android:layout_below="@id/label_group"
android:clickable="false"
+ android:ellipsize="marquee"
android:maxLines="1"
android:padding="0dp"
android:visibility="gone"
diff --git a/packages/SystemUI/res/layout/status_bar_notification_dismiss_all.xml b/packages/SystemUI/res/layout/status_bar_notification_footer.xml
similarity index 63%
rename from packages/SystemUI/res/layout/status_bar_notification_dismiss_all.xml
rename to packages/SystemUI/res/layout/status_bar_notification_footer.xml
index 8dc4cb4..aa0d4a0 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_dismiss_all.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_footer.xml
@@ -15,13 +15,27 @@
-->
<!-- Extends Framelayout -->
-<com.android.systemui.statusbar.DismissView
+<com.android.systemui.statusbar.FooterView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="8dp"
android:visibility="gone">
- <com.android.systemui.statusbar.DismissViewButton
+ <FrameLayout
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <com.android.systemui.statusbar.FooterViewButton
+ style="@android:style/Widget.Material.Button.Borderless"
+ android:id="@+id/manage_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="start"
+ android:focusable="true"
+ android:text="@string/manage_notifications_text"
+ android:textColor="?attr/wallpaperTextColor"
+ android:textAllCaps="false"/>
+ <com.android.systemui.statusbar.FooterViewButton
style="@android:style/Widget.Material.Button.Borderless"
android:id="@+id/dismiss_text"
android:layout_width="wrap_content"
@@ -32,4 +46,5 @@
android:text="@string/clear_all_notifications_text"
android:textColor="?attr/wallpaperTextColor"
android:textAllCaps="true"/>
-</com.android.systemui.statusbar.DismissView>
+ </FrameLayout>
+</com.android.systemui.statusbar.FooterView>
diff --git a/packages/SystemUI/res/layout/wireless_charging_layout.xml b/packages/SystemUI/res/layout/wireless_charging_layout.xml
index 85a325a..e848901 100644
--- a/packages/SystemUI/res/layout/wireless_charging_layout.xml
+++ b/packages/SystemUI/res/layout/wireless_charging_layout.xml
@@ -42,7 +42,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:textSize="32sp"
+ android:textSize="24sp"
android:textColor="?attr/wallpaperTextColor"/>
</LinearLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index f37cf3e..214af1e 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> oor; ongeveer <xliff:g id="TIME">%s</xliff:g> oor op grond van jou gebruik"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> oor; ongeveer <xliff:g id="TIME">%s</xliff:g> oor"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> oor. Batterybespaarder is aan."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB-laaiery nie ondersteun nie.\nGebruik net die laaier wat verskaf is."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Laai met USB word nie gesteun nie."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Gebruik slegs die laaier wat verskaf is."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Kan nie deur USB laai nie. Gebruik die laaier wat jy saam met jou toestel gekry het."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Kan nie deur USB laai nie"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Gebruik die laaier wat jy saam met jou toestel gekry het"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Instellings"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Skakel Batterybespaarder aan?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Skakel aan"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"maak kamera oop"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Kies nuwe taakuitleg"</string>
<string name="cancel" msgid="6442560571259935130">"Kanselleer"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Raak die vingerafdruksensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Vingerafdrukikoon"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Programikoon"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Hulpboodskapgebied"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Af"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Gekoppel."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Koppel tans."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Swerwing"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Swerwing"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Geen SIM nie."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobiele data"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobiele data is aan"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiele data is af"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobiele data is af"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-verbinding."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN aan."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Geen SIM-kaart nie."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Diensverskaffernetwerk verander tans."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Diensverskaffernetwerk verander tans"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Maak batterybesonderhede oop"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> persent."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery laai tans, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> persent."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Vliegtuigmodus aan."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus afgeskakel."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus aangeskakel."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Moenie Steur Nie aan, net prioriteit."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Moenie Steur Nie is aan."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Moenie Steur Nie; volkome stilte."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\'Moenie Steur Nie\' is aan, net wekkers."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Moenie Steur Nie."</string>
@@ -274,8 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Nageregkas"</string>
<string name="start_dreams" msgid="5640361424498338327">"Sluimerskerm"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Raak en hou ikone vir meer opsies"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Moenie Steur Nie"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Net prioriteit"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Net wekkers"</string>
@@ -288,6 +286,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Oudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Kopstuk"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Invoer"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Skakel tans aan …"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Outo-draai"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Outodraai skerm"</string>
@@ -312,7 +311,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi is aan"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Geen Wi-Fi-netwerke beskikbaar nie"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Wekker"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Skakel tans aan …"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Saai uit"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Saai tans uit"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Onbenoemde toestel"</string>
@@ -329,7 +328,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Koppel tans …"</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"USB-verbinding"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Warmkol"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Skakel tans aan …"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Skakel tans aan …"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Databespaarder is aan"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d toestelle</item>
<item quantity="one">%d toestel</item>
@@ -343,8 +343,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> gebruik"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g>-limiet"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> waarskuwing"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Werkprofiel"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Kennisgewings en programme is af"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Werkprofiel"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Aandbeligting"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Aan by sonsondergang"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Tot sonsopkoms"</string>
@@ -397,9 +396,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans vinnig (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans stadig (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Wissel gebruiker"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Wissel gebruiker, huidige gebruiker <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Huidige gebruiker <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sal alles begin vasvang wat op jou skerm gewys word."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Moenie weer wys nie"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Vee alles uit"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Moenie Steur Nie versteek tans kennisgewings"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Begin nou"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Geen kennisgewings nie"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan gemonitor word"</string>
@@ -500,6 +500,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Stel op"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Skakel nou af"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Klankinstellings"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Vou uit"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Vou in"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Wissel uitvoertoestel"</string>
@@ -537,6 +538,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tik om op vibreer te stel."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tik om te demp."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volumekontroles"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Oproepe en kennisgewings sal lui"</string>
<string name="output_title" msgid="5355078100792942802">"Media-uitvoer"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Foonoproep-uitvoer"</string>
<string name="output_none_found" msgid="5544982839808921091">"Geen toestelle gekry nie"</string>
@@ -592,12 +594,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Met kragkennisgewingkontroles kan jy \'n belangrikheidvlak van 0 tot 5 vir \'n program se kennisgewings stel. \n\n"<b>"Vlak 5"</b>" \n- Wys aan die bokant van die kennisgewinglys \n- Laat volskermonderbreking toe \n- Wys altyd opspringkennisgewings \n\n"<b>"Vlak 4"</b>" \n- Verhoed volskermonderbreking \n- Wys altyd opspringkennisgewings \n\n"<b>"Vlak 3"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n\n"<b>"Vlak 2"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n- Moet nooit \'n klank maak of vibreer nie \n\n"<b>"Vlak 1"</b>" \n- Verhoed volskermonderbreking \n- Verhoed opspringkennisgewings \n- Moet nooit \'n klank maak of vibreer nie \n- Versteek van sluitskerm en statusbalk \n- Wys aan die onderkant van die kennisgewinglys \n\n"<b>"Vlak 0"</b>" \n- Blokkeer alle kennisgewings van die program af"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Kennisgewings"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Jy sal nie meer hierdie kennisgewings sien nie"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Hierdie kennisgewings sal geminimeer word"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Jy maak hierdie kennisgewings gewoonlik toe. \nMoet ons aanhou om hulle te wys?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Hou aan om hierdie kennisgewings te wys?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Stop kennisgewings"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Hou aan wys"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimeer"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Hou aan om kennisgewings van hierdie program af te wys?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Hierdie kennisgewings kan nie afgeskakel word nie"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofoon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"wys tans oor ander programme op jou skerm"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Hierdie program <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Hierdie program <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">gebruik tans die <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> en <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">gebruik tans die <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Instellings"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Kennisgewingkontroles vir <xliff:g id="APP_NAME">%1$s</xliff:g> is oopgemaak"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Kennisgewingkontroles vir <xliff:g id="APP_NAME">%1$s</xliff:g> is toegemaak"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Laat kennisgewings van hierdie kanaal af toe"</string>
@@ -705,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Regs-sleutelkode"</string>
<string name="left_icon" msgid="3096287125959387541">"Links-ikoon"</string>
<string name="right_icon" msgid="3952104823293824311">"Regs-ikoon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Sleep om teëls by te voeg"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hou en sleep om teëls by te voeg"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Sleep hierheen om te verwyder"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Jy moet minstens 6 teëls hê"</string>
<string name="qs_edit" msgid="2232596095725105230">"Wysig"</string>
<string name="tuner_time" msgid="6572217313285536011">"Tyd"</string>
<string-array name="clock_options">
@@ -750,7 +768,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Maak kitsinstellings toe."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Wekker is gestel."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Aangemeld as <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Geen internet nie."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Geen internet nie"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Maak besonderhede oop."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Maak <xliff:g id="ID_1">%s</xliff:g>-instellings oop."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Wysig volgorde van instellings."</string>
@@ -798,6 +816,7 @@
<string name="app_info" msgid="6856026610594615344">"Programinligting"</string>
<string name="go_to_web" msgid="2650669128861626071">"Gaan na blaaier"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiele data"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is af"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is af"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Moenie Steur Nie is af"</string>
@@ -809,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Vervang"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Programme wat op die agtergrond loop"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik vir besonderhede oor battery- en datagebruik"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Skakel mobiele data af?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Skakel mobiele data af?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Jy sal nie deur <xliff:g id="CARRIER">%s</xliff:g> toegang tot data of die internet hê nie. Internet sal net deur Wi-Fi beskikbaar wees."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"jou diensverskaffer"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Instellings kan nie jou antwoord verifieer nie omdat \'n program \'n toestemmingversoek verberg."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Laat <xliff:g id="APP_0">%1$s</xliff:g> toe om <xliff:g id="APP_2">%2$s</xliff:g>-skyfies te wys?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Dit kan inligting van <xliff:g id="APP">%1$s</xliff:g> af lees"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 6d086ae..c9a1e11e 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Qalan <xliff:g id="PERCENTAGE">%s</xliff:g>, istifadəyə əsasən təxminən <xliff:g id="TIME">%s</xliff:g> qalıb"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Qalan <xliff:g id="PERCENTAGE">%s</xliff:g>, təxminən <xliff:g id="TIME">%s</xliff:g> qalır"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> qalır. Batareya Qənaəti aktivdir."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB ilə elektrik doldurma dəstəklənmir.\nYalnız adapter istifadə edin."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB qidalandırıcı dəstəklənmir."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Yalnız uyğun qidalandırıcı işlədin."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB vasitəsilə enerji yığa bilməz. Cihazla verilən adapterdən istifadə edin."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB vasitəsilə enerji yığa bilməz"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Cihazla verilən adapterdən istifadə edin"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ayarlar"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Batareya Qənaəti aktiv edilsin?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktivləşdirin"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"kemaranı açın"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Yeni tapşırıq sxemi seçin"</string>
<string name="cancel" msgid="6442560571259935130">"Ləğv et"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Barmaq izi sensoruna klikləyin"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Barmaq izi ikonası"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Tətbiq ikonası"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Yardım mesajı bölməsi"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Deaktiv"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Qoşuludur."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Birləşdirilir."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rominq"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Rominq"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM yoxdur"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobil Data"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobil Data Aktivdir"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobil Data Deaktivdir"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobil data deaktivdir"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tezering."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçuş rejimi"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN aktivdir."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM kart yoxdur."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier şəbəkə dəyişir."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Operator şəbəkəsinin dəyişilməsi"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Batareya detallarını açın"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batareya <xliff:g id="NUMBER">%d</xliff:g> faizdir."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Batareya doldurulur, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> faiz."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Təyyarə rejimi aktivdir."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Təyyarə rejimi deaktiv edildi."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Təyyarə rejimi aktiv edildi."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Narahat etməyin\" aktivdir, yalnız prioritet."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Narahat etməyin\" rejimi aktivdir"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Tak sakitlik vaxtı narahat etməyin."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Narahat etməmək rejimi aktivdir, yalnız alarmlara icazə var."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Narahat etməyin."</string>
@@ -274,8 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Desert Qabı"</string>
<string name="start_dreams" msgid="5640361424498338327">"Ekran qoruyucu"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Daha çox seçimlər üçün klikləyin və basıb saxlayın"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Narahat etməyin"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Yalnız prioritet"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Yalnız alarmlar"</string>
@@ -288,6 +286,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Qulaqlıq"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Giriş"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Aktiv edilir..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Parlaqlıq"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Avtodönüş"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Ekran avtodönüşü"</string>
@@ -312,7 +311,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi sönülüdür"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi Aktiv"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Heç bir Wi-Fi şəbəkəsi əlçatan deyil"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Siqnal"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Aktiv edilir..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Yayım"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Yayım"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Adsız cihaz"</string>
@@ -329,7 +328,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Qoşulur..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Birləşmə"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Aktiv edilir..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Aktiv edilir..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Data Qənaəti aktivdir"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d cihaz</item>
<item quantity="one">%d cihaz</item>
@@ -343,8 +343,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> işlənib"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> xəbərdarlığı"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"İş profili"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Bildiriş və tətbiqlər deaktivdir"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"İş profili"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Gecə işığı"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Qürubda aktiv ediləcək"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Şəfəq vaxtına qədər"</string>
@@ -397,9 +396,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Enerji yığır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana qədər)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sürətlə enerji yığır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana qədər)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Yavaş enerji yığır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana qədər)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Switch user"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"İstifadəçiləri dəyişin, indiki istifadəçi: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Cari istifadəçi <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ekranınızda olan hər şeyin şəklini çəkəcək."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Daha göstərmə"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hamısını silin"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\"Narahat etməyin\" rejimi bildirişləri gizlədir"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"İndi başlayın"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Heç bir bildiriş yoxdur"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlənə bilər"</string>
@@ -500,6 +500,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Quraşdırın"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"İndi deaktiv edin"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Səs ayarları"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Genişləndirin"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yığcamlaşdırın"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Çıxış cihazına keçin"</string>
@@ -537,6 +538,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Vibrasiyanı ayarlamaq üçün klikləyin."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Səssiz etmək üçün klikləyin."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s səs nəzarətləri"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Zəng və bildirişlər zəng çalacaq"</string>
<string name="output_title" msgid="5355078100792942802">"Media çıxışı"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Zəng girişi"</string>
<string name="output_none_found" msgid="5544982839808921091">"Heç bir cihaz tapılmadı"</string>
@@ -592,12 +594,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Enerji bildiriş nəzarəti ilə, tətbiq bildirişləri üçün əhəmiyyət səviyyəsini 0-dan 5-ə kimi ayarlaya bilərsiniz. \n\n"<b>"Səviyyə 5"</b>" \n- Bildiriş siyahısının yuxarı hissəsində göstərin \n- Tam ekran kəsintisinə icazə verin \n- Hər zaman izləyin \n\n"<b>"Səviyyə 4"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Hər zaman izləyin \n\n"<b>"Level 3"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Heç vaxt izləməyin \n\n"<b>"Level 2"</b>" \n- Tam ekran kəsintisinin qarşısını alın \n- Heç vaxt izləməyin \n- Heç vaxt səsliyə və ya vibrasiyaya qoymayın \n\n"<b>"Səviyyə 1"</b>" \n- Prevent full screen interruption \n- Heç vaxt izləməyin \n- Heç vaxt səsliyə və ya vibrasiyaya qoymayın \n- Ekran kilidi və ya status panelindən gizlədin \n- Bildiriş siyahısının yuxarı hissəsində göstərin \n\n"<b>"Səviyyə 0"</b>" \n- Bütün bildirişləri tətbiqdən blok edin"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirişlər"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Artıq bu bildirişləri görməyəcəkəsiniz"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Bu bildirişlər kiçildiləcək"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Adətən bu bildirişləri rədd edirsiniz. \nBildirişlər göstərilsin?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Bu bildirişlər göstərilməyə davam edilsin?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bildirişləri dayandırın"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Göstərməyə davam edin"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Kiçildin"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu tətbiqin bildirişləri göstərilməyə davam edilsin?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirişlər deaktiv edilə bilməz"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"ekrandakı digər tətbiqlərdə göstərin"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Bu tətbiq <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> və <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> fəaliyyətini icra edir.</item>
+ <item quantity="one">Bu tətbiq <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> fəaliyyətini icra edir.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> və <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> istifadə edilir</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> istifadə edilir</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Ayarlar"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Ok"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün bildiriş kontrolları açıqdır"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün bildiriş kontrolları bağlıdır"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Bu kanaldan gələn bildirişlərə icazə verin"</string>
@@ -705,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Sağ açar kodu"</string>
<string name="left_icon" msgid="3096287125959387541">"Sol ikona"</string>
<string name="right_icon" msgid="3952104823293824311">"Sağ ikona"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Xanalar əlavə etmək üçün sürüşdürün"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Mozaika əlavə etmək üçün basıb saxlayaraq çəkin"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Silmək üçün bura sürüşdürün"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Minimum 6 mozaikaya ehtiyacınız var"</string>
<string name="qs_edit" msgid="2232596095725105230">"Redaktə edin"</string>
<string name="tuner_time" msgid="6572217313285536011">"Vaxt"</string>
<string-array name="clock_options">
@@ -750,7 +768,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Cəld ayarları bağlayın."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Siqnal quraşdırıldı."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> kimi daxil olunub"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"İnternet yoxdur."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"İnternet yoxdur"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Detalları açın."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ayarlarını açın."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Ayarların sıralanmasını redaktə edin."</string>
@@ -798,6 +816,7 @@
<string name="app_info" msgid="6856026610594615344">"Tətbiq məlumatı"</string>
<string name="go_to_web" msgid="2650669128861626071">"Brauzerə daxil edin"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil data"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi deaktivdir"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth deaktivdir"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"\"Narahat Etməyin\" deaktivdir"</string>
@@ -809,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Əvəz edin"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Arxa fonda işləyən tətbiqlər"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya və data istifadəsi haqqında ətraflı məlumat üçün klikləyin"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil data söndürülsün?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Mobil data söndürülsün?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> ilə data və ya internetə daxil ola bilməyəcəksiniz. İnternet yalnız Wi-Fi ilə əlçatan olacaq."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operatorunuz"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Tətbiq icazə sorğusunu gizlətdiyi üçün Ayarlar cavabınızı doğrulaya bilməz."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> tətbiqinə <xliff:g id="APP_2">%2$s</xliff:g> hissələrini göstərmək üçün icazə verilsin?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- <xliff:g id="APP">%1$s</xliff:g> tətbiqindən məlumat oxuya bilər"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 0e6ae05..f20eab2 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -40,12 +40,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Засталося <xliff:g id="PERCENTAGE">%s</xliff:g>, у вас ёсць каля <xliff:g id="TIME">%s</xliff:g> на аснове даных аб выкарыстанні вашай прылады"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Засталося <xliff:g id="PERCENTAGE">%s</xliff:g>, у вас ёсць каля <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Засталося <xliff:g id="PERCENTAGE">%s</xliff:g>. Уключана эканомія зараду."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Не ўдалося выканаць зарадку праз USB. Выкарыстоўвайце зараднае прыстасаванне з камплекта прылады."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Не ўдалося выканаць зарадку праз USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Выкарыстоўвайце зараднае прыстасаванне з камплекта прылады"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Налады"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Уключыць рэжым эканоміі зараду?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Уключыць"</string>
@@ -153,7 +150,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Падключана."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Падлучэнне."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -215,8 +211,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Рэжым палёту ўключаны."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Рэжым палёту выключаецца."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Рэжым палёту ўключаецца."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Рэжым \"Не турбаваць\" уключаны."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Рэжым «Не турбаваць» укл., поўная цішыня."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Рэжым «Не турбаваць» укл., толькі будзільнікі."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Не турбаваць."</string>
@@ -284,7 +279,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Вітрына з дэсертамі"</string>
<string name="start_dreams" msgid="5640361424498338327">"Экранная застаўка"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Націскайце і ўтрымлівайце значкі, каб убачыць іншыя параметры"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не турбаваць"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Толькі прыярытэтныя"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Толькі будзільнікі"</string>
@@ -445,8 +441,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> атрымае доступ да ўсяго, што адлюстроўваецца на вашым экране."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Не паказваць зноў"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ачысціць усё"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"У рэжыме \"Не турбаваць\" адключаны апавяшчэнні"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Пачаць зараз"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Апавяшчэнняў няма"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"За профілем могуць назіраць"</string>
@@ -552,8 +547,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Дакраніцеся, каб уключыць вібрацыю."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дакраніцеся, каб адключыць гук"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Рэгулятар гучнасці %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Для выклікаў і апавяшчэнняў уключаны вібрасігнал"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Для выклікаў і апавяшчэнняў гук выключаны"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Для выклікаў і апавяшчэнняў уключаны гук"</string>
<string name="output_title" msgid="5355078100792942802">"Вывад мультымедыя"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Прылада вываду тэлефонных выклікаў"</string>
@@ -746,8 +739,11 @@
<string name="right_keycode" msgid="708447961000848163">"Код клавішы \"управа\""</string>
<string name="left_icon" msgid="3096287125959387541">"Значок \"улева\""</string>
<string name="right_icon" msgid="3952104823293824311">"Значок \"управа\""</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Перацягніце, каб дадаць пліткі"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Перацягніце сюды, каб выдаліць"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Рэдагаваць"</string>
<string name="tuner_time" msgid="6572217313285536011">"Час"</string>
<string-array name="clock_options">
@@ -851,7 +847,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Замяніць"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Праграмы, якія працуюць у фонавым рэжыме"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Дакраніцеся, каб даведацца пра выкарыстанне трафіка і акумулятара"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Выключыць мабільную перадачу даных?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Праграма хавае запыт на дазвол, таму ваш адказ немагчыма спраўдзіць у Наладах."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Дазволіць праграме <xliff:g id="APP_0">%1$s</xliff:g> паказваць зрэзы праграмы <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Можа счытваць інфармацыю з праграмы <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 5468afa..26d6b4a 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Остава/т <xliff:g id="PERCENTAGE">%s</xliff:g> – още около <xliff:g id="TIME">%s</xliff:g> въз основа на използването"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Остава/т <xliff:g id="PERCENTAGE">%s</xliff:g> – още около <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Остава/т <xliff:g id="PERCENTAGE">%s</xliff:g>. Режимът за запазване на батерията е включен."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Не се поддържа зареждане през USB.\nИзползвайте само доставеното зарядно устройство."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Зареждането през USB не се поддържа."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Използвайте само предоставеното зарядно устройство."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Зареждането през USB не е възможно. Използвайте оригиналното зарядно устройство."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Зареждането през USB не е възможно"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Използвайте оригиналното зарядно устройство"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Настройки"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Да се включи ли режимът за запазване на батерията?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Включване"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"отваряне на камерата"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Избиране на ново оформление за задачите"</string>
<string name="cancel" msgid="6442560571259935130">"Отказ"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Докоснете сензора за отпечатъци"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Икона за отпечатък"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Икона на приложението"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Област за помощно съобщение"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Изкл."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Има връзка."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Установява се връзка."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роуминг"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Роуминг"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Няма SIM карта."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Мобилни данни"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобилните данни са включени"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобилните данни са изключени"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Мобилните данни са изключени"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Тетъринг през Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Самолетен режим."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"Функцията за виртуална частна мрежа (VPN) е включена."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Няма SIM карта."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Промяна на мрежата на оператора."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Промяна на мрежата на оператора"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Отваряне на подробностите за батерията"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> процента батерия."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Батерията се зарежда – <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> процента."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Самолетният режим е включен."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Самолетният режим се изключи."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Самолетният режим се включи."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Настройката „Не безпокойте“ е включена – само с приоритет."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Режимът „Не безпокойте“ е включен."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Настройката „Не безпокойте“ е включена в режим за пълна тишина."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Настройката „Не безпокойте“ е включена в режим само с будилници."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Не безпокойте."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Витрина с десерти"</string>
<string name="start_dreams" msgid="5640361424498338327">"Скрийнсейвър"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не безпокойте"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Само с приоритет"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Аудио"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Слушалки"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Вход"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Включва се..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркост"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматична ориентация"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Автоматично завъртане на екрана"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е изключен"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Функцията за Wi-Fi е включена"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Няма налични Wi-Fi мрежи"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Будилник"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Включва се..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Предаване"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Предава се"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Устройство без име"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Установява се връзка..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Тетъринг"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка за достъп"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Включва се..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Включва се..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Икономия на данни е вкл."</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d устройства</item>
<item quantity="one">%d устройство</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Използвано: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничение от <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Служебен потребителски профил"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Известията и приложенията са изключени"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Служебен потребителски профил"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Нощно осветление"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Ще се вкл. по залез"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"До изгрев"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се бързо (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарежда се бавно (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Превключване между потребителите"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Превключване на потребителя – текущият е <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Текущ потребител – <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ще започне да заснема всичко, което се показва на екрана ви."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Да не се показва отново"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Изчистване на всички"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Режимът „Не безпокойте“ скрива известията"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Стартиране сега"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Няма известия"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Възможно е потребителският профил да се наблюдава"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Настройване"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Изключване сега"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Настройки за звука"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Разгъване"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Свиване"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Превключване на устройството за възпроизвеждане на звук"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Докоснете, за да зададете вибриране."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Докоснете, за да заглушите звука."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Контроли за силата на звука – %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"При обаждания и известия устройството ще звъни"</string>
<string name="output_title" msgid="5355078100792942802">"Изходяща мултимедия"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Изходящи телефонни обаждания"</string>
<string name="output_none_found" msgid="5544982839808921091">"Няма намерени устройства"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"С помощта на контролите за известията можете да зададете ниво на важност от 0 до 5 за известията от дадено приложение. \n\n"<b>"Ниво 5"</b>" \n– Показване най-горе в списъка с известия. \n– Разрешаване на прекъсването на цял екран. \n– Известията винаги се показват мимолетно. \n\n"<b>"Ниво 4"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията винаги се показват мимолетно. \n\n"<b>"Ниво 3"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n\n"<b>"Ниво 2"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n– Без издаване на звуков сигнал и вибриране. \n\n"<b>"Ниво 1"</b>" \n– Предотвратяване на прекъсването на цял екран. \n– Известията никога не се показват мимолетно. \n– Без издаване на звуков сигнал и вибриране. \n– Скриване от заключения екран и лентата на състоянието. \n– Показване най-долу в списъка с известия. \n\n"<b>"Ниво 0"</b>" \n– Блокиране на всички известия от приложението."</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Известия"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Вече няма да виждате тези известия"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Тези известия ще бъдат намалени"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Обикновено отхвърляте тези известия. \nИскате ли да продължат да се показват?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Тези известия да продължат ли да се показват?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Спиране на известията"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Да продължат да се показват"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Намаляване"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Да продължат ли да се показват известията от това приложение?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Тези известия не могат да бъдат изключени"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"камерата"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"микрофона"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"се показва върху други приложения на екрана"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Това приложение <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Това приложение <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">използва <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> и <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">използва <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Настройки"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Контролите за известията за <xliff:g id="APP_NAME">%1$s</xliff:g> са оттворени"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Контролите за известията за <xliff:g id="APP_NAME">%1$s</xliff:g> са затворени"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Разрешаване на известия от този канал"</string>
@@ -705,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Десен бутон за клавишен код"</string>
<string name="left_icon" msgid="3096287125959387541">"Лява икона"</string>
<string name="right_icon" msgid="3952104823293824311">"Дясна икона"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Преместете с плъзгане, за да добавите плочки"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Задръжте и плъзнете, за да добавите плочки"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Преместете тук с плъзгане за премахване"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Трябва да останат поне 6 плочки"</string>
<string name="qs_edit" msgid="2232596095725105230">"Редактиране"</string>
<string name="tuner_time" msgid="6572217313285536011">"Час"</string>
<string-array name="clock_options">
@@ -750,7 +769,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Затваряне на бързите настройки."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Будилникът е навит."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Влезли сте като <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Няма връзка с интернет."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Няма връзка с интернет"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Отвaряне на страницата с подробности."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Отваряне на настройките за <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Редактиране на подредбата на настройките."</string>
@@ -798,6 +817,7 @@
<string name="app_info" msgid="6856026610594615344">"Информация за приложението"</string>
<string name="go_to_web" msgid="2650669128861626071">"Към браузъра"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобилни данни"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Функцията за Wi‑Fi е изключена"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Функцията за Bluetooth е изключена"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Режимът „Не безпокойте“ е изключен"</string>
@@ -809,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Замяна"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Приложения, работещи на заден план"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Докоснете за информация относно използването на батерията и преноса на данни"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се изключат ли мобилните данни?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Да се изключат ли мобилните данни?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Няма да можете да използвате данни или интернет чрез <xliff:g id="CARRIER">%s</xliff:g>. Ще имате достъп до интернет само през Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"оператора си"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"От Настройки не може да се получи потвърждение за отговора ви, защото заявката за разрешение се прикрива от приложение."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Искате ли да разрешите на <xliff:g id="APP_0">%1$s</xliff:g> да показва части от <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Може да чете информация от <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 76b0c3f..41987a0 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> বাকি আছে, বর্তমান ব্যবহারের ভিত্তিতে আর <xliff:g id="TIME">%s</xliff:g> চলবে"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> বাকি আছে, আর <xliff:g id="TIME">%s</xliff:g> চলবে"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> অবশিষ্ট আছে। ব্যাটারি সেভার চালু আছে।"</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB চার্জিং সমর্থিত নয়৷\nকেবলমাত্র সরবহারকৃত চার্জার ব্যবহার করুন৷"</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB চার্জিং সমর্থিত নয়।"</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"শুধুমাত্র সরবরাহকৃত চার্জার ব্যবহার করুন।"</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"ইউএসবি দিয়ে চার্জ করা যাবে না। ডিভাইসের সাথে যে চার্জারটি পেয়েছেন, সেটি ব্যবহার করুন।"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"ইউএসবি দিয়ে চার্জ করা যাবে না"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ডিভাইসের সাথে যে চার্জারটি পেয়েছেন, সেটি ব্যবহার করুন"</string>
<string name="battery_low_why" msgid="4553600287639198111">"সেটিংস"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ব্যাটারি সেভার চালু করবেন?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"চালু করুন"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"ক্যামেরা খুলুন"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কার্য লেআউট বেছে নিন"</string>
<string name="cancel" msgid="6442560571259935130">"বাতিল করুন"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"আঙ্গুলের ছাপের সেন্সর স্পর্শ করুন"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"আঙ্গুলের ছাপের আইকন"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"অ্যাপ্লিকেশনের আইকন"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"সহায়তার মেসেজ দেখানোর জায়গা"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"বন্ধ৷"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"সংযুক্ত৷"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"সংযুক্ত হচ্ছে৷"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"১ X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"রোমিং"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"রোমিং"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ওয়াই-ফাই"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"কোনো সিম নেই৷"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"মোবাইল ডেটা"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"মোবাইল ডেটা চালু আছে"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"মোবাইল ডেটা বন্ধ আছে"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"মোবাইল ডেটা বন্ধ করা হয়েছে"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ব্লুটুথ টিথারিং৷"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"বিমান মোড৷"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN চালু আছে।"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"কোনো সিম কার্ড নেই।"</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"পরিষেবা প্রদানকারীর নেটওয়ার্ক পরিবর্তিত হচ্ছে।"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"পরিষেবা প্রদানকারীর নেটওয়ার্ক পরিবর্তন করা হচ্ছে"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ব্যাটারির বিশদ বিবরণ খুলুন"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> শতাংশ ব্যাটারি রয়েছে৷"</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ব্যাটারি চার্জ হচ্ছে, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> শতাংশ৷"</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"বিমান মোড চালু আছে।"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"বিমান মোড বন্ধ হয়েছে।"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"বিমান মোড চালু হয়েছে।"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“বিরক্ত করবেন না” চালু করবেন, শুধুমাত্র অগ্রাধিকার৷"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"“বিরক্ত করবেন না” মোড চালু আছে।"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"“বিরক্ত করবেন না” চালু করবেন, একদম নিরব"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"“বিরক্ত করবেন না” চালু করবেন, শুধুমাত্র অ্যালার্মগুলি৷"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"বিরক্ত করবেন না৷"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ডেজার্ট কেস"</string>
<string name="start_dreams" msgid="5640361424498338327">"স্ক্রিন সেভার"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ইথারনেট"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"বিরক্ত করবেন না"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"শুধুমাত্র অগ্রাধিকার"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"অডিও"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"হেডসেট"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ইনপুট"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"চালু করা হচ্ছে…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"উজ্জ্বলতা"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"স্বতঃ ঘূর্ণায়মান"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"স্বতঃ-ঘূর্ণায়মান স্ক্রিন"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ওয়াই-ফাই বন্ধ"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"ওয়াই-ফাই চালু আছে"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"কোনো ওয়াই-ফাই নেটওয়ার্ক উপলব্ধ নেই"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"অ্যালার্ম"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"চালু করা হচ্ছে…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"কাস্ট করুন"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"কাস্ট করা হচ্ছে"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"নামবিহীন ডিভাইস"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"সংযুক্ত হচ্ছে..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"টেদারিং"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"হটস্পট"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"চালু করা হচ্ছে…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"চালু করা হচ্ছে…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ডেটা সেভার চালু আছে"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%dটি ডিভাইস</item>
<item quantity="other">%dটি ডিভাইস</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ব্যবহৃত হয়েছে"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"সীমা <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> সতর্কতা"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"কাজের প্রোফাইল"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"বিজ্ঞপ্তি ও অ্যাপ বন্ধ আছে"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"কাজের প্রোফাইল"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"নাইট লাইট"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"সূর্যাস্তে চালু হবে"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"সূর্যোদয় পর্যন্ত"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • চার্জ হচ্ছে (পুরো চার্জ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> লাগবে)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • দ্রুত চার্জ হচ্ছে (পুরোটা হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> লাগবে)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ধীরে চার্জ হচ্ছে (পুরোটা হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> লাগবে)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ব্যবহারকারী পাল্টে দিন"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ব্যবহারকারী পাল্টান, বর্তমান ব্যবহারকারী <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"<xliff:g id="CURRENT_USER_NAME">%s</xliff:g> হল বর্তমান ব্যবহারকারী"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> আপনার স্ক্রীনে দেখানো সব কিছু ক্যাপচার করা শুরু করবে।"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"আর দেখাবেন না"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"সবকিছু সাফ করুন"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\'বিরক্ত করবেন না\' মোড চালু আছে, তাই বিজ্ঞপ্তি লুকিয়ে ফেলা হচ্ছে"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"এখন শুরু করুন"</string>
<string name="empty_shade_text" msgid="708135716272867002">"কোনো বিজ্ঞপ্তি নেই"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"প্রোফাইল পর্যবেক্ষণ করা হতে পারে"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"সেট আপ"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"এখনই বন্ধ করুন"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"সাউন্ড সেটিংস"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"বড় করুন"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"সঙ্কুচিত করুন"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"অন্য আউটপুট ডিভাইস বেছে নিন"</string>
@@ -537,12 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ভাইব্রেট করতে ট্যাপ করুন।"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। নিঃশব্দ করতে ট্যাপ করুন।"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ভলিউম নিয়ন্ত্রণ"</string>
- <!-- no translation found for volume_dialog_ringer_guidance_vibrate (8902050240801159042) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_silent (2128975224280276122) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_ring (6144469689490528338) -->
- <skip />
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"কল এবং বিজ্ঞপ্তি আসলে রিং হবে"</string>
<string name="output_title" msgid="5355078100792942802">"মিডিয়া আউটপুট"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ফোন কল আউটপুট"</string>
<string name="output_none_found" msgid="5544982839808921091">"কোনও ডিভাইস খুঁজে পাওয়া যায়নি"</string>
@@ -598,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"পাওয়ার বিজ্ঞপ্তির নিয়ন্ত্রণগুলি ব্যহবার করে, আপনি কোনও অ্যাপ্লিকেশনের বিজ্ঞপ্তির জন্য ০ থেকে ৫ পর্যন্ত একটি গুরুত্বের লেভেলকে সেট করতে পারবেন৷ \n\n"<b>"লেভেল ৫"</b>" \n- বিজ্ঞপ্তি তালিকার শীর্ষে দেখায় \n- পূর্ণ স্ক্রিনের বাধাকে অনুমতি দেয় \n- সর্বদা স্ক্রিনে উপস্থিত হয় \n\n"<b>"লেভেল ৪"</b>" \n- পূর্ণ স্ক্রিনের বাধাকে আটকায় \n- সর্বদা স্ক্রিনে উপস্থিত হয় \n\n"<b>"লেভেল ৩"</b>" \n- পূর্ণ স্ক্রিনের বাধাকে আটকায় \n- কখনওই স্ক্রিনে উপস্থিত হয় না \n\n"<b>"লেভেল ২"</b>" \n- পূর্ণ স্ক্রিনের বাধাকে আটকায় \n- কখনওই স্ক্রিনে উপস্থিত হয় না \n- কখনওই শব্দ এবং কম্পন করে না \n\n"<b>"লেভেল ১"</b>" \n- পূর্ণ স্ক্রিনের বাধাকে আটকায় \n- কখনওই স্ক্রিনে উপস্থিত হয় না \n- কখনওই শব্দ এবং কম্পন করে না \n- লক স্ক্রিন এবং স্ট্যাটাস বার থেকে লুকায় \n- বিজ্ঞপ্তি তালিকার নীচের দিকে দেখায় \n\n"<b>"লেভেল ০"</b>" \n- অ্যাপ্লিকেশন থেকে সমস্ত বিজ্ঞপ্তিকে অবরূদ্ধ করে"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"বিজ্ঞপ্তি"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"এই বিজ্ঞপ্তিগুলি আপনাকে আর দেখানো হবে না"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"এই বিজ্ঞপ্তিগুলি ছোট করে দেওয়া হবে"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"এই বিজ্ঞপ্তিগুলিকে আপনি সাধারণত বাতিল করেন। \nসেগুলি দেখতে চান?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"এই বিজ্ঞপ্তিগুলি পরেও দেখে যেতে চান?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"বিজ্ঞপ্তি বন্ধ করুন"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"দেখতে থাকুন"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"ছোট করে দিন"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"এই অ্যাপের বিজ্ঞপ্তি পরেও দেখে যেতে চান?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"এই বিজ্ঞপ্তিগুলি বন্ধ করা যাবে না"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"ক্যামেরা"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"মাইক্রোফোন"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"স্ক্রিনে অন্যান্য অ্যাপের উপরে দেখানো হচ্ছে"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">এই অ্যাপটি <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item>
+ <item quantity="other">এই অ্যাপটি <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যবহার করছে</item>
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> এবং <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ব্যবহার করছে</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"সেটিংস"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"আচ্ছা"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> খোলা থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> বন্ধ থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"এই চ্যানেল থেকে বিজ্ঞপ্তি আসতে দেয়"</string>
@@ -711,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"ডানদিকের কিকোড"</string>
<string name="left_icon" msgid="3096287125959387541">"বাঁ দিকের আইকন"</string>
<string name="right_icon" msgid="3952104823293824311">"ডানদিকের আইকন"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"টাইলগুলি যোগ করার জন্য টেনে আনুন"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"সরানোর জন্য এখানে টেনে আনুন"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"সম্পাদনা করুন"</string>
<string name="tuner_time" msgid="6572217313285536011">"সময়"</string>
<string-array name="clock_options">
@@ -756,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"দ্রুত সেটিংস বন্ধ করুন৷"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"অ্যালার্ম সেট করা হয়েছে৷"</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> হিসেবে প্রবেশ করে রয়েছেন"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"কোন ইন্টারনেট নেই৷"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"ইন্টারনেট কানেকশন নেই"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"বিশদ বিবরণ খুলুন৷"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> সেটিংস খুলুন৷"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ক্রম বা সেটিংস সম্পাদনা করুন৷"</string>
@@ -804,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"অ্যাপের তথ্য"</string>
<string name="go_to_web" msgid="2650669128861626071">"ব্রাউজারে যান"</string>
<string name="mobile_data" msgid="7094582042819250762">"মোবাইল ডেটা"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"ওয়াই ফাই বন্ধ আছে"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ব্লুটুথ বন্ধ আছে"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"বিরক্ত করবেন না বিকল্পটি বন্ধ আছে"</string>
@@ -815,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"বদলে দিন"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"পটভূমিতে অ্যাপ চালু আছে"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ব্যাটারি এবং ডেটার ব্যবহারের বিশদ বিবরণের জন্য ট্যাপ করুন"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"মোবাইল ডেটা বন্ধ করবেন?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"একটি অ্যাপ কোনও অনুমোদনের অনুরোধকে ঢেকে দিচ্ছে, তাই সেটিংস থেকে আপনার প্রতিক্রিয়া যাচাই করা যাচ্ছে না।"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> অ্যাপটিকে <xliff:g id="APP_2">%2$s</xliff:g> এর অংশ দেখানোর অনুমতি দেবেন?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- এটি <xliff:g id="APP">%1$s</xliff:g> এর তথ্য অ্যাক্সেস করতে পারবে"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index f8388c8..b99efc8 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -39,12 +39,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Još <xliff:g id="PERCENTAGE">%s</xliff:g>. Preostalo je oko <xliff:g id="TIME">%s</xliff:g>, na osnovu vašeg korištenja"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Još <xliff:g id="PERCENTAGE">%s</xliff:g>. Preostalo je oko <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Preostalo <xliff:g id="PERCENTAGE">%s</xliff:g>. Uključena je Ušteda baterije."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Punjenje putem USB-a nije moguće. Koristite punjač koji ste dobili uz uređaj."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Punjenje putem USB-a nije moguće"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Koristite punjač koji ste dobili uz uređaj"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Postavke"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Uključiti Uštedu baterije?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Uključi"</string>
@@ -152,7 +149,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Povezano"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Povezivanje."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -212,8 +208,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Uključen način rada u avionu."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način rada u avionu je isključen."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način rada u avionu je uključen."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Način rada Ne ometaj je uključen"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Način rada Ne ometaj je uključen, potpuna tišina."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Način rada Ne ometaj je uključen, čut će se samo alarmi."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ne ometaj."</string>
@@ -280,7 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Slika sa desertima"</string>
<string name="start_dreams" msgid="5640361424498338327">"Čuvar ekrana"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Za više opcija pritisnite ikone i držite ih"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Dodirnite ikone i zadržite pritisak da biste vidjeli više opcija"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne ometaj"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prioritetno"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Samo alarmi"</string>
@@ -440,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> će početi snimati sve što se prikaže na ekranu."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ne prikazuj opet"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Očisti sve"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Način rada Ne ometaj sakriva obavještenja"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Pokreni odmah"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nema obavještenja"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil može biti nadziran"</string>
@@ -549,8 +543,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dodirnite da postavite vibraciju."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da isključite zvuk."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Kontrole glasnoće za %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Pozivi i obavještenja će vibrirati"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Pozivi i obavještenja će se isključiti"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Pozivi i obavještenja će zvoniti"</string>
<string name="output_title" msgid="5355078100792942802">"Izlaz za medijske fajlove"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Izlaz za telefonske pozive"</string>
@@ -739,8 +731,11 @@
<string name="right_keycode" msgid="708447961000848163">"Kôd tipke desno"</string>
<string name="left_icon" msgid="3096287125959387541">"Ikona lijevo"</string>
<string name="right_icon" msgid="3952104823293824311">"Ikona desno"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Prevucite da dodate pločice"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Prevucite ovdje za uklanjanje"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Uredi"</string>
<string name="tuner_time" msgid="6572217313285536011">"Vrijeme"</string>
<string-array name="clock_options">
@@ -844,7 +839,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Zamijeni"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije koje rade u pozadini"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite za detalje o potrošnji baterije i prijenosa podataka"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite li isključiti prijenos podataka na mobilnoj mreži?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Dozvoliti aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> prikazivanje isječaka aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Može čitati informacije iz aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 2664382..edd7944 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>; temps restant aproximat segons l\'ús que en fas: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>; temps restant aproximat: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>. La funció Estalvi de bateria està activada."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"No es pot carregar el dispositiu per USB. Fes servir el carregador original del dispositiu."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"No es pot carregar per USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Fes servir el carregador original del dispositiu"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Configuració"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Vols activar la funció Estalvi de bateria?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activa"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connectat."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"S’està connectant."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"El Mode d\'avió està activat."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"S\'ha desactivat el Mode d\'avió."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"S\'ha activat el Mode d\'avió."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Mode No molestis activat."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"El mode No molestis està activat; silenci total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"El mode No molestis està activat (només alarmes)."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Mode No molestis."</string>
@@ -278,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Capsa de postres"</string>
<string name="start_dreams" msgid="5640361424498338327">"Estalvi de pantalla"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Mantén premudes les icones per veure més opcions"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Mantén premudes les icones per veure més opcions"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestis"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Només amb prioritat"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Només alarmes"</string>
@@ -437,8 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> començarà a gravar tot el que es mostri a la pantalla."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"No ho tornis a mostrar"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Esborra-ho tot"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"El mode No molestis està amagant notificacions"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Comença ara"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Cap notificació"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"El perfil es pot supervisar"</string>
@@ -544,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca per activar la vibració."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca per silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controls de volum %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Les trucades i les notificacions vibraran"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Les trucades i les notificacions se silenciaran"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Les trucades i les notificacions sonaran"</string>
<string name="output_title" msgid="5355078100792942802">"Sortida de contingut multimèdia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Sortida de trucades"</string>
@@ -730,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Codi de tecla de la dreta"</string>
<string name="left_icon" msgid="3096287125959387541">"Icona de l\'esquerra"</string>
<string name="right_icon" msgid="3952104823293824311">"Icona de la dreta"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrossega per afegir funcions"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Mantén premut un mosaic i arrossega\'l per afegir-lo"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrossega aquí per suprimir una funció"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Necessites com a mínim 6 mosaics"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edita"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
@@ -835,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Substitueix"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacions que s\'estan executant en segon pla"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca per obtenir informació sobre l\'ús de dades i de bateria"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vols desactivar les dades mòbils?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Vols desactivar les dades mòbils?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"No tindràs accés a dades ni a Internet amb <xliff:g id="CARRIER">%s</xliff:g>. Només podràs accedir a Internet per Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"el teu operador de telefonia mòbil"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Com que hi ha una aplicació que oculta una sol·licitud de permís, no es pot verificar la teva resposta des de la configuració."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Vols permetre que <xliff:g id="APP_0">%1$s</xliff:g> mostri porcions de l\'aplicació <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Pot llegir informació de l\'aplicació <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index ae10345..40c089c 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Der er <xliff:g id="PERCENTAGE">%s</xliff:g> tilbage eller ca. <xliff:g id="TIME">%s</xliff:g>, alt efter hvordan du bruger enheden"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> tilbage eller ca. <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> tilbage. Batterisparefunktion er aktiveret."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Enheden kan ikke oplades via USB. Brug den oplader, der fulgte med din enhed."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Enheden kan ikke oplades via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Brug den oplader, der fulgte med din enhed"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Indstillinger"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Vil du aktivere Batterisparefunktion?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktivér"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Forbundet."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Opretter forbindelse..."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flytilstand er slået til."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flytilstand er slået fra."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flytilstand er slået til."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Forstyr ikke er aktiveret."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Forstyr ikke\" er slået til, total stilhed."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Forstyr ikke\" er slået til, kun alarmer."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Forstyr ikke."</string>
@@ -278,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessertcase"</string>
<string name="start_dreams" msgid="5640361424498338327">"Pauseskærm"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Hold ikonerne nede for at se flere valgmuligheder"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Hold ikonerne nede for at se flere valgmuligheder"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Forstyr ikke"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kun prioritet"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Kun alarmer"</string>
@@ -437,8 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vil begynde at optage alt, hvad der vises på din skærm."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Vis ikke igen"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ryd alt"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Forstyr ikke skjuler underretninger"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start nu"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ingen underretninger"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåges"</string>
@@ -544,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tryk for at aktivere vibration."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tryk for at slå lyden fra."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s lydstyrkeknapper"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Telefonen vil vibrere ved opkald og underretninger"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Der afspilles ikke lyd ved opkald og underretninger"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Der afspilles lyd ved opkald og underretninger"</string>
<string name="output_title" msgid="5355078100792942802">"Medieafspilning"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Udgang til telefonopkald"</string>
@@ -730,8 +722,11 @@
<string name="right_keycode" msgid="708447961000848163">"Højre tastekode"</string>
<string name="left_icon" msgid="3096287125959387541">"Venstre ikon"</string>
<string name="right_icon" msgid="3952104823293824311">"Højre ikon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Træk for at tilføje felter"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Træk herhen for at fjerne"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Rediger"</string>
<string name="tuner_time" msgid="6572217313285536011">"Tid"</string>
<string-array name="clock_options">
@@ -835,7 +830,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Erstat"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps, der kører i baggrunden"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryk for at se oplysninger om batteri- og dataforbrug"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du deaktivere mobildata?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Indstillinger kan ikke bekræfte dit svar, da en app dækker for en anmodning om tilladelse."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Vil du give <xliff:g id="APP_0">%1$s</xliff:g> tilladelse til at vise eksempler fra <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Den kan læse oplysninger fra <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 1235d1d..685495a 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> ausstehend; noch ca. <xliff:g id="TIME">%s</xliff:g>, basierend auf deiner Nutzung"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> ausstehend; noch ca. <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Noch <xliff:g id="PERCENTAGE">%s</xliff:g>. Der Energiesparmodus ist aktiviert."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Aufladen über USB nicht möglich. Verwende das mit dem Gerät gelieferte Ladegerät."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Aufladen über USB nicht möglich"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Verwende das mit dem Gerät gelieferte Ladegerät"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Einstellungen"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Energiesparmodus aktivieren?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktivieren"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Verbunden"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Verbindung wird hergestellt."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1.x"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -215,8 +211,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flugmodus aktiviert"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Der Flugmodus ist deaktiviert."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Der Flugmodus ist aktiviert."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Bitte nicht stören\" an."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Nicht stören, lautlos"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Nicht stören\" an, nur Wecker"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nicht stören."</string>
@@ -282,7 +277,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessertbehälter"</string>
<string name="start_dreams" msgid="5640361424498338327">"Bildschirmschoner"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Halte die Symbole gedrückt, um weitere Optionen zu sehen"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nicht stören"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Nur wichtige Unterbrechungen"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Nur Wecker"</string>
@@ -441,8 +437,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> nimmt alle auf deinem Bildschirm angezeigten Aktivitäten auf."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Nicht erneut anzeigen"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Alle löschen"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Mit \"Bitte nicht stören\" werden Benachrichtigungen ausgeblendet"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Jetzt starten"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Keine Benachrichtigungen"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil wird möglicherweise überwacht."</string>
@@ -548,8 +543,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Zum Aktivieren der Vibration tippen."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Zum Stummschalten tippen."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Lautstärkeregler von %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Anrufe und Benachrichtigungen per Vibrationsalarm"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Anrufe und Benachrichtigungen stummgeschaltet"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Anrufe und Benachrichtigungen per Klingelton"</string>
<string name="output_title" msgid="5355078100792942802">"Medienausgabe"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefonanrufausgabe"</string>
@@ -734,8 +727,11 @@
<string name="right_keycode" msgid="708447961000848163">"Rechter Keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Linkes Symbol"</string>
<string name="right_icon" msgid="3952104823293824311">"Rechtes Symbol"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Zum Hinzufügen von Kacheln ziehen"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Zum Entfernen hierher ziehen"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Bearbeiten"</string>
<string name="tuner_time" msgid="6572217313285536011">"Uhrzeit"</string>
<string-array name="clock_options">
@@ -839,7 +835,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ersetzen"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps, die im Hintergrund ausgeführt werden"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Für Details zur Akku- und Datennutzung tippen"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobile Daten deaktivieren?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Deine Eingabe wird von \"Einstellungen\" nicht erkannt, weil die Berechtigungsanfrage von einer App verdeckt wird."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> erlauben, Teile von <xliff:g id="APP_2">%2$s</xliff:g> anzuzeigen?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Darf Informationen aus <xliff:g id="APP">%1$s</xliff:g> lesen"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 9c3a013..bdb5aa9 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Απομένει <xliff:g id="PERCENTAGE">%s</xliff:g>, περίπου <xliff:g id="TIME">%s</xliff:g> με βάση τη χρήση σας"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Απομένει <xliff:g id="PERCENTAGE">%s</xliff:g>, περίπου <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Απομένουν <xliff:g id="PERCENTAGE">%s</xliff:g>. Η Εξοικονόμηση μπαταρίας είναι ενεργή."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Δεν υποστηρίζεται η φόρτιση USB.\nΧρησιμοποιείτε μόνο τον φορτιστή που παρέχεται."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Δεν υποστηρίζεται η φόρτιση μέσω USB."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Χρήση μόνο του παρεχόμενου φορτιστή."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Δεν είναι δυνατή η φόρτιση μέσω USB. Χρησιμοποιήστε τον φορτιστή που συνοδεύει τη συσκευή σας."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Δεν είναι δυνατή η φόρτιση μέσω USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Χρησιμοποιήστε τον φορτιστή που συνοδεύει τη συσκευή σας"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ρυθμίσεις"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Να ενεργοποιηθεί η Εξοικονόμηση μπαταρίας;"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ενεργοποίηση"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"άνοιγμα φωτογραφικής μηχανής"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Επιλέξτε τη νέα διάταξη εργασίας"</string>
<string name="cancel" msgid="6442560571259935130">"Ακύρωση"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Αγγίξτε τον αισθητήρα δακτυλικών αποτυπωμάτων"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Εικονίδιο δακτυλικών αποτυπωμάτων"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Εικονίδιο εφαρμογής"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Περιοχή μηνυμάτων βοήθειας"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Ανενεργό."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Έχει συνδεθεί."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Σύνδεση."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Περιαγωγή"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Περιαγωγή"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Δεν υπάρχει SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Δεδομένα κινητής τηλεφωνίας"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Τα δεδομένα κινητής τηλεφωνίας ενεργοποιήθηκαν"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Πρόσδεση Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Λειτουργία πτήσης."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ενεργό."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Δεν υπάρχει κάρτα SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Αλλαγή δικτύου εταιρείας κινητής τηλεφωνίας."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Αλλαγή δικτύου εταιρείας κινητής τηλεφωνίας"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Άνοιγμα λεπτομερειών μπαταρίας"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Μπαταρία <xliff:g id="NUMBER">%d</xliff:g> τοις εκατό."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Φόρτιση μπαταρίας, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> τοις εκατό."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Ενεργή λειτουργία πτήσης."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Η λειτουργία πτήσης απενεργοποιήθηκε."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ενεργή λειτουργία πτήσης."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, μόνο προτεραιότητας."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Η λειτουργία \"Μην ενοχλείτε\" είναι ενεργή."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, πλήρης σίγαση."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Μην ενοχλείτε, μόνο ειδοποιήσεις."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Μην ενοχλείτε."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Επιδόρπιο"</string>
<string name="start_dreams" msgid="5640361424498338327">"Προφύλαξη οθόνης"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Μην ενοχλείτε"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Μόνο προτεραιότητας"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Ήχος"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Ακουστικά"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Είσοδος"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Ενεργοποίηση…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Φωτεινότητα"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Αυτόματη περιστροφή"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Αυτόματη περιστροφή οθόνης"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ανενεργό"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Ενεργό Wi-Fi"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Δεν υπάρχουν διαθέσιμα δίκτυα Wi-Fi"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Ξυπνητήρι"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Ενεργοποίηση…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Μετάδοση"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Μετάδοση"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Ανώνυμη συσκευή"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Σύνδεση…"</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Πρόσδεση"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Σημείο πρόσβασης Wi-Fi"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Ενεργοποίηση…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Ενεργοποίηση…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Εξοικ. δεδομ. ενεργή"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d συσκευές</item>
<item quantity="one">%d συσκευή</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Χρησιμοποιούνται <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Όριο <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Προειδοποίηση για <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Προφίλ εργασίας"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Οι ειδοποιήσεις και οι εφαρμογές είναι απενεργοποιημένες"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Προφίλ εργασίας"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Νυχτερινός φωτισμός"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Κατά τη δύση"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Μέχρι την ανατολή"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Γρήγορη φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Αργή φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Εναλλαγή χρήστη"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Εναλλαγή χρήστη, τρέχων χρήστης <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Τρέχων χρήστης <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Θα ξεκινήσει η καταγραφή του περιεχομένου που εμφανίζεται στην οθόνη σας από την εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Να μην εμφανιστεί ξανά"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Διαγραφή όλων"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Η λειτουργία \"Μην ενοχλείτε\" αποκρύπτει ειδοποιήσεις"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Έναρξη τώρα"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Δεν υπάρχουν ειδοποιήσεις"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Το προφίλ ενδέχεται να παρακολουθείται"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Ρύθμιση"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Απενεργοποίηση τώρα"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Ρυθμίσεις ήχου"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Ανάπτυξη"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Σύμπτυξη"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Εναλλαγή συσκευής εξόδου"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Πατήστε για να ενεργοποιήσετε τη δόνηση."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Πατήστε για σίγαση."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s στοιχεία ελέγχου έντασης ήχου"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Θα υπάρχει ηχητική ειδοποίηση για κλήσεις και ειδοποιήσεις"</string>
<string name="output_title" msgid="5355078100792942802">"Έξοδος μέσων"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Έξοδος τηλεφωνικής κλήσης"</string>
<string name="output_none_found" msgid="5544982839808921091">"Δεν βρέθηκαν συσκευές"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Με τα στοιχεία ελέγχου ειδοποίησης ισχύος, μπορείτε να ορίσετε ένα επίπεδο βαρύτητας από 0 έως 5 για τις ειδοποιήσεις μιας εφαρμογής. \n\n"<b>"Επίπεδο 5"</b>" \n- Εμφάνιση στην κορυφή της λίστας ειδοποιήσεων \n- Να επιτρέπεται η διακοπή πλήρους οθόνης \n- Να γίνεται πάντα σύντομη προβολή \n\n"<b>"Επίπεδο 4"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να γίνεται πάντα σύντομη προβολή \n\n"<b>"Επίπεδο 3"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n\n"<b>"Επίπεδο 2"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n- Να μην χρησιμοποιείται ποτέ ήχος και δόνηση \n\n"<b>"Επίπεδο 1"</b>" \n- Αποτροπή διακοπής πλήρους οθόνης \n- Να μην γίνεται ποτέ σύντομη προβολή \n- Να μην χρησιμοποιείται ποτέ ήχος και δόνηση \n- Απόκρυψη από την οθόνη κλειδώματος και τη γραμμή κατάστασης \n- Εμφάνιση στο κάτω μέρος της λίστας ειδοποιήσεων \n\n"<b>"Επίπεδο 0"</b>" \n- Αποκλεισμός όλων των ειδοποιήσεων από την εφαρμογή"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Ειδοποιήσεις"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Δεν θα βλέπετε πλέον αυτές τις ειδοποιήσεις"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Αυτές οι ειδοποιήσεις θα ελαχιστοποιηθούν"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Συνήθως απορρίπτετε αυτές τις ειδοποιήσεις. \nΝα εξακολουθήσουν να εμφανίζονται;"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Να συνεχίσουν να εμφανίζονται αυτές οι ειδοποιήσεις;"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Διακοπή ειδοποιήσεων"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Συνέχιση εμφάνισης"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Ελαχιστοποίηση"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Να συνεχίσουν να εμφανίζονται ειδοποιήσεις από αυτήν την εφαρμογή;"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Αδύνατη η απενεργοποίηση αυτών των ειδοποιήσεων"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"κάμερα"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"μικρόφωνο"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"εμφανίζεται πάνω σε άλλες εφαρμογές στην οθόνη σας"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Αυτή η εφαρμογή <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> και <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Αυτή η εφαρμογή <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">χρησιμοποιεί <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> και <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">χρησιμοποιεί <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Ρυθμίσεις"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ΟΚ"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Τα στοιχεία ελέγχου ειδοποιήσεων για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> άνοιξαν"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Τα στοιχεία ελέγχου ειδοποιήσεων για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> έκλεισαν"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Να επιτρέπονται οι ειδοποιήσεις από αυτό το κανάλι"</string>
@@ -609,7 +627,7 @@
<string name="notification_menu_gear_description" msgid="2204480013726775108">"στοιχεία ελέγχου ειδοποιήσεων"</string>
<string name="notification_menu_snooze_description" msgid="3653669438131034525">"επιλογές αφύπνισης ειδοποιήσεων"</string>
<string name="snooze_undo" msgid="6074877317002985129">"ΑΝΑΙΡΕΣΗ"</string>
- <string name="snoozed_for_time" msgid="2390718332980204462">"Σε αφύπνιση για <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
+ <string name="snoozed_for_time" msgid="2390718332980204462">"Σε αναβολή για <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
<plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
<item quantity="other">%d ώρες</item>
<item quantity="one">%d ώρα</item>
@@ -705,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Δεξιός κωδικός"</string>
<string name="left_icon" msgid="3096287125959387541">"Αριστερό εικονίδιο"</string>
<string name="right_icon" msgid="3952104823293824311">"Δεξιό εικονίδιο"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Σύρετε για να προσθέσετε πλακίδια"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Κρατήστε και σύρετε για την προσθήκη πλακιδίων"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Σύρετε εδώ για κατάργηση"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Απαιτούνται τουλάχιστον 6 πλακίδια"</string>
<string name="qs_edit" msgid="2232596095725105230">"Επεξεργασία"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ώρα"</string>
<string-array name="clock_options">
@@ -750,7 +769,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Κλείσιμο γρήγορων ρυθμίσεων."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Το ξυπνητήρι ορίστηκε."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Σύνδεση ως <xliff:g id="ID_1">%s</xliff:g>."</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Δεν υπάρχει σύνδεση στο διαδίκτυο."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Δεν υπάρχει σύνδεση στο διαδίκτυο"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Άνοιγμα λεπτομερειών."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Άνοιγμα ρυθμίσεων <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Επεξεργασία σειράς ρυθμίσεων."</string>
@@ -798,6 +817,7 @@
<string name="app_info" msgid="6856026610594615344">"Πληροφορίες εφαρμογής"</string>
<string name="go_to_web" msgid="2650669128861626071">"Μετάβ. σε πρόγ. περ."</string>
<string name="mobile_data" msgid="7094582042819250762">"Δεδομένα κινητής τηλεφωνίας"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> - <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Το Wi-Fi είναι ανενεργό"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Το Bluetooth είναι ανενεργό"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Η λειτουργία \"Μην ενοχλείτε\" είναι ανενεργή"</string>
@@ -809,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Αντικατάσταση"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Εφαρμογές που εκτελούνται στο παρασκήνιο"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Πατήστε για λεπτομέρειες σχετικά με τη χρήση μπαταρίας και δεδομένων"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Απενεργοποίηση δεδομένων κινητής τηλεφωνίας;"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Απενεργοποίηση δεδομένων κινητής τηλεφωνίας;"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Δεν θα έχετε πρόσβαση σε δεδομένα ή στο διαδίκτυο μέσω της εταιρείας κινητής τηλεφωνίας <xliff:g id="CARRIER">%s</xliff:g>. Θα έχετε πρόσβαση στο διαδίκτυο μόνο μέσω Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"η εταιρεία κινητής τηλεφωνίας"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Επειδή μια εφαρμογή αποκρύπτει ένα αίτημα άδειας, δεν είναι δυνατή η επαλήθευση της απάντησής σας από τις Ρυθμίσεις."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APP_0">%1$s</xliff:g> να εμφανίζει τμήματα της εφαρμογής <xliff:g id="APP_2">%2$s</xliff:g>;"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Μπορεί να διαβάζει πληροφορίες από την εφαρμογή <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 65f8895..c7ddc3e 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Press & hold on the icons for more options"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Touch & hold icons for more options"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Calls and notifications will vibrate"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Calls and notifications will be muted"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Calls and notifications will ring"</string>
<string name="output_title" msgid="5355078100792942802">"Media output"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Phone call output"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
<string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold and drag to add tiles"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"You need at least 6 tiles"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Time"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"your operator"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index ca7b5bd..5649557 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Press & hold on the icons for more options"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Touch & hold icons for more options"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Calls and notifications will vibrate"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Calls and notifications will be muted"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Calls and notifications will ring"</string>
<string name="output_title" msgid="5355078100792942802">"Media output"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Phone call output"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
<string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold and drag to add tiles"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"You need at least 6 tiles"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Time"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"your operator"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 65f8895..c7ddc3e 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Press & hold on the icons for more options"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Touch & hold icons for more options"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Calls and notifications will vibrate"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Calls and notifications will be muted"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Calls and notifications will ring"</string>
<string name="output_title" msgid="5355078100792942802">"Media output"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Phone call output"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
<string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold and drag to add tiles"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"You need at least 6 tiles"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Time"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"your operator"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 65f8895..c7ddc3e 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Press & hold on the icons for more options"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Touch & hold icons for more options"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Calls and notifications will vibrate"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Calls and notifications will be muted"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Calls and notifications will ring"</string>
<string name="output_title" msgid="5355078100792942802">"Media output"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Phone call output"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
<string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold and drag to add tiles"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"You need at least 6 tiles"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Time"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"You won\'t have access to data or the Internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"your operator"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 4d3a47c..783160c 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Press & hold on the icons for more options"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Touch & hold icons for more options"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volume controls"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Calls and notifications will vibrate"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Calls and notifications will be muted"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Calls and notifications will ring"</string>
<string name="output_title" msgid="5355078100792942802">"Media output"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Phone call output"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
<string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
<string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold and drag to add tiles"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"You need at least 6 tiles"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Time"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Turn off mobile data?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"You wont have access to data or the internet through <xliff:g id="CARRIER">%s</xliff:g>. Internet will only be available via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"your carrier"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- It can read information from <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 9095d35..4cc3dbf 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Batería: <xliff:g id="PERCENTAGE">%s</xliff:g> (tiempo restante aproximado según tu uso: <xliff:g id="TIME">%s</xliff:g>)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Batería: <xliff:g id="PERCENTAGE">%s</xliff:g> (tiempo restante aproximado: <xliff:g id="TIME">%s</xliff:g>)"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Queda <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. El Ahorro de batería está activado."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"No se puede cargar mediante USB. Usa el cargador que se incluyó con el dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"No se puede cargar mediante USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Usa el cargador que se incluyó con el dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Configuración"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"¿Activar el Ahorro de batería?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activar"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo de avión: activado"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avión desactivado"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avión activado"</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"No interrumpir está activado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"No molestar activado, silencio total"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"No molestar activado (solo alarmas)"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"No molestar"</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Caja para postres"</string>
<string name="start_dreams" msgid="5640361424498338327">"Protector pantalla"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Mantén presionados los íconos para ver más opciones"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioridad"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo alarmas"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comenzará la captura de todo lo que se muestre en la pantalla."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"No volver a mostrar"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Borrar todo"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"El modo No interrumpir oculta las notificaciones"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Comenzar ahora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No hay notificaciones"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil."</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Presiona para establecer el modo vibración."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Presiona para silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volumen %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Vibrarán las llamadas y notificaciones"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Se silenciarán las llamadas y notificaciones"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Sonarán las llamadas y notificaciones"</string>
<string name="output_title" msgid="5355078100792942802">"Salida multimedia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Salida de llamada telefónica"</string>
@@ -732,8 +725,11 @@
<string name="right_keycode" msgid="708447961000848163">"Clave de código derecho"</string>
<string name="left_icon" msgid="3096287125959387541">"Ícono izquierdo"</string>
<string name="right_icon" msgid="3952104823293824311">"Ícono derecho"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra los íconos para agregarlos"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastra aquí para quitar"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
@@ -837,7 +833,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Reemplazar"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps que se ejecutan en segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Presiona para obtener información sobre el uso de datos y de la batería"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Deseas desactivar los datos móviles?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Como una app está bloqueando una solicitud de permiso, Configuración no puede verificar tu respuesta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"¿Permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Puede leer información sobre <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3b9a49f..ef4d35a 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> (tiempo restante aproximado según tu uso: <xliff:g id="TIME">%s</xliff:g>)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> (tiempo restante aproximado: <xliff:g id="TIME">%s</xliff:g>)"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. Se ha activado la función Ahorro de energía."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"No se admite la carga por USB.\nUtiliza solo el cargador proporcionado."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"No se admite la carga por USB."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Utiliza solo el cargador proporcionado."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"No se puede cargar por USB. Utiliza el cargador original incluido con el dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"No se puede cargar por USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Utiliza el cargador original incluido con el dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ajustes"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"¿Activar Ahorro de batería?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activar"</string>
@@ -147,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desactivado"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5 G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinerancia"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Tipo Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Itinerancia"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sin tarjeta SIM"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Datos móviles"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Datos móviles activados"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Datos móviles desactivados"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Datos móviles desactivados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Compartir conexión por Bluetooth"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"La red VPN está activada."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"No hay tarjeta SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambiando red de operador."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Cambiando la red del operador"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalles de la batería"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> por ciento de batería"</string>
<!-- String.format failed for translation -->
@@ -209,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avión activado."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo avión desactivado."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo avión activado."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"No molestar activado (solo prioritarias)."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"El modo No molestar está activado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"No molestar activado, silencio total"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"No molestar activado, solo alarmas."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"No molestar."</string>
@@ -275,7 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Caja para postres"</string>
<string name="start_dreams" msgid="5640361424498338327">"Salvapantallas"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Mantén pulsados los iconos para ver más opciones"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Mantén pulsados los iconos para ver más opciones"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioritarias"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo alarmas"</string>
@@ -288,6 +288,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Auriculares"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Entrada"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Activando…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Girar automáticamente"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Girar pantalla automáticamente"</string>
@@ -312,7 +313,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivado"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi activada"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"No hay ninguna red Wi-Fi disponible"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarma"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Activando…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Enviar"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Enviando"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sin nombre"</string>
@@ -329,7 +330,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Compartir conexión"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Activando..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Activando…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Ahorro de datos activado"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d dispositivos</item>
<item quantity="one">%d dispositivo</item>
@@ -343,8 +345,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> usado"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Perfil de trabajo"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Las notificaciones y las aplicaciones están desactivadas"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Perfil de trabajo"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz nocturna"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Al atardecer"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Hasta el amanecer"</string>
@@ -397,9 +398,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para carga completa)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para carga completa)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para carga completa)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Cambiar de usuario"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Cambiar de usuario (usuario actual <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Usuario actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +434,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> empezará a capturar todo lo que aparezca en la pantalla."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"No volver a mostrar"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Borrar todo"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"El modo No molestar oculta las notificaciones"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar ahora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"No hay notificaciones"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil"</string>
@@ -500,6 +502,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Desactivar"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Ajustes de sonido"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Mostrar"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ocultar"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Cambiar dispositivo de salida"</string>
@@ -537,12 +540,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca para activar la vibración."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca para silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volumen %s"</string>
- <!-- no translation found for volume_dialog_ringer_guidance_vibrate (8902050240801159042) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_silent (2128975224280276122) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_ring (6144469689490528338) -->
- <skip />
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Las llamadas y las notificaciones sonarán"</string>
<string name="output_title" msgid="5355078100792942802">"Salida multimedia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Salida de llamadas"</string>
<string name="output_none_found" msgid="5544982839808921091">"No se ha podido encontrar ningún dispositivo"</string>
@@ -598,12 +596,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Los controles de energía de las notificaciones permiten establecer un nivel de importancia de 0 a 5 para las notificaciones de las aplicaciones. \n\n"<b>"Nivel 5"</b>" \n- Mostrar en la parte superior de la lista de notificaciones \n- Permitir interrumpir en el modo de pantalla completa \n- Mostrar siempre \n\n"<b>"Nivel 4"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- Mostrar siempre \n\n"<b>"Nivel 3"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- No mostrar nunca \n\n"<b>"Nivel 2"</b>" \n- Evitar interrumpir en el modo de pantalla completa\n- No mostrar nunca \n- No emitir sonido ni vibrar nunca \n\n"<b>"Nivel 1"</b>" \n- Evitar interrumpir en el modo de pantalla completa \n- No mostrar nunca \n- No emitir sonido ni vibrar nunca \n- Ocultar de la pantalla de bloqueo y de la barra de estado \n- Mostrar en la parte inferior de la lista de notificaciones \n\n"<b>"Nivel 0"</b>" \n- Bloquear todas las notificaciones de la aplicación"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificaciones"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"No volverás a ver estas notificaciones"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Se minimizarán estas notificaciones"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalmente ignoras estas notificaciones. \n¿Quieres seguir viéndolas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"¿Quieres seguir viendo estas notificaciones?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Detener las notificaciones"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Seguir mostrando"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"¿Quieres seguir viendo las notificaciones de esta aplicación?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Estas notificaciones no se pueden desactivar"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"cámara"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"micrófono"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"se muestra sobre otras aplicaciones que haya en la pantalla"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Esta aplicación está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">usando <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> y <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">usando <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Ajustes"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Aceptar"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Se han abierto los controles de las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Se han cerrado los controles de las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permite las notificaciones de este canal"</string>
@@ -711,8 +724,9 @@
<string name="right_keycode" msgid="708447961000848163">"Código de teclado a la derecha"</string>
<string name="left_icon" msgid="3096287125959387541">"Icono a la izquierda"</string>
<string name="right_icon" msgid="3952104823293824311">"Icono a la derecha"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra para añadir funciones"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Mantener pulsado para añadir mosaicos"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastra aquí para quitar una función"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Necesitas 6 mosaicos como mínimo"</string>
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
@@ -756,7 +770,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Cerrar ajustes rápidos."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarma establecida."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Has iniciado sesión como <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Sin conexión a Internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Sin Internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Abrir detalles."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Abrir ajustes de <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Cambiar el orden de los ajustes."</string>
@@ -804,6 +818,7 @@
<string name="app_info" msgid="6856026610594615344">"Información de la aplicación"</string>
<string name="go_to_web" msgid="2650669128861626071">"Ir al navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Datos móviles"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> ‑ <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi desactivado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desactivado"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"No molestar está desactivado"</string>
@@ -815,7 +830,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Reemplazar"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplicaciones que se están ejecutando en segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para ver información detallada sobre el uso de datos y de la batería"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Desactivar los datos móviles?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"¿Quieres desactivar los datos móviles?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"No tienes conexión a Internet ni de datos móviles a través de <xliff:g id="CARRIER">%s</xliff:g>. Solo puedes conectarte a Internet mediante una red Wi‑Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"tu operador"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Una aplicación impide ver una solicitud de permiso, por lo que Ajustes no puede verificar tu respuesta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"¿Quieres permitir que <xliff:g id="APP_0">%1$s</xliff:g> muestre fragmentos de <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Puede leer información de <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 9141046..07f0a5b 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> on alles, teie kasutuse põhjal on jäänud umbes <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> on alles, umbes <xliff:g id="TIME">%s</xliff:g> on jäänud"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Jäänud on <xliff:g id="PERCENTAGE">%s</xliff:g>. Akusäästja on sisse lülitatud."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB laadimist ei toetata.\nKasutage ainult tootja laadija."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB-ga laadimist ei toetata."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Kasutage ainult kaasasolevat laadijat."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Ei saa USB kaudu laadida. Kasutage seadmega kaasas olnud laadijat."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Ei saa USB kaudu laadida"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Kasutage seadmega kaasas olnud laadijat"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Seaded"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Kas lülitada akusäästja sisse?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Lülita sisse"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"ava kaamera"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Uue toimingu paigutuse valimine"</string>
<string name="cancel" msgid="6442560571259935130">"Tühista"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Puudutage sõrmejäljeandurit"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Sõrmejälje ikoon"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Rakenduse ikoon"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Abisõnumi ala"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Väljas."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ühendatud."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ühenduse loomine."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rändlus"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Serv"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3,5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Rändlus"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WiFi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM-kaarti pole."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobiilne andmeside"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobiilne andmeside on sees"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobiilne andmeside on väljas"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobiilne andmeside on väljas"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Jagamine Bluetoothiga."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Lennurežiim."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN on sees."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM-kaarti pole."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Operaatori võrku muudetakse."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Operaatori võrku muudetakse"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Aku üksikasjade avamine"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Aku: <xliff:g id="NUMBER">%d</xliff:g> protsenti."</string>
<!-- String.format failed for translation -->
@@ -210,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lennurežiim on sees."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lennurežiim on välja lülitatud."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lennurežiim on sisse lülitatud."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Funktsioon Mitte segada on sisse lülitatud (ainult prioriteetsed)."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Režiim Mitte segada on sees."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Funktsioon Mitte segada on sisse lülitatud, täielik vaikus."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Funktsioon Mitte segada on sisse lülitatud (ainult alarmid)."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Mitte segada."</string>
@@ -276,7 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Maiustusekorv"</string>
<string name="start_dreams" msgid="5640361424498338327">"Ekraanisäästja"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Mitte segada"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Ainult prioriteetsed"</string>
@@ -290,6 +289,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Heli"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Peakomplekt"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Sisend"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Sisselülitamine …"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Heledus"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automaatne pööramine"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Pööra ekraani automaatselt"</string>
@@ -314,7 +314,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"WiFi on sees"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"WiFi-võrke pole saadaval"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Hoiatus"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Sisselülitamine …"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Ülekandmine"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Osatäitjad"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nimeta seade"</string>
@@ -331,7 +331,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Ühenduse loomine ..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Jagamine"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Kuumkoht"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Sisselülitamine …"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Sisselülitamine …"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Andmem. säästja sees"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d seadet</item>
<item quantity="one">%d seade</item>
@@ -345,8 +346,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> on kasutatud"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limiit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hoiatus"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Tööprofiil"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Märguanded ja rakendused on välja lülitatud"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Tööprofiil"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Öövalgus"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Sissel. päikeselooj."</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Kuni päikesetõusuni"</string>
@@ -399,9 +399,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laadimine (täislaadimiseks kulub <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Kiirlaadim. (täislaadimiseks kulub <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Aegl. laad. (täislaadimiseks kulub <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Kasutaja vahetamine"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Kasutaja vahetamine, praegune kasutaja: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Praegune kasutaja <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -435,6 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> hakkab jäädvustama kõike, mida ekraanil kuvatakse."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ära kuva uuesti"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tühjenda kõik"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Režiim Mitte segada peidab märguandeid"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Alusta kohe"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Märguandeid pole"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiili võidakse jälgida"</string>
@@ -502,6 +503,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Seadistus"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Lülita kohe välja"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Heliseaded"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Laiendamine"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Ahendamine"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Väljundseadme vahetamine"</string>
@@ -539,6 +541,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Puudutage vibreerimise määramiseks."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Puudutage vaigistamiseks."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Helitugevuse juhtnupud: %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Kõnede ja märguannete puhul kõlab helin"</string>
<string name="output_title" msgid="5355078100792942802">"Meediaväljund"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefonikõne väljund"</string>
<string name="output_none_found" msgid="5544982839808921091">"Seadmeid ei leitud"</string>
@@ -594,12 +597,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Toite märguannete juhtnuppudega saate määrata rakenduse märguannete tähtsuse taseme vahemikus 0–5. \n\n"<b>"5. tase"</b>" \n- Kuva märguannete loendi ülaosas\n- Luba täisekraanil häirimine \n- Kuva alati ekraani servas \n\n"<b>"4. tase"</b>" \n- Keela täisekraanil häirimine \n- Kuva alati ekraani servas \n\n"<b>"3. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n\n"<b>"2. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n- Ära kunagi helise ega vibreeri \n\n"<b>"1. tase"</b>" \n- Keela täisekraanil häirimine \n- Ära kunagi kuva ekraani servas \n- Ära kunagi helise ega vibreeri \n- Peida lukustuskuval ja olekuribal \n- Kuva märguannete loendi allosas \n\n"<b>"Tase 0"</b>" \n- Blokeeri kõik rakenduse märguanded"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Märguanded"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Te ei näe enam neid märguandeid"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Need märguanded minimeeritakse"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Tavaliselt loobute nendest märguannetest. \nKas soovite neid jätkuvalt näidata?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Kas soovite nende märguannete kuvamist jätkata?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Peata märguanded"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Jätka kuvamist"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimeeri"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Kas jätkata selle rakenduse märguannete kuvamist?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Neid märguandeid ei saa välja lülitada"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"kaamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"teie ekraanil muude rakenduste peal kuvamine"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">See rakendus <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">See rakendus <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">kasutab üksusi <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ja <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">kasutab üksust <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Seaded"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguannete juhtelemendid on avatud"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguannete juhtelemendid on suletud"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Lubab selle kanali märguanded"</string>
@@ -707,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"Parem võtmekood"</string>
<string name="left_icon" msgid="3096287125959387541">"Vasak ikoon"</string>
<string name="right_icon" msgid="3952104823293824311">"Parem ikoon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lohistage paanide lisamiseks"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Paanide lisamiseks hoidke all ja lohistage"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Lohistage eemaldamiseks siia"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Teil on vaja vähemalt kuut paani"</string>
<string name="qs_edit" msgid="2232596095725105230">"Muutmine"</string>
<string name="tuner_time" msgid="6572217313285536011">"Kellaaeg"</string>
<string-array name="clock_options">
@@ -752,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Sule kiirseaded."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarm on määratud."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Sisse logitud kasutajana <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Interneti-ühendus puudub."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Interneti-ühendus puudub"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Ava üksikasjad."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Ava teenuse <xliff:g id="ID_1">%s</xliff:g> seaded."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Muuda seadete järjestust."</string>
@@ -800,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"Rakenduse teave"</string>
<string name="go_to_web" msgid="2650669128861626071">"Ava brauser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobiilne andmeside"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"WiFi on välja lülitatud"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth on välja lülitatud"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Funktsioon Mitte segada on välja lülitatud"</string>
@@ -811,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Asenda"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Rakendusi käitatakse taustal"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Aku ja andmekasutuse üksikasjade nägemiseks puudutage"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kas lülitada mobiilne andmeside välja?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Kas lülitada mobiilne andmeside välja?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Teil ei ole operaatori <xliff:g id="CARRIER">%s</xliff:g> kaudu juurdepääsu andmesidele ega Internetile. Internet on saadaval ainult WiFi kaudu."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"teie operaator"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Seaded ei saa teie vastust kinnitada, sest rakendus varjab loataotlust."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Kas lubada rakendusel <xliff:g id="APP_0">%1$s</xliff:g> näidata rakenduse <xliff:g id="APP_2">%2$s</xliff:g> lõike?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- See saab lugeda teavet rakendusest <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 2378b83..0c7bd4e 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> gelditzen da; <xliff:g id="TIME">%s</xliff:g> inguru gelditzen dira, erabileraren arabera"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> gelditzen da; <xliff:g id="TIME">%s</xliff:g> inguru gelditzen dira"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> gelditzen da. Bateria-aurrezlea aktibatuta dago."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Ezin da USB bidez kargatu. Erabili gailuaren kargagailua."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Ezin da USB bidez kargatu"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Erabili gailuaren kargagailua"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ezarpenak"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Bateria-aurrezlea aktibatu nahi duzu?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktibatu"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Konektatuta."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Konektatzen."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Hegaldi modua aktibatuta dago."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hegaldi modua desaktibatu egin da."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hegaldi modua aktibatu egin da."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Aktibatuta dago \"Ez molestatu\"."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Ez molestatu\" aukera aktibatuta dago, isiltasun osoa."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Ez molestatu\" aukera aktibatuta dago, alarmak soilik."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ez molestatu."</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Postreen kutxa"</string>
<string name="start_dreams" msgid="5640361424498338327">"Pantaila-babeslea"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Eduki sakatuta ikonoak aukera gehiago ikusteko"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ez molestatu"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Lehentasunezkoak soilik"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmak soilik"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak pantailan bistaratzen den guztia grabatuko du."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ez erakutsi berriro"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Garbitu guztiak"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\"Ez molestatu\" modua jakinarazpenak ezkutatzen ari da"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Hasi"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ez dago jakinarazpenik"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Baliteke profila kontrolatuta egotea"</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Sakatu hau dardara ezartzeko."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Sakatu hau audioa desaktibatzeko."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s gailuaren bolumena kontrolatzeko aukerak"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Dar-dar egingo du deiak eta jakinarazpenak jasotzean"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Ez da joko tonurik deiak eta jakinarazpenak jasotzean"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Tonua joko da deiak eta jakinarazpenak jasotzean"</string>
<string name="output_title" msgid="5355078100792942802">"Multimedia-irteera"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefono-deiaren irteera"</string>
@@ -732,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"Eskuineko teklaren kodea"</string>
<string name="left_icon" msgid="3096287125959387541">"Ezkerreko ikonoa"</string>
<string name="right_icon" msgid="3952104823293824311">"Eskuineko ikonoa"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastatu lauzak hemen gehitzeko"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Eduki sakatuta eta arrastatu lauzak gehitzeko"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Kentzeko, arrastatu hona"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Gutxienez sei lauza behar dituzu"</string>
<string name="qs_edit" msgid="2232596095725105230">"Editatu"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ordua"</string>
<string-array name="clock_options">
@@ -837,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ordeztu"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikazioak exekutatzen ari dira atzeko planoan"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Sakatu bateria eta datuen erabilerari buruzko xehetasunak ikusteko"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Datu-konexioa desaktibatu nahi duzu?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Datu-konexioa desaktibatu nahi duzu?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> erabilita ezingo dituzu erabili datuak edo Internet. Wi-Fi sare batera soilik konektatu ahal izango duzu Internetera."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"Uneko operadorea"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Aplikazio bat baimen-eskaera oztopatzen ari denez, ezarpenek ezin dute egiaztatu erantzuna."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> aplikazioari <xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakustea baimendu nahi diozu?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioaren informazioa irakur dezake."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 9091996..6bf02b1 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> käytettävissä, noin <xliff:g id="TIME">%s</xliff:g> jäljellä käytön perusteella"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> käytettävissä, noin <xliff:g id="TIME">%s</xliff:g> jäljellä"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> jäljellä. Virransäästö on käytössä."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Lataaminen USB:llä ei onnistu. Käytä laitteesi mukana tullutta laturia."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Lataaminen USB:llä ei onnistu"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Käytä laitteesi mukana tullutta laturia"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Asetukset"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Otetaanko virransäästö käyttöön?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ota käyttöön"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Yhdistetty."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Yhdistetään."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lentokonetila on päällä."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lentokonetila poistettiin käytöstä."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lentokonetila otettiin käyttöön."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Älä häiritse ‑tila on käytössä."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Älä häiritse -tila on päällä, täydellinen hiljaisuus."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Älä häiritse -tila on päällä, vain herätykset toistetaan."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Älä häiritse."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Jälkiruokavitriini"</string>
<string name="start_dreams" msgid="5640361424498338327">"Näytönsäästäjä"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Katso lisää vaihtoehtoja koskettamalla kuvakkeita pitkään"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Älä häiritse"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Vain tärkeät"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Vain herätykset"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> alkaa tallentaa kaiken näytölläsi näkyvän."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Älä näytä uudelleen"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Poista kaikki"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Älä häiritse ‑tila piilottaa ilmoitukset."</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Aloita nyt"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ei ilmoituksia"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiilia saatetaan valvoa"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Siirry värinätilaan napauttamalla."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Mykistä napauttamalla."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Äänenvoimakkuuden säädin: %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Puhelut ja ilmoitukset värisevät"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Puhelut ja ilmoitukset mykistetään"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Puhelut ja ilmoitukset soivat"</string>
<string name="output_title" msgid="5355078100792942802">"Median äänentoisto"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Puhelun äänentoisto"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Oikea näppäinkoodi"</string>
<string name="left_icon" msgid="3096287125959387541">"Vasen kuvake"</string>
<string name="right_icon" msgid="3952104823293824311">"Oikea kuvake"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lisää osioita vetämällä"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Lisää osioita koskettamalla pitkään ja vetämällä."</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Poista vetämällä tähän."</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Kuusi osiota on vähimmäismäärä."</string>
<string name="qs_edit" msgid="2232596095725105230">"Muokkaa"</string>
<string name="tuner_time" msgid="6572217313285536011">"Aika"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Korvaa"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Sovelluksia käynnissä taustalla"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Katso lisätietoja akun ja datan käytöstä napauttamalla"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Poistetaanko mobiilidata käytöstä?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Poistetaanko mobiilidata käytöstä?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> ei voi enää tarjota sinulle internetyhteyttä. Internetyhteys voidaan muodostaa vain Wi-Fi-verkossa."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operaattorisi"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Sovellus peittää käyttöoikeuspyynnön, joten Asetukset ei voi vahvistaa valintaasi."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Saako <xliff:g id="APP_0">%1$s</xliff:g> näyttää osia sovelluksesta <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Se voi lukea tietoja sovelluksesta <xliff:g id="APP">%1$s</xliff:g>."</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index b028856..1a10610 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> – Temps restant en fonction de votre utilisation : environ <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> – Temps restant : environ <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> restants. L\'économiseur de batterie est activé."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Chargement par USB impossible. Utiliser le chargeur d\'origine fourni avec votre appareil."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Impossible de recharger via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Utiliser le chargeur d\'origine fourni avec votre appareil"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Paramètres"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Activer l\'économiseur de batterie ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activer"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connecté"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connexion en cours…"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1x"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3G+"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode Avion activé"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Le mode Avion est activé."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Mode Ne pas déranger activé."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Mode Ne pas déranger activé, aucune interruption"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Mode \"Ne pas déranger\" activé, alarmes uniquement"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ne pas déranger."</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Vitrine des desserts"</string>
<string name="start_dreams" msgid="5640361424498338327">"Économiseur d\'écran"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Appuyez de manière prolongée sur les icônes pour accéder à d\'autres options"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Prioritaires uniquement"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmes uniquement"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> va commencer à capturer tous les contenus affichés à l\'écran."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ne plus afficher"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tout effacer"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Le mode Ne pas déranger masque les notifications"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Commencer"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Aucune notification"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Le profil peut être contrôlé."</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Appuyez pour mettre en mode vibreur."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Appuyez pour ignorer."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Commandes de volume %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Vibreur pour les appels et les notifications"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Sonnerie désactivée pour les appels et les notifications"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Sonnerie pour les appels et les notifications"</string>
<string name="output_title" msgid="5355078100792942802">"Sortie multimédia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Sortie de l\'appel téléphonique"</string>
@@ -732,8 +725,11 @@
<string name="right_keycode" msgid="708447961000848163">"Code de touche droit"</string>
<string name="left_icon" msgid="3096287125959387541">"Icône gauche"</string>
<string name="right_icon" msgid="3952104823293824311">"Icône droite"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Faites glisser des tuiles ici pour les ajouter"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Faites glisser les tuiles ici pour les supprimer."</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Modifier"</string>
<string name="tuner_time" msgid="6572217313285536011">"Heure"</string>
<string-array name="clock_options">
@@ -837,7 +833,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Remplacer"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Applications en cours d\'exécution en arrière-plan"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Appuyer pour obtenir des informations sur l\'utilisation de la batterie et des données"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Désactiver les données mobiles ?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"L\'application Paramètres ne peut pas valider votre réponse, car une application masque la demande d\'autorisation."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Autoriser <xliff:g id="APP_0">%1$s</xliff:g> à afficher des éléments de <xliff:g id="APP_2">%2$s</xliff:g> ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Accès aux informations de <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 7538ab3..f22f794 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>, é dicir, aproximadamente <xliff:g id="TIME">%s</xliff:g> en función do uso que fas"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>, é dicir, aproximadamente <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. Está activada a función Aforro de batería."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Non se puido realizar a carga por USB. Utiliza o cargador que incluía o dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Non se puido realizar a carga por USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Utiliza o cargador que incluía o dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Configuración"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Queres activar a función Aforro de batería?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activar"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avión activado."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Desactivouse o modo avión."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Activouse o modo avión."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"O modo Non molestar está activado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Non molestar activado, silencio total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Non molestar activado, só alarmas."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Non molestar."</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Caixa de sobremesa"</string>
<string name="start_dreams" msgid="5640361424498338327">"Protector pantalla"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Mantén premidas as iconas para ver máis opcións"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non molestar"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Só prioridade"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Só alarmas"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comezará a capturar todo o que apareza na túa pantalla."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Non mostrar outra vez"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Eliminar todas"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"O modo Non molestar está ocultando as notificacións"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Non hai notificacións"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pódese supervisar"</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toca para establecer a vibración."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toca para silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controis de volume de %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"As chamadas e as notificacións vibrarán"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"As chamadas e as notificacións estarán silenciadas"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Soarán as chamadas e as notificacións"</string>
<string name="output_title" msgid="5355078100792942802">"Saída multimedia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Saída de chamadas telefónicas"</string>
@@ -732,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"Código de teclas á dereita"</string>
<string name="left_icon" msgid="3096287125959387541">"Icona á esquerda"</string>
<string name="right_icon" msgid="3952104823293824311">"Icona á dereita"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastrar para engadir funcións"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Mantén premidos os mosaicos e arrástraos para engadilos"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastra o elemento ata aquí para eliminalo"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Necesitas polo menos 6 mosaicos"</string>
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
@@ -837,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Substituír"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacións que se executan en segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para obter información sobre o uso de datos e a batería"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Queres desactivar os datos móbiles?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Queres desactivar os datos móbiles?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Non terás acceso aos datos nin a Internet a través de <xliff:g id="CARRIER">%s</xliff:g>. Internet só estará dispoñible mediante a wifi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"o teu operador"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Dado que unha aplicación se superpón sobre unha solicitude de permiso, a configuración non pode verificar a túa resposta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Queres permitir que a aplicación <xliff:g id="APP_0">%1$s</xliff:g> mostre partes de <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Pode ler información da aplicación <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 8b2ec60..4392caf 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> બાકી, તમારા વપરાશના આધારે લગભગ <xliff:g id="TIME">%s</xliff:g> બાકી છે"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> બાકી, લગભગ <xliff:g id="TIME">%s</xliff:g> બાકી"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> બાકી. બૅટરી સેવર ચાલુ છે."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB ચાર્જિંગ સમર્થિત નથી.\nફક્ત આપવામાં આવેલ ચાર્જરનો ઉપયોગ કરો."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB ચાર્જિંગ સમર્થિત નથી."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"ફક્ત પ્રદાન કરાયેલ ચાર્જરનો ઉપયોગ કરો."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB મારફતે ચાર્જ કરી શકતા નથી. તમારા ઉપકરણ સાથે આવેલ ચાર્જરનો ઉપયોગ કરો."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB મારફતે ચાર્જ કરી શકતા નથી"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"તમારા ઉપકરણ સાથે આવેલ ચાર્જરનો ઉપયોગ કરો"</string>
<string name="battery_low_why" msgid="4553600287639198111">"સેટિંગ્સ"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"બૅટરી સેવર ચાલુ કરીએ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ચાલુ કરો"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"કૅમેરો ખોલો"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"નવું કાર્ય લેઆઉટ પસંદ કરો"</string>
<string name="cancel" msgid="6442560571259935130">"રદ કરો"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"ફિંગરપ્રિન્ટના સેન્સરને સ્પર્શ કરો"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"ફિંગરપ્રિન્ટનું આઇકન"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ઍપ્લિકેશનનું આઇકન"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"સહાય સંદેશનું ક્ષેત્ર"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"બંધ."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"કનેક્ટ કરી"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"કનેક્ટ થઈ રહ્યું છે."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"રોમિંગ"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"રોમિંગ"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"વાઇ-ફાઇ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"સિમ નથી."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"મોબાઇલ ડેટા"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"મોબાઇલ ડેટા ચાલુ છે"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"મોબાઇલ ડેટા બંધ છે"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"મોબાઇલ ડેટા બંધ છે"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"બ્લૂટૂથ ટિથરિંગ."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"એરપ્લેન મોડ."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ચાલુ છે."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"કોઈ સિમ કાર્ડ નથી."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"કેરીઅર નેટવર્કમાં ફેરફાર થઈ રહ્યો છે."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"કૅરીઅર નેટવર્કમાં ફેરફાર થઈ રહ્યો છે"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"બૅટરીની વિગતો ખોલો"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"બૅટરી <xliff:g id="NUMBER">%d</xliff:g> ટકા."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"બૅટરી ચાર્જ થઈ રહી છે, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ટકા."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"એરપ્લેન મોડ ચાલુ."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"એરપ્લેન મોડ બંધ કર્યું."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"એરપ્લેન મોડ ચાલુ કર્યો."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ખલેલ પાડશો નહીં ચાલુ, ફક્ત પ્રાધાન્યતા."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"ખલેલ પાડશો નહીં ચાલુ."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ખલેલ પાડશો નહીં ચાલુ, સાવ શાંતિ."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ખલેલ પાડશો નહીં ચાલુ, ફક્ત એલાર્મ્સ."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ખલેલ પાડશો નહીં."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ડેઝર્ટ કેસ"</string>
<string name="start_dreams" msgid="5640361424498338327">"સ્ક્રીન સેવર"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ઇથરનેટ"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ખલેલ પાડશો નહીં"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ફક્ત પ્રાધાન્યતા"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ઑડિઓ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"હૅડસેટ"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ઇનપુટ"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ચાલુ કરી રહ્યાં છીએ…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"તેજ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"આપમેળે ફેરવો"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"સ્ક્રીનને આપમેળે ફેરવો"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"વાઇ-ફાઇ બંધ"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"વાઇ-ફાઇ ચાલુ"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"કોઈ વાઇ-ફાઇ નેટવર્ક્સ ઉપલબ્ધ નથી"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"અલાર્મ"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ચાલુ કરી રહ્યાં છીએ…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"કાસ્ટ કરો"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"કાસ્ટ કરી રહ્યાં છે"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"અનામાંકિત ઉપકરણ"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"કનેક્ટ કરી રહ્યું છે..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ટિથરિંગ"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"હૉટસ્પૉટ"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ચાલુ કરી રહ્યાં છીએ…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ચાલુ કરી રહ્યાં છીએ…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ડેટા સેવર ચાલુ છે"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d ઉપકરણ</item>
<item quantity="other">%d ઉપકરણો</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> વાપર્યો"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> મર્યાદા"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ચેતવણી"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"કાર્યાલયની પ્રોફાઇલ"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"નોટિફિકેશન અને ઍપ બંધ છે"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"કાર્યાલયની પ્રોફાઇલ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"રાત્રિ પ્રકાશ"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"સૂર્યાસ્ત વખતે"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"સૂર્યોદય સુધી"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ચાર્જિંગ (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ઝડપથી ચાર્જિંગ (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ધીમેથી ચાર્જિંગ (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"વપરાશકર્તા સ્વિચ કરો"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"વપરાશકર્તાને સ્વિચ કરો, વર્તમાન વપરાશકર્તા <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"વર્તમાન વપરાશકર્તા <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> તમારી સ્ક્રીન પર જે પ્રદર્શિત થાય છે તે દરેક વસ્તુને કેપ્ચર કરવાનું પ્રારંભ કરશે."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ફરીથી બતાવશો નહીં"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"બધુ સાફ કરો"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"ખલેલ પાડશો નહીં નોટિફિકેશન છુપાવી રહ્યું છે"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"હવે પ્રારંભ કરો"</string>
<string name="empty_shade_text" msgid="708135716272867002">"કોઈ સૂચનાઓ નથી"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"પ્રોફાઇલ મૉનિટર કરી શકાય છે"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"સેટ અપ"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"હમણાં બંધ કરો"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"સાઉન્ડ સેટિંગ"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"વિસ્તૃત કરો"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"સંકુચિત કરો"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"આઉટપુટ ઉપકરણ સ્વિચ કરો"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. કંપન પર સેટ કરવા માટે ટૅપ કરો."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. મ્યૂટ કરવા માટે ટૅપ કરો."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s વૉલ્યૂમ નિયંત્રણો"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"કૉલ અને નોટિફિકેશન માટે રિંગ વાગશે"</string>
<string name="output_title" msgid="5355078100792942802">"મીડિયાનું આઉટપુટ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ફોન કૉલનો આઉટપુટ"</string>
<string name="output_none_found" msgid="5544982839808921091">"કોઈ ઉપકરણો મળ્યા નથી"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"પાવર સૂચના નિયંત્રણો સાથે, તમે ઍપની સૂચનાઓ માટે 0 થી 5 સુધીના મહત્વના સ્તરને સેટ કરી શકો છો. \n\n"<b>"સ્તર 5"</b>" \n- સૂચના સૂચિની ટોચ પર બતાવો \n- પૂર્ણ સ્ક્રીન અવરોધની મંજૂરી આપો \n- હંમેશાં ત્વરિત દૃષ્ટિ કરો \n\n"<b>"સ્તર 4"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- હંમેશાં ત્વરિત દૃષ્ટિ કરો \n\n"<b>"સ્તર 3"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n\n"<b>"સ્તર 2"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધ અટકાવો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n- ક્યારેય અવાજ અથવા વાઇબ્રેટ કરશો નહીં \n\n"<b>"સ્તર 1"</b>" \n- પૂર્ણ સ્ક્રીન અવરોધની મંજૂરી આપો \n- ક્યારેય ત્વરિત દૃષ્ટિ કરશો નહીં \n- ક્યારેય અવાજ અથવા વાઇબ્રેટ કરશો નહીં \n- લૉક સ્ક્રીન અને સ્ટેટસ બારથી છુપાવો \n- સૂચના સૂચિના તળિયા પર બતાવો \n\n"<b>"સ્તર 0"</b>" \n- ઍપની તમામ સૂચનાઓને બ્લૉક કરો"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"નોટિફિકેશનો"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"તમને હવેથી આ નોટિફિકેશન દેખાશે નહીં"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"આ બધા નોટિફિકેશન નાના કરવામાં આવશે"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"તમે સામાન્ય રીતે આ નોટીફિકેશનને છોડી દો છો. \nતેમને બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"આ નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"નોટિફિકેશન બંધ કરો"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"બતાવવાનું ચાલુ રાખો"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"નાનું કરો"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"આ ઍપમાંથી નોટિફિકેશન બતાવવાનું ચાલુ રાખીએ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"આ નોટિફિકેશન બંધ કરી શકશો નહીં"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"કૅમેરા"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"માઇક્રોફોન"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"આ તમારી સ્ક્રીન પર અન્ય ઍપની ઉપર દેખાશે"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">આ ઍપની <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">આ ઍપની <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>નો ઉપયોગ કરે છે</item>
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> અને <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>નો ઉપયોગ કરે છે</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"સેટિંગ"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ઓકે"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સૂચના નિયંત્રણો ચાલુ છે"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સૂચના નિયંત્રણો બંધ છે"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"આ ચૅનલની સૂચનાઓને મંજૂરી આપો"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"જમણો કીકોડ"</string>
<string name="left_icon" msgid="3096287125959387541">"ડાબું આઇકન"</string>
<string name="right_icon" msgid="3952104823293824311">"જમણું આઇકન"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ટાઇલ્સ ઉમેરવા માટે ખેંચો"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"દૂર કરવા માટે અહીં ખેંચો"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"સંપાદિત કરો"</string>
<string name="tuner_time" msgid="6572217313285536011">"સમય"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ઝડપી સેટિંગ્સ બંધ કરો."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"એલાર્મ સેટ કર્યો."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> તરીકે સાઇન ઇન કર્યું"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"કોઈ ઇન્ટરનેટ નથી."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"કોઈ ઇન્ટરનેટ નથી"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"વિગતો ખોલો."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> સેટિંગ્સ ખોલો."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"સેટિંગ્સનો ક્રમ સંપાદિત કરો."</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string>
<string name="go_to_web" msgid="2650669128861626071">"બ્રાઉઝર પર જાઓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"મોબાઇલ ડેટા"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"વાઇ-ફાઇ બંધ છે"</string>
<string name="bt_is_off" msgid="2640685272289706392">"બ્લૂટૂથ બંધ છે"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"ખલેલ પાડશો નહીં બંધ છે"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"બદલો"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"પૃષ્ઠભૂમિમાં ચાલી રહેલ ઍપ્લિકેશનો"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"બૅટરી અને ડેટા વપરાશ વિશેની વિગતો માટે ટૅપ કરો"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"મોબાઇલ ડેટા બંધ કરીએ?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"એક ઍપ પરવાનગી વિનંતીને અસ્પષ્ટ કરતી હોવાને કારણે, સેટિંગ્સ તમારા પ્રતિસાદને ચકાસી શકતી નથી."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g>ને <xliff:g id="APP_2">%2$s</xliff:g> સ્લાઇસ બતાવવાની મંજૂરી આપીએ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- મારાથી <xliff:g id="APP">%1$s</xliff:g>ની માહિતી વાંચી શકાતી નથી"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 5a4bfe0..e1fefe6 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> बची है, आपके इस्तेमाल करने के तरीके के हिसाब से बैटरी लगभग <xliff:g id="TIME">%s</xliff:g> चलेगी"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> बची है, बैटरी लगभग <xliff:g id="TIME">%s</xliff:g> चलेगी"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> बैटरी बची है. बैटरी सेवर चालू है."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB चार्जिंग समर्थित नहीं है.\nकेवल आपूर्ति किए गए चार्जर का उपयोग करें."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB चार्जिंग समर्थित नहीं है."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"केवल आपूर्ति किए गए चार्जर का उपयोग करें."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"यूएसबी के ज़रिए चार्ज नहीं किया जा सकता. अपने डिवाइस के साथ मिलने वाले चार्जर का इस्तेमाल करें."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"यूएसबी के ज़रिए चार्ज नहीं किया जा सकता"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"अपने डिवाइस के साथ मिलने वाले चार्जर का इस्तेमाल करें"</string>
<string name="battery_low_why" msgid="4553600287639198111">"सेटिंग"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"क्या आप बैटरी सेवर चालू करना चाहते हैं?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"चालू करें"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"कैमरा खोलें"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"नया कार्य लेआउट चुनें"</string>
<string name="cancel" msgid="6442560571259935130">"रद्द करें"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"फ़िंगरप्रिंट सेंसर को छुएं"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"फ़िंगरप्रिंट आइकॉन"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ऐप्लिकेशन आइकॉन"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"सहायता का मैसेज दिखाने की जगह"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"बंद."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"कनेक्ट है."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"कनेक्ट हो रहा है."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिंग"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"किनारा"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"रोमिंग"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"वाई-फ़ाई"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"कोई सिम नहीं."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा चालू है"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा बंद है"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"मोबाइल डेटा बंद है"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटूथ से इंटरनेट पर शेयर करें."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाई जहाज मोड."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN चालू."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"कोई सिम कार्ड नहीं है."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"मोबाइल और इंटरनेट सेवा देने वाली कंपनी का नेटवर्क बदला जा रहा है."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"मोबाइल और इंटरनेट सेवा देने वाली कंपनी का नेटवर्क बदल रहा है"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"बैटरी का विवरण खोलें"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> प्रतिशत बैटरी."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"बैटरी चार्ज हो रही है, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"हवाई जहाज़ मोड चालू है."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाई जहाज़ मोड को बंद किया गया."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाई जहाज़ मोड को चालू किया गया."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"परेशान ना करें चालू, सिर्फ़ प्राथमिकता."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"परेशान न करें मोड चालू है."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"परेशान ना करें चालू है, पूरी तरह शांत."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"परेशान ना करें चालू, सिर्फ़ अलार्म."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"परेशान ना करें."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"मिठाई का डिब्बा"</string>
<string name="start_dreams" msgid="5640361424498338327">"स्क्रीन सेवर"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ईथरनेट"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"परेशान ना करें"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"सिर्फ़ प्राथमिकता"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ऑडियो"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"हेडसेट"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"इनपुट"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ब्लूटूथ चालू हो रहा है…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"स्क्रीन की रोशनी"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"स्वत: घुमाएं"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"स्क्रीन स्वत: घुमाएं"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाई-फ़ाई बंद"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"वाई-फ़ाई चालू है"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"कोई भी वाई-फ़ाई नेटवर्क उपलब्ध नहीं है"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"अलार्म"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"वाई-फ़ाई चालू हो रहा है…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"कास्ट करें"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"कास्टिंग"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"अनाम डिवाइस"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट हो रहा है..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदरिंग"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हॉटस्पॉट"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"चालू किया जा रहा है..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"हॉटस्पॉट चालू हो रहा है…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"डेटा बचाया जा रहा है"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d डिवाइस</item>
<item quantity="other">%d डिवाइस</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> उपयोग किया गया"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"कार्य प्रोफ़ाइल"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"सूचनाएं और ऐप्लिकेशन बंद हैं"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"कार्य प्रोफ़ाइल"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"नाइट लाइट"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"शाम को चालू की जाएगी"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"सुबह तक चालू रहेगी"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में पूरा होगा)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • तेज़ चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में पूरा होगा)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • धीरे चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में पूरा होगा)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"उपयोगकर्ता बदलें"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"उपयोगकर्ता बदलें, मौजूदा उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"मौजूदा उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपके स्क्रीन पर दिखाई देने वाली हर सामग्री को कैप्चर करना शुरू कर देगी."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"फिर से न दिखाएं"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"सभी साफ़ करें"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"परेशान न करें सुविधा की वजह से सूचनाएं नहीं दिखाई जा रही हैं"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"अब शुरू करें"</string>
<string name="empty_shade_text" msgid="708135716272867002">"कोई सूचना नहीं मिली"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफ़ाइल को मॉनीटर किया जा सकता है"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"सेट करें"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"अभी बंद करें"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"साउंड सेटिंग"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तार करें"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"छोटा करें"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"आउटपुट डिवाइस बदलें"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. कंपन (वाइब्रेशन) पर सेट करने के लिए छूएं."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. म्यूट करने के लिए टैप करें."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s की आवाज़ कम या ज़्यादा करने की सुविधा"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"कॉल अाैर सूचनाओं के लिए डिवाइस की घंटी बजेगी"</string>
<string name="output_title" msgid="5355078100792942802">"मीडिया आउटपुट"</string>
<string name="output_calls_title" msgid="8717692905017206161">"फ़ोन कॉल का आउटपुट"</string>
<string name="output_none_found" msgid="5544982839808921091">"कोई डिवाइस नहीं मिला"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"पावर सूचना नियंत्रण के ज़रिये, आप किसी ऐप की सूचना को उसकी अहमियत के हिसाब से 0 से 5 के लेवल पर सेट कर सकते हैं.\n\n"<b>"लेवल 5"</b>" \n- सूचना सूची में सबसे ऊपर दिखाएं \n- पूरे स्क्रीन को ढंकने की अनुमति दें \n- लगातार देखते रहें \n\n"<b>" लेवल 4"</b>" \n- पूरे स्क्रीन को ढंकें \n- लगातार देखते रहें \n\n"<b>"लेवल 3"</b>" \n- पूरे स्क्रीन को ढंकने से रोकें \n-कभी भी न देखें \n\n"<b>"लेवल 2"</b>" \n- पूरे स्क्रीन को ढंकने से रोकें \n- कभी भी देखें \n- कभी भी आवाज़ या कंपन (वाइब्रेशन) न करें \n\n"<b>"लेवल 1"</b>" \n- पूरे स्क्रीन को ढंकने से रोकें \n- कभी भी न देखें \n- कभी भी आवाज़ या कंपन (वाइब्रेशन) न करें \n- लॉक स्क्रीन और स्टेटस बार से छिपाएं \n- सूचना सूची के नीचे दिखाएं \n\n"<b>"लेवल 0"</b>" \n- ऐप्लिकेशन की सभी सूचनाएं रोक दें"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"सूचना"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"अब आपको ये सूचनाएं दिखाई नहीं देंगी"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"इन सूचनाओं को छोटा कर दिया जाएगा"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"अाप अक्सर इन सूचनाओं को खारिज कर देते हैं. \nआगे भी इन्हें देखना जारी रखना चाहते हैं?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ये सूचनाएं दिखाना जारी रखें?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"सूचनाएं दिखाना बंद करें"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"दिखाना जारी रखें"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"सूचनाएं छोटी करें"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"इस ऐप्लिकेशन से जुड़ी सूचनाएं दिखाना जारी रखें?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ये सूचनाएं दिखाया जाना बंद नहीं किया जा सकता"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"कैमरा"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"माइक्रोफ़ोन"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"आपकी स्क्रीन पर, इस्तेमाल हो रहे दूसरे ऐप्लिकेशन के ऊपर दिखाया जा रहा है"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">यह ऐप्लिकेशन <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">यह ऐप्लिकेशन <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> का इस्तेमाल कर रहा है</item>
+ <item quantity="other"> <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> और <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> का इस्तेमाल कर रहा है</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"सेटिंग"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ठीक है"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सूचना नियंत्रण चालू हैं"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सूचना नियंत्रण बंद हैं"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"इस चैनल से सूचना की पाने की मंज़ूरी दें"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"दायां कुंजी कोड"</string>
<string name="left_icon" msgid="3096287125959387541">"बायां आइकॉन"</string>
<string name="right_icon" msgid="3952104823293824311">"दायां आइकॉन"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइलों को जोड़ने के लिए खींचें और छोड़ें"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"हटाने के लिए यहां खींचें और छोड़ें"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"बदलाव करें"</string>
<string name="tuner_time" msgid="6572217313285536011">"समय"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"त्वरित सेटिंग बंद करें."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"अलार्म सेट."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> के रूप में प्रवेश किया हुआ है"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"कोई इंटरनेट नहीं."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"इंटरनेट कनेक्शन नहीं है"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"विवरण खोलें."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> सेटिंग खोलें."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग के क्रम को बदलें"</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ऐप की जानकारी"</string>
<string name="go_to_web" msgid="2650669128861626071">"ब्राउज़र पर जाएं"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"वाई-फ़ाई बंद है"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ब्लूटूथ बंद है"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"परेशान न करें बंद है"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"बदलें"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"बैकग्राउंड में चल रहे ऐप्लिकेशन"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"बैटरी और डेटा खर्च की जानकारी के लिए छूएं"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करना चाहते हैं?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"ऐप की वजह से मंज़ूरी के अनुरोध को समझने में दिक्कत हो रही है, इसलिए सेटिंग से आपके जवाब की पुष्टि नहीं हो पा रही है."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> को <xliff:g id="APP_2">%2$s</xliff:g> के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- यह <xliff:g id="APP">%1$s</xliff:g> से सूचना पढ़ सकता है"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index dda1b40..2c7e33c 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -39,9 +39,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Preostalo je <xliff:g id="PERCENTAGE">%s</xliff:g>, još otprilike <xliff:g id="TIME">%s</xliff:g> na temelju vaše upotrebe"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Preostalo je <xliff:g id="PERCENTAGE">%s</xliff:g>, još otprilike <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Preostalo <xliff:g id="PERCENTAGE">%s</xliff:g>. Uključena je Štednja baterije."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB punjenje nije podržano.\nUpotrijebite samo priloženi punjač."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Punjenje putem USB-a nije podržano."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Upotrebljavajte samo priloženi punjač."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Punjenje putem USB-a nije moguće. Koristite punjač koji ste dobili s uređajem."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Punjenje putem USB-a nije moguće"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Koristite punjač koji ste dobili s uređajem"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Postavke"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Želite li uključiti Štednju baterije?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Uključi"</string>
@@ -104,8 +104,7 @@
<string name="camera_label" msgid="7261107956054836961">"otvaranje fotoaparata"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Odaberite novi izgled zadataka"</string>
<string name="cancel" msgid="6442560571259935130">"Odustani"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Dodirnite senzor otiska prsta"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Ikona otiska prsta"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Ikona aplikacije"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Područje poruke za pomoć"</string>
@@ -149,28 +148,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Isključeno."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Povezano."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Povezivanje."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G i više"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G i više"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nema SIM kartice."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilni podaci"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilni su podaci uključeni"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilni su podaci isključeni"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobilni su podaci isključeni"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Posredno povezivanje Bluetootha."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u zrakoplovu"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN uključen."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nema SIM kartice."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Promjena mreže operatera."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Promjena mreže mobilnog operatera"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvaranje pojedinosti o bateriji"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterija <xliff:g id="NUMBER">%d</xliff:g> posto."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Baterija se puni, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> posto."</string>
@@ -209,7 +208,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Način rada u zrakoplovu uključen."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način rada u zrakoplovu isključen."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način rada u zrakoplovu uključen."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Ne ometaj\" uključeno, samo prioritetno."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Uključen je način Ne uznemiravaj."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Ne ometaj\" uključeno, potpuna tišina."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Ne ometaj\" uključeno, samo za alarme."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ne ometaj."</string>
@@ -276,8 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Izlog za slastice"</string>
<string name="start_dreams" msgid="5640361424498338327">"Čuvar zaslona"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Dodirnite ikone i zadržite pritisak da biste vidjeli više opcija"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne ometaj"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prioritetno"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Samo alarmi"</string>
@@ -290,6 +288,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Slušalice"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Unos"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Uključivanje…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svjetlina"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatsko izmjenjivanje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Automatsko zakretanje zaslona"</string>
@@ -314,7 +313,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi isključen"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi uključen"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Nije dostupna nijedna Wi-Fi mreža"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarm"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Uključivanje…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Emitiranje"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Emitiranje"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Uređaj bez naziva"</string>
@@ -331,7 +330,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Povezivanje..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Dijeljenje veze"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Žarišna točka"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Uključivanje..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Uključivanje…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Ušteda podat. uklj."</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d uređaj</item>
<item quantity="few">%d uređaja</item>
@@ -346,8 +346,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> iskorišteno"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ograničenje od <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Radni profil"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Isključene su obavijesti i aplikacije"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Radni profil"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Noćno svjetlo"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Uključuje se u suton"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Do izlaska sunca"</string>
@@ -400,9 +399,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • brzo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • sporo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Promjena korisnika"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Promjena korisnika, trenutačni korisnik <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Trenutačan korisnik <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -436,6 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> počet će snimati sve što se prikazuje na zaslonu."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ne prikazuj ponovo"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Izbriši sve"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Način Ne uznemiravaj sakriva obavijesti"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Započni sad"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nema obavijesti"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil se možda nadzire"</string>
@@ -503,6 +503,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Postavi"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Odmah isključi"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Postavke zvuka"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Proširivanje"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Sažimanje"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Promijenite izlazni uređaj"</string>
@@ -540,6 +541,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dodirnite da biste postavili na vibraciju."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da biste isključili zvuk."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Kontrole glasnoće – %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Čut će se zvučni signal poziva i obavijesti"</string>
<string name="output_title" msgid="5355078100792942802">"Medijski izlaz"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Izlaz telefonskih poziva"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nije pronađen nijedan uređaj"</string>
@@ -595,12 +597,29 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Napredne kontrole obavijesti omogućuju vam da postavite razinu važnosti za obavijesti aplikacije od 0 do 5. \n\n"<b>"Razina 5"</b>" \n– prikaži na vrhu popisa obavijesti \n– dopusti prekide prikaza na cijelom zaslonu \n– uvijek dopusti brzi pregled \n\n"<b>"Razina 4"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– uvijek dopusti brzi pregled \n\n"<b>"Razina 3"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled\n\n"<b>"Razina 2"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled \n– nikad ne emitiraj zvuk ni vibraciju \n\n"<b>"Razina 1"</b>" \n– onemogući prekid prikaza na cijelom zaslonu \n– nikad ne dopusti brzi pregled \n– nikad ne emitiraj zvuk ni vibraciju \n– ne prikazuj na zaključanom zaslonu i traci statusa \n– prikaži na dnu popisa obavijesti \n\n"<b>"Razina 0"</b>" \n– blokiraj sve obavijesti aplikacije"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Obavijesti"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Te vam se obavijesti više neće prikazivati"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Te će se obavijesti minimizirati"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Obično odbacujete te obavijesti. \nŽelite li da se nastave prikazivati?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Želite li da se obavijesti nastave prikazivati?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Zaustavi obavijesti"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Nastavi prikazivati"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimiziraj"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Želite li da se obavijesti te aplikacije nastave prikazivati?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Te se obavijesti ne mogu isključiti"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparat"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"prikazuje se preko drugih aplikacija na zaslonu"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="few">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Ova aplikacija <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="few">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">upotrebljava <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> i <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Postavke"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"U redu"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Otvorene su kontrole obavijesti za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Zatvorene su kontrole obavijesti za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Dopusti obavijesti za ovaj kanal"</string>
@@ -710,8 +729,11 @@
<string name="right_keycode" msgid="708447961000848163">"Desni kôd tipke"</string>
<string name="left_icon" msgid="3096287125959387541">"Lijeva ikona"</string>
<string name="right_icon" msgid="3952104823293824311">"Desna ikona"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Povucite da biste dodali pločice"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Povucite ovdje za uklanjanje"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Uredi"</string>
<string name="tuner_time" msgid="6572217313285536011">"Vrijeme"</string>
<string-array name="clock_options">
@@ -755,7 +777,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zatvaranje brzih postavki."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarm je postavljen."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Prijavljeni ste kao <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Nema interneta."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Nema interneta"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Otvaranje pojedinosti."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Otvaranje postavki za <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Uređivanje redoslijeda postavki."</string>
@@ -803,6 +825,7 @@
<string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
<string name="go_to_web" msgid="2650669128861626071">"Otvori preglednik"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je isključen"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je isključen"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Način Ne ometaj isključen"</string>
@@ -814,7 +837,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Zamijeni"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Izvođenje aplikacija u pozadini"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite da biste vidjeli pojedinosti o potrošnji baterije i podatkovnom prometu"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Isključiti mobilne podatke?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Budući da aplikacija prekriva zahtjev za dopuštenje, Postavke ne mogu potvrditi vaš odgovor."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Želite li dopustiti aplikaciji <xliff:g id="APP_0">%1$s</xliff:g> da prikazuje isječke aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– može čitati informacije aplikacije <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 2e5779a..c937c3a 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> maradt, körülbelül <xliff:g id="TIME">%s</xliff:g> van hátra a használat alapján"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> maradt, körülbelül <xliff:g id="TIME">%s</xliff:g> van hátra"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> maradt. Az Akkumulátorkímélő mód be van kapcsolva."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Nem tölthető USB-n keresztül. Használja az eszközhöz kapott eredeti töltőt."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Nem tölthető USB-n keresztül"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Használja az eszközhöz kapott eredeti töltőt"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Beállítások"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Bekapcsolja az Akkumulátorkímélő módot?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Bekapcsolás"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Csatlakoztatva."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Csatlakozás."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Repülős üzemmód bekapcsolva."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Repülős üzemmód kikapcsolva."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Repülős üzemmód bekapcsolva."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Ne zavarjanak mód bekapcsolva."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„Ne zavarjanak” mód bekapcsolva; teljes némítás."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"A „Ne zavarjanak” mód bekapcsolva. Csak ébresztések."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ne zavarjanak"</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Képernyővédő"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Tartsa lenyomva az ikonokat a további lehetőségek megjelenítéséhez"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne zavarjanak"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Csak prioritásos"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Csak ébresztések"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"A(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> alkalmazás rögzíteni fog mindent, ami megjelenik a képernyőn."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ne jelenjen meg többé"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Az összes törlése"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"A Ne zavarjanak mód elrejti az értesítéseket"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Indítás most"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nincs értesítés"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilját felügyelhetik"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Koppintson a rezgés beállításához."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Koppintson a némításhoz."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s hangerőszabályzók"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"A hívások és az értesítések rezegnek"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"A hívások és az értesítések némák"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"A hívások és az értesítések hangjelzést adnak"</string>
<string name="output_title" msgid="5355078100792942802">"Médiakimenet"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefonhívás-kimenet"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Jobb oldali billentyűkód"</string>
<string name="left_icon" msgid="3096287125959387541">"Bal oldali ikon"</string>
<string name="right_icon" msgid="3952104823293824311">"Jobb oldali ikon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Húzza csempe hozzáadásához"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Tartsa lenyomva, és húzza a mozaikok hozzáadásához"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Húzza ide az eltávolításhoz"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Legalább hat mozaik szükséges"</string>
<string name="qs_edit" msgid="2232596095725105230">"Szerkesztés"</string>
<string name="tuner_time" msgid="6572217313285536011">"Idő"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Csere"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"A háttérben még futnak alkalmazások"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Koppintson az akkumulátor- és adathasználat részleteinek megtekintéséhez"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kikapcsolja a mobiladatokat?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Kikapcsolja a mobiladatokat?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Nem lesz adat-, illetve internet-hozzáférése <xliff:g id="CARRIER">%s</xliff:g> szolgáltatón keresztül. Az internethez csak Wi-Fi-n keresztül csatlakozhat."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"saját mobilszolgáltató"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Mivel az egyik alkalmazás eltakarja az engedélykérést, a Beállítások alkalmazás nem tudja ellenőrizni az Ön válaszát."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Engedélyezi a(z) <xliff:g id="APP_0">%1$s</xliff:g> alkalmazásnak, hogy részleteket mutasson a(z) <xliff:g id="APP_2">%2$s</xliff:g> alkalmazásból?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Információkat olvashat a(z) <xliff:g id="APP">%1$s</xliff:g> alkalmazásból"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 9ac1160..ac37819 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Sisa <xliff:g id="PERCENTAGE">%s</xliff:g>, kira-kira <xliff:g id="TIME">%s</xliff:g> lagi berdasarkan penggunaan Anda"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Sisa <xliff:g id="PERCENTAGE">%s</xliff:g>, kira-kira <xliff:g id="TIME">%s</xliff:g> lagi"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Tersisa <xliff:g id="PERCENTAGE">%s</xliff:g>. Penghemat Baterai aktif."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Tidak dapat mengisi daya melalui USB. Gunakan pengisi daya yang disertakan dengan perangkat."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Tidak dapat mengisi daya melalui USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Gunakan pengisi daya yang disertakan dengan perangkat"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Setelan"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Aktifkan Penghemat Baterai?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktifkan"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Tersambung."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Menyambung."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode pesawat aktif."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mode pesawat dinonaktifkan."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mode pesawat diaktifkan."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Mode \"Jangan ganggu\" aktif."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Fitur jangan ganggu aktif, senyap total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Jangan ganggu aktif, hanya alarm."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Jangan ganggu."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Etalase Hidangan Penutup"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Tekan & tahan ikon untuk opsi lainnya"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Hanya untuk prioritas"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Hanya alarm"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan mulai menangkap apa saja yang ditampilkan pada layar Anda."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Jangan tampilkan lagi"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hapus semua"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Mode Jangan Ganggu menyembunyikan notifikasi"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Mulai sekarang"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Tidak ada pemberitahuan"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil dapat dipantau"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap untuk menyetel agar bergetar."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap untuk menonaktifkan."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s kontrol volume"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Panggilan dan notifikasi akan bergetar"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Suara panggilan dan notifikasi akan dinonaktifkan"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Panggilan dan notifikasi akan berdering"</string>
<string name="output_title" msgid="5355078100792942802">"Keluaran media"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Keluaran panggilan telepon"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Kode tombol kanan"</string>
<string name="left_icon" msgid="3096287125959387541">"Ikon kiri"</string>
<string name="right_icon" msgid="3952104823293824311">"Ikon kanan"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Tarik untuk menambahkan ubin"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Tahan dan tarik untuk menambahkan tile"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Tarik ke sini untuk menghapus"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Anda membutuhkan setidaknya 6 tile"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Waktu"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ganti"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikasi yang sedang berjalan di latar belakang"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap untuk melihat detail penggunaan baterai dan data"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Nonaktifkan data seluler?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Nonaktifkan kuota?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Anda tidak akan dapat mengakses data atau internet melalui <xliff:g id="CARRIER">%s</xliff:g>. Internet hanya akan tersedia melalui Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"Operator Seluler Anda"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Karena sebuah aplikasi menghalangi permintaan izin, Setelan tidak dapat memverifikasi respons Anda."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Izinkan <xliff:g id="APP_0">%1$s</xliff:g> menampilkan potongan <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Dapat membaca informasi dari <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 28f327f..7fa89f2 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -32,15 +32,15 @@
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string>
- <string name="battery_low_title" msgid="6456385927409742437">"Batteria quasi scarica"</string>
+ <string name="battery_low_title" msgid="6456385927409742437">"Poca batteria"</string>
<string name="battery_low_title_hybrid" msgid="6268991275887381595">"Batteria quasi scarica. Attiva Risparmio energetico"</string>
<string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> rimanente"</string>
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. Tempo rimanente in base al tuo utilizzo: <xliff:g id="TIME">%s</xliff:g> circa"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. Tempo rimanente: <xliff:g id="TIME">%s</xliff:g> circa"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> rimanente. Risparmio energetico attivo."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Ricarica tramite USB non supportata.\nUtilizza solo il caricatore in dotazione."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Ricarica tramite USB non supportata."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Utilizza solo il caricabatterie fornito in dotazione."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Impossibile ricaricare tramite USB. Utilizza il caricabatterie fornito in dotazione con il dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Impossibile ricaricare tramite USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Utilizza il caricabatterie fornito in dotazione con il dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Impostazioni"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Attivare Risparmio energetico?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Attiva"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"apri fotocamera"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Seleziona un nuovo layout per le attività"</string>
<string name="cancel" msgid="6442560571259935130">"Annulla"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Tocca il sensore di impronte digitali"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Icona dell\'impronta digitale"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Icona dell\'applicazione"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Area dei messaggi di assistenza"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"OFF"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Connesso."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connessione in corso."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Nessuna SIM presente."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dati mobili"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dati mobili attivati"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Dati mobili disattivati"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Dati mobili disattivati"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modalità aereo."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN attiva."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nessuna SIM presente."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Cambio rete operatore."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Cambio della rete dell\'operatore"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Visualizza i dettagli relativi alla batteria"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batteria: <xliff:g id="NUMBER">%d</xliff:g> percento."</string>
<!-- String.format failed for translation -->
@@ -210,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modalità aereo attiva."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modalità aereo disattivata."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modalità aereo attivata."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Non disturbare\" attivo, solo con priorità."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Modalità Non disturbare attiva."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Opzione \"Non disturbare\" attiva, silenzio totale."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Non disturbare\" attivo, solo sveglie."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Non disturbare."</string>
@@ -276,8 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Vetrina di dolci"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screensaver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Tocca e tieni premuta ciascuna icona per visualizzare altre opzioni"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non disturbare"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo con priorità"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Solo sveglie"</string>
@@ -290,6 +288,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Auricolare"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Ingresso"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Attivazione…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosità"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotazione automatica"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Rotazione automatica dello schermo"</string>
@@ -314,7 +313,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi disattivato"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi attivo"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Nessuna rete Wi-Fi disponibile"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Sveglia"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Attivazione…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Trasmetti"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"In trasmissione"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo senza nome"</string>
@@ -331,7 +330,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Connessione..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Attivazione…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Attivazione…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Risp. dati attivo"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d dispositivi</item>
<item quantity="one">%d dispositivo</item>
@@ -345,8 +345,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizzati"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite di <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avviso <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Profilo di lavoro"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Le app e le notifiche sono disattivate"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Profilo di lavoro"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luminosità notturna"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Attivata al tramonto"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Fino all\'alba"</string>
@@ -399,9 +398,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • In carica (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica veloce (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Cambio utente"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Cambia utente, utente corrente <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Utente corrente <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -435,6 +434,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inizierà ad acquisire tutto ciò che è visualizzato sul tuo schermo."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Non mostrare più"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Cancella tutto"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"La modalità Non disturbare nasconde le notifiche"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Avvia adesso"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nessuna notifica"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Il profilo potrebbe essere monitorato"</string>
@@ -502,6 +502,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Disattiva ora"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Impostazioni audio"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Espandi"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Comprimi"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Cambia dispositivo di uscita"</string>
@@ -539,6 +540,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tocca per attivare la vibrazione."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tocca per disattivare l\'audio."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controlli del volume %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"L\'audio di chiamate e notifiche sarà attivo"</string>
<string name="output_title" msgid="5355078100792942802">"Uscita contenuti multimediali"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Uscita telefonate"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nessun dispositivo trovato"</string>
@@ -594,12 +596,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"I controlli di gestione delle notifiche ti consentono di impostare un livello di importanza compreso tra 0 e 5 per le notifiche di un\'app. \n\n"<b>"Livello 5"</b>" \n- Mostra in cima all\'elenco di notifiche \n- Consenti l\'interruzione a schermo intero \n- Visualizza sempre \n\n"<b>"Livello 4"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Visualizza sempre \n\n"<b>"Livello 3"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n\n"<b>"Livello 2"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n- Non emettere mai suoni e vibrazioni \n\n"<b>"Livello 1"</b>" \n- Impedisci l\'interruzione a schermo intero \n- Non visualizzare mai \n- Non emettere mai suoni e vibrazioni \n- Nascondi da schermata di blocco e barra di stato \n- Mostra in fondo all\'elenco di notifiche \n\n"<b>"Livello 0"</b>" \n- Blocca tutte le notifiche dell\'app"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notifiche"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Non vedrai più queste notifiche"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Le notifiche verranno ridotte a icona"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"In genere ignori queste notifiche. \nVuoi continuare a riceverle?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuare a ricevere queste notifiche?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Interrompi la ricezione di notifiche"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continua a mostrare"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Riduci a icona"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuare a ricevere notifiche da questa app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Queste notifiche non possono essere disattivate"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"fotocamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfono"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"mostrata sopra altre app sullo schermo"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Questa app <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Questa app <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">usa la <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e il <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">usa la <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Impostazioni"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlli di gestione delle notifiche per <xliff:g id="APP_NAME">%1$s</xliff:g> aperti"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Controlli di gestione delle notifiche per <xliff:g id="APP_NAME">%1$s</xliff:g> chiusi"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Consenti le notifiche di questo canale"</string>
@@ -707,8 +724,9 @@
<string name="right_keycode" msgid="708447961000848163">"Keycode destra"</string>
<string name="left_icon" msgid="3096287125959387541">"Icona sinistra"</string>
<string name="right_icon" msgid="3952104823293824311">"Icona destra"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trascina per aggiungere le funzioni"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Tieni premuto e trascina per aggiungere riquadri"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Trascina qui per rimuovere"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Occorrono almeno sei riquadri"</string>
<string name="qs_edit" msgid="2232596095725105230">"Modifica"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ora"</string>
<string-array name="clock_options">
@@ -752,7 +770,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Chiudi le impostazioni rapide."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Sveglia impostata."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Accesso eseguito come <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Nessuna connessione Internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Nessuna connessione a Internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Apri i dettagli."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Apri le impostazioni <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Modifica l\'ordine delle impostazioni."</string>
@@ -800,6 +818,7 @@
<string name="app_info" msgid="6856026610594615344">"Informazioni app"</string>
<string name="go_to_web" msgid="2650669128861626071">"Vai al browser"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dati mobili"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> - <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi disattivato"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth non attivo"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Funzione Non disturbare disattivata"</string>
@@ -811,7 +830,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Sostituisci"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"App in esecuzione in background"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocca per conoscere i dettagli sull\'utilizzo dei dati e della batteria"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Disattivare i dati mobili?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Disattivare i dati mobili?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Non avrai accesso ai dati o a Internet tramite <xliff:g id="CARRIER">%s</xliff:g>. Internet sarà disponibile soltanto tramite Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"il tuo operatore"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Un\'app sta oscurando una richiesta di autorizzazione, pertanto Impostazioni non può verificare la tua risposta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Vuoi consentire all\'app <xliff:g id="APP_0">%1$s</xliff:g> di mostrare porzioni dell\'app <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Può leggere informazioni dell\'app <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index b422f95..e8b4c8d 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"残量 <xliff:g id="PERCENTAGE">%s</xliff:g>、約 <xliff:g id="TIME">%s</xliff:g>(使用状況に基づく)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"残量 <xliff:g id="PERCENTAGE">%s</xliff:g>、約 <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"残量が <xliff:g id="PERCENTAGE">%s</xliff:g> です。バッテリー セーバーは ON です。"</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB充電には対応していません。\n付属の充電器をお使いください。"</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB充電には対応していません。"</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"専用の充電器のみを使用してください。"</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB 経由では充電できません。端末に付属の充電器を使用してください。"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB 経由では充電できません"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"端末に付属の充電器を使用してください"</string>
<string name="battery_low_why" msgid="4553600287639198111">"設定"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"バッテリー セーバーを ON にしますか?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ONにする"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"カメラを起動"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"新しいタスクレイアウトの選択"</string>
<string name="cancel" msgid="6442560571259935130">"キャンセル"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"指紋認証センサーをタップしてください"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"指紋アイコン"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"アプリのアイコン"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"ヘルプ メッセージ領域"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"OFF"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"接続済みです。"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"接続しています。"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ローミング中"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"ローミング"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIMがありません。"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"モバイルデータ"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"モバイルデータ ON"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"モバイルデータ OFF"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"モバイルデータ OFF"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothテザリング。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"機内モード。"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN は ON です。"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIMカードが挿入されていません。"</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"携帯通信会社のネットワークを変更します。"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"携帯通信会社のネットワークを変更します"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"電池の詳細情報を開きます"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"電池残量: <xliff:g id="NUMBER">%d</xliff:g>パーセント"</string>
<!-- String.format failed for translation -->
@@ -210,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"機内モードがONです。"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"機内モードをOFFにしました。"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"機内モードをONにしました。"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"マナーモードは ON で、優先する通知のみ許可します。"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"マナーモードは ON です。"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"マナーモードは ON で、サイレント モードです。"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"マナーモードは ON で、アラームのみ許可します。"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"マナーモード"</string>
@@ -276,7 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"デザートケース"</string>
<string name="start_dreams" msgid="5640361424498338327">"スクリーン セーバー"</string>
<string name="ethernet_label" msgid="7967563676324087464">"イーサネット"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"マナーモード"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"優先する通知のみ"</string>
@@ -290,6 +289,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"オーディオ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ヘッドセット"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"入力"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ON にしています…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"画面の明るさ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"自動回転"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"画面を自動回転します"</string>
@@ -314,7 +314,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi OFF"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi: ON"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Wi-Fiネットワークを利用できません"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"アラーム"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ON にしています…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"キャスト"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"キャストしています"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"名前のないデバイス"</string>
@@ -331,7 +331,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"接続しています..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"テザリング"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"アクセスポイント"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ON にしています…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ON にしています…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"データセーバー ON"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d 台の端末</item>
<item quantity="one">%d 台の端末</item>
@@ -345,8 +346,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g>使用中"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上限: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"警告: 上限は<xliff:g id="DATA_LIMIT">%s</xliff:g>です"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"仕事用プロファイル"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"通知とアプリは OFF です"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"仕事用プロファイル"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"読書灯"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"日の入りに ON"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"日の出まで"</string>
@@ -399,9 +399,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 充電中(完了まで <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 急速充電中(完了まで <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 低速充電中(完了まで <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ユーザーを切り替える"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ユーザーを切り替える、現在のユーザーは<xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"現在のユーザー: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -435,6 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>で、画面に表示されているコンテンツのキャプチャを開始します。"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"次回から表示しない"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"すべて消去"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"マナーモードでは通知が非表示になります"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"今すぐ開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"通知はありません"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"プロファイルが監視されている可能性があります"</string>
@@ -502,6 +503,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"OFF にする"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"音声の設定"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"展開"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"折りたたむ"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"出力デバイスを選択"</string>
@@ -539,6 +541,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。タップしてバイブレーションに設定します。"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。タップしてミュートします。"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s の音量調節"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"着信音と通知音が鳴ります"</string>
<string name="output_title" msgid="5355078100792942802">"メディア出力"</string>
<string name="output_calls_title" msgid="8717692905017206161">"通話の出力"</string>
<string name="output_none_found" msgid="5544982839808921091">"デバイスが見つかりません"</string>
@@ -594,12 +597,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"電源通知管理では、アプリの通知の重要度をレベル 0~5 で設定できます。\n\n"<b>"レベル 5"</b>" \n- 通知リストの一番上に表示する \n- 全画面表示を許可する \n- 常にポップアップする \n\n"<b>"レベル 4"</b>" \n- 全画面表示しない \n- 常にポップアップする \n\n"<b>"レベル 3"</b>" \n- 全画面表示しない \n- ポップアップしない \n\n"<b>"レベル 2"</b>" \n- 全画面表示しない \n- ポップアップしない \n- 音やバイブレーションを使用しない \n\n"<b>"レベル 1"</b>" \n- 全画面表示しない \n- ポップアップしない \n- 音やバイブレーションを使用しない \n- ロック画面やステータスバーに表示しない \n- 通知リストの一番下に表示する \n\n"<b>"レベル 0"</b>" \n- アプリからのすべての通知をブロックする"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"今後、この通知は表示されません"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"通知を最小化します"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"通常、この通知は非表示にしています。\n引き続き、表示しますか?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"この通知を今後も表示しますか?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"通知を表示しない"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"今後も表示する"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"最小化"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"このアプリからの通知を今後も表示しますか?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"この通知を OFF にすることはできません"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"カメラ"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"マイク"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"画面の他のアプリの上に重ねて表示"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">このアプリのアクティビティ: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>、<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>。</item>
+ <item quantity="one">このアプリのアクティビティ: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>。</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>、<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>の使用</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>の使用</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"設定"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> の通知管理は開いています"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> の通知管理は閉じています"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"このチャンネルからの通知を許可する"</string>
@@ -707,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"右キーコード"</string>
<string name="left_icon" msgid="3096287125959387541">"左アイコン"</string>
<string name="right_icon" msgid="3952104823293824311">"右アイコン"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"タイルを追加するにはドラッグしてください"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"タイルを追加するには押し続けながらドラッグ"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"削除するにはここにドラッグ"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"タイルは 6 個以上必要"</string>
<string name="qs_edit" msgid="2232596095725105230">"編集"</string>
<string name="tuner_time" msgid="6572217313285536011">"時間"</string>
<string-array name="clock_options">
@@ -752,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"クイック設定を閉じます。"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"アラームを設定しました。"</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> としてログインします"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"インターネットに接続されていません。"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"インターネットに接続されていません"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"詳細情報を開きます。"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> の設定を開きます。"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"設定の順序を編集します。"</string>
@@ -800,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"アプリ情報"</string>
<string name="go_to_web" msgid="2650669128861626071">"ブラウザに移動"</string>
<string name="mobile_data" msgid="7094582042819250762">"モバイルデータ"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi は OFF です"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth は OFF です"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"マナーモードは OFF です"</string>
@@ -811,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"設定を変更"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"バックグラウンドで実行中のアプリ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"タップして電池やデータの使用量を確認"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"モバイルデータを OFF にしますか?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"モバイルデータを OFF にしますか?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> でデータやインターネットにアクセスできなくなります。インターネットには Wi-Fi からのみ接続できます。"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"携帯通信会社"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"アプリが許可リクエストを隠しているため、設定側でユーザーの応答を確認できません。"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"「<xliff:g id="APP_2">%2$s</xliff:g>」のスライスの表示を「<xliff:g id="APP_0">%1$s</xliff:g>」に許可しますか?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- 「<xliff:g id="APP">%1$s</xliff:g>」からの情報の読み取り"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index d623341..d3e48df 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"დარჩენილია <xliff:g id="PERCENTAGE">%s</xliff:g>, რაც დაახლოებით <xliff:g id="TIME">%s</xliff:g> არის, მოხმარების გათვალისწინებით"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"დარჩენილია <xliff:g id="PERCENTAGE">%s</xliff:g>, რაც დაახლოებით <xliff:g id="TIME">%s</xliff:g> არის"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"დარჩენილია <xliff:g id="PERCENTAGE">%s</xliff:g>. ბატარეის დამზოგი ჩართულია."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB-თ დატენვა ვერ ხერხდება. გამოიყენეთ დამტენი, რომელიც თქვენს მოწყობილობას მოჰყვა."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB-თ დატენვა ვერ ხერხდება"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"გამოიყენეთ დამტენი, რომელიც თქვენს მოწყობილობას მოჰყვა"</string>
<string name="battery_low_why" msgid="4553600287639198111">"პარამეტრები"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"გსურთ ბატარეის დამზოგის ჩართვა?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ჩართვა"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"დაკავშირებულია."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"უკავშირდება."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"თვითმფრინავის რეჟიმი ჩართულია."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"თვითმფრინავის რეჟიმი გამოირთო."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"თვითმფრინავის რეჟიმი ჩაირთო."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"„არ შემაწუხოთ“ ჩართულია."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„ნუ შემაწუხებთ“ ჩართულია, სრული სიჩუმე."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"„ნუ შემაწუხებთ“ ჩართულია, მხოლოდ გაფრთხილებები."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"არ შემაწუხოთ."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"სადესერტო ყუთი"</string>
<string name="start_dreams" msgid="5640361424498338327">"ეკრანმზოგი"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ეთერნეტი"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"ხანგრძლივად დააჭირეთ ხატულებს დამატებითი ვარიანტებისთვის"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"არ შემაწუხოთ"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"მხოლოდ პრიორიტეტული"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"მხოლოდ გაფრთხილებები"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> დაიწყებს იმ ყველაფრის აღბეჭდვას, რაც თქვენს ეკრანზე ჩანს."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"აღარ მაჩვენო"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ყველას გასუფთავება"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"„არ შემაწუხოთ“ რეჟიმი მალავს შეტყობინებებს"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"დაწყება ახლავე"</string>
<string name="empty_shade_text" msgid="708135716272867002">"შეტყობინებები არ არის."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"შესაძლოა პროფილზე ხორციელდებოდეს მონიტორინგი"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. შეეხეთ ვიბრაციაზე დასაყენებლად."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. შეეხეთ დასადუმებლად."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s-ის ხმის მართვის საშუალებები"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"ზარების და შეტყობინებების მიღებისას ვიბრაცია ჩაირთვება"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ზარები და შეტყობინებები დადუმებული იქნება"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ზარები და შეტყობინებები ხმის თანხლებით იქნება"</string>
<string name="output_title" msgid="5355078100792942802">"მედია გამომავალი"</string>
<string name="output_calls_title" msgid="8717692905017206161">"სატელეფონო ზარის გამომავალი სიგნალი"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"მარჯვენა კლავიშის კოდი"</string>
<string name="left_icon" msgid="3096287125959387541">"მარცხენა ხატულა"</string>
<string name="right_icon" msgid="3952104823293824311">"მარჯვენა ხატულა"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ფაილების დასამატებლად, გადაიტანეთ ჩავლებით"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"ჩავლებით გადაიტანეთ ბლოკების დასამატებლად"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ამოსაშლელად, ჩავლებით გადმოიტანეთ აქ"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"გჭირდებათ მინიმუმ 6 ბლოკი"</string>
<string name="qs_edit" msgid="2232596095725105230">"რედაქტირება"</string>
<string name="tuner_time" msgid="6572217313285536011">"დრო"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ჩანაცვლება"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ფონურ რეჟიმში გაშვებული აპები"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"შეეხეთ ბატარეისა და მონაცემების მოხმარების შესახებ დეტალური ინფორმაციისთვის"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"გსურთ მობილური ინტერნეტის გამორთვა?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"გსურთ მობილური ინტერნეტის გამორთვა?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"თქვენ არ გექნებათ მობილურ ინტერნეტზე ან ზოგადად ინტერნეტზე წვდომა <xliff:g id="CARRIER">%s</xliff:g>-ის მეშვეობით. ინტერნეტი მხოლოდ Wi-Fi-კავშირის მეშვეობით იქნება ხელმისაწვდომი."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"თქვენი ოპერატორი"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"ვინაიდან აპი ფარავს ნებართვის მოთხოვნას, პარამეტრების მიერ თქვენი პასუხი ვერ დასტურდება."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"ანიჭებთ ნებართვას <xliff:g id="APP_0">%1$s</xliff:g>-ს, აჩვენოს <xliff:g id="APP_2">%2$s</xliff:g>-ის ფრაგმენტები?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- მას შეუძლია ინფორმაციის <xliff:g id="APP">%1$s</xliff:g>-დან წაკითხვა"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 089ac3a..e77109c 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Пайдалану барысына байланысты <xliff:g id="PERCENTAGE">%s</xliff:g> заряд, шамамен <xliff:g id="TIME">%s</xliff:g> қалды"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> заряд, шамамен <xliff:g id="TIME">%s</xliff:g> қалды"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> қалды. Battery Saver қосулы."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB арқылы зарядтау мүмкін емес. Құрылғымен бірге берілген зарядтау құралын пайдаланыңыз."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB арқылы зарядтау мүмкін емес"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Құрылғымен бірге берілген зарядтау құралын пайдаланыңыз"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Параметрлер"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Battery Saver функциясы қосылсын ба?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Қосу"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Жалғанған."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Қосылуда."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3,5Г"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Ұшақ режимі қосулы."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Ұшақ режимі өшірілді."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ұшақ режимі қосылды."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Мазаламау\" режимі қосулы."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Мазаламау режимі қосулы, толық тыныштық."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Кедергі жасамаңыз, тек дабылдар."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Мазаламау."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Десерт жағдайы"</string>
<string name="start_dreams" msgid="5640361424498338327">"Экранды сақтау режимі"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Этернет"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Басқа опцияларды көру үшін белгішелерді басып, ұстап тұрыңыз"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Мазаламау"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Маңыздылары ғана"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Тек дабылдар"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> экранда көрсетілгеннің барлығын түсіре бастайды."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Қайта көрсетпеу"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Барлығын тазалау"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\"Мазаламау\" режимі хабарландыруларды жасырады"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Қазір бастау"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Хабарландырулар жоқ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профиль бақылануы мүмкін"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Діріл режимін орнату үшін түртіңіз."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дыбысын өшіру үшін түртіңіз."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Дыбысты басқару элементтері: %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Қоңыраулар мен хабарландырулардың вибрациясы болады"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Қоңыраулар мен хабарландырулардың дыбыстық сигналы өшіріледі"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Қоңыраулар мен хабарландырулардың дыбыстық сигналы болады"</string>
<string name="output_title" msgid="5355078100792942802">"Meдиа шығысы"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Телефон қоңырау шығысы"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Оң жақ кілт коды"</string>
<string name="left_icon" msgid="3096287125959387541">"Сол жақ белгіше"</string>
<string name="right_icon" msgid="3952104823293824311">"Оң жақ белгіше"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Қажеттерін сүйреп қойыңыз"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Бөлшектер қосу үшін ұстап тұрып сүйреңіз"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Керексіздерін осы жерге сүйреңіз"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Кемінде 6 бөлшек қажет"</string>
<string name="qs_edit" msgid="2232596095725105230">"Өңдеу"</string>
<string name="tuner_time" msgid="6572217313285536011">"Уақыт"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ауыстыру"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Фонда жұмыс істеп тұрған қолданбалар"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Батарея мен деректер трафигі туралы білу үшін түртіңіз"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобильдік деректер өшірілсін бе?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Мобильдік деректер өшірілсін бе?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> операторы арқылы деректерге немесе интернетке кіре алмайсыз. Интернетке тек Wi-Fi арқылы кіресіз."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"операторыңыз"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Басқа қолданба рұқсат сұрауын жасырып тұрғандықтан, параметрлер жауабыңызды растай алмайды."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> қолданбасына <xliff:g id="APP_2">%2$s</xliff:g> қолданбасының үзінділерін көрсетуге рұқсат берілсін бе?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Бұл <xliff:g id="APP">%1$s</xliff:g> қолданбасындағы ақпаратты оқи алады"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index dcae7e2..a85fcf7 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"នៅសល់ <xliff:g id="PERCENTAGE">%s</xliff:g> អាចប្រើបានប្រហែល <xliff:g id="TIME">%s</xliff:g> ទៀតផ្អែកលើការប្រើប្រាស់របស់អ្នក"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"នៅសល់ <xliff:g id="PERCENTAGE">%s</xliff:g> អាចប្រើបានប្រហែល <xliff:g id="TIME">%s</xliff:g> ទៀត"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"នៅសល់ <xliff:g id="PERCENTAGE">%s</xliff:g> ។ កម្មវិធីសន្សំថ្មបានបើក។"</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"មិនអាចសាកតាម USB បានទេ។ សូមប្រើឆ្នាំងសាកដែលភ្ជាប់មកជាមួយឧបករណ៍របស់អ្នក។"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"មិនអាចសាកតាម USB បានទេ"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"សូមប្រើឆ្នាំងសាកដែលភ្ជាប់មកជាមួយឧបករណ៍របស់អ្នក"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ការកំណត់"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"បើកកម្មវិធីសន្សំថ្ម?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"បើក"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"បានតភ្ជាប់។"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"ការភ្ជាប់។"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"បើករបៀបជិះយន្តហោះ។"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"បានបិទរបៀបជិះយន្តហោះ។"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"បានបើករបៀបជិះយន្តហោះ។"</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"មុខងារកុំរំខានបានបើក។"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"មុខងារកុំរំខានបានបើក ស្ងៀមស្ងាត់ទាំងស្រុង។"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"មុខងារកុំរំខានបានបើក សម្លេងរោទិ៍ប៉ុណ្ណោះ។"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"កុំរំខាន"</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"ករណី Dessert"</string>
<string name="start_dreams" msgid="5640361424498338327">"ធាតុរក្សាអេក្រង់"</string>
<string name="ethernet_label" msgid="7967563676324087464">"អ៊ីសឺរណិត"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"ចុចលើរូបតំណាងឱ្យជាប់សម្រាប់ជម្រើសបន្ថែម"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"កុំរំខាន"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"អាទិភាពប៉ុណ្ណោះ"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"សំឡេងរោទ៍ប៉ុណ្ណោះ"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> នឹងចាប់ផ្ដើមចាប់យកអ្វីៗគ្រប់យ៉ាងដែលបង្ហាញលើអេក្រង់របស់អ្នក។"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"កុំបង្ហាញម្ដងទៀត"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"សម្អាតទាំងអស់"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"មុខងារកុំរំខានកំពុងលាក់ការជូនដំណឹង"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ចាប់ផ្ដើមឥឡូវ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"គ្មានការជូនដំណឹង"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ប្រវត្តិរូបអាចត្រូវបានតាមដាន"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s ។ ចុចដើម្បីកំណត់ឲ្យញ័រ។"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s ។ ចុចដើម្បីបិទសំឡេង។"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s របារបញ្ជាកម្រិតសំឡេង"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"ការហៅទូរសព្ទ និងការជូនដំណឹងនឹងញ័រ"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ការហៅទូរសព្ទ និងការជូនដំណឹងនឹងបិទសំឡេង"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ការហៅទូរសព្ទ និងការជូនដំណឹងនឹងរោទ៍"</string>
<string name="output_title" msgid="5355078100792942802">"លទ្ធផលមេឌៀ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"លទ្ធផលនៃការហៅទូរសព្ទ"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"កូដគ្រាប់ចុចខាងស្តាំ"</string>
<string name="left_icon" msgid="3096287125959387541">"រូបតំណាងខាងឆ្វេង"</string>
<string name="right_icon" msgid="3952104823293824311">"រូបតំណាងខាងស្ដាំ"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"អូសដើម្បីបន្ថែមប្រអប់"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"ចុចឱ្យជាប់ រួចអូសដើម្បីបញ្ចូលប្រអប់"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"អូសទីនេះដើម្បីយកចេញ"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"អ្នកត្រូវការប្រអប់យ៉ាងតិច 6"</string>
<string name="qs_edit" msgid="2232596095725105230">"កែសម្រួល"</string>
<string name="tuner_time" msgid="6572217313285536011">"ម៉ោង"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ជំនួស"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"កម្មវិធីដែលកំពុងដំណើរការនៅផ្ទៃខាងក្រោយ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ចុចដើម្បីមើលព័ត៌មានលម្អិតអំពីការប្រើប្រាស់ទិន្នន័យ និងថ្ម"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"បិទទិន្នន័យចល័ត?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"បិទទិន្នន័យទូរសព្ទចល័ត?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"អ្នកនឹងមិនមានសិទ្ធិចូលប្រើទិន្នន័យ ឬអ៊ីនធឺណិតតាមរយៈ <xliff:g id="CARRIER">%s</xliff:g> បានឡើយ។ អ៊ីនធឺណិតនឹងអាចប្រើបានតាមរយៈ Wi-Fi តែប៉ុណ្ណោះ។"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"ក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នក"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"ការកំណត់មិនអាចផ្ទៀងផ្ទាត់ការឆ្លើយតបរបស់អ្នកបានទេ ដោយសារកម្មវិធីកំពុងបាំងសំណើសុំការអនុញ្ញាត។"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"អនុញ្ញាតឱ្យ <xliff:g id="APP_0">%1$s</xliff:g> បង្ហាញស្ថិតិប្រើប្រាស់របស់ <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- វាអាចអានព័ត៌មានពី <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 2f8f2a9..fc807c4 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> ಬಾಕಿ ಉಳಿದಿದೆ, ನಿಮ್ಮ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ <xliff:g id="TIME">%s</xliff:g> ಉಳಿದಿದೆ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> ಬಾಕಿ ಉಳಿದಿದೆ, <xliff:g id="TIME">%s</xliff:g> ಉಳಿದಿದೆ"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> ಉಳಿದಿದೆ. ಬ್ಯಾಟರಿ ಉಳಿತಾಯ ಆನ್ ಆಗಿದೆ."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB ಮೂಲಕ ಚಾರ್ಜ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ನೀಡಲಾಗಿರುವ ಚಾರ್ಜರ್ ಬಳಸಿ."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB ಮೂಲಕ ಚಾರ್ಜ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ನಿಮ್ಮ ಸಾಧನದೊಂದಿಗೆ ನೀಡಲಾಗಿರುವ ಚಾರ್ಜರ್ ಬಳಸಿ"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಮಾಡುವುದೇ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ಆನ್ ಮಾಡಿ"</string>
@@ -151,12 +148,10 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ಸಂಪರ್ಕಗೊಂಡಿದೆ."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತಿದೆ."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
- <!-- no translation found for data_connection_3_5g_plus (7570783890290275297) -->
- <skip />
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
<string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
@@ -212,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಆನ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ, ಒಟ್ಟು ನಿಶ್ಯಬ್ಧ."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ಅಲಾರಮ್ಗಳಿಗೆ ಮಾತ್ರ ಅಡಚಣೆ ಮಾಡಬೇಡಿ."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ."</string>
@@ -279,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"ಡೆಸರ್ಟ್ ಕೇಸ್"</string>
<string name="start_dreams" msgid="5640361424498338327">"ಸ್ಕ್ರೀನ್ ಸೇವರ್"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ಇಥರ್ನೆಟ್"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗಾಗಿ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿಹಿಡಿಯಿರಿ"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ಆದ್ಯತೆ ಮಾತ್ರ"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"ಅಲಾರಮ್ಗಳು ಮಾತ್ರ"</string>
@@ -438,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"ನಿಮ್ಮ ಪರದೆಯ ಮೇಲೆ ಪ್ರದರ್ಶಿಸಲಾಗುವ ಎಲ್ಲವನ್ನೂ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಯು ಸೆರೆಹಿಡಿಯಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ಮತ್ತೊಮ್ಮೆ ತೋರಿಸದಿರು"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸು"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\"ಅಡಚಣೆ ಮಾಡಬೇಡ\" ಮೋಡ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮರೆಮಾಡುತ್ತಿದೆ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ಈಗ ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ಪ್ರೊಫೈಲ್ ಅನ್ನು ಪರಿವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ"</string>
@@ -507,8 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"ಹೊಂದಿಸು"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ಈಗ ಆಫ್ ಮಾಡಿ"</string>
- <!-- no translation found for accessibility_volume_settings (4915364006817819212) -->
- <skip />
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ಸೌಂಡ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ವಿಸ್ತರಿಸು"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ಸಂಕುಚಿಸು"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"ಔಟ್ಪುಟ್ ಸಾಧನವನ್ನು ಬದಲಿಸಿ"</string>
@@ -546,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. ವೈಬ್ರೇಟ್ ಮಾಡಲು ಹೊಂದಿಸುವುದಕ್ಕಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಕಗಳು"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು ವೈಬ್ರೇಟ್ ಆಗುತ್ತವೆ"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗುತ್ತದೆ"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು ರಿಂಗ್ ಆಗುತ್ತವೆ"</string>
<string name="output_title" msgid="5355078100792942802">"ಮೀಡಿಯಾ ಔಟ್ಪುಟ್"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ಫೋನ್ ಕರೆ ಔಟ್ಪುಟ್"</string>
@@ -732,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"ಬಲ ಕೀಕೋಡ್"</string>
<string name="left_icon" msgid="3096287125959387541">"ಎಡ ಐಕಾನ್"</string>
<string name="right_icon" msgid="3952104823293824311">"ಬಲ ಐಕಾನ್"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ಟೈಲ್ಗಳನ್ನು ಸೇರಿಸಲು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ತೆಗೆದುಹಾಕಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"ಎಡಿಟ್"</string>
<string name="tuner_time" msgid="6572217313285536011">"ಸಮಯ"</string>
<string-array name="clock_options">
@@ -837,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ಬದಲಿಸಿ"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿವೆ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ಬ್ಯಾಟರಿ,ಡೇಟಾ ಬಳಕೆಯ ವಿವರಗಳಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಬೇಕೆ?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"ಅನುಮತಿ ವಿನಂತಿಯನ್ನು ಅಪ್ಲಿಕೇಶನ್ ಮರೆಮಾಚುತ್ತಿರುವ ಕಾರಣ, ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_2">%2$s</xliff:g> ಸ್ಲೈಸ್ಗಳನ್ನು ತೋರಿಸಲು <xliff:g id="APP_0">%1$s</xliff:g> ಅನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ಇದು <xliff:g id="APP">%1$s</xliff:g> ನಿಂದ ಮಾಹಿತಿಯನ್ನು ಓದಬಹುದು"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index cea198e..92bd640 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> 남음, 내 사용량을 기준으로 약 <xliff:g id="TIME">%s</xliff:g> 남음"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> 남음, 약 <xliff:g id="TIME">%s</xliff:g> 남음"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> 남았습니다. 배터리 세이버를 사용 중입니다."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB로 충전할 수 없습니다. 기기와 함께 제공된 충전기를 사용하세요."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB로 충전할 수 없습니다."</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"기기와 함께 제공된 충전기를 사용하세요."</string>
<string name="battery_low_why" msgid="4553600287639198111">"설정"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"배터리 세이버를 사용 설정하시겠습니까?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"사용"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"연결됨"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"연결 중..."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"비행기 모드: 사용"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"비행기 모드가 사용 중지되었습니다."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"비행기 모드를 사용합니다."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"알림 일시중지를 사용합니다."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"알림 일시중지 사용, 모두 차단"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"알림 일시중지 사용, 알람만 수신"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"알림 일시중지"</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"디저트 케이스"</string>
<string name="start_dreams" msgid="5640361424498338327">"화면 보호기"</string>
<string name="ethernet_label" msgid="7967563676324087464">"이더넷"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"추가 옵션을 보려면 아이콘을 길게 누르세요."</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"알림 일시중지"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"중요 알림만"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"알람만"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>에서 화면에 표시된 모든 것을 캡처하기 시작합니다."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"다시 표시 안함"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"모두 지우기"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"알림 일시중지 기능으로 알림 숨기는 중"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"시작하기"</string>
<string name="empty_shade_text" msgid="708135716272867002">"알림 없음"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"프로필이 모니터링될 수 있음"</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. 탭하여 진동으로 설정하세요."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. 탭하여 음소거로 설정하세요."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s 볼륨 컨트롤"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"전화 및 알림이 오면 진동이 사용됩니다."</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"전화 및 알림 소리가 음소거됩니다."</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"전화 및 알림 소리가 울립니다."</string>
<string name="output_title" msgid="5355078100792942802">"미디어 출력"</string>
<string name="output_calls_title" msgid="8717692905017206161">"전화 통화 출력"</string>
@@ -732,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"오른쪽 키 코드"</string>
<string name="left_icon" msgid="3096287125959387541">"왼쪽 아이콘"</string>
<string name="right_icon" msgid="3952104823293824311">"오른쪽 아이콘"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"드래그하여 타일 추가"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"길게 터치하고 드래그하여 타일 추가"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"여기로 드래그하여 삭제"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"6개 이상의 타일이 필요합니다."</string>
<string name="qs_edit" msgid="2232596095725105230">"수정"</string>
<string name="tuner_time" msgid="6572217313285536011">"시간"</string>
<string-array name="clock_options">
@@ -837,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"바꾸기"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"백그라운드에서 실행 중인 앱"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"탭하여 배터리 및 데이터 사용량 확인"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"모바일 데이터를 사용 중지하시겠습니까?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"모바일 데이터를 사용 중지하시겠습니까?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g>을(를) 통해 데이터 또는 인터넷에 액세스할 수 없습니다. 인터넷은 Wi-Fi를 통해서만 사용할 수 있습니다."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"이동통신사"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"앱이 권한 요청을 가리고 있기 때문에 설정에서 내 응답을 확인할 수 없습니다."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g>에서 <xliff:g id="APP_2">%2$s</xliff:g>의 슬라이스를 표시하도록 허용하시겠습니까?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- <xliff:g id="APP">%1$s</xliff:g>의 정보를 읽을 수 있음"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 22e1e46..a239b15 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> калды, колдонушуңузга караганда болжол менен дагы <xliff:g id="TIME">%s</xliff:g> бар"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> калды, болжол менен дагы <xliff:g id="TIME">%s</xliff:g> бар"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> калды. Батареяны үнөмдөгүч режими күйүк."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB аркылуу кубатталбай жатат. Түзмөгүңүз менен келген кубаттагычты колдонуңуз."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB аркылуу кубатталбай жатат"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Түзмөгүңүз менен келген кубаттагычты колдонуңуз"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Жөндөөлөр"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Батареяны үнөмдөгүч режими күйгүзүлсүнбү?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Күйгүзүү"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Туташтып турат."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Туташууда."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Учак режими күйүк."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Учак режими өчүрүлдү."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Учак режими күйгүзүлдү."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Тынчымды алба\" режими күйүк."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Тынчымды албагыла, жымжырт болсун."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Тынчымды алба деген күйүк, ойготкучтар гана."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Тынчымды алба."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Десерт себети"</string>
<string name="start_dreams" msgid="5640361424498338327">"Көшөгө"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Кошумча параметрлерди ачуу үчүн сүрөтчөлөрдү басып, кармап туруңуз"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Тынчымды алба"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Шашылыш эскертмелер гана"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Ойготкучтар гана"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> экранга чыккан нерсенин баарын сүрөткө тарта баштайт."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Экинчи көрсөтүлбөсүн"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Бардыгын тазалап салуу"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\"Тынчымды алба\" режими эскертмелерди жашырууда"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Азыр баштоо"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Эскертмелер жок"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профилди көзөмөлдөсө болот"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Дирилдөөгө коюу үчүн басыңыз."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Үнүн өчүрүү үчүн басыңыз."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s үндү башкаруу элементтери"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Чалуулар менен эскертмелер дирилдөө режиминде иштейт"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Чалуулар менен эскертмелердин үнү өчүрүлөт"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Чалуулар менен эскертмелердин үнү чыгарылат"</string>
<string name="output_title" msgid="5355078100792942802">"Медиа түзмөк"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Телефон чалуу"</string>
@@ -730,13 +723,14 @@
<string name="right_keycode" msgid="708447961000848163">"Оң жактагы баскыч коду"</string>
<string name="left_icon" msgid="3096287125959387541">"Сол жактагы сүрөтчө"</string>
<string name="right_icon" msgid="3952104823293824311">"Оң жактагы сүрөтчө"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Керектүү нерселерди сүйрөп кошуңуз"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Мозаикаларды кошуу үчүн кармап туруп, сүйрөңүз"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Алып салуу үчүн бул жерге сүйрөңүз"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Сизге жок дегенде 6 мозаика керек"</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="5965318737560463480">"Сааттар, мүнөттөр жана секунддар"</item>
+ <item msgid="1427801730816895300">"Сааттар жана мүнөттөр (демейки шартта)"</item>
<item msgid="3830170141562534721">"Бул сөлөкөт көрсөтүлбөсүн"</item>
</string-array>
<string-array name="battery_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Алмаштыруу"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Фондо иштеп жаткан колдонмолор"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Батареянын кубаты жана трафиктин көлөмү жөнүндө билүү үчүн таптап коюңуз"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобилдик Интернетти өчүрөсүзбү?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Мобилдик Интернет өчүрүлсүнбү?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> байланыш оператору аркылуу дайындарга же Интернетке кирүү мүмкүнчүлүгүңүз болбойт. Интернетке Wi-Fi аркылуу гана кирүү мүмкүн."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"байланыш операторуңуз"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Уруксат берүү сурамыңыз көрүнбөй калгандыктан, Жөндөөлөр жообуңузду ырастай албай жатат."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> колдонмосуна <xliff:g id="APP_2">%2$s</xliff:g> үлгүлөрүн көрсөтүүгө уруксат берилсинби?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- <xliff:g id="APP">%1$s</xliff:g> колдонмосунун маалыматын окуйт"</string>
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index e37ca1c..c59492f 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -24,6 +24,8 @@
<dimen name="brightness_mirror_height">96dp</dimen>
+ <!-- Width for the spacer, used between QS tiles. -->
+ <dimen name="qs_quick_tile_space_width">38dp</dimen>
<dimen name="qs_tile_margin_top">2dp</dimen>
<dimen name="qs_header_tooltip_height">24dp</dimen>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index ce1d551..572d3f4 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"ຍັງເຫຼືອ <xliff:g id="PERCENTAGE">%s</xliff:g>, ປະມານ <xliff:g id="TIME">%s</xliff:g> ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"ຍັງເຫຼືອ <xliff:g id="PERCENTAGE">%s</xliff:g>, ປະມານ <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"ຍັງເຫຼືອ <xliff:g id="PERCENTAGE">%s</xliff:g>. ເປີດໃຊ້ຕົວປະຢັດແບັດເຕີຣີແລ້ວ."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"ບໍ່ຮອງຮັບການສາກໄຟດ້ວຍ USB.\nຕ້ອງໃຊ້ສະເພາະເຄື່ອງສາກທີ່ແຖມມານຳເທົ່ານັ້ນ."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"ບໍ່ຮອງຮັບການສາກຜ່ານ USB."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"ໃຊ້ສະເພາະສາຍສາກທີ່ມາກັບເຄື່ອງ."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"ບໍ່ສາມາດສາກຜ່ານ USB ໄດ້. ໃຫ້ໃຊ້ຕົວສາກທີ່ມາພ້ອມກັບອຸປະກອນຂອງທ່ານ."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"ບໍ່ສາມາດສາກຜ່ານ USB ໄດ້"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ກະລຸນາໃຊ້ຕົວສາກທີ່ມາພ້ອມກັບອຸປະກອນຂອງທ່ານ"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ການຕັ້ງຄ່າ"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ເປີດໃຊ້ຕົວປະຢັດແບັດເຕີຣີບໍ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ເປີດໃຊ້"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"ເປີດກ້ອງ"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"ເລືອກແຜນຜັງໜ້າວຽກໃໝ່"</string>
<string name="cancel" msgid="6442560571259935130">"ຍົກເລີກ"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Touch the fingerprint sensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"ໄອຄອນລາຍນິ້ວມື"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ໄອຄອນແອັບພລິເຄຊັນ"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"ຊ່ວຍພື້ນທີ່ຂໍ້ຄວາມ"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"ປິດ."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ເຊື່ອມຕໍ່ແລ້ວ."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"ກຳລັງເຊື່ອມຕໍ່."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ໂຣມມິງ"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"ໂຣມມິງ"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ບໍ່ມີຊິມ."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"ອິນເຕີເນັດມືຖື"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"ເປີດອິນເຕີເນັດມືຖືແລ້ວ"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"ປິດອິນເຕີເນັດມືຖືແລ້ວ"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"ປິດອິນເຕີເນັດມືຖືແລ້ວ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ການປ່ອຍສັນຍານ Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ໂໝດໃນຍົນ."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ເປີດ."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"ບໍ່ມີແຜ່ນ SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ການປ່ຽນແປງເຄືອຂ່າຍບໍລິສັດເຄືອຂ່າຍມືຖື."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"ການປ່ຽນເຄືອຂ່າຍຜູ້ໃຫ້ບໍລິການ"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ເປີດລາຍລະອຽດແບັດເຕີຣີ"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"ແບັດເຕີຣີ <xliff:g id="NUMBER">%d</xliff:g> ເປີເຊັນ."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ກຳລັງສາກແບັດເຕີຣີ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ເປີເຊັນ."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ເປີດໂໝດຢູ່ໃນຍົນ."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ປິດໂໝດຢູ່ໃນຍົນແລ້ວ."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ຫ້າມລະກວນເປີດຢູ່, ບຸລິມະສິດເທົ່ານັ້ນ."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"ເປີດໂໝດຫ້າມລົບກວນຢູ່."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ຫ້າມລົບກວນເປີດຢູ່, ຄວາມງຽບທັງໝົດ."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ຫ້າມລົບກວນເປີດຢູ່, ໂມງປຸກເທົ່ານັ້ນ."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ຫ້າມລົບກວນ."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ກ່ອງຂອງຫວານ"</string>
<string name="start_dreams" msgid="5640361424498338327">"ພາບພັກໜ້າຈໍ"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ຫ້າມລົບກວນ"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ບຸລິມະສິດເທົ່ານັ້ນ"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ສຽງ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ຊຸດຫູຟັງ"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ການປ້ອນຂໍ້ມູນ"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ກຳລັງເປີດ..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ຄວາມສະຫວ່າງ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ໝຸນອັດຕະໂນມັດ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ປິດ"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ເປີດ"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ບໍ່ມີເຄືອຂ່າຍ Wi-Fi ຢູ່"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"ໂມງປຸກ"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ກຳລັງເປີດ..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"ການສົ່ງສັນຍານ"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"ກຳລັງສົ່ງສັນຍານ"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ອຸປະກອນບໍ່ມີຊື່"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"ກຳລັງເຊື່ອມຕໍ່..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ການປ່ອນສັນຍານ"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ຮັອດສະປອດ"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ກຳລັງເປີດ..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ກຳລັງເປີດ..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ຕົວປະຢັດຂໍ້ມູນເປີດຢູ່"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d ອຸປະກອນ</item>
<item quantity="one">%d ອຸປະກອນ</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"ໃຊ້ໄປແລ້ວ <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ຈຳກັດ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ຄຳເຕືອນ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"ການແຈ້ງເຕືອນ ແລະ ແອັບຖືກປິດໄວ້"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ແສງກາງຄືນ"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"ເປີດຕອນຕາເວັນຕົກ"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"ຈົນກວ່າຕາເວັນຂຶ້ນ"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກ (ອີກ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ຈຶ່ງຈະເຕັມ)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກແບບດ່ວນ (ອີກ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ຈຶ່ງຈະເຕັມ)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ກຳລັງສາກແບບຊ້າ (ອີກ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ຈຶ່ງຈະເຕັມ)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ສະລັບຜູ່ໃຊ້"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ປ່ຽນຜູ່ໃຊ້, ຜູ່ໃຊ້ປະຈຸບັນ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"ຜູ້ໃຊ້ປະຈຸບັນ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ຈະເລີ່ມບັນທຶກທຸກຢ່າງທີ່ສະແດງຜົນໃນໜ້າຈໍທ່ານ."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ບໍ່ຕ້ອງສະແດງອີກ"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ລຶບລ້າງທັງໝົດ"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"ໂໝດຫ້າມລົບກວນຈະເຊື່ອງການແຈ້ງເຕືອນໄວ້"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ເລີ່ມດຽວນີ້"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ບໍ່ມີການແຈ້ງເຕືອນ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ໂປຣໄຟລ໌ອາດຖືກເຝົ້າຕິດຕາມຢູ່"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"ຕັ້ງຄ່າ"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ປິດດຽວນີ້"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ການຕັ້ງຄ່າສຽງ"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ຂະຫຍາຍ"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ຫຍໍ້ລົງ"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"ສະຫຼັບອຸປະກອນສົ່ງສຽງອອກ"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. ແຕະເພື່ອຕັ້ງເປັນສັ່ນເຕືອນ."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ແຕະເພື່ອປິດສຽງ."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"ການຄວບຄຸມສຽງ %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ການໂທ ແລະ ການແຈ້ງເຕືອນຈະມີສຽງ"</string>
<string name="output_title" msgid="5355078100792942802">"ມີເດຍເອົ້າພຸດ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ເອົ້າພຸດສາຍໂທອອກ"</string>
<string name="output_none_found" msgid="5544982839808921091">"ບໍ່ພົບອຸປະກອນ"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"ດ້ວຍການຄວບຄຸມການແຈ້ງເຕືອນ, ທ່ານສາມາດຕັ້ງລະດັບຄວາມສຳຄັນຈາກ 0 ຮອດ 5 ໃຫ້ກັບການແຈ້ງເຕືອນແອັບໃດໜຶ່ງໄດ້. \n\n"<b>"ລະດັບ 5"</b>" \n- ສະແດງຢູ່ເທິງສຸດຂອງລາຍການແຈ້ງເຕືອນ \n- ອະນຸຍາດໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ແນມເບິ່ງທຸກເທື່ອ \n\n"<b>"ລະດັບ 4"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ແນມເບິ່ງທຸກເທື່ອ \n\n"<b>"ລະດັບ 3"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n\n"<b>"ລະດັບ 2"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n- ບໍ່ມີສຽງ ແລະ ບໍ່ມີການສັ່ນເຕືອນ \n\n"<b>"ລະດັບ 1"</b>" \n- ກັນບໍ່ໃຫ້ຂັດຈັງຫວະຕອນເປີດເຕັມຈໍ \n- ບໍ່ແນມເບິ່ງ \n- ບໍ່ມີສຽງ ແລະ ບໍ່ມີການສັ່ນເຕືອນ \n- ເຊື່ອງຈາກໜ້າຈໍລັອກ ແລະ ແຖບສະຖານະ \n- ສະແດງຢູ່ລຸ່ມສຸດຂອງລາຍການແຈ້ງເຕືອນ \n\n"<b>"ລະດັບ 0"</b>" \n- ປິດກັ້ນການແຈ້ງເຕືອນທັງໝົດຈາກແອັບ"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"ການແຈ້ງເຕືອນ"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"ທ່ານຈະບໍ່ໄດ້ຮັບການແຈ້ງເຕືອນເຫຼົ່ານີ້ອີກຕໍ່ໄປ"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"ການແຈ້ງເຕືອນເຫຼົ່ານີ້ຈະຖືກຫຍໍ້ໄວ້"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"ໂດຍປົກກະຕິທ່ານປິດການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄວ້. \nສືບຕໍ່ສະແດງພວກມັນບໍ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້ຕໍ່ໄປບໍ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ຢຸດການແຈ້ງເຕືອນ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ສະແດງຕໍ່ໄປ"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"ຫຍໍ້"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ສະແດງການແຈ້ງເຕືອນຈາກແອັບນີ້ຕໍ່ໄປບໍ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ບໍ່ສາມາດປິດການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"ກ້ອງຖ່າຍຮູບ"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ໄມໂຄຣໂຟນ"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"ສະແດງຜົນບັງແອັບອື່ນຢູ່ໜ້າຈໍຂອງທ່ານ"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">ແອັບນີ້ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ແລະ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">ແອັບນີ້ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">ກຳລັງໃຊ້ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ແລະ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">ກຳລັງໃຊ້ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"ການຕັ້ງຄ່າ"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ຕົກລົງ"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"ເປີດຕົວຄວບຄຸມການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"ປິດຕົວຄວບຄຸມການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ອະນຸຍາດການແຈ້ງເຕືອນຈາກຊ່ອງນີ້"</string>
@@ -705,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"ລະຫັດປຸ່ມຂວາ"</string>
<string name="left_icon" msgid="3096287125959387541">"ໄອຄອນຊ້າຍ"</string>
<string name="right_icon" msgid="3952104823293824311">"ໄອຄອນຂວາ"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ລາກເພື່ອເພີ່ມໄອຄອນ"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"ກົດຄ້າງໄວ້ແລ້ວລາກເພື່ອເພີ່ມຊ່ອງ"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ລາກມາບ່ອນນີ້ເພື່ອລຶບອອກ"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"ທ່ານຍຕ້ອງໃຊ້ຢ່າງໜ້ອຍ 6 ຊ່ອງ"</string>
<string name="qs_edit" msgid="2232596095725105230">"ແກ້ໄຂ"</string>
<string name="tuner_time" msgid="6572217313285536011">"ເວລາ"</string>
<string-array name="clock_options">
@@ -750,7 +769,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ປິດການຕັ້ງຄ່າດ່ວນ."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"ຕັ້ງໂມງປຸກແລ້ວ."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"ເຂົ້າສູ່ລະບົບເປັນ <xliff:g id="ID_1">%s</xliff:g> ແລ້ວ"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"ບໍ່ມີອິນເຕີເນັດ."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"ບໍ່ມີອິນເຕີເນັດ"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"ເປີດລາຍລະອຽດ."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"ເປີດການຕັ້ງຄ່າ <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ແກ້ໄຂລຳດັບການຕັ້ງຄ່າ."</string>
@@ -798,6 +817,7 @@
<string name="app_info" msgid="6856026610594615344">"ຂໍ້ມູນແອັບ"</string>
<string name="go_to_web" msgid="2650669128861626071">"ໄປທີ່ໂປຣແກຣມທ່ອງເວັບ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ອິນເຕີເນັດມືຖື"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ປິດຢູ່"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ປິດຢູ່"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"ຫ້າມລົບກວນ ປິດຢູ່"</string>
@@ -809,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ແທນທີ່"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ແອັບທີ່ກຳລັງເຮັດວຽກໃນພື້ນຫຼັງ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ແຕະເພື່ອເບິ່ງລາຍລະອຽດການນຳໃຊ້ແບັດເຕີຣີ ແລະ ອິນເຕີເນັດ"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ປິດອິນເຕີເນັດມືຖືໄວ້ບໍ?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"ປິດອິນເຕີເນັດມືຖືໄວ້ບໍ?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"ທ່ານຈະບໍ່ມີສິດເຂົ້າເຖິງຂໍ້ມູນ ຫຼື ອິນເຕີເນັດຜ່ານ <xliff:g id="CARRIER">%s</xliff:g>. ອິນເຕີເນັດຈະສາມາດໃຊ້ໄດ້ຜ່ານ Wi-Fi ເທົ່ານັ້ນ."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"ຜູ້ໃຫ້ບໍລິການຂອງທ່ານ"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"ເນື່ອງຈາກມີແອັບໃດໜຶ່ງກຳລັງຂັດຂວາງການຂໍອະນຸຍາດ, ການຕັ້ງຄ່າຈຶ່ງບໍ່ສາມາດຢັ້ງຢືນການຕອບຮັບຂອງທ່ານໄດ້."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"ອະນຸຍາດ <xliff:g id="APP_0">%1$s</xliff:g> ໃຫ້ສະແດງ <xliff:g id="APP_2">%2$s</xliff:g> ສະໄລ້ບໍ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ມັນສາມາດອ່ານຂໍ້ມູນຈາກ <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index cd4acff..eaf7b02 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Преостануваат <xliff:g id="PERCENTAGE">%s</xliff:g>, уште околу <xliff:g id="TIME">%s</xliff:g> според користењето"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Преостануваат <xliff:g id="PERCENTAGE">%s</xliff:g>, уште околу <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Преостануваат <xliff:g id="PERCENTAGE">%s</xliff:g>. Штедачот на батерија е вклучен."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Не може да се полни преку USB. Користете го полначот што дојде со вашиот уред."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Не може да се полни преку USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Користете го полначот што дојде со вашиот уред"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Поставки"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Да се вклучи штедачот на батерија?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Вклучи"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Поврзана."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Се поврзува."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Авионскиот режим е вклучен."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Авионскиот режим е исклучен."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Авионскиот режим е вклучен."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"„Не вознемирувај“ е вклучено."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"„Не вознемирувај“ е вклучено, целосна тишина."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"„Не вознемирувај“ е вклучено, само аларми."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Не вознемирувај."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Заштитник на екран"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Етернет"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Притиснете и задржете ги иконите за повеќе опции"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не вознемирувај"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Само приоритетно"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Само аларми"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ќе започне да презема сѐ што се прикажува на вашиот екран."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Не покажувај повторно"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Исчисти сè"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"„Не вознемирувај“ ги крие известувањата"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Започни сега"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Нема известувања"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профилот можеби се следи"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Допрете за да се постави на вибрации."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Допрете за да се исклучи звукот."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Контроли на јачината на звукот за %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Повиците и известувањата ќе вибрираат"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Повиците и известувањата нема да имаат звук"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Повиците и известувањата ќе ѕвонат"</string>
<string name="output_title" msgid="5355078100792942802">"Излез за аудиовизуелни содржини"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Излез за телефонски повик"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Код за десно копче"</string>
<string name="left_icon" msgid="3096287125959387541">"Лева икона"</string>
<string name="right_icon" msgid="3952104823293824311">"Десна икона"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Повлечете за додавање плочки"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Задржете и влечете за да додадете плочки"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Повлечете тука за да се отстрани"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Потребни ви се најмалку 6 плочки"</string>
<string name="qs_edit" msgid="2232596095725105230">"Измени"</string>
<string name="tuner_time" msgid="6572217313285536011">"Време"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Замени"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Апликациите се извршуваат во заднина"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Допрете за детали за батеријата и потрошениот сообраќај"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се исклучи мобилниот интернет?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Да се исклучи ли мобилниот интернет?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Нема да имате пристап до податоците или интернетот преку <xliff:g id="CARRIER">%s</xliff:g>. Интернетот ќе биде достапен само преку Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"вашиот оператор"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Бидејќи апликацијата го прикрива барањето за дозвола, „Поставките“ не може да го потврдат вашиот одговор."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Дали да се дозволи <xliff:g id="APP_0">%1$s</xliff:g> да прикажува делови од <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Може да чита информации од <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index c59c774..76b68be 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> അവശേഷിക്കുന്നു, ഉപയോഗം അടിസ്ഥാനമാക്കി ഏകദേശം <xliff:g id="TIME">%s</xliff:g> ശേഷിക്കുന്നു"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> അവശേഷിക്കുന്നു, ഏകദേശം <xliff:g id="TIME">%s</xliff:g> ശേഷിക്കുന്നു"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> ശേഷിക്കുന്നു. ബാറ്ററി ലാഭിക്കൽ ഓണാണ്."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB ചാർജ്ജുചെയ്യൽ പിന്തുണയ്ക്കുന്നില്ല.\nഅതിന്റെ അനുബന്ധ ചാർജ്ജർ മാത്രം ഉപയോഗിക്കുക."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB ചാർജ്ജുചെയ്യൽ പിന്തുണച്ചില്ല."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"വിതരണം ചെയ്ത ചാർജ്ജർ മാത്രം ഉപയോഗിക്കുക."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB വഴി ചാർജ് ചെയ്യാനാകില്ല. നിങ്ങളുടെ ഉകരണത്തിനൊപ്പം ലഭിച്ച ചാർജർ ഉപയോഗിക്കുക."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB വഴി ചാർജ് ചെയ്യാനാകില്ല"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ഉപകരണത്തിനൊപ്പം ലഭിച്ച ചാർജർ ഉപയോഗിക്കുക"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ക്രമീകരണം"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ബാറ്ററി ലാഭിക്കൽ ഓണാക്കണോ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ഓൺ ചെയ്യുക"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"ക്യാമറ തുറക്കുക"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"പുതിയ ടാസ്ക് ലേഔട്ട് തിരഞ്ഞെടുക്കുക"</string>
<string name="cancel" msgid="6442560571259935130">"റദ്ദാക്കുക"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"വിരലടയാള സെൻസർ സ്പർശിക്കുക"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"വിരലടയാള ഐക്കൺ"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ആപ്പ് ഐക്കൺ"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"സഹായ സന്ദേശ ഏരിയ"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"ഓഫാണ്."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"കണക്റ്റുചെയ്തു."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"കണക്റ്റുചെയ്യുന്നു."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"റോമിംഗ്"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"റോമിംഗ്"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDG"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"വൈഫൈ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"സിം ഇല്ല."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"മൊബൈൽ ഡാറ്റ"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"മൊബൈൽ ഡാറ്റ ഓണാണ്"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"മൊബൈൽ ഡാറ്റ ഓഫാണ്"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"മൊബൈൽ ഡാറ്റ ഓഫാണ്"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ബ്ലൂടൂത്ത് ടെതറിംഗ്."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ഫ്ലൈറ്റ് മോഡ്."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ഓണാണ്."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM കാർഡൊന്നുമില്ല."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"കാരിയർ നെറ്റ്വർക്ക് മാറ്റൽ."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"കാരിയർ നെറ്റ്വർക്ക് മാറ്റൽ"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ബാറ്ററി വിശദാംശങ്ങൾ തുറക്കുക"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"ബാറ്ററി <xliff:g id="NUMBER">%d</xliff:g> ശതമാനം."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ബാറ്ററി ചാർജുചെയ്യുന്നു, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ശതമാനം."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ഫ്ലൈറ്റ് മോഡ് ഓണാണ്."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ഫ്ലൈറ്റ് മോഡ് ഓഫാക്കി."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ഫ്ലൈറ്റ് മോഡ് ഓണാക്കി."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാണ്, മുൻഗണന മാത്രം."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\'ശല്യപ്പെടുത്തരുത്\' ഓണാണ്"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\'ശല്യപ്പെടുത്തരുത്\' ഓണാണ്, പൂർണ്ണ നിശബ്ദത."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\'ശല്യപ്പെടുത്തരുത്\' ഓണാണ്, അലാറം മാത്രം."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ശല്യപ്പെടുത്തരുത്."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ഡെസേർട്ട് കെയ്സ്"</string>
<string name="start_dreams" msgid="5640361424498338327">"സ്ക്രീൻ സേവർ"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ഇതർനെറ്റ്"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ശല്ല്യപ്പെടുത്തരുത്"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"മുൻഗണന മാത്രം"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ഓഡിയോ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ഹെഡ്സെറ്റ്"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ഇൻപുട്ട്"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ഓണാക്കുന്നു…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"തെളിച്ചം"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ആവശ്യാനുസരണം തിരിയുക"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"സ്ക്രീൻ സ്വയമേ തിരിക്കുക"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"വൈഫൈ ഓഫുചെയ്യുക"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"വൈഫൈ ഓണാണ്"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"വൈഫൈ നെറ്റ്വർക്കുകളൊന്നും ലഭ്യമല്ല"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"അലാറം"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ഓണാക്കുന്നു…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"കാസ്റ്റുചെയ്യുക"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"കാസ്റ്റുചെയ്യുന്നു"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"പേരിടാത്ത ഉപകരണം"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"കണക്റ്റുചെയ്യുന്നു..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ടെതറിംഗ്"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ഹോട്ട്സ്പോട്ട്"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ഓൺ ചെയ്യുന്നു..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ഓണാക്കുന്നു…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ഡാറ്റ സേവർ ഓണാണ്"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d ഉപകരണങ്ങൾ</item>
<item quantity="one">%d ഉപകരണം</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ഉപയോഗിച്ചു"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> പരിധി"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> മുന്നറിയിപ്പ്"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"ഔദ്യോഗിക പ്രൊഫൈൽ"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"അറിയിപ്പുകളും ആപ്പുകളും ഓഫാണ്"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"ഔദ്യോഗിക പ്രൊഫൈൽ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"നൈറ്റ് ലൈറ്റ്"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"സൂര്യാസ്തമയത്തിന്"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"സൂര്യോദയം വരെ"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ചാർജ് ചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • വേഗത്തിൽ ചാർജ് ചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • പതുക്കെ ചാർജ് ചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ഉപയോക്താവ് മാറുക"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ഉപയോക്താവിനെ മാറ്റുക, <xliff:g id="CURRENT_USER_NAME">%s</xliff:g> എന്നയാളാണ് നിലവിലുള്ള ഉപയോക്താവ്"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"നിലവിലെ ഉപയോക്താവ് <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"നിങ്ങളുടെ സ്ക്രീനിൽ പ്രദർശിപ്പിച്ചിരിക്കുന്ന എല്ലാ കാര്യങ്ങളും <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ക്യാപ്ചർ ചെയ്യുന്നത് ആരംഭിക്കും."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"വീണ്ടും കാണിക്കരുത്"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"എല്ലാം മായ്ക്കുക"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"അറിയിപ്പുകളെ \'ശല്യപ്പെടുത്തരുത്\' അദൃശ്യമാക്കുന്നു"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ഇപ്പോൾ ആരംഭിക്കുക"</string>
<string name="empty_shade_text" msgid="708135716272867002">"അറിയിപ്പുകൾ ഒന്നുമില്ല"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"പ്രൊഫൈൽ നിരീക്ഷിക്കപ്പെടാം"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"സജ്ജീകരിക്കുക"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ഇപ്പോൾ ഓഫ് ചെയ്യുക"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ശബ്ദ ക്രമീകരണം"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"വികസിപ്പിക്കുക"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ചുരുക്കുക"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"ഔട്ട്പുട്ട് ഉപകരണം മാറുക"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s വൈബ്രേറ്റിലേക്ക് സജ്ജമാക്കുന്നതിന് ടാപ്പുചെയ്യുക."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s മ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ശബ്ദ നിയന്ത്രണങ്ങൾ"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"കോളുകളും അറിയിപ്പുകളും റിംഗ് ചെയ്യും"</string>
<string name="output_title" msgid="5355078100792942802">"മീഡിയ ഔട്ട്പുട്ട്"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ഫോൺ കോൾ ഔട്ട്പുട്ട്"</string>
<string name="output_none_found" msgid="5544982839808921091">"ഉപകരണങ്ങളൊന്നും കണ്ടെത്തിയില്ല"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"പവർ അറിയിപ്പ് നിയന്ത്രണം ഉപയോഗിച്ച്, ഒരു ആപ്പിനായുള്ള അറിയിപ്പുകൾക്ക് 0 മുതൽ 5 വരെയുള്ള പ്രാധാന്യ ലെവലുകളിലൊന്ന് നിങ്ങൾക്ക് സജ്ജമാക്കാവുന്നതാണ്. \n\n"<b>"ലെവൽ 5"</b>" \n- അറിയിപ്പ് ലിസ്റ്റിന്റെ മുകളിൽ കാണിക്കുക \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം അനുവദിക്കുക \n- എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക \n\n"<b>"ലെവൽ 4"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- എല്ലായ്പ്പോഴും ദൃശ്യമാക്കുക \n\n"<b>"ലെവൽ 3"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും സൃശ്യമാക്കരുത് \n\n"<b>"ലെവൽ 2"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും ദൃശ്യമാക്കരുത് \n- ഒരിക്കലും ശബ്ദവും വൈബ്രേഷനും ഉണ്ടാക്കരുത് \n\n"<b>"ലെവൽ 1"</b>" \n- മുഴുവൻ സ്ക്രീൻ തടസ്സം തടയുക \n- ഒരിക്കലും ദൃശ്യമാക്കരുത് \n- ഒരിക്കലും ശബ്ദവും വൈബ്രേഷനും ഉണ്ടാക്കരുത് \n- ലോക്ക് സ്ക്രീനിൽ നിന്നും സ്റ്റാറ്റസ് ബാറിൽ നിന്നും മറയ്ക്കുക \n- അറിയിപ്പ് ലിസ്റ്റിന്റെ അടിയിൽ കാണിക്കുക \n\n"<b>"ലെവൽ 0"</b>" \n- ആപ്പിൽ നിന്നുള്ള എല്ലാ അറിയിപ്പുകളും ബ്ലോക്കുചെയ്യുക"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"അറിയിപ്പുകൾ"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"നിങ്ങൾ ഇനി ഈ അറിയിപ്പുകൾ കാണില്ല"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"ഈ അറിയിപ്പുകൾ ചെറുതാക്കപ്പെടും"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"സാധാരണയായി നിങ്ങൾ ഈ അറിയിപ്പുകൾ നിരാകരിക്കുന്നു. \nഅവ തുടർന്നും കാണിക്കണോ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ഈ അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"അറിയിപ്പുകൾ നിർത്തുക"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"തുടർന്നും കാണിക്കുക"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"ചെറുതാക്കുക"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ തുടർന്നും കാണിക്കണോ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ഈ അറിയിപ്പുകൾ ഓഫാക്കാനാവില്ല"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"ക്യാമറ"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"മൈക്രോഫോൺ"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"നിങ്ങളുടെ സ്ക്രീനിലെ മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">ഈ ആപ്പ് <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>, <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> എന്നിവയാണ്.</item>
+ <item quantity="one">ഈ ആപ്പ് <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ആണ്.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g>, <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> എന്നിവ ഉപയോഗിക്കുന്നു</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ഉപയോഗിക്കുന്നു</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"ക്രമീകരണം"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ശരി"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിന്റെ അറിയിപ്പ് നിയന്ത്രണങ്ങൾ തുറന്നു"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിന്റെ അറിയിപ്പ് നിയന്ത്രണങ്ങൾ അടച്ചു"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ഈ ചാനലിൽ നിന്നുള്ള അറിയിപ്പുകൾ അനുവദിക്കുക"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"വലതുവശത്തെ കീകോഡ്"</string>
<string name="left_icon" msgid="3096287125959387541">"ഇടതുവശത്തെ ചിഹ്നം"</string>
<string name="right_icon" msgid="3952104823293824311">"വലതുവശത്തെ ചിഹ്നം"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ടൈലുകൾ ചേർക്കുന്നതിന് വലിച്ചിടുക"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"നീക്കംചെയ്യുന്നതിന് ഇവിടെ വലിച്ചിടുക"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"എഡിറ്റുചെയ്യുക"</string>
<string name="tuner_time" msgid="6572217313285536011">"സമയം"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ദ്രുത ക്രമീകരണം അടയ്ക്കുക."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"അലാറം സജ്ജമാക്കി."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> ആയി സൈൻ ഇൻ ചെയ്തു"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"ഇന്റർനെറ്റില്ല."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"ഇന്റർനെറ്റ് ഇല്ല"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"വിശദാംശങ്ങൾ തുറക്കുക."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ക്രമീകരണം തുറക്കുക."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ക്രമീകരണ ക്രമം എഡിറ്റുചെയ്യുക."</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ആപ്പ് വിവരം"</string>
<string name="go_to_web" msgid="2650669128861626071">"ബ്രൗസറിലേക്ക് പോവുക"</string>
<string name="mobile_data" msgid="7094582042819250762">"മൊബൈൽ ഡാറ്റ"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"വൈഫൈ ഓഫാണ്"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ഓഫാണ്"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"\'ശല്യപ്പെടുത്തരുത്\' ഓഫാണ്"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"മാറ്റിസ്ഥാപിക്കുക"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ആപ്പുകൾ പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുന്നു"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ബാറ്ററി, ഡാറ്റ ഉപയോഗം എന്നിവയുടെ വിശദാംശങ്ങളറിയാൻ ടാപ്പുചെയ്യുക"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"മൊബൈൽ ഡാറ്റ ഓഫാക്കണോ?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"അനുമതി അഭ്യർത്ഥനയെ ഒരു ആപ്പ് മറയ്ക്കുന്നതിനാൽ, ക്രമീകരണത്തിന് നിങ്ങളുടെ പ്രതികരണം പരിശോധിച്ചുറപ്പിക്കാനാകില്ല."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_2">%2$s</xliff:g> സ്ലൈസുകൾ കാണിക്കാൻ <xliff:g id="APP_0">%1$s</xliff:g>-നെ അനുവദിക്കണോ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ഇതിന് <xliff:g id="APP">%1$s</xliff:g>-ൽ നിന്ന് വിവരങ്ങൾ വായിക്കാനാകും"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 1b11fd6..151e34a 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -36,12 +36,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> үлдсэн байна. Таны хэрэглээнд тулгуурлан ойролцоогоор <xliff:g id="TIME">%s</xliff:g>-н хугацаа үлдсэн"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> үлдсэн байна. Ойролцоогоор <xliff:g id="TIME">%s</xliff:g>-н хугацаа үлдсэн"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> үлдсэн. Тэжээл хэмнэгч асаалттай байна."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB-р цэнэглэх боломжгүй байна. Төхөөрөмждөө дагалдаж ирсэн цэнэглэгчийг ашиглана уу."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB-р цэнэглэх боломжгүй байна"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Төхөөрөмждөө дагалдаж ирсэн цэнэглэгчийг ашиглах"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Тохиргоо"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Тэжээл хэмнэгчийг асаах уу?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Асаах"</string>
@@ -149,7 +146,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Холбогдсон."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Холбож байна."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -209,8 +205,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Нислэгийн горим идэвхтэй."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Нислэгийн горимыг унтраасан."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Нислэгийн горимыг асаасан."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Бүү саад бол горим асаалттай байна."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Дуугүй байх. Бүү саад бол."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Бүү саад бол, зөвхөн сэрүүлгийг асаа."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Бүү саад бол."</string>
@@ -276,7 +271,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Амттаны хайрцаг"</string>
<string name="start_dreams" msgid="5640361424498338327">"Дэлгэц амраагч"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Этернет"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Нэмэлт сонголтыг харах бол дүрс тэмдгийг удаан дарна уу"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Бүү саад бол"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Зөвхөн чухал зүйлс"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Зөвхөн сэрүүлэг"</string>
@@ -435,8 +431,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> таны дэлгэц дээр гаргасан бүх зүйлийн зургийг авч эхэлнэ."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Дахиж үл харуулах"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Бүгдийг арилгах"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Бүү саад бол горим мэдэгдлийг нууж байна"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Одоо эхлүүлэх"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Мэдэгдэл байхгүй"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профайлыг хянаж байж болзошгүй"</string>
@@ -542,8 +537,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Чичиргээнд тохируулахын тулд товшино уу."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Дууг хаахын тулд товшино уу."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s түвшний хяналт"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Дуудлага болон мэдэгдэл чичирнэ"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Дуудлага болон мэдэгдлийн дууг хаана"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Дуудлага болон мэдэгдэл дуугарна"</string>
<string name="output_title" msgid="5355078100792942802">"Медиа гаралт"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Утасны дуудлагын гаралт"</string>
@@ -728,8 +721,9 @@
<string name="right_keycode" msgid="708447961000848163">"Баруун түлхүүрийн код"</string>
<string name="left_icon" msgid="3096287125959387541">"Зүүн дүрс тэмдэг"</string>
<string name="right_icon" msgid="3952104823293824311">"Баруун дүрс тэмдэг"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Дөрвөлж нэмэхийн тулд чирнэ үү"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Хавтанд нэмэхийн тулд дараад чирэх"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Устгахын тулд энд зөөнө үү"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Танд хамгийн багадаа 6 хавтан шаардлагатай"</string>
<string name="qs_edit" msgid="2232596095725105230">"Засах"</string>
<string name="tuner_time" msgid="6572217313285536011">"Цаг"</string>
<string-array name="clock_options">
@@ -833,7 +827,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Солих"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Цаана ажиллаж буй апп"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Батерей, дата ашиглалтын талаар дэлгэрэнгүйг харахын тулд товшино уу"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобайл датаг унтраах уу?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Мобайл датаг унтраах уу?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Та <xliff:g id="CARRIER">%s</xliff:g>-р дата эсвэл интернэтэд хандах боломжгүй болно. Интернэтэд зөвхөн Wi-Fi-р холбогдох боломжтой болно."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"таны оператор компани"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Апп нь зөвшөөрлийн хүсэлтийг танихгүй байгаа тул Тохиргооноос таны хариултыг баталгаажуулах боломжгүй байна."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g>-д <xliff:g id="APP_2">%2$s</xliff:g>-н хэсгүүдийг (slices) харуулахыг зөвшөөрөх үү?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Энэ нь <xliff:g id="APP">%1$s</xliff:g>-с мэдээлэл унших боломжтой"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 8f7bf62..46be695 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> बाकी, तुमच्या वापरावर आधारित सुमारे <xliff:g id="TIME">%s</xliff:g> शिल्लक"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> बाकी, सुमारे <xliff:g id="TIME">%s</xliff:g> शिल्लक"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> शिल्लक. बॅटरी सेव्हर चालू आहे."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB द्वारे चार्ज करू शकत नाही. तुमच्या डिव्हाइससह आलेल्या चार्जरचा वापर करा."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB द्वारे चार्ज होऊ शकत नाही"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"तुमच्या डिव्हाइससह आलेल्या चार्जरचा वापर करा"</string>
<string name="battery_low_why" msgid="4553600287639198111">"सेटिंग्ज"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"बॅटरी सेव्हर सुरू करायचा का?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"चालू करा"</string>
@@ -151,12 +148,10 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"कनेक्ट केले."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"कनेक्ट करत आहे."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"१ X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"३G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"३.५G"</string>
- <!-- no translation found for data_connection_3_5g_plus (7570783890290275297) -->
- <skip />
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"३.५G+"</string>
<string name="data_connection_4g" msgid="9139963475267449144">"४G"</string>
<string name="data_connection_4g_plus" msgid="1148687201877800700">"४G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
@@ -212,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"विमान मोड चालू."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"विमान मोड बंद केला."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"विमान मोड चालू केला."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"व्यत्यय आणू नका सुरू आहे."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"व्यत्यय आणू नका चालू, संपूर्ण शांतता."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"व्यत्यय आणू नका चालू, केवळ अलार्म."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"व्यत्यय आणू नका."</string>
@@ -279,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"मिष्ठान्न प्रकरण"</string>
<string name="start_dreams" msgid="5640361424498338327">"स्क्रीन सेव्हर"</string>
<string name="ethernet_label" msgid="7967563676324087464">"इथरनेट"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"अधिक पर्यायांसाठी आयकन दाबा आणि धरून ठेवा"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"व्यत्यय आणू नका"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"केवळ प्राधान्य"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"केवळ अलार्म"</string>
@@ -438,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपल्या स्क्रीनवर प्रदर्शित होणारी प्रत्येक गोष्ट कॅप्चर करणे प्रारंभ करेल."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"पुन्हा दर्शवू नका"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"सर्व साफ करा"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"व्यत्यय आणू नका सूचना लपवत आहे"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"आता सुरू करा"</string>
<string name="empty_shade_text" msgid="708135716272867002">"सूचना नाहीत"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफाईलचे परीक्षण केले जाऊ शकते"</string>
@@ -507,8 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"सेट अप"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"आता बंद करा"</string>
- <!-- no translation found for accessibility_volume_settings (4915364006817819212) -->
- <skip />
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"आवाज सेटिंग्ज"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तृत करा"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"संकुचित करा"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"आउटपुट डिव्हाइस स्विच करा"</string>
@@ -546,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. कंपन सेट करण्यासाठी टॅप करा."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. नि:शब्द करण्यासाठी टॅप करा."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s व्हॉल्यूम नियंत्रण"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"कॉल आणि सूचनांवर व्हायब्रेट होईल"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"कॉल आणि सूचना म्युट केल्या जातील"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"कॉल अन्नि सूचना रिंग करा"</string>
<string name="output_title" msgid="5355078100792942802">"मीडिया आउटपुट"</string>
<string name="output_calls_title" msgid="8717692905017206161">"फोन कॉल आउटपुट"</string>
@@ -732,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"उजवा कीकोड"</string>
<string name="left_icon" msgid="3096287125959387541">"डावे आयकन"</string>
<string name="right_icon" msgid="3952104823293824311">"उजवे आयकन"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइल जोडण्यासाठी ड्रॅग करा"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"काढण्यासाठी येथे ड्रॅग करा"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"संपादित करा"</string>
<string name="tuner_time" msgid="6572217313285536011">"वेळ"</string>
<string-array name="clock_options">
@@ -837,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"पुनर्स्थित करा"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"अॅप्स बॅकग्राउंडमध्ये चालू आहेत"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"बॅटरी आणि डेटा वापराच्या तपशीलांसाठी टॅप करा"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करायचा?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"अॅप परवानगी विनंती अस्पष्ट करत असल्याने, सेटिंग्ज तुमचा प्रतिसाद पडताळू शकत नाहीत."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> ला <xliff:g id="APP_2">%2$s</xliff:g> चे तुकडे दाखवण्याची अनुमती द्यायची का?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ते <xliff:g id="APP">%1$s</xliff:g> ची माहिती वाचू शकते"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 5cce3ea..319d71d 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Tinggal <xliff:g id="PERCENTAGE">%s</xliff:g>, kira-kira <xliff:g id="TIME">%s</xliff:g> lagi berdasarkan penggunaan anda"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Tinggal <xliff:g id="PERCENTAGE">%s</xliff:g>, kira-kira <xliff:g id="TIME">%s</xliff:g> lagi"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Tinggal <xliff:g id="PERCENTAGE">%s</xliff:g>. Penjimat Bateri dihidupkan."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Tidak dapat mengecas melalui USB. Gunakan pengecas yang disertakan dengan peranti anda."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Tidak dapat mengecas melalui USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Gunakan pengecas yang disertakan dengan peranti anda"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Tetapan"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Hidupkan Penjimat Bateri?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Hidupkan"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Disambungkan."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Menyambung."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mod pesawat dihidupkan."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mod pesawat dimatikan."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mod pesawat dihidupkan."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Jangan ganggu dihidupkan."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Jangan ganggu dihidupkan, senyap sepenuhnya."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Jangan ganggu dihidupkan, penggera sahaja."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Jangan ganggu."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Bekas Pencuci Mulut"</string>
<string name="start_dreams" msgid="5640361424498338327">"Penyelamat skrin"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Tekan & tahan pada ikon untuk mendapatkan lagi pilihan"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Keutamaan sahaja"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Penggera sahaja"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan mula mengabadikan semua yang dipaparkan pada skrin anda.."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Jangan tunjukkan lagi"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Kosongkan semua"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Jangan Ganggu menyembunyikan pemberitahuan"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Mulakan sekarang"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Tiada pemberitahuan"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil mungkin dipantau"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Ketik untuk menetapkan pada getar."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Ketik untuk meredam."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s kawalan kelantangan"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Panggilan dan pemberitahuan akan bergetar"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Panggilan dan pemberitahuan akan diredamkan"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Panggilan dan pemberitahuan akan berdering"</string>
<string name="output_title" msgid="5355078100792942802">"Output media"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Output panggilan telefon"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Kod kunci kanan"</string>
<string name="left_icon" msgid="3096287125959387541">"Ikon kiri"</string>
<string name="right_icon" msgid="3952104823293824311">"Ikon kanan"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Seret untuk menambahkan jubin"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Tahan dan seret untuk menambah jubin"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Seret ke sini untuk mengalih keluar"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Anda memerlukan sekurang-kurangnya 6 jubin"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Masa"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Gantikan"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apl yang berjalan di latar belakang"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Ketik untuk mendapatkan butiran tentang penggunaan kuasa bateri dan data"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Matikan data mudah alih?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Matikan data mudah alih?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Anda tiada akses kepada data atau Internet melalui <xliff:g id="CARRIER">%s</xliff:g>. Internet hanya tersedia melaui Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"pembawa anda"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Oleh sebab apl melindungi permintaan kebenaran, Tetapan tidak dapat mengesahkan jawapan anda."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Benarkan <xliff:g id="APP_0">%1$s</xliff:g> menunjukkan <xliff:g id="APP_2">%2$s</xliff:g> hirisan?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Hos hirisan boleh membaca maklumat daripada <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 11f3b3b..aca8489 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -148,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ဆက်သွယ်ထားပြီး"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"ချိတ်ဆက်နေ။"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"မုန့်ထည့်သော ပုံး"</string>
<string name="start_dreams" msgid="5640361424498338327">"ဖန်သားပြင်အသုံးပြုမှု ချွေတာမှုစနစ်"</string>
<string name="ethernet_label" msgid="7967563676324087464">"အီသာနက်"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"နောက်ထပ် ရွေးချယ်စရာများအတွက် သင်္ကေတပုံများကို ဖိထားပါ"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"နောက်ထပ် ရွေးချယ်စရာများအတွက် သင်္ကေတများကို ထိပြီး ဖိထားပါ"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"မနှောင့်ယှက်ရ"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ဦးစားပေးများသာ"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"နှိုးစက်များသာ"</string>
@@ -539,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s။ တုန်ခါခြင်းသို့ သတ်မှတ်ရန်တို့ပါ။"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s။ အသံတိတ်ရန် တို့ပါ။"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s အသံအတိုးအလျှော့ ခလုတ်များ"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"ခေါ်ဆိုမှုများနှင့် အကြောင်းကြားချက်များ တုန်ခါပါမည်"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ခေါ်ဆိုမှုများနှင့် အကြောင်းကြားချက်များကို အသံပိတ်ထားပါမည်"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ခေါ်ဆိုမှုများနှင့် အကြောင်းကြားချက်များ အသံမြည်ပါမည်"</string>
<string name="output_title" msgid="5355078100792942802">"မီဒီယာ အထွက်"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ဖုန်းလိုင်း အထွက်"</string>
@@ -725,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"လက်ယာကီးကုဒ်"</string>
<string name="left_icon" msgid="3096287125959387541">"လက်ဝဲသင်္ကေတ"</string>
<string name="right_icon" msgid="3952104823293824311">"လက်ယာသင်္ကေတ"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"အချပ်များကိုထည့်ရန် ဖိဆွဲပါ"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"အကွက်များထည့်ရန် ဖိဆွဲပါ"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ဖယ်ရှားရန် ဤနေရာသို့ဖိဆွဲပါ"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"အနည်းဆုံး ၆ ကွက် ရှိရမည်"</string>
<string name="qs_edit" msgid="2232596095725105230">"တည်းဖြတ်ပါ"</string>
<string name="tuner_time" msgid="6572217313285536011">"အချိန်"</string>
<string-array name="clock_options">
@@ -830,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"အစားထိုးရန်"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"နောက်ခံတွင် ပွင့်နေသော အက်ပ်များ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ဘက်ထရီနှင့် ဒေတာအသုံးပြုမှု အသေးစိတ်ကို ကြည့်ရန် တို့ပါ"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"မိုဘိုင်းဒေတာကို ပိတ်လိုပါသလား။"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"မိုဘိုင်းဒေတာ ပိတ်လိုပါသလား။"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> မှ ဒေတာ သို့မဟုတ် အင်တာနက်ကို သုံးစွဲ၍ မရနိုင်ပါ။ Wi-Fi အသုံးပြု၍သာ အင်တာနက် သုံးစွဲနိုင်ပါသည်။"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"သင်၏ ဝန်ဆောင်မှုပေးသူ"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"အပလီကေးရှင်းတစ်ခုက ခွင့်ပြုချက်တောင်းခံမှုကို ပိတ်ထားသောကြောင့် ဆက်တင်များသည် သင်၏ လုပ်ဆောင်ကို တုံ့ပြန်နိုင်ခြင်းမရှိပါ။"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> အား <xliff:g id="APP_2">%2$s</xliff:g> ၏အချပ်များ ပြသခွင့်ပြုပါသလား။"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ၎င်းသည် <xliff:g id="APP">%1$s</xliff:g> မှ အချက်အလက်ကို ဖတ်နိုင်သည်"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index a6e91ee..131d668 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> gjenstår, omtrent <xliff:g id="TIME">%s</xliff:g> igjen basert på bruken din"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> gjenstår, omtrent <xliff:g id="TIME">%s</xliff:g> igjen"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> gjenstår. Batterisparing er på."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Kan ikke lade via USB. Bruk laderen som fulgte med enheten."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Kan ikke lade via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Bruk laderen som fulgte med enheten"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Innstillinger"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Vil du slå på batterisparing?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Slå på"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Tilkoblet."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Kobler til."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flymodus er på."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flymodus er slått av."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flymodus er slått på."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"«Ikke forstyrr» er på."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Ikke forstyrr er slått på, full stillhet."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Ikke forstyrr er på – bare alarmer."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ikke forstyrr."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessertmonter"</string>
<string name="start_dreams" msgid="5640361424498338327">"Skjermsparer"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Trykk og hold på ikonene for å se flere alternativer"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"«Ikke forstyrr»"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Bare prioritet"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Bare alarmer"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tar opp alt som vies på skjermen din."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ikke vis igjen"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Fjern alt"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"«Ikke forstyrr» skjuler varsler"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Start nå"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ingen varsler"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåkes"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Trykk for å angi vibrasjon."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Trykk for å slå av lyden."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s volumkontroller"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Anrop og varsler vibrerer"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Anrop og varsler er lydløse"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Anrop og varsler ringer"</string>
<string name="output_title" msgid="5355078100792942802">"Medieutdata"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Utgang for telefonsamtaler"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Høyre-tastkode"</string>
<string name="left_icon" msgid="3096287125959387541">"Venstre-ikon"</string>
<string name="right_icon" msgid="3952104823293824311">"Høyre-ikon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dra for å legge til felt"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Hold og dra for å legge til ruter"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Dra hit for å fjerne"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Du trenger minst seks ruter"</string>
<string name="qs_edit" msgid="2232596095725105230">"Endre"</string>
<string name="tuner_time" msgid="6572217313285536011">"Tid"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Erstatt"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apper kjører i bakgrunnen"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Trykk for detaljer om batteri- og databruk"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du slå av mobildata?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Vil du slå av mobildata?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Du får ikke tilgang til data eller Internett via <xliff:g id="CARRIER">%s</xliff:g>. Internett blir bare tilgjengelig via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operatøren din"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Fordi en app skjuler tillatelsesforespørselen, kan ikke Innstillinger bekrefte svaret ditt."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Vil du tillate at <xliff:g id="APP_0">%1$s</xliff:g> viser <xliff:g id="APP_2">%2$s</xliff:g>-utsnitt?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Den kan lese informasjon fra <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 8365151..cc5eb4b 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> बाँकी, तपाईंको प्रयोगका आधारमा करिब <xliff:g id="TIME">%s</xliff:g> बाँकी छ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> बाँकी, करिब <xliff:g id="TIME">%s</xliff:g> बाँकी छ"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> बाँकी। ब्याट्री सेभर सक्रिय छ।"</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB चार्ज गर्न समर्थित छैन।\n आपूर्ति गरिएको चार्जर मात्र प्रयोग गर्नुहोस्।"</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB चार्ज समर्थित छैन।"</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"आपूर्ति गरिएको चार्जर मात्र प्रयोग गर्नुहोस्।"</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB मार्फत चार्ज गर्न सकिँदैन। तपाईंको यन्त्रसँगै आएको चार्जर प्रयोग गर्नुहोस्।"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB मार्फत चार्ज गर्न सकिँदैन"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"तपाईंको यन्त्रसँगै आएको चार्जर प्रयोग गर्नुहोस्"</string>
<string name="battery_low_why" msgid="4553600287639198111">"सेटिङहरू"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ब्याट्री सेभर सक्रिय गर्ने हो?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"खोल्नुहोस्"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"क्यामेरा खोल्नुहोस्"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"नयाँ कार्य लेआउट चयन गर्नुहोस्"</string>
<string name="cancel" msgid="6442560571259935130">"रद्द गर्नुहोस्"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"फिंगरप्रिन्ट सेन्सरमा छुनुहोस्"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"फिंगरप्रिन्ट जनाउने आइकन"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"अनुप्रयोग जनाउने आइकन"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"मद्दतसम्बन्धी सन्देशको क्षेत्र"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"बन्द गर्नुहोस्।"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"जडान गरिएको।"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"जडान हुँदै।"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिङ"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"रोमिङ"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM छैन।"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा सक्रिय छ"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा निष्क्रिय छ"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"मोबाइल डेटा निष्क्रिय छ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लुटुथ टेदर गर्दै।"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाइजहाज मोड।"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN सक्रिय छ।"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM कार्ड छैन।"</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"वाहक नेटवर्क परिवर्तन हुँदै।"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"सेवा प्रदायकको नेटवर्क परिवर्तन गर्ने आइकन"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ब्याट्री सम्बन्धी विवरणहरूलाई खोल्नुहोस्"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"ब्याट्री <xliff:g id="NUMBER">%d</xliff:g> प्रतिशत"</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ब्याट्री चार्ज हुँदैछ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत।"</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"हवाइजहाज मोड खुला।"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाइजहाज मोड बन्द छ।"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाइजहाज मोड खोलियो।"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"प्राथमिकतालाई मात्र बाधा नपुर्याउनुहोस्।"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"बाधा नपुर्याउनुहोस् मोड सक्रिय छ।"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"बाधा नपुर्यानुहोस्, पुरै शान्त"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"बाधा नगर्नुहोस्, अलार्महरू मात्र।"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"बाधा नपुर्याउनुहोस्।"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"स्क्रिन सेभर"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"बाधा नपुर्याउँनुहोस्"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"प्राथमिकता मात्र"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"अडियो"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"हेडसेट"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"इनपुट"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"सक्रिय गर्दै…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"स्वतःघुम्ने"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"स्क्रिन स्वतःघुम्ने"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi बन्द"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi सक्रिय छ"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Wi-Fi नेटवर्क अनुपलब्ध"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"अलार्म"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"सक्रिय गर्दै…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"प्रसारण गर्दै"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"बेनाम उपकरण"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"जडान हुँदै..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदर गर्दै"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हटस्पट"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"सक्रिय गर्दै…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"सक्रिय गर्दै…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"डेटा सेभर सक्रिय छ"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d यन्त्रहरू</item>
<item quantity="one">%d यन्त्र</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> प्रयोग गरियो"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी दिँदै"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"कार्य प्रोफाइल"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"सूचना तथा अनुप्रयोगहरू निष्क्रिय छन्"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"कार्य प्रोफाइल"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"रात्रिको प्रकाश"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"सूर्यास्तमा सक्रिय"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"सूर्योदयसम्म"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • चार्ज गरिँदै (चार्ज पूरा हुन <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> बाँकी)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • द्रुत गतिमा चार्ज गरिँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> समय बाँकी)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • मन्द गतिमा चार्ज गरिँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> समय बाँकी)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"प्रयोगकर्ता फेर्नुहोस्"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"प्रयोगकर्ता, हालको प्रयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g> मा स्विच गर्नुहोस्"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"हालको प्रयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले आफ्नो स्क्रीनमा प्रदर्शित हुने सबै खिच्न शुरू गर्नेछ।"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"फेरि नदेखाउनुहोस्"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"सबै हटाउनुहोस्"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"बाधा नपुर्याउनुहोस् मोडले सूचनाहरू लुकाइरहेको छ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"अहिले सुरु गर्नुहोस्"</string>
<string name="empty_shade_text" msgid="708135716272867002">"कुनै सूचनाहरू छैनन्"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफाइल अनुगमन हुन सक्छ"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"सेटअप गर्नुहोस्"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"अहिले नै निष्क्रिय पार्नुहोस्"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ध्वनिसम्बन्धी सेटिङहरू"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तार गर्नुहोस्"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"संक्षिप्त पार्नुहोस्"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"आउटपुट यन्त्र बदल्नुहोस्"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। कम्पन मोडमा सेट गर्न ट्याप गर्नुहोस्।"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। म्यूट गर्न ट्याप गर्नुहोस्।"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s भोल्युमका नियन्त्रणहरू"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"कल तथा सूचनाहरू आउँदा घन्टी बज्ने छ"</string>
<string name="output_title" msgid="5355078100792942802">"मिडियाको आउटपुट"</string>
<string name="output_calls_title" msgid="8717692905017206161">"फोन कलको आउटपुट"</string>
<string name="output_none_found" msgid="5544982839808921091">"कुनै पनि यन्त्र भेटिएन"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"सशक्त सूचना नियन्त्रणहरू मार्फत तपाईं अनुप्रयाेगका सूचनाहरूका लागि ० देखि ५ सम्मको महत्व सम्बन्धी स्तर सेट गर्न सक्नुहुन्छ। \n\n"<b>"स्तर ५"</b>" \n- सूचनाको सूचीको माथिल्लो भागमा देखाउने \n- पूर्ण स्क्रिनमा अवरोधका लागि अनुमति दिने \n- सधैँ चियाउने \n\n"<b>"स्तर ४"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- सधैँ चियाउने \n\n"<b>"स्तर ३"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- कहिल्यै नचियाउने \n\n"<b>"स्तर २"</b>" \n- पूर्ण स्क्रिनमा अवरोधलाई रोक्ने \n- कहिल्यै नचियाउने \n- कहिल्यै पनि आवाज ननिकाल्ने र कम्पन नगर्ने \n\n"<b>"स्तर १"</b>" \n- पूर्ण स्क्रिनमा अवरोध रोक्ने \n- कहिल्यै नचियाउने \n- कहिल्यै पनि आवाज ननिकाल्ने वा कम्पन नगर्ने \n- लक स्क्रिन र वस्तुस्थिति पट्टीबाट लुकाउने \n- सूचनाको सूचीको तल्लो भागमा देखाउने \n\n"<b>"स्तर ०"</b>" \n- अनुप्रयोगका सबै सूचनाहरूलाई रोक्ने"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"सूचनाहरू"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"तपाईं अब उप्रान्त यी सूचनाहरू देख्नु हुने छैन"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"यी सूचनाहरू सानो बनाइने छ"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"तपाईं सामान्यतया यी सूचनाहरूलाई खारेज गर्ने गर्नुहुन्छ। \nतिनलाई देखाइरहने हो?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"यी सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"सूचनाहरू देखाउन छाड्नुहोस्"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"देखाउने क्रम जारी राख्नुहोस्"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"सानो बनाउनुहोस्"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"यो अनुप्रयोगका सूचनाहरू देखाउने क्रम जारी राख्ने हो?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"यी सूचनाहरूलाई निष्क्रिय पार्न सकिँदैन"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"क्यामेरा"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"माइक्रोफोन"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"तपाईंको स्क्रिनका अन्य अनुप्रयोगहरूमा प्रदर्शन गरिँदै छ"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">यो अनुप्रयोगले निम्न कार्यहरू गर्दै छ: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> र <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>।</item>
+ <item quantity="one">यो अनुप्रयोगले निम्न कार्य गर्दै छ: <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>।</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> र <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> प्रयोग गर्दै छ</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> प्रयोग गर्दै छ</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"सेटिङहरू"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ठीक छ"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचना सम्बन्धी नियन्त्रणहरूलाई खोलियो"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> का सूचना सम्बन्धी नियन्त्रणहरूलाई बन्द गरियो"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"यो च्यानलका सूचनाहरूलाई अनुमति दिनुहोस्"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"दायाँतिरको किकोड"</string>
<string name="left_icon" msgid="3096287125959387541">"बायाँतिर देखाउने आइकन"</string>
<string name="right_icon" msgid="3952104823293824311">"दायाँतिरको आइकन"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइलहरू थप्न तान्नुहोस्"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"हटाउनका लागि यहाँ तान्नुहोस्"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"सम्पादन गर्नुहोस्"</string>
<string name="tuner_time" msgid="6572217313285536011">"समय"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"द्रुत सेटिङहरूलाई बन्द गर्नुहोस्।"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"अलार्म सेट गरियो।"</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> को रूपमा साइन इन गरियो"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"इन्टरनेट छैन।"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"इन्टरनेट छैन"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"विवरणहरूलाई खोल्नुहोस्।"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> सम्बन्धी सेटिङहरूलाई खोल्नुहोस्।"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिङहरूको क्रमलाई सम्पादन गर्नुहोस्।"</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"अनुप्रयोगका बारे जानकारी"</string>
<string name="go_to_web" msgid="2650669128861626071">"ब्राउजरमा जानुहोस्"</string>
<string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi‑Fi निष्क्रिय छ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ब्लुटुथ निष्क्रिय छ"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"बाधा नपुर्याउनुहोस् नामक विकल्प निष्क्रिय छ"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"प्रतिस्थापन गर्नुहोस्"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"पृष्ठभूमिमा चल्ने अनुप्रयोगहरू"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ब्याट्री र डेटाका प्रयोग सम्बन्धी विवरणहरूका लागि ट्याप गर्नुहोस्"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा निष्क्रिय पार्ने हो?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"कुनै अनुप्रयोगको कारणले अनुमतिसम्बन्धी अनुरोध बुझ्न गाह्रो भइरहेकोले सेटिङहरूले तपाईंको प्रतिक्रिया प्रमाणित गर्न सक्दैनन्।"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> लाई <xliff:g id="APP_2">%2$s</xliff:g> का स्लाइसहरू देखाउन अनुमति दिने हो?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- यसले <xliff:g id="APP">%1$s</xliff:g> बाट जानकारी पढ्न सक्छ"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index d4ea64e..6cbdfae 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> resterend, nog ongeveer <xliff:g id="TIME">%s</xliff:g> over op basis van je gebruik"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> resterend, nog ongeveer <xliff:g id="TIME">%s</xliff:g> over"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> resterend. Batterijbesparing is ingeschakeld."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Kan niet opladen via USB. Gebruik de oplader die bij je apparaat is geleverd."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Kan niet opladen via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Gebruik de oplader die bij je apparaat is geleverd"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Instellingen"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Batterijbesparing inschakelen?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Inschakelen"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Verbonden."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Verbinden."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Vliegtuigmodus aan."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus uitgeschakeld."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus ingeschakeld."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\'Niet storen\' aan."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Niet storen aan, totale stilte."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Niet storen aan, alleen wekkers."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Niet storen."</string>
@@ -278,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessertshowcase"</string>
<string name="start_dreams" msgid="5640361424498338327">"Screensaver"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Tik op de pictogrammen en houd deze vast voor meer opties"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Tik op pictogrammen en houd ze vast voor meer opties"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Niet storen"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Alleen prioriteit"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alleen wekkers"</string>
@@ -437,8 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> gaat alles vastleggen dat wordt weergegeven op je scherm."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Niet opnieuw weergeven"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Alles wissen"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\'Niet storen\' verbergt meldingen"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Nu starten"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Geen meldingen"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan worden gecontroleerd"</string>
@@ -544,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tik om in te stellen op trillen."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tik om te dempen."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s-volumeknoppen"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Trillen bij oproepen en meldingen"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Oproepen en meldingen zijn gedempt"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Beltoon gaat over bij oproepen en meldingen"</string>
<string name="output_title" msgid="5355078100792942802">"Media-uitvoer"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Uitvoer van telefoongesprek"</string>
@@ -730,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Toetscode rechts"</string>
<string name="left_icon" msgid="3096287125959387541">"Pictogram links"</string>
<string name="right_icon" msgid="3952104823293824311">"Pictogram rechts"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Sleep om tegels toe te voegen"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Houd vast en sleep om tegels toe te voegen"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Sleep hier naartoe om te verwijderen"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Je hebt minimaal zes tegels nodig"</string>
<string name="qs_edit" msgid="2232596095725105230">"Bewerken"</string>
<string name="tuner_time" msgid="6572217313285536011">"Tijd"</string>
<string-array name="clock_options">
@@ -835,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Vervangen"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps uitgevoerd op achtergrond"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik voor batterij- en datagebruik"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobiele data uitschakelen?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Mobiele data uitschakelen?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Je hebt geen toegang tot gegevens of internet via <xliff:g id="CARRIER">%s</xliff:g>. Internet is alleen beschikbaar via wifi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"je provider"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Aangezien een app een toestemmingsverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> toestaan om segmenten van <xliff:g id="APP_2">%2$s</xliff:g> weer te geven?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Deze kan informatie lezen van <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index ce35a07..58f441b 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> ਬਾਕੀ, ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%s</xliff:g> ਬਾਕੀ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> ਬਾਕੀ, ਲਗਭਗ <xliff:g id="TIME">%s</xliff:g> ਬਾਕੀ"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> ਬਾਕੀ। ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਹੈ।"</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB ਚਾਰਜਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ।\nਕੇਵਲ ਸਪਲਾਈ ਕੀਤਾ ਚਾਰਜਰ ਵਰਤੋ।"</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB ਚਾਰਜਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ।"</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"ਕੇਵਲ ਸਪਲਾਈ ਕੀਤਾ ਚਾਰਜਰ ਵਰਤੋ।"</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB ਰਾਹੀਂ ਚਾਰਜ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਆਪਣੇ ਡੀਵਾਈਸ ਦੇ ਨਾਲ ਮਿਲੇ ਚਾਰਜਰ ਦੀ ਵਰਤੋਂ ਕਰੋ।"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB ਰਾਹੀਂ ਚਾਰਜ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ਆਪਣੇ ਡੀਵਾਈਸ ਨਾਲ ਮਿਲੇ ਚਾਰਜਰ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ਸੈਟਿੰਗਾਂ"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"ਕੀ ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ਚਾਲੂ ਕਰੋ"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"ਕੈਮਰਾ ਖੋਲ੍ਹੋ"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"ਨਵਾਂ ਕੰਮ ਲੇਆਉਟ ਚੁਣੋ"</string>
<string name="cancel" msgid="6442560571259935130">"ਰੱਦ ਕਰੋ"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਪ੍ਰਤੀਕ"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਪ੍ਰਤੀਕ"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"ਮਦਦ ਸੁਨੇਹਾ ਖੇਤਰ"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"ਬੰਦ।"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"ਕਨੈਕਟ ਕੀਤਾ।"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ।"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ਰੋਮਿੰਗ"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ਕਿਨਾਰਾ"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"ਰੋਮਿੰਗ"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ਵਾਈ-ਫਾਈ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"ਕੋਈ SIM ਨਹੀਂ।"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"ਮੋਬਾਈਲ ਡਾਟਾ ਚਾਲੂ"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ਬਲੂਟੁੱਥ ਟੈਦਰਿੰਗ।"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ਏਅਰਪਲੇਨ ਮੋਡ।"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ਚਾਲੂ ਹੈ।"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"ਕੋਈ ਸਿਮ ਕਾਰਡ ਨਹੀਂ।"</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ਕੈਰੀਅਰ ਨੈੱਟਵਰਕ ਪਰਿਵਰਤਨ।"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"ਕੈਰੀਅਰ ਨੈੱਟਵਰਕ ਦੀ ਬਦਲੀ"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"ਬੈਟਰੀ ਵੇਰਵੇ ਖੋਲ੍ਹੋ"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"ਬੈਟਰੀ <xliff:g id="NUMBER">%d</xliff:g> ਪ੍ਰਤੀਸ਼ਤ ਹੈ।"</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"ਬੈਟਰੀ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ਪ੍ਰਤੀਸ਼ਤ।"</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ਏਅਰਪਲੇਨ ਮੋਡ ਚਾਲੂ।"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ਏਅਰਪਲੇਨ ਮੋਡ ਬੰਦ ਹੈ।"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ਏਅਰਪਲੇਨ ਮੋਡ ਚਾਲੂ ਹੋਇਆ"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ, ਕੇਵਲ ਤਰਜੀਹੀ।"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਚਾਲੂ ਹੈ।"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ ਕਰੋ, ਪੂਰਾ ਸ਼ਾਂਤ।"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ, ਕੇਵਲ ਅਲਾਰਮ।"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ।"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ਡੈਜ਼ਰਟ ਕੇਸ"</string>
<string name="start_dreams" msgid="5640361424498338327">"ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ਈਥਰਨੈਟ"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ਕੇਵਲ ਤਰਜੀਹੀ"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ਆਡੀਓ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ਹੈੱਡਸੈੱਟ"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ਇਨਪੁੱਟ"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ਚਮਕ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ਆਟੋ-ਰੋਟੇਟ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ਵਾਈ-ਫਾਈ ਬੰਦ"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"ਵਾਈ-ਫਾਈ ਚਾਲੂ"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ਕੋਈ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"ਅਲਾਰਮ"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"ਕਾਸਟ"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"ਕਾਸਟਿੰਗ"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ਬਿਨਾਂ ਨਾਮ ਦਾ ਡੀਵਾਈਸ"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ਟੈਦਰਿੰਗ"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ਹੌਟਸਪੌਟ"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d ਡੀਵਾਈਸ</item>
<item quantity="other">%d ਡੀਵਾਈਸਾਂ</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ਵਰਤਿਆ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਸੀਮਾ"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਚਿਤਾਵਨੀ"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"ਸੂਚਨਾਵਾਂ ਅਤੇ ਐਪਾਂ ਬੰਦ ਹਨ"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ਰਾਤਰੀ ਲਾਈਟ"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"ਸੂਰਜ ਛਿਪਣ \'ਤੇ ਚਾਲੂ"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"ਸੂਰਜ ਚੜ੍ਹਨ ਤੱਕ"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਵਿੱਚ ਮੁਕੰਮਲ)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਤੇਜ਼ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਵਿੱਚ ਮੁਕੰਮਲ)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਵਿੱਚ ਮੁਕੰਮਲ)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ਵਰਤੋਂਕਾਰ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ਵਰਤੋਂਕਾਰ, ਵਰਤਮਾਨ ਵਰਤੋਂਕਾਰ ਸਵਿੱਚ ਕਰੋ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"ਮੌਜੂਦਾ ਉਪਭੋਗਤਾ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਉਹ ਸਭ ਕੁਝ ਕੈਪਚਰ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰ ਦੇਵੇਗਾ, ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਤੇ ਡਿਸਪਲੇ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ਸਭ ਕਲੀਅਰ ਕਰੋ"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਮੋਡ ਸੂਚਨਾਵਾਂ ਨੂੰ ਲੁਕਾ ਰਿਹਾ ਹੈ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ਹੁਣ ਚਾਲੂ ਕਰੋ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"ਸਥਾਪਤ ਕਰੋ"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ਹੁਣੇ ਬੰਦ ਕਰੋ"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ਧੁਨੀ ਸੈਟਿੰਗਾਂ"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"ਵਿਸਤਾਰ ਕਰੋ"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"ਨਸ਼ਟ ਕਰੋ"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"ਆਊਟਪੁੱਟ ਡੀਵਾਈਸ ਵਰਤੋ"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ਥਰਥਰਾਹਟ \'ਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ਵੌਲਿਊਮ ਕੰਟਰੋਲ"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ਕਾਲਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਲਈ ਘੰਟੀ ਵੱਜੇਗੀ"</string>
<string name="output_title" msgid="5355078100792942802">"ਮੀਡੀਆ ਆਊਟਪੁੱਟ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ਫ਼ੋਨ ਕਾਲ ਆਊਟਪੁੱਟ"</string>
<string name="output_none_found" msgid="5544982839808921091">"ਕੋਈ ਡੀਵਾਈਸ ਨਹੀਂ ਮਿਲੇ"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"ਪਾਵਰ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨਾਲ, ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਲਈ ਮਹੱਤਤਾ ਪੱਧਰ ਨੂੰ 0 ਤੋਂ 5 ਤੱਕ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ। \n\n"<b>"ਪੱਧਰ 5"</b>" \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਸਿਖਰ \'ਤੇ ਦਿਖਾਓ \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਦੀ ਆਗਿਆ ਦਿਓ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 4"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 3"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 2"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n- ਕਦੇ ਵੀ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n\n"<b>"ਪੱਧਰ 1"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n- ਕਦੇ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n- ਲਾਕ ਸਕ੍ਰੀਨ ਅਤੇ ਸਥਿਤੀ ਪੱਟੀ ਤੋਂ ਲੁਕਾਓ \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਹੇਠਾਂ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 0"</b>" \n- ਐਪ ਤੋਂ ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"ਸੂਚਨਾਵਾਂ"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"ਤੁਹਾਨੂੰ ਹੁਣ ਇਹ ਸੂਚਨਾਵਾਂ ਦਿਖਾਈ ਨਹੀਂ ਦੇਣਗੀਆਂ"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਛੋਟਾ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"ਤੁਸੀਂ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਆਮ ਤੌਰ \'ਤੇ ਖਾਰਜ ਕਰਦੇ ਹੋ। \nਕੀ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"ਕੀ ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖੋ"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"ਛੋਟਾ ਕਰੋ"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ਇਨ੍ਹਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"ਕੈਮਰਾ"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਹੋਰਾਂ ਐਪਾਂ ਉੱਪਰ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">ਇਹ ਐਪ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਹੈ।</item>
+ <item quantity="other">ਇਹ ਐਪ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਹੈ।</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ</item>
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ਅਤੇ <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ਠੀਕ ਹੈ"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨੂੰ ਖੋਲ੍ਹਿਆ ਗਿਆ"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ਇਸ ਚੈਨਲ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਦਿਓ"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"ਸੱਜਾ ਕੀ-ਕੋਡ"</string>
<string name="left_icon" msgid="3096287125959387541">"ਖੱਬਾ ਪ੍ਰਤੀਕ"</string>
<string name="right_icon" msgid="3952104823293824311">"ਸੱਜਾ ਪ੍ਰਤੀਕ"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ਟਾਇਲਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਘਸੀਟੋ"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ਹਟਾਉਣ ਲਈ ਇੱਥੇ ਘਸੀਟੋ"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="tuner_time" msgid="6572217313285536011">"ਸਮਾਂ"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬੰਦ ਕਰੋ।"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"ਅਲਾਰਮ ਸੈੱਟ ਕੀਤਾ।"</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> ਵਜੋਂ ਸਾਈਨ ਇਨ ਕੀਤਾ"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ।"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ।"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"ਵੇਰਵੇ ਖੋਲ੍ਹੋ।"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ।"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ਸੈਟਿੰਗਾਂ ਦੇ ਕ੍ਰਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ।"</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string>
<string name="go_to_web" msgid="2650669128861626071">"ਬ੍ਰਾਊਜ਼ਰ \'ਤੇ ਜਾਓ"</string>
<string name="mobile_data" msgid="7094582042819250762">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"ਵਾਈ-ਫਾਈ ਬੰਦ ਹੈ"</string>
<string name="bt_is_off" msgid="2640685272289706392">"ਬਲੂਟੁੱਥ ਬੰਦ ਹੈ"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਬੰਦ ਹੈ"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ਬਦਲੋ"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀਆਂ ਐਪਾਂ"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"ਬੈਟਰੀ ਅਤੇ ਡਾਟਾ ਵਰਤੋਂ ਸਬੰਧੀ ਵੇਰਵਿਆਂ ਲਈ ਟੈਪ ਕਰੋ"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰਨਾ ਹੈ?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"ਕਿਸੇ ਐਪ ਵੱਲੋਂ ਇਜਾਜ਼ਤ ਬੇਨਤੀ ਨੂੰ ਢਕੇ ਜਾਣ ਕਾਰਨ ਸੈਟਿੰਗਾਂ ਤੁਹਾਡੇ ਜਵਾਬ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"ਕੀ <xliff:g id="APP_0">%1$s</xliff:g> ਨੂੰ <xliff:g id="APP_2">%2$s</xliff:g> ਦੇ ਹਿੱਸੇ ਦਿਖਾਉਣ ਦੇਣੇ ਹਨ?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ਇਹ <xliff:g id="APP">%1$s</xliff:g> ਵਿੱਚੋਂ ਜਾਣਕਾਰੀ ਪੜ੍ਹ ਸਕਦਾ ਹੈ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 21b764b..79d9d6a 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -40,12 +40,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Pozostało <xliff:g id="PERCENTAGE">%s</xliff:g>, jeszcze około <xliff:g id="TIME">%s</xliff:g> (na podstawie Twojego sposobu korzystania)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Pozostało <xliff:g id="PERCENTAGE">%s</xliff:g>, jeszcze około <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Pozostało <xliff:g id="PERCENTAGE">%s</xliff:g>. Oszczędzanie baterii jest włączone."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Nie można naładować przez USB. Użyj ładowarki dostarczonej z urządzeniem."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Nie można naładować przez USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Użyj ładowarki dostarczonej z urządzeniem"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ustawienia"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Włączyć Oszczędzanie baterii?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Włącz"</string>
@@ -153,7 +150,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Połączono."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Łączę..."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Tryb samolotowy jest włączony."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Tryb samolotowy został wyłączony."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Tryb samolotowy został włączony."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Tryb Nie przeszkadzać jest włączony."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Nie przeszkadzać (włączone, całkowita cisza)."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Nie przeszkadzać (włączone, tylko alarmy)."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nie przeszkadzać."</string>
@@ -282,7 +277,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Półka ze słodkościami"</string>
<string name="start_dreams" msgid="5640361424498338327">"Wygaszacz ekranu"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Naciśnij i przytrzymaj ikony, by wyświetlić więcej opcji"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Kliknij i przytrzymaj ikony, by wyświetlić więcej opcji"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nie przeszkadzać"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tylko priorytetowe"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Tylko alarmy"</string>
@@ -443,8 +438,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> będzie zapisywać wszystko, co wyświetli się na ekranie."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Nie pokazuj ponownie"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ukryj wszystkie"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"W trybie Nie przeszkadzać powiadomienia są ukrywane"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Rozpocznij teraz"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Brak powiadomień"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil może być monitorowany"</string>
@@ -550,8 +544,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Kliknij, by włączyć wibracje."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Kliknij, by wyciszyć."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Sterowanie głośnością: %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Wibracje przy połączeniach i powiadomieniach"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Wyciszenie połączeń i powiadomień"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Dzwonek przy połączeniach i powiadomieniach"</string>
<string name="output_title" msgid="5355078100792942802">"Wyjście multimediów"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Wyjście dla połączeń telefonicznych"</string>
@@ -744,8 +736,11 @@
<string name="right_keycode" msgid="708447961000848163">"Prawy klawisz"</string>
<string name="left_icon" msgid="3096287125959387541">"Lewa ikona"</string>
<string name="right_icon" msgid="3952104823293824311">"Prawa ikona"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Przeciągnij, aby dodać kafelki"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Przeciągnij tutaj, by usunąć"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Edytuj"</string>
<string name="tuner_time" msgid="6572217313285536011">"Godzina"</string>
<string-array name="clock_options">
@@ -849,7 +844,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Zastąp"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacje działające w tle"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i użycia danych"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Wyłączyć mobilną transmisję danych?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Aplikacja Ustawienia nie może zweryfikować Twojej odpowiedzi, ponieważ inna aplikacja zasłania prośbę o udzielenie uprawnień."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Zezwolić aplikacji <xliff:g id="APP_0">%1$s</xliff:g> na pokazywanie wycinków z aplikacji <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Może odczytywać informacje z aplikacji <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index c9cb784..080f7e4 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s), cerca de <xliff:g id="TIME">%s</xliff:g> com base no seu uso"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s), cerca de <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s). A Economia de bateria está ativada."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"O carregamento via USB não é suportado.\nUse apenas o carregador fornecido."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"O carregamento via USB não é suportado."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Use apenas o carregador fornecido."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Não é possível carregar via USB. Use o carregador que acompanha o dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Não é possível carregar via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Usar o carregador que acompanha o dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Configurações"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Ativar Economia de bateria?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ativar"</string>
@@ -147,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desligado."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dados móveis"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dados móveis ativados"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Dados móveis desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ativada."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Sem cartão SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Alteração de rede de operadora."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Alteração de rede da operadora"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria em <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
<!-- String.format failed for translation -->
@@ -209,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avião ativado."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"O modo avião foi desativado."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"O modo avião foi ativado."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Não perturbe\" ativado, somente prioridade."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Não perturbe\" ativado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Não perturbe\" ativado, silêncio total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Não perturbe\" ativado, somente alarmes."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Não perturbe"</string>
@@ -275,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Mostruário de sobremesas"</string>
<string name="start_dreams" msgid="5640361424498338327">"Protetor de tela"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Toque nos ícones e mantenha-os pressionados para ver mais opções"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não perturbe"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Somente prioridade"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Somente alarmes"</string>
@@ -331,6 +332,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Ponto de acesso"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Ativando…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Economia de dados ativada"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d dispositivo</item>
<item quantity="other">%d dispositivos</item>
@@ -433,6 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> começará a capturar tudo o que for exibido na tela."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Não mostrar novamente"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"O modo \"Não perturbe\" está ocultando as notificações"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
@@ -500,6 +503,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Desativar agora"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Configurações de som"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Alterar dispositivo de saída"</string>
@@ -537,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para configurar para vibrar."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volume %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Chamadas e notificações farão o dispositivo vibrar"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Chamadas e notificações ficarão silenciadas"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Chamadas e notificações emitirão um toque"</string>
<string name="output_title" msgid="5355078100792942802">"Saída de mídia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Saída de chamada telefônica"</string>
@@ -595,12 +597,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com controles de ativação de notificações, é possível definir o nível de importância de 0 a 5 para as notificações de um app. \n\n"<b>"Nível 5"</b>" \n- Exibir na parte superior da lista de notificações \n- Permitir interrupção em tela cheia \n- Sempre exibir \n\n"<b>"Nível 4"</b>" \n- Impedir interrupções em tela cheia \n- Sempre exibir \n\n"<b>"Nível 3"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n\n"<b>"Nível 2"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n- Ocultar da tela de bloqueio e barra de status \n- Exibir na parte inferior da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações do app"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Você deixará de ver essas notificações"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Essas notificações serão minimizadas"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Geralmente você dispensa essas notificações. \nQuer que elas continuem a ser exibidas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuar mostrando essas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bloquear notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar mostrando"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"câmera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Config."</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Ok"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> fechados"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permitir notificações desse canal"</string>
@@ -708,8 +725,11 @@
<string name="right_keycode" msgid="708447961000848163">"Código de tecla à direita"</string>
<string name="left_icon" msgid="3096287125959387541">"Ícone à esquerda"</string>
<string name="right_icon" msgid="3952104823293824311">"Ícone à direita"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar blocos"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arraste aqui para remover"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Horas"</string>
<string-array name="clock_options">
@@ -753,7 +773,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as configurações rápidas."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarme definido."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Login efetuado como <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Sem Internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Sem Internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Abrir detalhes."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Abrir configurações de <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar ordem das configurações."</string>
@@ -801,6 +821,7 @@
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
<string name="go_to_web" msgid="2650669128861626071">"Abrir o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"O Wi-Fi está desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"O recurso Não perturbe está desativado"</string>
@@ -812,7 +833,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Permitir que <xliff:g id="APP_0">%1$s</xliff:g> mostre partes do app <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Pode ler informações do app <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index c5c4add..d2adb24 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. Cerca de <xliff:g id="TIME">%s</xliff:g> restante(s) com base na sua utilização."</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. Cerca de <xliff:g id="TIME">%s</xliff:g> restante(s)."</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante. A Poupança de bateria está ativada."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Carregamento USB não suportado. \nUtilize apenas o carregador fornecido."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"O carregamento por USB não é suportado."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Utilize apenas o carregador fornecido."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Não é possível carregar através de USB. Utilize o carregador fornecido com o dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Não é possível carregar através de USB."</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Utilize o carregador fornecido com o dispositivo."</string>
<string name="battery_low_why" msgid="4553600287639198111">"Definições"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Pretende ativar a Poupança de bateria?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ativar"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"abrir câmara"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo esquema de tarefa"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Toque no sensor de impressões digitais."</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Ícone de impressão digital"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Ícone de aplicação"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Área da mensagem de ajuda"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desativado."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ligado."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"A ligar..."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3,5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dados móveis"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dados móveis ativados"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Dados móveis desativados."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ligação Bluetooth via telemóvel."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ativada."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Nenhum cartão SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Rede do operador em mudança."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Rede do operador em mudança."</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria a <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"A bateria está a carregar, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> por cento."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo de avião ligado."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avião desligado."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avião ligado."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Não incomodar ligado, apenas prioridade."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Não incomodar ativado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Não incomodar ativado, silêncio total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Não incomodar ligado, apenas alarmes."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Não incomodar."</string>
@@ -274,8 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Vitrina de sobremesas"</string>
<string name="start_dreams" msgid="5640361424498338327">"Proteção de ecrã"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Toque sem soltar nos ícones para obter mais opções."</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não incomodar"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Apenas prioridade"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Apenas alarmes"</string>
@@ -288,6 +286,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Áudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Ausc. c/ mic. integ."</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Entrada"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"A ativar..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotação automática"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Rodar o ecrã automaticamente"</string>
@@ -312,7 +311,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Desligado"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ligado"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Não estão disponíveis redes Wi-Fi"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarme"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"A ativar..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Transmitir"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Transmissão"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string>
@@ -329,7 +328,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"A ligar..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Associação"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"A ativar…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"A ativar..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Poup. dados ativada"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d dispositivos</item>
<item quantity="one">%d dispositivo</item>
@@ -343,8 +343,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizado(s)"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Perfil de trabalho"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"As notificações e as aplicações estão desativadas"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Perfil de trabalho"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz noturna"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Ativ. ao pôr-do-sol"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Até ao nascer do sol"</string>
@@ -397,9 +396,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)…"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar rapid. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até carga máx.)…"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar lentam. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até carga máx.)…"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Mudar utilizador"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Mudar de utilizador; o utilizador atual é <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Utilizador atual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"O(a) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vai começar a captar tudo o que é apresentado no ecrã."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Não mostrar de novo"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"O modo Não incomodar está a ocultar as notificações."</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Começar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorizado"</string>
@@ -500,6 +500,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Desativar agora"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Definições de som"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Reduzir"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Mudar de dispositivo de saída"</string>
@@ -537,6 +538,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para ativar a vibração."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para desativar o som."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controlos de volume de %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"As chamadas e as notificações tocam."</string>
<string name="output_title" msgid="5355078100792942802">"Saída de som multimédia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Saída de som de chamada telefónica"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nenhum dispositivo encontrado."</string>
@@ -592,12 +594,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com os controlos de notificações do consumo de energia, pode definir um nível de importância de 0 a 5 para as notificações de aplicações. \n\n"<b>"Nível 5"</b>" \n- Mostrar no início da lista de notificações \n- Permitir a interrupção do ecrã inteiro \n- Aparecer rapidamente sempre \n\n"<b>"Nível 4"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Aparecer rapidamente sempre\n\n"<b>"Nível 3"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n\n"<b>"Nível 2"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n- Nunca tocar nem vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir a interrupção do ecrã inteiro \n- Nunca aparecer rapidamente \n- Nunca tocar nem vibrar \n- Ocultar do ecrã de bloqueio e da barra de estado \n- Mostrar no fim da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações da aplicação"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nunca mais verá estas notificações."</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Estas notificações serão minimizadas."</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Normalmente, ignora estas notificações. \nPretende continuar a mostrá-las?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Pretende continuar a ver estas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Parar notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar a mostrar"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Pretende continuar a ver notificações desta aplicação?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar estas notificações."</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"câmara"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"sobrepõe-se a outras aplicações no ecrã"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Esta aplicação está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Esta aplicação está <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other">a utilizar o(a) <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e o(a) <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">a utilizar o(a) <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Definições"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Ok"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> fechados"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permitir notificações deste canal"</string>
@@ -705,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Código de tecla direito"</string>
<string name="left_icon" msgid="3096287125959387541">"Ícone esquerdo"</string>
<string name="right_icon" msgid="3952104823293824311">"Ícone direito"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar mosaicos"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Toque sem soltar e arraste para adicionar mosaicos."</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastar para aqui para remover"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Necessita de, pelo menos, 6 mosaicos."</string>
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
@@ -750,7 +768,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as definições rápidas."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarme definido."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Sessão iniciada como <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Sem Internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Sem Internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Abrir os detalhes."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Abrir as definições de <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar a ordem das definições."</string>
@@ -798,6 +816,7 @@
<string name="app_info" msgid="6856026610594615344">"Informações da aplicação"</string>
<string name="go_to_web" msgid="2650669128861626071">"Ir para o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Não incomodar desativado"</string>
@@ -809,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplicações em execução em segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Toque para obter detalhes acerca da utilização da bateria e dos dados"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Pretende desativar os dados móveis?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Pretende desativar os dados móveis?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Não terá acesso a dados ou à Internet através do operador <xliff:g id="CARRIER">%s</xliff:g>. A Internet estará disponível apenas por Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"o seu operador"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Uma vez que uma aplicação está a ocultar um pedido de autorização, as Definições não conseguem validar a sua resposta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Pretende permitir que a aplicação <xliff:g id="APP_0">%1$s</xliff:g> mostre partes da aplicação <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Pode ler informações da aplicação <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 29ac90e..080f7e4 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s), cerca de <xliff:g id="TIME">%s</xliff:g> com base no seu uso"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s), cerca de <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> restante(s). A Economia de bateria está ativada."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"O carregamento via USB não é suportado.\nUse apenas o carregador fornecido."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"O carregamento via USB não é suportado."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Use apenas o carregador fornecido."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Não é possível carregar via USB. Use o carregador que acompanha o dispositivo."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Não é possível carregar via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Usar o carregador que acompanha o dispositivo"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Configurações"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Ativar Economia de bateria?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ativar"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"abrir câmera"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Selecionar novo layout da tarefa"</string>
<string name="cancel" msgid="6442560571259935130">"Cancelar"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Toque no sensor de impressão digital"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Ícone de impressão digital"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Ícone do app"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Área da mensagem de ajuda"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Desligado."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Conectando."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Dados móveis"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Dados móveis ativados"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Dados móveis desativados"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Dados móveis desativados"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ativada."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Sem cartão SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Alteração de rede de operadora."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Alteração de rede da operadora"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Abrir detalhes da bateria"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria em <xliff:g id="NUMBER">%d</xliff:g> por cento."</string>
<!-- String.format failed for translation -->
@@ -210,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avião ativado."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"O modo avião foi desativado."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"O modo avião foi ativado."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Não perturbe\" ativado, somente prioridade."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Não perturbe\" ativado."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Não perturbe\" ativado, silêncio total."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Não perturbe\" ativado, somente alarmes."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Não perturbe"</string>
@@ -276,7 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Mostruário de sobremesas"</string>
<string name="start_dreams" msgid="5640361424498338327">"Protetor de tela"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não perturbe"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Somente prioridade"</string>
@@ -290,6 +289,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Áudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Fone de ouvido"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Entrada"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Ativando…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Girar automaticamente"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Girar tela automaticamente"</string>
@@ -314,7 +314,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ativado"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Nenhuma rede Wi-Fi disponível"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarme"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Ativando…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Transmitir"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Transmitindo"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string>
@@ -331,7 +331,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Ponto de acesso"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Ativando…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Ativando…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Economia de dados ativada"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d dispositivo</item>
<item quantity="other">%d dispositivos</item>
@@ -345,8 +346,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Usados: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Perfil de trabalho"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"As notificações e os apps estão desativados"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Perfil de trabalho"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Modo noturno"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Ativ. ao pôr do sol"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Até o nascer do sol"</string>
@@ -399,9 +399,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até a conclusão)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até a conclusão)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até a conclusão)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Trocar usuário"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Alternar usuário. Usuário atual <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Usuário atual <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -435,6 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> começará a capturar tudo o que for exibido na tela."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Não mostrar novamente"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Limpar tudo"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"O modo \"Não perturbe\" está ocultando as notificações"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Sem notificações"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
@@ -502,6 +503,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Desativar agora"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Configurações de som"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Alterar dispositivo de saída"</string>
@@ -539,6 +541,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Toque para configurar para vibrar."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Toque para silenciar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Controles de volume %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Chamadas e notificações emitirão um toque"</string>
<string name="output_title" msgid="5355078100792942802">"Saída de mídia"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Saída de chamada telefônica"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nenhum dispositivo foi encontrado"</string>
@@ -594,12 +597,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Com controles de ativação de notificações, é possível definir o nível de importância de 0 a 5 para as notificações de um app. \n\n"<b>"Nível 5"</b>" \n- Exibir na parte superior da lista de notificações \n- Permitir interrupção em tela cheia \n- Sempre exibir \n\n"<b>"Nível 4"</b>" \n- Impedir interrupções em tela cheia \n- Sempre exibir \n\n"<b>"Nível 3"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n\n"<b>"Nível 2"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n\n"<b>"Nível 1"</b>" \n- Impedir interrupções em tela cheia \n- Nunca exibir \n- Nunca emitir som ou vibrar \n- Ocultar da tela de bloqueio e barra de status \n- Exibir na parte inferior da lista de notificações \n\n"<b>"Nível 0"</b>" \n- Bloquear todas as notificações do app"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificações"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Você deixará de ver essas notificações"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Essas notificações serão minimizadas"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Geralmente você dispensa essas notificações. \nQuer que elas continuem a ser exibidas?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Continuar mostrando essas notificações?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Bloquear notificações"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuar mostrando"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizar"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Continuar mostrando notificações desse app?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Não é possível desativar essas notificações"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"câmera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfone"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"exibindo sobre outros apps na sua tela"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Este app está <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">usando: <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> e <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Config."</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Ok"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Controles de notificação de <xliff:g id="APP_NAME">%1$s</xliff:g> fechados"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permitir notificações desse canal"</string>
@@ -707,8 +725,11 @@
<string name="right_keycode" msgid="708447961000848163">"Código de tecla à direita"</string>
<string name="left_icon" msgid="3096287125959387541">"Ícone à esquerda"</string>
<string name="right_icon" msgid="3952104823293824311">"Ícone à direita"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar blocos"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arraste aqui para remover"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Horas"</string>
<string-array name="clock_options">
@@ -752,7 +773,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Fechar as configurações rápidas."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarme definido."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Login efetuado como <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Sem Internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Sem Internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Abrir detalhes."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Abrir configurações de <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editar ordem das configurações."</string>
@@ -800,6 +821,7 @@
<string name="app_info" msgid="6856026610594615344">"Informações do app"</string>
<string name="go_to_web" msgid="2650669128861626071">"Abrir o navegador"</string>
<string name="mobile_data" msgid="7094582042819250762">"Dados móveis"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"O Wi-Fi está desativado"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth desativado"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"O recurso Não perturbe está desativado"</string>
@@ -811,7 +833,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Permitir que <xliff:g id="APP_0">%1$s</xliff:g> mostre partes do app <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Pode ler informações do app <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 7753e11..08f27f1 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -39,9 +39,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Procent rămas din baterie <xliff:g id="PERCENTAGE">%s</xliff:g>, în baza utilizării, timp aproximativ rămas <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Procent rămas din baterie <xliff:g id="PERCENTAGE">%s</xliff:g>, timp aproximativ rămas <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"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_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="invalid_charger" msgid="2741987096648693172">"Nu se poate realiza încărcarea prin USB. Utilizați încărcătorul livrat împreună cu dispozitivul."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Nu se poate realiza încărcarea prin USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Folosiți încărcătorul livrat împreună cu dispozitivul"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Setări"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Activați economisirea bateriei?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activați"</string>
@@ -104,8 +104,7 @@
<string name="camera_label" msgid="7261107956054836961">"deschideți camera foto"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Selectați noul aspect pentru activitate"</string>
<string name="cancel" msgid="6442560571259935130">"Anulați"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Atingeți senzorul de amprente"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Pictograma amprentă"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Pictograma aplicației"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Zona mesajelor de ajutor"</string>
@@ -149,28 +148,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Dezactivat."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectat."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Se conectează."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Niciun card SIM."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Date mobile"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Date mobile activate"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Date mobile dezactivate"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Date mobile dezactivate"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conectarea ca modem prin Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod Avion."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"Rețea VPN activată"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Fără SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Se schimbă rețeaua operatorului."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Se schimbă rețeaua operatorului"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Deschideți detaliile privind bateria"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterie: <xliff:g id="NUMBER">%d</xliff:g> la sută."</string>
<!-- String.format failed for translation -->
@@ -211,7 +210,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modul Avion este activat."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modul Avion este dezactivat."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modul Avion este activat."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Setarea „Nu deranja” este activată – numai prioritare."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Funcția Nu deranja este activată."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Setarea „Nu deranja” este activată – niciun sunet."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Setarea „Nu deranja” este activată – numai alarme."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nu deranja."</string>
@@ -278,7 +277,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Vitrina cu dulciuri"</string>
<string name="start_dreams" msgid="5640361424498338327">"Economizor de ecran"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nu deranja"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Numai cu prioritate"</string>
@@ -292,6 +291,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Căști"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Intrare"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Se activează..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminozitate"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Rotire automată"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Rotirea automată a ecranului"</string>
@@ -316,7 +316,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi deconectat"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi activat"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Nicio rețea Wi-Fi disponibilă"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarmă"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Se activează..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Proiectați"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Se proiectează"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispozitiv nedenumit"</string>
@@ -333,7 +333,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Se conectează..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Se activează..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Se activează..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Economizor date activat"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="few">%d dispozitive</item>
<item quantity="other">%d de dispozitive</item>
@@ -348,8 +349,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizați"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limită de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertizare: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Profil de serviciu"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Notificările și aplicațiile sunt dezactivate"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Profil de serviciu"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Lumină de noapte"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Activată la apus"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Până la răsărit"</string>
@@ -402,9 +402,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcă (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 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="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcă lent (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Comutați între utilizatori"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Schimbați utilizatorul (utilizator actual <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Utilizator actual <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -438,6 +438,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> va începe să captureze tot ceea ce se afișează pe ecran."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Nu se mai afișează"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Ștergeți toate notificările"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Funcția Nu deranja ascunde notificările"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Începeți acum"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Nicio notificare"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilul poate fi monitorizat"</string>
@@ -505,6 +506,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Config."</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Dezactivați acum"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Setări de sunet"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Extindeți"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Restrângeți"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Comutați dispozitivul de ieșire"</string>
@@ -542,6 +544,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Atingeți pentru a seta pe vibrații."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Atingeți pentru a dezactiva sunetul."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Comenzi de volum pentru %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Apelurile și notificările vor suna"</string>
<string name="output_title" msgid="5355078100792942802">"Ieșire media"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Ieșire apel telefonic"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nu s-a găsit niciun dispozitiv"</string>
@@ -597,12 +600,29 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Folosind comenzile de gestionare a notificărilor, puteți să setați un nivel de importanță de la 0 la 5 pentru notificările unei aplicații. \n\n"<b>"Nivelul 5"</b>" \n– Se afișează la începutul listei de notificări \n– Se permite întreruperea pe ecranul complet \n– Se afișează întotdeauna scurt \n\n"<b>"Nivelul 4"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Se afișează întotdeauna scurt \n\n"<b>"Nivelul 3"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n\n"<b>"Nivelul 2"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n– Nu se emit sunete și nu vibrează niciodată \n\n"<b>"Nivelul 1"</b>" \n– Se împiedică întreruperea pe ecranul complet \n– Nu se afișează niciodată scurt \n– Nu se emit sunete și nu vibrează niciodată \n– Se ascunde în ecranul de blocare și în bara de stare \n– Se afișează la finalul listei de notificări \n\n"<b>"Nivelul 0"</b>" \n– Se blochează toate notificările din aplicație"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Notificări"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Nu veți mai vedea aceste notificări"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Aceste notificări vor fi minimizate"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"De regulă respingeți aceste notificări. \nDoriți să fie afișate în continuare?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Doriți să continuați afișarea acestor notificări?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Opriți notificările"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Continuați afișarea"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimizați"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Doriți să continuați afișarea notificărilor de la această aplicație?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Aceste notificări nu pot fi dezactivate"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"cameră foto"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"microfon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"se afișează peste alte aplicații de pe ecran"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="few">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Această aplicație <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="few">folosind <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">folosind <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> și <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">folosind <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Setări"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Opțiunile privind notificările pentru <xliff:g id="APP_NAME">%1$s</xliff:g> sunt afișate"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Opțiunile privind notificările pentru <xliff:g id="APP_NAME">%1$s</xliff:g> nu sunt afișate"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Permiteți notificările de la acest canal"</string>
@@ -712,8 +732,9 @@
<string name="right_keycode" msgid="708447961000848163">"Codul de taste din dreapta"</string>
<string name="left_icon" msgid="3096287125959387541">"Pictograma din stânga"</string>
<string name="right_icon" msgid="3952104823293824311">"Pictograma din dreapta"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trageți pentru a adăuga sectoare"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Țineți apăsat și trageți pentru a adăuga piese"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Trageți aici pentru a elimina"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Aveți nevoie de cel puțin 6 piese"</string>
<string name="qs_edit" msgid="2232596095725105230">"Editați"</string>
<string name="tuner_time" msgid="6572217313285536011">"Oră"</string>
<string-array name="clock_options">
@@ -757,7 +778,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Închideți setările rapide."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarmă setată."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Conectat(ă) ca <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Nicio conexiune la internet."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Fără conexiune la internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Deschideți detaliile."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Deschideți setările <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Editați ordinea setărilor."</string>
@@ -805,6 +826,7 @@
<string name="app_info" msgid="6856026610594615344">"Informații despre aplicație"</string>
<string name="go_to_web" msgid="2650669128861626071">"Accesați browserul"</string>
<string name="mobile_data" msgid="7094582042819250762">"Date mobile"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Conexiunea Wi-Fi este dezactivată"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Funcția Bluetooth este dezactivată"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Funcția Nu deranja este dezactivată"</string>
@@ -816,7 +838,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Înlocuiți"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplicațiile rulează în fundal"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Atingeți pentru mai multe detalii privind bateria și utilizarea datelor"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Dezactivați datele mobile?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Dezactivați datele mobile?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Nu veți avea acces la date sau la internet prin intermediul <xliff:g id="CARRIER">%s</xliff:g>. Internetul va fi disponibil numai prin Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operatorul dvs."</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Deoarece o aplicație acoperă o solicitare de permisiune, Setările nu vă pot verifica răspunsul."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Permiteți <xliff:g id="APP_0">%1$s</xliff:g> să afișeze porțiuni din <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Poate citi informații din <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 007b105..74082e8 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> ඉතිරිව ඇත, ඔබගේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%s</xliff:g> පමණ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> ඉතිරිව ඇත, <xliff:g id="TIME">%s</xliff:g> පමණ ඇත"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> ඉතිරිව ඇත. බැටරි සුරැකුම ක්රියාත්මකයි."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB හරහා ආරෝපණය කළ නොහැකිය. ඔබේ උපාංගය සමඟ පැමිණි ආරෝපකය භාවිත කරන්න."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB හරහා ආරෝපණය කළ නොහැකිය"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ඔබේ උපාංගය සමඟ පැමිණි ආරෝපකය භාවිත කරන්න"</string>
<string name="battery_low_why" msgid="4553600287639198111">"සැකසීම්"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"බැටරි සුරැකුම ක්රියාත්මක කරන්නද?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ක්රියාත්මක කරන්න"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"සම්බන්ධිතයි."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"සම්බන්ධ වෙමින්."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"අහස්යානා ආකාරය සක්රීයයි."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"අහස්යානා අකාරය අක්රියයි."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"අහස්යානා ආකාරය සක්රීයයි."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"බාධා නොකරන්න ක්රියාත්මකයි."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"සම්පූර්ණ නිහඬතාවය, බාධා නොකරන්න."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"බාධා නොකරන්න ක්රියාත්මකයි, ප්රමුඛතා පමණි."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"බාධා නොකරන්න."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"අතුරුපස අවස්තාව"</string>
<string name="start_dreams" msgid="5640361424498338327">"තිර සුරැකුම"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ඊතර නෙට්"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"තවත් විකල්ප සඳහා නිරූපකය ඔබා අල්ලාගෙන සිටින්න"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"බාධා නොකරන්න"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ප්රමුඛතාව පමණයි"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"එලාම පමණි"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"ඔබගේ තීරයේ දර්ශනය වන සෑම දෙයම <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ලබාගැනීම ආරම්භ කරන ලදි."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"නැවත නොපෙන්වන්න"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"සියල්ල හිස් කරන්න"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"බාධා නොකරන්න දැනුම්දීම් සඟවමින්"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"දැන් අරඹන්න"</string>
<string name="empty_shade_text" msgid="708135716272867002">"දැනුම්දීම් නැත"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ඇතැම් විට පැතිකඩ නිරීක්ෂණය කරන ලදි"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. කම්පනය කිරීමට සකස් කිරීමට තට්ටු කරන්න."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. නිහඬ කිරීමට තට්ටු කරන්න."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"හඬ පරිමා පාලන %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"ඇමතුම් සහ දැනුම්දීම් කම්පනය වනු ඇත"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"ඇමතුම් සහ දැනුම්දීම් නිහඬ වනු ඇත"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"ඇමතුම් සහ දැනුම්දීම් නාද වනු ඇත"</string>
<string name="output_title" msgid="5355078100792942802">"මාධ්ය ප්රතිදානය"</string>
<string name="output_calls_title" msgid="8717692905017206161">"දුරකථන ඇමතුම් ප්රතිදානය"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"දකුණු යතුරු කේතය"</string>
<string name="left_icon" msgid="3096287125959387541">"වම් නිරූපකය"</string>
<string name="right_icon" msgid="3952104823293824311">"දකුණු නිරූපකය"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ටයිල් එක් කිරීමට අදින්න"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"ටයිල් එක් කිරීමට අල්ලාගෙන සිට අදින්න"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ඉවත් කිරීමට මෙතැනට අදින්න"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"ඔබ අවම වශයෙන් ටයිල් 6ක් අවශ්ය වේ"</string>
<string name="qs_edit" msgid="2232596095725105230">"සංස්කරණය"</string>
<string name="tuner_time" msgid="6572217313285536011">"වේලාව"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"ප්රතිස්ථාපනය"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"පසුබිමින් ධාවනය වන යෙදුම්"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"බැටරි හා දත්ත භාවිතය පිළිබඳව විස්තර සඳහා තට්ටු කරන්න"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ජංගම දත්ත ක්රියාවිරහිත කරන්නද?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"ජංගම දත්ත ක්රියාවිරහිත කරන්නද?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"ඔබට <xliff:g id="CARRIER">%s</xliff:g> හරහා දත්ත හෝ අන්තර්ජාලයට පිවිසීමේ හැකියාවක් නැත. අන්තර්ජාලය Wi-Fi හරහා පමණක් ලබා ගත හැකිය."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"ඔබගේ වාහකය"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"යෙදුමක් අවසර ඉල්ලීමක් කරන නිසා, සැකසීම්වලට ඔබගේ ප්රතිචාරය සත්යාපනය කළ නොහැකිය."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> හට කොටස් <xliff:g id="APP_2">%2$s</xliff:g>ක් පෙන්වීමට ඉඩ දෙන්නද?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- එයට <xliff:g id="APP">%1$s</xliff:g> වෙතින් තොරතුරු කියවිය හැකිය"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 3a0a331..9b5fc1f 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -40,9 +40,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Zostáva <xliff:g id="PERCENTAGE">%s</xliff:g>, približne <xliff:g id="TIME">%s</xliff:g> v závislosti od intenzity využitia"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Zostáva <xliff:g id="PERCENTAGE">%s</xliff:g>, približne <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Zostáva: <xliff:g id="PERCENTAGE">%s</xliff:g>. Šetrič batérie je zapnutý."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Nabíjanie pomocou rozhrania USB nie je podporované.\nPoužívajte iba nabíjačku, ktorá bola dodaná spolu so zariadením."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Nabíjanie prostredníctvom USB nie je podporované."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Používajte iba originálnu nabíjačku."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Nedá sa nabíjať cez USB. Použite nabíjačku dodanú so zariadením."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Nedá sa nabíjať cez USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Použite nabíjačku dodanú so zariadením"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Nastavenia"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Zapnúť šetrič batérie?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Zapnúť"</string>
@@ -149,28 +149,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Vypnuté."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Pripojené."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Pripája sa"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Roaming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi‑Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Žiadna SIM karta."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilné dáta"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilné dáta sú zapnuté"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilné dáta sú vypnuté"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobilné dáta sú vypnuté"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pripojenie cez Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Režim v lietadle."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN je zapnuté."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Žiadna SIM karta."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Zmena siete operátora"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Mení sa sieť operátora"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Otvoriť podrobnosti o batérii"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batéria <xliff:g id="NUMBER">%d</xliff:g> percent."</string>
<!-- String.format failed for translation -->
@@ -211,7 +211,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Režim v lietadle je zapnutý."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Režim v lietadle je vypnutý."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim v lietadle je zapnutý."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stav Nerušiť je zapnutý, iba prioritné."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Režim Nerušiť je zapnutý."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Stav Nerušiť je zapnutý, úplné ticho."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Stav Nerušiť je zapnutý, iba budíky."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nerušiť"</string>
@@ -279,7 +279,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Pult s dezertami"</string>
<string name="start_dreams" msgid="5640361424498338327">"Šetrič obrazovky"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Pridržaním ikon zobrazíte ďalšie možnosti"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušiť"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Iba prioritné"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Iba budíky"</string>
@@ -292,6 +293,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Zvuk"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Náhlavná súprava"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Vstup"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Zapína sa…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jas"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Automatické otáčanie"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Automatické otáčanie obrazovky"</string>
@@ -316,7 +318,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi‑Fi je vypnutá"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi‑Fi je zapnuté"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"K dispozícii nie sú žiadne siete Wi‑Fi"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Budík"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Zapína sa…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Prenos"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Prenáša sa"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepomenované zariadenie"</string>
@@ -333,7 +335,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Pripája sa..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Zdieľané pripojenie"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Zapína sa..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Zapína sa…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Šetrič dát – zapnutý"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="few">%d zariadenia</item>
<item quantity="many">%d zariadenia</item>
@@ -349,8 +352,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Využité: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornenie pri <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Pracovný profil"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Upozornenia a aplikácie sú vypnuté"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Pracovný profil"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nočný režim"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Zapne sa pri západe slnka"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Do východu slnka"</string>
@@ -403,9 +405,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • 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="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa pomaly (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Prepnutie používateľa"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Prepnúť používateľa (súčasný používateľ: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Aktuálny používateľ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -439,6 +441,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Aplikácia <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> začne zaznamenávať všetok obsah zobrazený na vašej obrazovke."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Nabudúce nezobrazovať"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Vymazať všetko"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Režim Nerušiť skrýva upozornenia"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Spustiť"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Žiadne upozornenia"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil môže byť monitorovaný"</string>
@@ -506,6 +509,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Nastaviť"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Vypnúť"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Nastavenia zvuku"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Rozbaliť"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Zbaliť"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Prepnúť výstupné zariadenie"</string>
@@ -543,12 +547,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Klepnutím nastavíte vibrovanie."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Klepnutím vypnete zvuk."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Ovládacie prvky hlasitosti %s"</string>
- <!-- no translation found for volume_dialog_ringer_guidance_vibrate (8902050240801159042) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_silent (2128975224280276122) -->
- <skip />
- <!-- no translation found for volume_dialog_ringer_guidance_ring (6144469689490528338) -->
- <skip />
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Hovory a upozornenia budú vyzváňať"</string>
<string name="output_title" msgid="5355078100792942802">"Výstup médií"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Výstup telefonického hovoru"</string>
<string name="output_none_found" msgid="5544982839808921091">"Nenašli sa žiadne zariadenia"</string>
@@ -604,12 +603,31 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Pomocou ovládacích prvkov zobrazovania upozornení môžete nastaviť pre upozornenia aplikácie úroveň dôležitosti od 0 do 5. \n\n"<b>"Úroveň 5"</b>" \n– Zobrazovať v hornej časti zoznamu upozornení. \n– Povoliť prerušenia na celú obrazovku. \n– Vždy zobrazovať čiastočne. \n\n"<b>"Úroveň 4"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Vždy zobrazovať čiastočne. \n\n"<b>"Úroveň 3"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n\n"<b>"Úroveň 2"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n– Nikdy nespúšťať zvuk ani vibrácie. \n\n"<b>"Úroveň 1"</b>" \n– Zabrániť prerušeniam na celú obrazovku. \n– Nikdy nezobrazovať čiastočne. \n– Nikdy nespúšťať zvuk ani vibrácie. \n– Skryť na uzamknutej obrazovke a v stavovom riadku. \n– Zobraziť v dolnej časti zoznamu upozornení. \n\n"<b>"Úroveň 0"</b>" \n– Blokovať všetky upozornenia z aplikácie."</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Upozornenia"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Tieto upozornenia sa už nebudú zobrazovať"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Tieto upozornenia budú minimalizované"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Tieto upozornenia zvyčajne odmietate. \nChcete ich naďalej zobrazovať?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Majú sa tieto upozornenia naďalej zobrazovať?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Prestať zobrazovať upozornenia"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Naďalej zobrazovať"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Minimalizovať"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Majú sa upozornenia z tejto aplikácie naďalej zobrazovať?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Tieto upozornenia sa nedajú vypnúť"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"fotoaparát"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofón"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"sa zobrazuje cez ďalšie aplikácie na obrazovke"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="few">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="many">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Táto aplikácia <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="few">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="many">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">používa <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> a <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="one">používa <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Nastavenia"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Ovládanie upozornení pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> je otvorené"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Ovládanie upozornení pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> je zatvorené"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Povoliť upozornenia z tohto kanála"</string>
@@ -721,8 +739,9 @@
<string name="right_keycode" msgid="708447961000848163">"Pravý kód klávesnice"</string>
<string name="left_icon" msgid="3096287125959387541">"Ľavá ikona"</string>
<string name="right_icon" msgid="3952104823293824311">"Pravá ikona"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dlaždice pridáte presunutím"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Pridržaním a presunutím pridáte dlaždice"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Presunutím sem odstránite"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Potrebujete aspoň šesť dlaždíc"</string>
<string name="qs_edit" msgid="2232596095725105230">"Upraviť"</string>
<string name="tuner_time" msgid="6572217313285536011">"Čas"</string>
<string-array name="clock_options">
@@ -766,7 +785,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Zavrieť rýchle nastavenia"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Budík bol nastavený."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Prihlásený používateľ <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Žiadny internet"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Žiadny internet"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Otvoriť podrobnosti"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Otvoriť nastavenia <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Upraviť poradie nastavení"</string>
@@ -814,6 +833,7 @@
<string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string>
<string name="go_to_web" msgid="2650669128861626071">"Otvoriť prehliadač"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobilné dáta"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Pripojenie Wi‑Fi je vypnuté"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Rozhranie Bluetooth je vypnuté"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Nastavenie Nerušiť je vypnuté"</string>
@@ -825,7 +845,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Nahradiť"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikácie sú spustené na pozadí"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Klepnutím zobrazíte podrobnosti o batérii a spotrebe dát"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vypnúť mobilné dáta?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Vypnúť mobilné dáta?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Prostredníctvom operátora <xliff:g id="CARRIER">%s</xliff:g> nebudete mať prístup k dátam ani internetu. Internet bude k dispozícii iba cez Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"váš operátor"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Nastavenia nemôžu overiť vašu odpoveď, pretože určitá aplikácia blokuje žiadosť o povolenie."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Povoliť aplikácii <xliff:g id="APP_0">%1$s</xliff:g> zobrazovať rezy z aplikácie <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Môže čítať informácie z aplikácie <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 8ef3248..e515e47 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -40,12 +40,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>, glede na način uporabe imate na voljo še približno <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>, na voljo imate še približno <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Še <xliff:g id="PERCENTAGE">%s</xliff:g>. Vklopljeno je varčevanje z energijo akumulatorja."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Ni mogoče polniti prek USB-ja. Uporabite polnilnik, ki je bil priložen napravi."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Ni mogoče polniti prek USB-ja"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Uporabite polnilnik, ki je bil priložen napravi"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Nastavitve"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Želite vklopiti varčevanje z energijo akumulatorja?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Vklopi"</string>
@@ -153,7 +150,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Povezan."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Povezovanje."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -215,8 +211,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Način za letalo je vklopljen."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način za letalo je izklopljen."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način za letalo je vklopljen."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Način »ne moti« je vklopljen."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Način »ne moti« je vklopljen, popolna tišina."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Način »ne moti« je vklopljen, samo alarmi."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ne moti."</string>
@@ -284,7 +279,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Vitrina za sladice"</string>
<string name="start_dreams" msgid="5640361424498338327">"Ohranjeval. zaslona"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Za več možnosti pridržite ikone"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne moti"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prednostno"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Samo alarmi"</string>
@@ -445,8 +441,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bo začela zajemati vse, kar je prikazano na zaslonu."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Tega ne prikaži več"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Izbriši vse"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Način »ne moti« skriva obvestila"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Začni zdaj"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Ni obvestil"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil je morda nadziran"</string>
@@ -552,8 +547,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Dotaknite se, če želite nastaviti vibriranje."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dotaknite se, če želite izklopiti zvok."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Kontrolniki glasnosti za %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Vibriranje bo vklopljeno za klice in obvestila"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Zvonjenje bo izklopljeno za klice in obvestila"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Zvonjenje bo vklopljeno za klice in obvestila"</string>
<string name="output_title" msgid="5355078100792942802">"Izhod predstavnosti"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Izhod telefonskih klicev"</string>
@@ -746,8 +739,9 @@
<string name="right_keycode" msgid="708447961000848163">"Desna koda tipke"</string>
<string name="left_icon" msgid="3096287125959387541">"Leva ikona"</string>
<string name="right_icon" msgid="3952104823293824311">"Desna ikona"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Povlecite, če želite dodati ploščice"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Držite in povlecite, da dodate ploščice"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Če želite odstraniti, povlecite sem"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Imeti morate vsaj 6 ploščic"</string>
<string name="qs_edit" msgid="2232596095725105230">"Uredi"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ura"</string>
<string-array name="clock_options">
@@ -851,7 +845,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Zamenjaj"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije, ki se izvajajo v ozadju"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Dotaknite se za prikaz podrobnosti porabe akumulatorja in prenosa podatkov"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Dostopa do podatkov ali interneta ne boste imeli prek <xliff:g id="CARRIER">%s</xliff:g>. Internet bo na voljo samo prek povezave Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"svojega operaterja"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Ker aplikacija zakriva zahtevo za dovoljenje, z nastavitvami ni mogoče preveriti vašega odziva."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Želite dovoliti, da aplikacija <xliff:g id="APP_0">%1$s</xliff:g> prikaže izreze aplikacije <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– lahko bere podatke v aplikaciji <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 90a745c..ce3ef80 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> të mbetura, rreth <xliff:g id="TIME">%s</xliff:g> të mbetura bazuar në përdorimin tënd"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> të mbetura, rreth <xliff:g id="TIME">%s</xliff:g> të mbetura"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Ka mbetur edhe <xliff:g id="PERCENTAGE">%s</xliff:g>. \"Kursyesi i baterisë\" është i aktivizuar."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Nuk mund të ngarkohet përmes USB-së. Përdor ngarkuesin që ke marrë me pajisjen."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Nuk mund të ngarkohet përmes USB-së"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Përdor ngarkuesin që ke marrë me pajisjen"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Cilësimet"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Të aktivizohet \"Kursyesi i baterisë\"?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Ndiz"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"I lidhur."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Po lidhet."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modaliteti i aeroplanit është i aktivizuar."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modaliteti i aeroplanit është i çaktivizuar."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modaliteti i aeroplanit është i aktivizuar."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\"Mos shqetëso\", i aktivizuar."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"\"Mos shqetëso\" është aktiv, heshtje e plotë."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"\"Mos shqetëso\" është i aktivizuar, vetëm alarmet."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Mos shqetëso."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"\"Kutia e ëmbëlsirës\""</string>
<string name="start_dreams" msgid="5640361424498338327">"Mbrojtësi i ekranit"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Eternet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Shtyp dhe mbaj të shtypur tek ikonat për më shumë opsione"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Mos shqetëso"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Vetëm me prioritet"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Vetëm alarmet"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> do të fillojë të regjistrojë çdo gjë që shfaqet në ekran."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Mos e shfaq sërish"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Pastroji të gjitha"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Modaliteti \"Mos shqetëso\" po fsheh njoftimet"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Fillo tani"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Asnjë njoftim"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profili mund të monitorohet"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Trokit për ta vendosur në dridhje."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Trokit për ta çaktivizuar."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Kontrollet e volumit %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Do të lëshojë dridhje për telefonatat dhe njoftimet"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Do të hiqet zëri për telefonatat dhe njoftimet"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Do të bjerë zilja për telefonatat dhe njoftimet"</string>
<string name="output_title" msgid="5355078100792942802">"Dalja e pajisjes"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Dalja e telefonatës"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Kodi i tasteve djathtas"</string>
<string name="left_icon" msgid="3096287125959387541">"Ikona majtas"</string>
<string name="right_icon" msgid="3952104823293824311">"Ikona djathtas"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Zvarrit për të shtuar pllakëzat"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Mbaje të shtypur dhe zvarrit për të shtuar pllakëza"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Zvarrit këtu për ta hequr"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Të duhen të paktën 6 pllakëza"</string>
<string name="qs_edit" msgid="2232596095725105230">"Redakto"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ora"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Zëvendëso"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacionet që ekzekutohen në sfond"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Trokit për detaje mbi baterinë dhe përdorimin e të dhënave"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Të çaktivizohen të dhënat celulare?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Të çaktivizohen të dhënat celulare?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Nuk do të kesh qasje te të dhënat ose interneti nëpërmjet <xliff:g id="CARRIER">%s</xliff:g>. Interneti do të ofrohet vetëm nëpërmjet Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operatori yt celular"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Duke qenë se një aplikacion po bllokon një kërkesë për leje, \"Cilësimet\" nuk mund të verifikojnë përgjigjen tënde."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Të lejohet <xliff:g id="APP_0">%1$s</xliff:g> që të shfaqë pjesë të <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Mund të lexojë informacion nga <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index d0d025d..bf08031 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> återstår, cirka <xliff:g id="TIME">%s</xliff:g> kvar utifrån din användning"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> återstår, cirka <xliff:g id="TIME">%s</xliff:g> kvar"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> kvar. Batterisparläget är aktiverat."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Det går inte att ladda via USB. Använd laddaren som följde med enheten."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Det går inte att ladda via USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Använd laddaren som följde med enheten."</string>
<string name="battery_low_why" msgid="4553600287639198111">"Inställningar"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Vill du aktivera batterisparläget?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aktivera"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ansluten."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ansluter."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flygplansläge på."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flygplansläget har inaktiverats."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flygplansläget har aktiverats."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Stör ej aktiverat."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Stör ej är aktiverat. Helt tyst."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Stör ej är aktiverat, endast alarm."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Stör ej."</string>
@@ -278,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessertdisken"</string>
<string name="start_dreams" msgid="5640361424498338327">"Skärmsläckare"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Tryck länge på ikonerna om du vill se fler alternativ"</string>
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Tryck länge på ikonerna om du vill se fler alternativ"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Stör ej"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Endast prioriterade"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Endast alarm"</string>
@@ -437,8 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tar en bild av allt som visas på skärmen."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Visa inte igen"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Rensa alla"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Aviseringar döljs av Stör ej"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Starta nu"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Inga aviseringar"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Det kan hända att profilen övervakas"</string>
@@ -544,8 +538,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tryck här om du vill aktivera vibrationsläget."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tryck här om du vill stänga av ljudet."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Volymkontroller för %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Vibrerar vid samtal och aviseringar"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Ljudet stängs av för samtal och aviseringar"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Ljudet sätts på för samtal och aviseringar"</string>
<string name="output_title" msgid="5355078100792942802">"Medieuppspelning"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Utdata för samtal"</string>
@@ -730,8 +722,9 @@
<string name="right_keycode" msgid="708447961000848163">"Höger tangentkod"</string>
<string name="left_icon" msgid="3096287125959387541">"Vänster ikon"</string>
<string name="right_icon" msgid="3952104823293824311">"Höger ikon"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lägg till rutor genom att dra"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Lägg till rutor genom att trycka och dra"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Ta bort genom att dra här"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Minst sex rutor måste finnas kvar"</string>
<string name="qs_edit" msgid="2232596095725105230">"Redigera"</string>
<string name="tuner_time" msgid="6572217313285536011">"Tid"</string>
<string-array name="clock_options">
@@ -835,7 +828,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Ersätt"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Appar körs i bakgrunden"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryck för information om batteri- och dataanvändning"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vill du inaktivera mobildatan?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Vill du inaktivera mobildata?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Du kan inte skicka data eller använda internet via <xliff:g id="CARRIER">%s</xliff:g>. Internetanslutning blir bara möjlig via Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"din operatör"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Svaret kan inte verifieras av Inställningar eftersom en app skymmer en begäran om behörighet."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Tillåter du att bitar av <xliff:g id="APP_2">%2$s</xliff:g> visas i <xliff:g id="APP_0">%1$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– Kan läsa information från <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index e64c6a4..4cfa448 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Imesalia <xliff:g id="PERCENTAGE">%s</xliff:g>, itadumu takribani <xliff:g id="TIME">%s</xliff:g> kulingana na jinsi unavyotumia"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Imesalia <xliff:g id="PERCENTAGE">%s</xliff:g>, itadumu takribani <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Imesalia <xliff:g id="PERCENTAGE">%s</xliff:g>. Umewasha Kiokoa Betri."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Haiwezi kuchaji kupitia USB. Tumia chaja ambayo ilikuja na kifaa chako."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Haiwezi kuchaji kupitia USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Tumia chaja ambayo ilikuja na kifaa chako"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Mipangilio"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Ungependa Kuwasha Kiokoa Betri?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Washa"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Imeunganishwa."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Inaunganisha."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Hali ya ndegeni imewashwa."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hali ya ndegeni imezimwa."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hali ya ndegeni imewashwa."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Umewasha kipengee cha Usinisumbue"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Usinisumbue, kimya kabisa."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Kipengee cha usinisumbue kimewashwa, kengele pekee."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Usinisumbue."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Sanduku la Vitindamlo"</string>
<string name="start_dreams" msgid="5640361424498338327">"Taswira ya skrini"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Bonyeza na ushikilie aikoni ili upate chaguo zaidi"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Usinisumbue"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kipaumbele tu"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Kengele pekee"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> itaanza kupiga picha kila kitu kinachoonyeshwa kwenye skrini yako."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Usionyeshe tena"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Futa zote"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Kipengele cha Usinisumbue kinaficha arifa"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Anza sasa"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Hakuna arifa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Huenda wasifu ukafuatiliwa"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Gusa ili uweke mtetemo."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Gusa ili usitishe."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Vidhibiti %s vya sauti"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Itatetema arifa ikitumwa au simu ikipigwa"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Haitatoa mlio arifa ikitumwa au simu ikipigwa"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Itatoa mlio arifa ikitumwa au simu ikipigwa"</string>
<string name="output_title" msgid="5355078100792942802">"Vifaa vya kutoa maudhui"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Vifaa vya kutoa sauti ya simu"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Msimbo wa ufunguo wa kulia"</string>
<string name="left_icon" msgid="3096287125959387541">"Aikoni ya kushoto"</string>
<string name="right_icon" msgid="3952104823293824311">"Aikoni ya kulia"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Buruta ili uongeze vigae"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Shikilia na uburute ili uongeze vigae"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Buruta hapa ili uondoe"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Unahitaji angalau vigae 6"</string>
<string name="qs_edit" msgid="2232596095725105230">"Badilisha"</string>
<string name="tuner_time" msgid="6572217313285536011">"Wakati"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Badilisha"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Programu zinatumika chinichini"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Gusa ili upate maelezo kuhusu betri na matumizi ya data"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Ungependa kuzima data ya mtandao wa simu?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Ungependa kuzima data ya mtandao wa simu?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Hutaweza kufikia data au intaneti kupitia <xliff:g id="CARRIER">%s</xliff:g>. Intaneti itapatikana kupitia Wi-Fi pekee."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"mtoa huduma wako"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Kwa sababu programu nyingine inazuia ombi la ruhusa, hatuwezi kuthibitisha jibu lako katika Mipangilio."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Ungependa kuruhusu <xliff:g id="APP_0">%1$s</xliff:g> ionyeshe vipengee <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Inaweza kusoma maelezo kutoka <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 7777839..39bba21 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> பேட்டரி மீதமுள்ளது. உங்கள் உபயோகத்தைப் பொறுத்து, இதைச் சுமார் <xliff:g id="TIME">%s</xliff:g> மணி நேரத்திற்குப் பயன்படுத்தலாம்"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> மீதமுள்ளது, இதைச் சுமார் <xliff:g id="TIME">%s</xliff:g> மணி நேரத்திற்குப் பயன்படுத்தலாம்"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> மீதமுள்ளது. பேட்டரி சேமிப்பான் ஆன் செய்யப்பட்டுள்ளது."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB மூலம் சார்ஜ் செய்வது ஆதரிக்கப்படவில்லை.\nவழங்கப்பட்ட சார்ஜரை மட்டும் பயன்படுத்தவும்."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB சார்ஜிங் ஆதரிக்கப்படவில்லை."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"வழங்கப்பட்ட சார்ஜரை மட்டும் பயன்படுத்துக."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB மூலம், சார்ஜ் செய்ய முடியாது. உங்கள் சாதனத்துடன் வழங்கப்பட்ட சார்ஜரைப் பயன்படுத்தவும்."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB மூலம், சார்ஜ் செய்ய முடியாது"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"உங்கள் சாதனத்துடன் வழங்கப்பட்ட சார்ஜரைப் பயன்படுத்தவும்"</string>
<string name="battery_low_why" msgid="4553600287639198111">"அமைப்பு"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"பேட்டரி சேமிப்பானை ஆன் செய்யவா?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"இயக்கு"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"கேமராவைத் திற"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"புதிய பணி தளவமைப்பைத் தேர்ந்தெடுக்கவும்"</string>
<string name="cancel" msgid="6442560571259935130">"ரத்துசெய்"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"கைரேகை உணர்வியைத் தொடவும்"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"கைரேகை ஐகான்"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"பயன்பாட்டு ஐகான்"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"உதவிச் செய்திக்கான பகுதி"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"முடக்கப்பட்டுள்ளது."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"இணைக்கப்பட்டது."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"இணைக்கிறது."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ரோமிங்"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"ரோமிங்"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"வைஃபை"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"சிம் இல்லை."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"மொபைல் டேட்டா"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"மொபைல் டேட்டா இயக்கப்பட்டது"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"மொபைல் டேட்டா முடக்கப்பட்டது"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"மொபைல் டேட்டா ஆஃப் செய்யப்பட்டது"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"புளூடூத் டெதெரிங்."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"விமானப் பயன்முறை."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN இயக்கத்தில் உள்ளது."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"சிம் கார்டு இல்லை."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"மொபைல் நிறுவன மாற்றம்."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"மொபைல் நிறுவன நெட்வொர்க்கை மாற்றும்"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"பேட்டரி விவரங்களைத் திறக்கும்"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"பேட்டரி சக்தி <xliff:g id="NUMBER">%d</xliff:g> சதவிகிதம் உள்ளது."</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"பேட்டரி சார்ஜ் செய்யப்படுகிறது, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> சதவீதம்."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"விமானப் பயன்முறை இயக்கத்தில்."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"விமானப் பயன்முறை முடக்கப்பட்டது."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"விமானப் பயன்முறை இயக்கப்பட்டது."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, முதன்மை மட்டும்."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\'தொந்தரவு செய்ய வேண்டாம்\' பயன்முறை ஆனில் உள்ளது."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அறிவிப்புகள் வேண்டாம்."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அலாரங்கள் மட்டும்."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"தொந்தரவு செய்யாதே."</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"இனிப்பு வடிவங்கள்"</string>
<string name="start_dreams" msgid="5640361424498338327">"ஸ்கிரீன் சேவர்"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ஈதர்நெட்"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"தொந்தரவு செய்யாதே"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"முதன்மை மட்டும்"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"ஆடியோ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ஹெட்செட்"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"உள்ளீடு"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"ஆன் செய்கிறது…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"ஒளிர்வு"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"தானாகச் சுழற்று"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"திரையைத் தானாகச் சுழற்று"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"வைஃபையை முடக்கு"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"வைஃபை இயக்கத்தில்"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"வைஃபை நெட்வொர்க்குகள் இல்லை"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"அலாரம்"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"ஆன் செய்கிறது…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"அனுப்புகிறது"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"பெயரிடப்படாத சாதனம்"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"இணைக்கிறது..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"டெதெரிங்"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ஹாட்ஸ்பாட்"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"ஆன் செய்கிறது..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"ஆன் செய்கிறது…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"டேட்டா சேவர்: ஆன்"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d சாதனங்கள்</item>
<item quantity="one">%d சாதனம்</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"பயன்படுத்தியது - <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> வரம்பு"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> எச்சரிக்கை"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"பணிச் சுயவிவரம்"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"அறிவிப்புகள் & ஆப்ஸ் ஆஃப் செய்யப்பட்டுள்ளன"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"பணி விவரம்"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"இரவு ஒளி"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"மாலையில் ஆன் செய்"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"சூரிய உதயம் வரை"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • சார்ஜாகிறது (முழு சார்ஜ்: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • வேகமாகச் சார்ஜாகிறது (முழு சார்ஜ்: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • மெதுவாகச் சார்ஜாகிறது (முழு சார்ஜ்: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"பயனரை மாற்று"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"பயனரை மாற்று, தற்போதைய பயனர் <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"தற்போதைய பயனர்: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"திரையில் காட்டப்படும் அனைத்தையும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> படமெடுக்கும்."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"மீண்டும் காட்டாதே"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"எல்லாவற்றையும் அழி"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\'தொந்தரவு செய்ய வேண்டாம்\' பயன்முறையானது அறிவிப்புகளைக் காட்டாமல் மறைக்கிறது"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"இப்போது தொடங்கு"</string>
<string name="empty_shade_text" msgid="708135716272867002">"அறிவிப்புகள் இல்லை"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"சுயவிவரம் கண்காணிக்கப்படலாம்"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"அமை"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"இப்போதே முடக்கு"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ஒலி அமைப்புகள்"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"விரிவாக்கு"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"சுருக்கு"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"வெளியீட்டுச் சாதனத்தை மாற்றுதல்"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. அதிர்விற்கு அமைக்க, தட்டவும்."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. ஒலியடக்க, தட்டவும்."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ஒலியளவுக் கட்டுப்பாடுகள்"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"அழைப்புகள் மற்றும் அறிவிப்புகளுக்கு ஒலியெழுப்பும்"</string>
<string name="output_title" msgid="5355078100792942802">"மீடியா வெளியீடு"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ஃபோன் அழைப்பு வெளியீடு"</string>
<string name="output_none_found" msgid="5544982839808921091">"சாதனங்கள் எதுவும் இல்லை"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"ஆற்றல்மிக்க அறிவிப்புக் கட்டுப்பாடுகள் மூலம், பயன்பாட்டின் அறிவிப்புகளுக்கு முக்கியத்துவ நிலையை (0-5) அமைக்கலாம். \n\n"<b>"நிலை 5"</b>" \n- அறிவிப்புப் பட்டியலின் மேலே காட்டும் \n- முழுத் திரைக் குறுக்கீட்டை அனுமதிக்கும் \n- எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டும் \n\n"<b>"நிலை 4"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- எப்போதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டும் \n\n"<b>"நிலை 3"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n\n"<b>"நிலை 2"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n- ஒருபோதும் ஒலி எழுப்பாது, அதிர்வுறாது \n\n"<b>"நிலை 1"</b>" \n- முழுத் திரைக் குறுக்கீட்டைத் தடுக்கும் \n- ஒருபோதும் நடப்புத் திரையின் மேல் பகுதியில் அறிவிப்புகளைக் காட்டாது \n- ஒருபோதும் ஒலி எழுப்பாது அல்லது அதிர்வுறாது \n- பூட்டுத்திரை மற்றும் நிலைப்பட்டியிலிருந்து மறைக்கும் \n- அறிவிப்புகள் பட்டியலின் கீழே காட்டும் \n\n"<b>"நிலை 0"</b>" \n- பயன்பாட்டின் எல்லா அறிவிப்புகளையும் தடுக்கும்"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"அறிவிப்புகள்"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"இந்த அறிவிப்புகளை இனி பார்க்கமாட்டீர்கள்"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"இந்த அறிவிப்புகள் சிறிதாக்கப்படும்"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"வழக்கமாக, இந்த அறிவிப்புகளை நிராகரிக்கிறீர்கள். \nதொடர்ந்து இவற்றைக் காட்டலாமா?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"இந்த அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"அறிவிப்புகளை நிறுத்து"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"அறிவிப்புகளைத் தொடர்ந்து காட்டு"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"சிறிதாக்கு"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"இந்தப் பயன்பாட்டின் அறிவிப்புகளைத் தொடர்ந்து காட்டவா?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"இந்த அறிவிப்புகளை ஆஃப் செய்ய முடியாது"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"கேமரா"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"மைக்ரோஃபோன்"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"உங்கள் திரையில் உள்ள பிற பயன்பாடுகளின் மேல் காட்டுகிறது"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">இந்தப் பயன்பாடானது <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> மற்றும் <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">இந்தப் பயன்பாடானது <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> மற்றும் <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>ஐப் பயன்படுத்துகிறது</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>ஐப் பயன்படுத்துகிறது</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"அமைப்புகள்"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"சரி"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g>க்கான அறிவிப்புக் கட்டுப்பாடுகள் திறக்கப்பட்டன"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g>க்கான அறிவிப்புக் கட்டுப்பாடுகள் மூடப்பட்டன"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"இந்தச் சேனலிலிருந்து அறிவிப்புகளைப் பெறுவதை அனுமதிக்கும்"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"வலப்புற விசைக்குறியீடு"</string>
<string name="left_icon" msgid="3096287125959387541">"இடப்புற ஐகான்"</string>
<string name="right_icon" msgid="3952104823293824311">"வலப்புற ஐகான்"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"கட்டங்களைச் சேர்க்க, இழுக்கவும்"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"அகற்ற, இங்கே இழுக்கவும்"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"மாற்று"</string>
<string name="tuner_time" msgid="6572217313285536011">"நேரம்"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"விரைவு அமைப்புகளை மூடு."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"அலாரம் அமைக்கப்பட்டது."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> என்ற பெயரில் உள்நுழைந்துள்ளீர்கள்"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"இணைய இணைப்பு இல்லை."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"இணைய இணைப்பு இல்லை"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"விவரங்களைத் திற."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> அமைப்புகளைத் திற."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"அமைப்புகளின் வரிசை முறையைத் திருத்து."</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ஆப்ஸ் தகவல்"</string>
<string name="go_to_web" msgid="2650669128861626071">"உலாவிக்குச் செல்"</string>
<string name="mobile_data" msgid="7094582042819250762">"மொபைல் டேட்டா"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"வைஃபை முடக்கத்தில் உள்ளது"</string>
<string name="bt_is_off" msgid="2640685272289706392">"புளூடூத் முடக்கத்தில் உள்ளது"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"\"தொந்தரவு செய்ய வேண்டாம்\" முடக்கத்தில் உள்ளது"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"மாற்று"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"பின்னணியில் இயங்கும் பயன்பாடுகள்"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"பேட்டரி மற்றும் தரவு உபயோக விவரங்களைக் காண, தட்டவும்"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"மொபைல் டேட்டாவை முடக்கவா?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"அனுமதிக் கோரிக்கையைப் பயன்பாடு மறைப்பதால், அமைப்புகளால் உங்கள் பதிலைச் சரிபார்க்க முடியாது."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> பயன்பாட்டை, <xliff:g id="APP_2">%2$s</xliff:g> பயன்பாட்டின் விழிப்பூட்டல்களைக் காண்பிக்க அனுமதிக்கவா?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- இது, <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டிலிருந்து தகவலைப் படிக்கும்"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index b65f01a..5c9fec6 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> మిగిలి ఉంది, మీ ఉపయోగం ఆధారంగా దాదాపు <xliff:g id="TIME">%s</xliff:g> ఉండవచ్చు"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> మిగిలి ఉంది, దాదాపు <xliff:g id="TIME">%s</xliff:g> ఉండవచ్చు"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> మిగిలి ఉంది. బ్యాటరీ సేవర్ ఆన్లో ఉంది."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB ద్వారా ఛార్జ్ చేయలేరు. మీ పరికరంతో వచ్చిన ఛార్జర్ను ఉపయోగించండి."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB ద్వారా ఛార్జ్ చేయలేరు"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"మీ పరికరంతో వచ్చిన ఛార్జర్ను ఉపయోగించండి"</string>
<string name="battery_low_why" msgid="4553600287639198111">"సెట్టింగ్లు"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"బ్యాటరీ సేవర్ను ఆన్ చేయాలా?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ఆన్ చేయి"</string>
@@ -151,12 +148,10 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"కనెక్ట్ అవుతోంది."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
- <!-- no translation found for data_connection_3_5g_plus (7570783890290275297) -->
- <skip />
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
<string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
<string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
<string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
@@ -212,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ఎయిర్ప్లేన్ మోడ్ ఆన్లో ఉంది."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ఎయిర్ప్లేన్ మోడ్ ఆఫ్ చేయబడింది."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ఎయిర్ప్లేన్ మోడ్ ఆన్ చేయబడింది."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"అంతరాయం కలిగించవద్దు ఆన్లో ఉంది."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"అంతరాయం కలిగించవద్దు ఆన్లో ఉంది, మొత్తం నిశ్శబ్దం."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"అంతరాయం కలిగించవద్దు ఆన్లో ఉంది, అలారాలు మాత్రమే."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"అంతరాయం కలిగించవద్దు."</string>
@@ -279,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"డెజర్ట్ కేస్"</string>
<string name="start_dreams" msgid="5640361424498338327">"స్క్రీన్ సేవర్"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ఈథర్నెట్"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"మరిన్ని ఎంపికల కోసం చిహ్నాలపై నొక్కి & ఉంచండి"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"అంతరాయం కలిగించవద్దు"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ప్రాధాన్యత మాత్రమే"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"అలారాలు మాత్రమే"</string>
@@ -438,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> మీ స్క్రీన్పై కనిపించే ప్రతిదాన్ని క్యాప్చర్ చేయడం ప్రారంభిస్తుంది."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"మళ్లీ చూపవద్దు"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"అన్నీ క్లియర్ చేయండి"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"అంతరాయం కలిగించవద్దు నోటిఫికేషన్లను దాస్తుంది"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ఇప్పుడే ప్రారంభించు"</string>
<string name="empty_shade_text" msgid="708135716272867002">"నోటిఫికేషన్లు లేవు"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ప్రొఫైల్ని పర్యవేక్షించవచ్చు"</string>
@@ -507,8 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"సెటప్ చేయి"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ఇప్పుడు ఆఫ్ చేయండి"</string>
- <!-- no translation found for accessibility_volume_settings (4915364006817819212) -->
- <skip />
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"ధ్వని సెట్టింగ్లు"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"విస్తరింపజేయండి"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"కుదించండి"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"పరికరం అవుట్పుట్ని మార్చండి"</string>
@@ -546,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. వైబ్రేట్ అయ్యేలా సెట్ చేయడం కోసం నొక్కండి."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. మ్యూట్ చేయడానికి నొక్కండి."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s వాల్యూమ్ నియంత్రణలు"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"కాల్లు మరియు నోటిఫికేషన్లు వైబ్రేట్ అవుతాయి"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"కాల్లు మరియు నోటిఫికేషన్లు మ్యూట్ చేయబడతాయి"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"కాల్లు మరియు నోటిఫికేషన్లు రింగ్ అవుతాయి"</string>
<string name="output_title" msgid="5355078100792942802">"మీడియా అవుట్పుట్"</string>
<string name="output_calls_title" msgid="8717692905017206161">"ఫోన్ కాల్ అవుట్పుట్"</string>
@@ -732,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"కుడివైపు ఉన్న కీకోడ్"</string>
<string name="left_icon" msgid="3096287125959387541">"ఎడమ వైపు చిహ్నం"</string>
<string name="right_icon" msgid="3952104823293824311">"కుడివైపు ఉన్న చిహ్నం"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"టైల్లను జోడించడానికి లాగండి"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"తీసివేయడానికి ఇక్కడికి లాగండి"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"సవరించు"</string>
<string name="tuner_time" msgid="6572217313285536011">"సమయం"</string>
<string-array name="clock_options">
@@ -837,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"భర్తీ చేయి"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"నేపథ్యంలో అమలు అవుతున్న ఆప్లు"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"బ్యాటరీ మరియు డేటా వినియోగ వివరాల కోసం నొక్కండి"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"మొబైల్ డేటాని ఆఫ్ చేయాలా?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"అనుమతి అభ్యర్థనకు ఒక యాప్ అడ్డు తగులుతున్నందున సెట్టింగ్లు మీ ప్రతిస్పందనను ధృవీకరించలేకపోయాయి."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_2">%2$s</xliff:g> స్లైస్లను చూపించడానికి <xliff:g id="APP_0">%1$s</xliff:g>ని అనుమతించండి?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- ఇది <xliff:g id="APP">%1$s</xliff:g> నుండి సమాచారాన్ని చదువుతుంది"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index c4fda9f..d3aa426 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"เหลือ <xliff:g id="PERCENTAGE">%s</xliff:g> หรืออีกราว <xliff:g id="TIME">%s</xliff:g> ขึ้นอยู่กับการใช้งานของคุณ"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"เหลือ <xliff:g id="PERCENTAGE">%s</xliff:g> หรืออีกราว <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"แบตเตอรี่เหลือ <xliff:g id="PERCENTAGE">%s</xliff:g> เปิดโหมดประหยัดแบตเตอรี่อยู่"</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"ชาร์จผ่าน USB ไม่ได้ โปรดใช้ที่ชาร์จที่ให้มาพร้อมกับอุปกรณ์"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"ชาร์จผ่าน USB ไม่ได้"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"ใช้ที่ชาร์จที่ให้มาพร้อมกับอุปกรณ์"</string>
<string name="battery_low_why" msgid="4553600287639198111">"การตั้งค่า"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"เปิดโหมดประหยัดแบตเตอรี่ใช่ไหม"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"เปิด"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"เชื่อมต่อแล้ว"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"กำลังเชื่อมต่อ"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"โหมดบนเครื่องบินเปิดอยู่"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ปิดโหมดบนเครื่องบินแล้ว"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"เปิดโหมดบนเครื่องบินแล้ว"</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"โหมดห้ามรบกวนเปิดอยู่"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"เปิดการห้ามรบกวนอยู่ ปิดเสียงทั้งหมด"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"เปิดการห้ามรบกวนอยู่ ปลุกได้เท่านั้น"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ห้ามรบกวน"</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"ชั้นแสดงของหวาน"</string>
<string name="start_dreams" msgid="5640361424498338327">"โปรแกรมรักษาหน้าจอ"</string>
<string name="ethernet_label" msgid="7967563676324087464">"อีเทอร์เน็ต"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"กดไอคอนค้างไว้เพื่อดูตัวเลือกอื่นๆ"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ห้ามรบกวน"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"เฉพาะเรื่องสำคัญ"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"เฉพาะปลุกเท่านั้น"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะเริ่มจับภาพทุกอย่างที่แสดงบนหน้าจอ"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ไม่ต้องแสดงข้อความนี้อีก"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ล้างทั้งหมด"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"โหมดห้ามรบกวนซ่อนการแจ้งเตือนอยู่"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"เริ่มเลย"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ไม่มีการแจ้งเตือน"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"อาจมีการตรวจสอบโปรไฟล์"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s แตะเพื่อตั้งค่าให้สั่น"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s แตะเพื่อปิดเสียง"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"ตัวควบคุมระดับเสียง %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"สายเรียกเข้าและการแจ้งเตือนจะสั่น"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"สายเรียกเข้าและการแจ้งเตือนจะไม่ส่งเสียง"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"สายเรียกเข้าและการแจ้งเตือนจะส่งเสียง"</string>
<string name="output_title" msgid="5355078100792942802">"เอาต์พุตสื่อ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"เอาต์พุตการโทรออก"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Keycode ทางขวา"</string>
<string name="left_icon" msgid="3096287125959387541">"ไอคอนทางซ้าย"</string>
<string name="right_icon" msgid="3952104823293824311">"ไอคอนทางขวา"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ลากเพื่อเพิ่มชิ้นส่วน"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"กดชิ้นส่วนค้างไว้แล้วลากไปเพื่อเพิ่ม"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ลากมาที่นี่เพื่อนำออก"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"คุณต้องมีชิ้นส่วนอย่างน้อย 6 ชิ้น"</string>
<string name="qs_edit" msgid="2232596095725105230">"แก้ไข"</string>
<string name="tuner_time" msgid="6572217313285536011">"เวลา"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"แทนที่"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"แอปที่กำลังทำงานในเบื้องหลัง"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"แตะเพื่อดูรายละเอียดเกี่ยวกับแบตเตอรี่และปริมาณการใช้อินเทอร์เน็ต"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ปิดอินเทอร์เน็ตมือถือไหม"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"ปิดเน็ตมือถือไหม"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"คุณจะใช้เน็ตมือถือหรืออินเทอร์เน็ตผ่าน <xliff:g id="CARRIER">%s</xliff:g> ไม่ได้ และจะใช้อินเทอร์เน็ตได้ผ่าน Wi-Fi เท่านั้น"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"ผู้ให้บริการของคุณ"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"เนื่องจากแอปหนึ่งได้บดบังคำขอสิทธิ์ ระบบจึงไม่สามารถยืนยันคำตอบของคุณสำหรับการตั้งค่าได้"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"อนุญาตให้ <xliff:g id="APP_0">%1$s</xliff:g> แสดงส่วนต่างๆ ของ <xliff:g id="APP_2">%2$s</xliff:g>"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- อ่านข้อมูลจาก <xliff:g id="APP">%1$s</xliff:g> ได้"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 7148f6a..6c86cf4 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> kaldı (kullanımınıza göre yaklaşık <xliff:g id="TIME">%s</xliff:g>)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> (yaklaşık <xliff:g id="TIME">%s</xliff:g>) kaldı"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> kaldı. Pil Tasarrufu açık."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"USB üzerinden şarj edilemiyor. Cihazınızla birlikte gelen şarj cihazını kullanın."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB ile şarj edilemiyor"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Cihazınızla birlikte gelen şarj cihazını kullanın"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Ayarlar"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Pil Tasarrufu açılsın mı?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Aç"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Bağlandı."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Bağlanıyor."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Uçak modu açık."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Uçak modu kapatıldı."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Uçak modu açıldı."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Rahatsız etmeyin ayarı açık."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Rahatsız etme ayarı açık, tamamen sessiz."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Rahatsız etme ayarı açık, yalnızca alarmlar."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Rahatsız etmeyin."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Tatlı Kutusu"</string>
<string name="start_dreams" msgid="5640361424498338327">"Ekran koruyucu"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Daha fazla seçenek için simgeleri basılı tutun"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Rahatsız etmeyin"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Yalnızca öncelikliler"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Yalnızca alarmlar"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, ekranınızda görüntülenen her şeyi kaydetmeye başlayacak."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Bir daha gösterme"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Tümünü temizle"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Rahatsız Etmeyin ayarı bildirimleri gizliyor"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Şimdi başlat"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Bildirim yok"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlenebilir"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Titreşime ayarlamak için dokunun."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Sesi kapatmak için dokunun."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s ses denetimleri"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Çağrılar ve bildirimler titreşim yapacak"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Çağrılar ve bildirimlerin sesi kapalı olacak"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Çağrılar ve bildirimler zili çaldıracak"</string>
<string name="output_title" msgid="5355078100792942802">"Medya çıkışı"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefon çağrısı çıkışı"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Sağ tuş kodu"</string>
<string name="left_icon" msgid="3096287125959387541">"Sol simge"</string>
<string name="right_icon" msgid="3952104823293824311">"Sağ simge"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Blok eklemek için sürükleyin"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Blok eklemek için basılı tutup sürükleyin"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Kaldırmak için buraya sürükleyin"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"En az 6 blok gerekiyor"</string>
<string name="qs_edit" msgid="2232596095725105230">"Düzenle"</string>
<string name="tuner_time" msgid="6572217313285536011">"Saat"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Değiştir"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Arka planda çalışan uygulamalar"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Pil ve veri kullanımı ile ilgili ayrıntılar için dokunun"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil veri kapatılsın mı?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Mobil veri kapatılsın mı?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> üzerinden veri veya internet erişiminiz olmayacak. İnternet yalnızca kablosuz bağlantı üzerinden kullanılabilecek."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"operatörünüz"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Bir uygulama bir izin isteğinin anlaşılmasını engellediğinden, Ayarlar, yanıtınızı doğrulayamıyor."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> uygulamasının, <xliff:g id="APP_2">%2$s</xliff:g> dilimlerini göstermesine izin verilsin mi?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- <xliff:g id="APP">%1$s</xliff:g> uygulamasından bilgileri okuyabilir"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 4b34e25..59957fe 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -40,9 +40,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"На основі використання залишилося <xliff:g id="PERCENTAGE">%s</xliff:g> – близько <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Залишилося <xliff:g id="PERCENTAGE">%s</xliff:g> – близько <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Залишилося <xliff:g id="PERCENTAGE">%s</xliff:g>. Увімкнено режим економії заряду акумулятора."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Заряджання USB не підтримується.\nВикористовуйте лише наданий у комплекті зарядний пристрій."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Заряджання через USB не підтримується."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Використовуйте лише зарядний пристрій, який постачається в комплекті."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Не вдається зарядити через USB. Використовуйте зарядний пристрій, який входить у комплект пристрою."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Не вдається зарядити через USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Використовуйте зарядний пристрій, який входить у комплект пристрою"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Налаштування"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Увімкнути режим економії заряду акумулятора?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Увімкнути"</string>
@@ -105,8 +105,7 @@
<string name="camera_label" msgid="7261107956054836961">"відкрити камеру"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Виберіть новий макет завдання"</string>
<string name="cancel" msgid="6442560571259935130">"Скасувати"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Торкніться сканера відбитків пальців"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Значок відбитка пальця"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Значок додатка"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Область довідкового повідомлення"</string>
@@ -150,28 +149,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Вимкнено."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Під’єднано."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"З’єднання."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роумінг"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Роумінг"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Немає SIM-карти."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Мобільне передавання даних"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобільне передавання даних увімкнено"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобільне передавання даних вимкнено"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Мобільне передавання даних вимкнено"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-модем"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"Мережу VPN увімкнено."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Немає SIM-карти."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Змінення мережі оператора."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Змінення мережі оператора"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Відкрити деталі акумулятора"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Заряд акумулятора у відсотках: <xliff:g id="NUMBER">%d</xliff:g>."</string>
<!-- String.format failed for translation -->
@@ -212,7 +211,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Режим польоту ввімк."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим польоту вимкнено."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим польоту ввімкнено."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не турбувати\" ввімкнено, лише пріоритетні."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Режим \"Не турбувати\" ввімкнено."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Увімкнено режим \"Не турбувати\", сигнали вимкнено."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Увімкнено режим \"Не турбувати\", дозволено лише сигнали."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Не турбувати."</string>
@@ -280,8 +279,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Вітрина десертів"</string>
<string name="start_dreams" msgid="5640361424498338327">"Заставка"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Утримуйте значки, щоб переглянути більше опцій"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не турбувати"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Лише пріоритетні"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Лише будильник"</string>
@@ -294,6 +292,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Аудіопристрій"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Гарнітура"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Джерело сигналу"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Увімкнення…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яскравість"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматичне обертання"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Автоматично обертати екран"</string>
@@ -318,7 +317,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi вимкнено"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi увімкнено"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Немає доступних мереж Wi-Fi"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Будильник"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Увімкнення…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Трансляція"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Трансляція"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Пристрій без назви"</string>
@@ -335,7 +334,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"З’єднання…"</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Режим модема"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка доступу"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Увімкнення…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Увімкнення…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Заощадження трафіку ввімкнено"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d пристрій</item>
<item quantity="few">%d пристрої</item>
@@ -351,8 +351,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Використовується: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Обмеження: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Застереження: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Робочий профіль"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Сповіщення й додатки вимкнено"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Робочий профіль"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Нічний режим"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Вмикається ввечері"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"До сходу сонця"</string>
@@ -405,9 +404,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Швидке заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Повільне заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Змінити користувача"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Змінити користувача, поточний користувач – <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Поточний користувач: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -441,6 +440,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> отримає доступ до всіх даних, які відображаються на вашому екрані."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Більше не показувати"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Очистити все"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"У режимі \"Не турбувати\" сповіщення ховаються"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Почати зараз"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Сповіщень немає"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Профіль може відстежуватись"</string>
@@ -508,6 +508,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Налаштув."</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Вимкнути"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Налаштування звуку"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Розгорнути"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Згорнути"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Увімкніть пристрій виведення"</string>
@@ -545,6 +546,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Торкніться, щоб налаштувати вібросигнал."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Торкніться, щоб вимкнути звук."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Регуляторів гучності: %s"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Звуковий сигнал для викликів і сповіщень увімкнено"</string>
<string name="output_title" msgid="5355078100792942802">"Вивід медіа-вмісту"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Вивід телефонного виклику"</string>
<string name="output_none_found" msgid="5544982839808921091">"Пристроїв не знайдено"</string>
@@ -600,12 +602,31 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"За допомогою елементів керування сповіщеннями ви можете налаштувати пріоритет сповіщень додатка – від 0 до 5 рівня. \n\n"<b>"Рівень 5"</b>\n"- Показувати сповіщення вгорі списку \n- Виводити на весь екран \n- Завжди показувати короткі сповіщення \n\n"<b>"Рівень 4"</b>\n"- Не виводити на весь екран \n- Завжди показувати короткі сповіщення \n\n"<b>"Рівень 3"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n\n"<b>"Рівень 2"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n- Вимкнути звук і вібросигнал \n\n"<b>"Рівень 1"</b>\n"- Не виводити на весь екран \n- Не показувати короткі сповіщення \n- Вимкнути звук і вібросигнал \n- Не показувати на заблокованому екрані та в рядку стану \n- Показувати сповіщення внизу списку \n\n"<b>"Рівень 0"</b>\n"- Блокувати всі сповіщення з додатка"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Сповіщення"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ви більше не бачитимете цих сповіщень"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Ці сповіщення буде згорнуто"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Ви зазвичай закриваєте ці сповіщення. \nПоказувати їх?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Чи показувати ці сповіщення надалі?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Не показувати сповіщення"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Показувати надалі"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Згорнути"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Чи показувати сповіщення з цього додатка надалі?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Ці сповіщення не можна вимкнути"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"камера"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"мікрофон"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"показ поверх інших додатків на екрані"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="few">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="many">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">У цьому додатку <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="few">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="many">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">використовуються <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> і <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Налаштування"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ОK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Елементи керування сповіщеннями для додатка <xliff:g id="APP_NAME">%1$s</xliff:g> відкрито"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Елементи керування сповіщеннями для додатка <xliff:g id="APP_NAME">%1$s</xliff:g> закрито"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Дозволити сповіщення з цього каналу"</string>
@@ -717,8 +738,11 @@
<string name="right_keycode" msgid="708447961000848163">"Код клавіші праворуч"</string>
<string name="left_icon" msgid="3096287125959387541">"Значок ліворуч"</string>
<string name="right_icon" msgid="3952104823293824311">"Значок праворуч"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Перетягуйте фрагменти, щоб додавати їх"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Перетягніть сюди, щоб видалити"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Редагувати"</string>
<string name="tuner_time" msgid="6572217313285536011">"Час"</string>
<string-array name="clock_options">
@@ -762,7 +786,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Закрити швидкі налаштування."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Будильник налаштовано."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Ви ввійшли як <xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Немає з’єднання з Інтернетом."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Немає Інтернету"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Відкрити деталі."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Відкрити налаштування <xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Змінити порядок налаштувань."</string>
@@ -810,6 +834,7 @@
<string name="app_info" msgid="6856026610594615344">"Про додаток"</string>
<string name="go_to_web" msgid="2650669128861626071">"Веб-переглядач"</string>
<string name="mobile_data" msgid="7094582042819250762">"Мобільний трафік"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi вимкнено"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth вимкнено"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Режим \"Не турбувати\" вимкнено"</string>
@@ -821,7 +846,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Замінити"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Додатки, які працюють у фоновому режимі"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Торкніться, щоб перевірити використання акумулятора й трафік"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Вимкнути мобільний трафік?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Не вдається підтвердити вашу відповідь у налаштуваннях, оскільки інший додаток заступає запит на дозвіл."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Дозволити додатку <xliff:g id="APP_0">%1$s</xliff:g> показувати фрагменти додатка <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Має доступ до інформації з додатка <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 2c01bf9..73d5f48 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> باقی، آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%s</xliff:g> باقی ہے"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> باقی، تقریباً <xliff:g id="TIME">%s</xliff:g> باقی ہے"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> باقی ہے۔ بیٹری سیور آن ہے۔"</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB چارجنگ تعاون یافتہ نہیں ہے.\nصرف فراہم کردہ چارجر کا ہی استعمال کریں۔"</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB چارجنگ تعاون یافتہ نہیں ہے۔"</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"صرف فراہم کردہ چارجر استعمال کریں۔"</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB کے ذریعے چارج نہیں کر سکتے۔ اپنے آلہ کے ساتھ ملنے والے چارجر کا استعمال کریں۔"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB کے ذریعے چارج نہیں کر سکتے"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"اپنے آلہ کے ساتھ ملنے والے چارجر کا استعمال کریں"</string>
<string name="battery_low_why" msgid="4553600287639198111">"ترتیبات"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"بیٹری سیور آن کریں؟"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"آن کریں"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"کیمرا کھولیں"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"نئے کام کا لے آؤٹ منتخب کریں"</string>
<string name="cancel" msgid="6442560571259935130">"منسوخ کریں"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"فنگر پرنٹ سینسر پر ٹچ کریں"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"فنگر پرنٹ آئیکن"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"ایپلیکیشن کا آئیکن"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"امدادی پیغام کا علاقہ"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"آف۔"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"مربوط۔"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"مربوط ہو رہا ہے۔"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"رومنگ"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"رومنگ"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"کوئی SIM نہیں ہے۔"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"موبائل ڈیٹا"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"موبائل ڈیٹا آن ہے"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"موبائل ڈیٹا آف ہے"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"موبائل ڈیٹا آف ہے"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ ٹیدرنگ۔"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"ہوائی جہاز وضع۔"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN آن ہے۔"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"کوئی SIM کارڈ نہیں ہے۔"</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"کیریئر نیٹ ورک تبدیل ہو رہا ہے۔"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"کیریئر نیٹ ورک کی تبدیلی"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"بیٹری کی تفصیلات کھولیں"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"بیٹری <xliff:g id="NUMBER">%d</xliff:g> فیصد۔"</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"بیٹری چارجنگ، <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> فیصد۔"</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ہوائی جہاز وضع آن ہے۔"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ہوائی جہاز وضع کو آف کر دیا گیا۔"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ہوائی جہاز وضع کو آن کر دیا گیا۔"</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ڈسٹرب نہ کریں آن ہے، صرف ترجیحی۔"</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"\'ڈسٹرب نہ کریں\' آن ہے۔"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"مداخلت نہ کریں آن ہے، مکمل خاموشی۔"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ڈسٹرب نہ کریں آن ہے، صرف الارمز۔"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ڈسٹرب نہ کریں۔"</string>
@@ -274,7 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ڈیزرٹ کیس"</string>
<string name="start_dreams" msgid="5640361424498338327">"اسکرین سیور"</string>
<string name="ethernet_label" msgid="7967563676324087464">"ایتھرنیٹ"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
<skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"ڈسٹرب نہ کریں"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"صرف ترجیحی"</string>
@@ -288,6 +287,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"آڈیو"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"ہیڈ سیٹ"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"ان پٹ"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"آن ہو رہا ہے…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"چمکیلا پن"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"خود کار طور پر گھمائیں"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"اسکرین کو خود کار طور پر گھمائیں"</string>
@@ -312,7 +312,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi آف ہے"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi آن ہے"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"کوئی WI-FI نیٹ ورک دستیاب نہیں"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"الارم"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"آن ہو رہا ہے…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"کاسٹ کریں"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"کاسٹنگ"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"بغیر نام والا آلہ"</string>
@@ -329,7 +329,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"مربوط ہو رہا ہے…"</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"ٹیدرنگ"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ہاٹ اسپاٹ"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"آن ہو رہا ہے…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"آن ہو رہا ہے…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"ڈیٹا سیور آن ہے"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d آلات</item>
<item quantity="one">%d آلہ</item>
@@ -343,8 +344,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> استعمال کردہ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> حد"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> وارننگ"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"دفتری پروفائل"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"اطلاعات اور ایپس آف ہیں"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"دفتری پروفائل"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"نائٹ لائٹ"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"غروب آفتاب کے وقت آن ہوگی"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"طلوع آفتاب تک"</string>
@@ -397,9 +397,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • تیزی سے چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • آہستہ چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"صارف سوئچ کریں"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"صارف سوئچ کریں، موجودہ صارف <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"موجودہ صارف <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> آپ کی اسکرین پر ڈسپلے ہونے والی ہر چیز کو کیپچر کرنا شروع کر دیگی۔"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"دوبارہ نہ دکھائیں"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"سبھی کو صاف کریں"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"\'ڈسٹرب نہ کریں\' اطلاعات کو چھپا رہی ہے"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ابھی شروع کریں"</string>
<string name="empty_shade_text" msgid="708135716272867002">"کوئی اطلاعات نہیں ہیں"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"پروفائل کو مانیٹر کیا جا سکتا ہے"</string>
@@ -500,6 +501,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"ترتیب دیں"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>۔ <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"ابھی بند کریں"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"صوتی ترتیبات"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"پھیلائیں"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"سکیڑیں"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"آؤٹ پٹ آلہ سوئچ کریں"</string>
@@ -537,6 +539,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s۔ ارتعاش پر سیٹ کرنے کیلئے تھپتھپائیں۔"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s۔ خاموش کرنے کیلئے تھپتھپائیں۔"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s والیوم کے کنٹرولز"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"کالز اور اطلاعات کی گھنٹی بجے گی"</string>
<string name="output_title" msgid="5355078100792942802">"میڈیا آؤٹ پٹ"</string>
<string name="output_calls_title" msgid="8717692905017206161">"فون کال کا آؤٹ پٹ"</string>
<string name="output_none_found" msgid="5544982839808921091">"کوئی آلہ نہیں ملا"</string>
@@ -592,12 +595,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"پاور اطلاع کنٹرولز کے ساتھ آپ کسی ایپ کی اطلاعات کیلئے 0 سے 5 تک اہمیت کی سطح سیٹ کر سکتے ہیں۔ \n\n"<b>"سطح 5"</b>\n"- اطلاعات کی فہرست کے اوپر دکھائیں \n- پوری اسکرین کی مداخلت کی اجازت دیں \n- ہمیشہ جھانکنا\n\n"<b>"سطح 4"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- ہمیشہ جھانکنا\n\n"<b>"سطح 3"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- کبھی نہ جھانکنا \n\n"<b>"سطح 2"</b>\n"- پوری اسکرین کی مداخلت کو روکیں \n- کبھی نہ جھانکنا \n- کبھی آواز اور ارتعاش پیدا نہ کرنا \n\n"<b>" سطح 1"</b>\n"- پوری اسکرین کی مداخلت کو روکنا \n- کبھی نہ جھانکنا \n- کبھی بھی آواز یا ارتعاش پیدا نہ کرنا\n- مقفل اسکرین اور اسٹیٹس بار سے چھپانا \n - اطلاع کی فہرست کی نیچے دکھانا \n\n"<b>"سطح 0"</b>\n"- ایپ سے تمام اطلاعات مسدود کریں"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"اطلاعات"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"آپ کو یہ اطلاعات مزید دکھائی نہیں دیں گی"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"ان اطلاعات کو چھوٹا کر دیا جائے گا"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"آپ عام طور پر ان اطلاعات کو مسترد کرتے ہیں۔ \nان کو دکھاتے رہیں؟"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"یہ اطلاعات دکھانا جاری رکھیں؟"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"اطلاعات روک دیں"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"دکھانا جاری رکھیں"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"چھوٹا کریں"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"اس ایپ کی طرف سے اطلاعات دکھانا جاری رکھیں؟"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"ان اطلاعات کو آف نہیں کیا جا سکتا"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"کیمرا"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"مائیکروفون"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"آپ کی اسکرین پر دیگر ایپس پر دکھایا جا رہا ہے"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">یہ ایپ <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> اور <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ہے۔</item>
+ <item quantity="one">یہ ایپ <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ہے۔</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> اور <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> کا استعمال کیا جا رہا ہے</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> کا استعمال کیا جا رہا ہے</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"ترتیبات"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"ٹھیک ہے"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے اطلاعی کنٹرولز کھلے ہیں"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> کیلئے اطلاعی کنٹرولز بند کر دئے گئے ہیں"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"اس چینل سے اطلاعات کی اجازت دیں"</string>
@@ -705,8 +723,11 @@
<string name="right_keycode" msgid="708447961000848163">"دائيں جانب کا کی کوڈ"</string>
<string name="left_icon" msgid="3096287125959387541">"بائیں جانب کا آئیکن"</string>
<string name="right_icon" msgid="3952104823293824311">"دائيں جانب کا آئيکن"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ٹائٹلز شامل کرنے کیلئے گھسیٹیں"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ہٹانے کیلئے یہاں گھسیٹیں؟"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"ترمیم کریں"</string>
<string name="tuner_time" msgid="6572217313285536011">"وقت"</string>
<string-array name="clock_options">
@@ -750,7 +771,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"فوری ترتیبات بند کریں۔"</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"الارم سیٹ ہو گیا۔"</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> کے بطور سائن ان ہے"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"انٹرنیٹ نہیں ہے۔"</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"انٹرنیٹ نہیں ہے"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"تفصیلات کھولیں۔"</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ترتیبات کھولیں۔"</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ترتیبات کی ترتیب میں ترمیم کریں۔"</string>
@@ -798,6 +819,7 @@
<string name="app_info" msgid="6856026610594615344">"ایپ کی معلومات"</string>
<string name="go_to_web" msgid="2650669128861626071">"براؤزر پر جائیں"</string>
<string name="mobile_data" msgid="7094582042819250762">"موبائل ڈیٹا"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi آف ہے"</string>
<string name="bt_is_off" msgid="2640685272289706392">"بلوٹوتھ آف ہے"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"\'ڈسٹرب نہ کریں\' آف ہے"</string>
@@ -809,7 +831,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"بدلیں"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"ایپس پس منظر میں چل رہی ہیں"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"بیٹری اور ڈیٹا استعمال کے بارے میں تفصیلات کے لیے تھپتھپائیں"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"موبائل ڈیٹا آف کریں؟"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"چونکہ ایک ایپ اجازت کی درخواست کو مبہم کر رہی ہے، لہذا ترتیبات آپ کے جواب کی توثیق نہیں کر سکتی ہیں۔"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> کو <xliff:g id="APP_2">%2$s</xliff:g> کے سلائسز دکھانے کی اجازت دیں؟"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- یہ <xliff:g id="APP">%1$s</xliff:g> کی معلومات پڑھ سکتا ہے"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index e308ed3..66b1af0 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> (joriy holatda taxminan <xliff:g id="TIME">%s</xliff:g> qoldi)"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> (taxminan <xliff:g id="TIME">%s</xliff:g> qoldi)"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> qoldi. Quvvat tejash rejimi yoniq."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"USB orqali zaryadlab bo‘lmaydi.\nFaqat taklif qilingan zaryadlagichdan foydalaning."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"USB orqali quvvat oldirish qo‘llab-quvvatlanmaydi."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Faqat qurilma bilan kelgan quvvatlash moslamasidan foydalaning."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"USB orqali quvvatlash imkonsiz. Qurilmangiz bilan kelgan quvvatlash moslamasidan foydalaning."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"USB orqali quvvatlash imkonsiz"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Qurilmangiz bilan kelgan quvvatlash moslamasidan foydalaning"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Sozlamalar"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Quvvat tejash yoqilsinmi?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Yoqish"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"kamerani ochish"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Yangi vazifa tartibini tanlash"</string>
<string name="cancel" msgid="6442560571259935130">"Bekor qilish"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Barmoq izi skaneriga tegining"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Barmoq izi belgisi"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Ilova ikonkasi"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Yordam xabari"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"O‘chiq"</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ulangan."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Ulanmoqda…"</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouming"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Rouming"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"SIM karta yo‘q."</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Mobil internet"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobil internet yoniq"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobil internet o‘chiq"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Mobil internet o‘chiq"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth modem"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Parvoz rejimi"</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN yoniq."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM karta yo‘q."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Mobil tarmoqni o‘zgartirish"</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Mobil tarmoqni o‘zgartirish"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Batareya quvvati sarfi haqida ma’lumot"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Batareya <xliff:g id="NUMBER">%d</xliff:g> foiz."</string>
<!-- String.format failed for translation -->
@@ -210,7 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Parvoz rejimi yoqilgan."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Parvoz rejimi o‘chirildi."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Parvoz rejimi yoqildi."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“Bezovta qilinmasin” funksiyasi yoqilgan, faqat muhim bildirishnomalar ko‘rsatiladi."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Bezovta qilinmasin rejimi yoniq."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bezovta qilinmasin, jimjitlik."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Bezovta qilinmasin, faqat signallar"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Bezovta qilinmasin."</string>
@@ -276,8 +275,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"Ekran lavhasi"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Boshqa parametrlarni ochish uchun ikonkalarni bosib turing"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Bezovta qilinmasin"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Faqat muhimlari"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Faqat signallar"</string>
@@ -290,6 +288,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Garnitura"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Kirish"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Yoqilmoqda…"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Yorqinlik"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Avtomatik burilish"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Ekranning avtomatik burilishi"</string>
@@ -314,7 +313,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chiq"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi yoqilgan"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Hech qanday Wi-Fi tarmog‘i mavjud emas"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Signal"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Yoqilmoqda…"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Translatsiya"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Translatsiya qilinmoqda"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nomsiz qurilma"</string>
@@ -331,7 +330,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Ulanmoqda…"</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Modem rejimi"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Yoqilmoqda…"</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Yoqilmoqda…"</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Trafik tejash yoniq"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="other">%d ta qurilma</item>
<item quantity="one">%d ta qurilma</item>
@@ -345,8 +345,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ishlatilgan"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Cheklov: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ogohlantirish: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Ishchi profil"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Bildirishnomalar va ilovalar o‘chiq"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Ishchi profil"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Tungi rejim"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Kunbotarda yoqish"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Quyosh chiqqunicha"</string>
@@ -399,9 +398,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Tez quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sekin quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Foydalanuvchini almashtirish"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Foydalanuvchini o‘zgartirish. Joriy foydalanuvchi – <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Joriy foydalanuvchi <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -435,6 +434,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasi qurilma ekranidagi har qanday tasvirni ko‘rishni boshlaydi."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Boshqa ko‘rsatilmasin"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Hammasini tozalash"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Bezovta qilinmasin rejimi bildirishnomalarni berkitmoqda"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Boshlash"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Bildirishnomalar yo‘q"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil kuzatilishi mumkin"</string>
@@ -502,6 +502,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Sozlash"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"O‘chiring"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Ovoz sozlamalari"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Yoyish"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yig‘ish"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Audiochiqish qurilmasini almashtirish"</string>
@@ -539,6 +540,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tebranishni yoqish uchun ustiga bosing."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Ovozsiz qilish uchun ustiga bosing."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s tovush balandligi tugmalari"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Chaqiruvlar va bildirishnomalar jiringlaydi"</string>
<string name="output_title" msgid="5355078100792942802">"Media chiqishi"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Telefon chaqiruvlari"</string>
<string name="output_none_found" msgid="5544982839808921091">"Hech qanday qurilma topilmadi"</string>
@@ -594,12 +596,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Bildirishnomalar uchun kengaytirilgan boshqaruv yordamida ilova bildirishnomalarining muhimlik darajasini (0-5) sozlash mumkin. \n\n"<b>"5-daraja"</b>" \n- Bildirishnomani ro‘yxatning boshida ko‘rsatish \n- To‘liq ekranli bildirishnomalarni ko‘rsatish \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"4-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatish \n\n"<b>"3-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n\n"<b>"2-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n\n"<b>"1-daraja"</b>" \n- To‘liq ekranli bildirishnomalarni ko‘rsatmaslik \n- Qalqib chiquvchi bildirishnomalarni ko‘rsatmaslik \n- Ovoz va tebranishdan foydalanmaslik \n- Ekran qulfi va holat qatorida ko‘rsatmaslik \n- Bildirishnomani ro‘yxatning oxirida ko‘rsatish \n\n"<b>"0-daraja"</b>" \n- Ilovadan keladigan barcha bildirishnomalarni bloklash"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Bildirishnomalar"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Bu bildirishnomalar endi chiqmaydi"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Bu bildirishnomalar kichraytiriladi"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Odatda bunday bildirishnomalarni yopasiz. \nUlar ochiq tursinmi?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Mazkur bildirishnomalar chiqaversinmi?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Chiqmasin"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Ha"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Kichraytirish"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Bu ilovadan keladigan bildirishnomalar chiqaversinmi?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Bu bildirishnomalarni chiqmaydigan qilish imkonsiz"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"kamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"mikrofon"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"ekranda boshqa ilovalar ustidan ochiladi"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="other">Bu ilova <xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> va <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="one">Bu ilova <xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="other"><xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> va <xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g> ishlatmoqda</item>
+ <item quantity="one"><xliff:g id="PERFORMING_ACTIVITY_0">%1$s</xliff:g> ishlatmoqda</item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Sozlamalar"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"OK"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnoma sozlamalari ochildi"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun bildirishnoma sozlamalari yopildi"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Bu kanaldan keladigan bildirishnomalarga ruxsat berish"</string>
@@ -707,8 +724,9 @@
<string name="right_keycode" msgid="708447961000848163">"O‘ngga tugmasi kodi"</string>
<string name="left_icon" msgid="3096287125959387541">"Chapga belgisi"</string>
<string name="right_icon" msgid="3952104823293824311">"O‘ngga belgisi"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Keraklisini tepaga torting"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Katakcha qo‘shish uchun ushlab torting"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"O‘chirish uchun bu yerga torting"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Kamida 6 ta katakcha lozim"</string>
<string name="qs_edit" msgid="2232596095725105230">"Tahrirlash"</string>
<string name="tuner_time" msgid="6572217313285536011">"Vaqt"</string>
<string-array name="clock_options">
@@ -752,7 +770,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Tezkor sozlamalarni yopish."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Signal o‘rnatildi."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> sifatida kirgansiz"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Internet yo‘q."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Internet yo‘q"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Tafsilotlarini ko‘rsatish."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> sozlamalarini ochish."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Sozlamalar tartibini o‘zgartirish."</string>
@@ -800,6 +818,7 @@
<string name="app_info" msgid="6856026610594615344">"Ilova haqida"</string>
<string name="go_to_web" msgid="2650669128861626071">"Brauzerni ochish"</string>
<string name="mobile_data" msgid="7094582042819250762">"Mobil internet"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi o‘chiq"</string>
<string name="bt_is_off" msgid="2640685272289706392">"Bluetooth o‘chiq"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Bezovta qilinmasin rejimi o‘chiq"</string>
@@ -811,7 +830,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Almashtirish"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Fonda ishlayotgan ilovalar"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya va trafik sarfi tafsilotlari uchun ustiga bosing"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil internet o‘chirib qo‘yilsinmi?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Mobil internet faolsizlantirilsinmi?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"<xliff:g id="CARRIER">%s</xliff:g> orqali internetdan foydalana olmaysiz. Internet faqat Wi-Fi orqali ishlaydi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"aloqa operatoringiz"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Ilova ruxsatnoma so‘roviga xalaqit qilayotgani tufayli, “Sozlamalar” ilovasi javobingizni tekshira olmaydi."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"<xliff:g id="APP_0">%1$s</xliff:g> ilovasiga <xliff:g id="APP_2">%2$s</xliff:g> ilovasidan fragmentlar ko‘rsatishga ruxsat berilsinmi?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"– <xliff:g id="APP">%1$s</xliff:g> ma’lumotlarini o‘qiy oladi"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index ae7fe8d..7fac87a 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"Còn lại <xliff:g id="PERCENTAGE">%s</xliff:g>, còn khoảng <xliff:g id="TIME">%s</xliff:g> dựa trên mức sử dụng của bạn"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"Còn lại <xliff:g id="PERCENTAGE">%s</xliff:g>, còn khoảng <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"Còn lại <xliff:g id="PERCENTAGE">%s</xliff:g>. Trình tiết kiệm pin đang bật."</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"Không thể sạc qua USB. Hãy sử dụng bộ sạc đi kèm với thiết bị."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Không thể sạc qua USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Sử dụng bộ sạc đi kèm với thiết bị"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Cài đặt"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Bật trình tiết kiệm pin?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Bật"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Đã kết nối."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Đang kết nối."</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3,5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Chế độ trên máy bay bật."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Đã tắt chế độ trên máy bay."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Đã bật chế độ trên máy bay."</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Chế độ Không làm phiền đang bật."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Bật tính năng không làm phiền, hoàn toàn tắt tiếng."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Bật tính năng không làm phiền, chỉ báo thức."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Không làm phiền."</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Tủ trưng bày bánh ngọt"</string>
<string name="start_dreams" msgid="5640361424498338327">"Trình bảo vệ m.hình"</string>
<string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"Nhấn và giữ các biểu tượng để xem các tùy chọn khác"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Không làm phiền"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Chỉ ưu tiên"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Chỉ báo thức"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ bắt đầu chụp mọi thứ hiển thị trên màn hình."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Không hiển thị lại"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Xóa tất cả"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Chế độ Không làm phiền sẽ ẩn thông báo"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Bắt đầu ngay"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Không có thông báo nào"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Hồ sơ có thể được giám sát"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Nhấn để đặt chế độ rung."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Nhấn để tắt tiếng."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"Điều khiển âm lượng %s"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Cuộc gọi và thông báo sẽ rung"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Cuộc gọi và thông báo sẽ tắt tiếng"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Cuộc gọi và thông báo sẽ đổ chuông"</string>
<string name="output_title" msgid="5355078100792942802">"Đầu ra phương tiện"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Đầu ra cuộc gọi điệnt thoại"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"Mã phím bên phải"</string>
<string name="left_icon" msgid="3096287125959387541">"Biểu tượng bên trái"</string>
<string name="right_icon" msgid="3952104823293824311">"Biểu tượng bên phải"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Kéo để thêm ô"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"Giữ và kéo để thêm ô"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Kéo vào đây để xóa"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"Bạn cần ít nhất 6 ô"</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">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Thay thế"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Ứng dụng đang chạy trong nền"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Nhấn để biết chi tiết về mức sử dụng dữ liệu và pin"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Tắt dữ liệu di động?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"Tắt dữ liệu di động?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"Bạn sẽ không có quyền truy cập vào dữ liệu hoặc Internet thông qua <xliff:g id="CARRIER">%s</xliff:g>. Bạn chỉ có thể truy cập Internet thông qua Wi-Fi."</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"nhà mạng của bạn"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"Vì ứng dụng đang che khuất yêu cầu cấp quyền nên Cài đặt không thể xác minh câu trả lời của bạn."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Cho phép <xliff:g id="APP_0">%1$s</xliff:g> hiển thị các lát của <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Có thể đọc thông tin từ <xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index dc0ee0e..8218aac 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"電量剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>,根據您的使用情況,剩餘時間大約 <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"電量剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>,剩餘時間大約 <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>。省電模式已開啟。"</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"無法透過 USB 充電,請使用裝置隨附的充電器。"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"無法透過 USB 充電"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"使用裝置隨附的充電器"</string>
<string name="battery_low_why" msgid="4553600287639198111">"設定"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"要開啟省電模式嗎?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"開啟"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"已連線。"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"連線中。"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -213,8 +209,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飛行模式已開啟。"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛行模式已關閉。"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛行模式已開啟。"</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"「請勿騷擾」模式已開啟。"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"開啟「請勿騷擾」,完全靜音。"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"開啟「請勿騷擾」,只限鬧鐘。"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"請勿騷擾。"</string>
@@ -280,7 +275,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"螢幕保護程式"</string>
<string name="ethernet_label" msgid="7967563676324087464">"以太網"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"按住圖示即可查看更多選項"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"請勿騷擾"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"只限優先"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"只限鬧鐘"</string>
@@ -439,8 +435,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 將開始擷取您的螢幕上顯示的內容。"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"不用再顯示"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"「請勿騷擾」模式目前隱藏通知"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"沒有通知"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"個人檔案可能受到監控"</string>
@@ -546,8 +541,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。輕按即可設為震動。"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。輕按即可設為靜音。"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s音量控制項"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"有來電和通知時會震動"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"有來電和通知時會靜音"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"有來電和通知時會發出鈴聲"</string>
<string name="output_title" msgid="5355078100792942802">"媒體輸出"</string>
<string name="output_calls_title" msgid="8717692905017206161">"通話輸出"</string>
@@ -604,7 +597,7 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"通知控制項讓您設定應用程式通知的重要性 (0 至 5 級)。\n\n"<b>"第 5 級"</b>" \n- 在通知清單頂部顯示 \n- 允許全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 4 級"</b>" \n- 阻止全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 3 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n\n"<b>"第 2 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n\n"<b>"第 1 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n- 從上鎖畫面和狀態列中隱藏 \n- 在通知清單底部顯示 \n\n"<b>"第 0 級"</b>" \n- 封鎖所有應用程式通知"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"通知"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"您不會再看到這些通知"</string>
- <string name="notification_channel_minimized" msgid="1664411570378910931">"系統將會最小化這些通知"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"這些通知將會縮到最小"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"您通常會關閉這些通知。\n要繼續顯示通知嗎?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"要繼續顯示這些通知嗎?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"停止通知"</string>
@@ -732,8 +725,9 @@
<string name="right_keycode" msgid="708447961000848163">"向右按鍵碼"</string>
<string name="left_icon" msgid="3096287125959387541">"向左圖示"</string>
<string name="right_icon" msgid="3952104823293824311">"向右圖示"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"拖曳即可新增圖塊"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"按住並拖曳即可新增圖塊"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"拖曳這裡即可移除"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"您必須至少有 6 個圖塊"</string>
<string name="qs_edit" msgid="2232596095725105230">"編輯"</string>
<string name="tuner_time" msgid="6572217313285536011">"時間"</string>
<string-array name="clock_options">
@@ -837,7 +831,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"取代"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"正在背景中執行的應用程式"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"輕按即可查看電池和數據用量詳情"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉流動數據嗎?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"要關閉流動數據嗎?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"您將無法透過 <xliff:g id="CARRIER">%s</xliff:g> 存取流動數據或互聯網。您必須連接 Wi-Fi 才能使用互聯網。"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"您的流動網絡供應商"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證您的回應。"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的快訊嗎?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- 可以讀取「<xliff:g id="APP">%1$s</xliff:g>」中的資料"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index e3c521d..aadb50b 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -38,12 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"電力剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>,根據你的使用情形,剩餘時間大約還有 <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"電力剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>,剩餘時間大約還有 <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"僅剩 <xliff:g id="PERCENTAGE">%s</xliff:g>。節約耗電量模式已開啟。"</string>
- <!-- no translation found for invalid_charger (2741987096648693172) -->
- <skip />
- <!-- no translation found for invalid_charger_title (2836102177577255404) -->
- <skip />
- <!-- no translation found for invalid_charger_text (6480624964117840005) -->
- <skip />
+ <string name="invalid_charger" msgid="2741987096648693172">"無法透過 USB 充電,請使用裝置隨附的充電器。"</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"無法透過 USB 充電"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"使用裝置隨附的充電器"</string>
<string name="battery_low_why" msgid="4553600287639198111">"設定"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"要開啟節約耗電量模式嗎?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"開啟"</string>
@@ -151,7 +148,6 @@
<string name="accessibility_desc_connected" msgid="8366256693719499665">"已連線。"</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"連線中。"</string>
<string name="data_connection_gprs" msgid="7652872568358508452">"GPRS"</string>
- <string name="data_connection_1x" msgid="396105635197711584">"1 X"</string>
<string name="data_connection_hspa" msgid="1499615426569473562">"HSPA"</string>
<string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
<string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
@@ -211,8 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飛航模式已開啟。"</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛航模式已關閉。"</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛航模式已開啟。"</string>
- <!-- no translation found for accessibility_quick_settings_dnd_priority_on (5836205286254617194) -->
- <skip />
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"「零打擾」模式已開啟。"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"「零打擾」設定為開啟,完全靜音。"</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"「零打擾」設定為開啟,只會顯示鬧鐘。"</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"零打擾。"</string>
@@ -278,7 +273,8 @@
<string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
<string name="start_dreams" msgid="5640361424498338327">"螢幕保護程式"</string>
<string name="ethernet_label" msgid="7967563676324087464">"乙太網路"</string>
- <string name="quick_settings_header_onboarding_text" msgid="7872508260264044734">"按住圖示即可查看更多選項"</string>
+ <!-- no translation found for quick_settings_header_onboarding_text (8030309023792936283) -->
+ <skip />
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"零打擾"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"僅限優先通知"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"僅限鬧鐘"</string>
@@ -437,8 +433,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 將開始擷取你的螢幕上顯示的內容。"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"不要再顯示"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"全部清除"</string>
- <!-- no translation found for dnd_suppressing_shade_text (7986451830430707907) -->
- <skip />
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"「零打擾」模式正在隱藏通知"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"立即開始"</string>
<string name="empty_shade_text" msgid="708135716272867002">"沒有通知"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"設定檔可能會受到監控"</string>
@@ -544,8 +539,6 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s。輕觸即可設為震動。"</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s。輕觸即可設為靜音。"</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"「%s」音量控制項"</string>
- <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"有來電和通知時會震動"</string>
- <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"有來電和通知時會靜音"</string>
<string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"有來電和通知時會響鈴"</string>
<string name="output_title" msgid="5355078100792942802">"媒體輸出"</string>
<string name="output_calls_title" msgid="8717692905017206161">"通話輸出"</string>
@@ -730,8 +723,9 @@
<string name="right_keycode" msgid="708447961000848163">"向右按鍵碼"</string>
<string name="left_icon" msgid="3096287125959387541">"向左圖示"</string>
<string name="right_icon" msgid="3952104823293824311">"向右圖示"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"拖曳即可新增圖塊"</string>
+ <string name="drag_to_add_tiles" msgid="230586591689084925">"按住並拖曳即可新增圖塊"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"拖曳到這裡即可移除"</string>
+ <string name="drag_to_remove_disabled" msgid="2390968976638993382">"你至少必須要有 6 個圖塊"</string>
<string name="qs_edit" msgid="2232596095725105230">"編輯"</string>
<string name="tuner_time" msgid="6572217313285536011">"時間"</string>
<string-array name="clock_options">
@@ -835,7 +829,9 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"取代"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"在背景執行的應用程式"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"輕觸即可查看電池和數據用量詳情"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉行動數據嗎?"</string>
+ <string name="mobile_data_disable_title" msgid="1068272097382942231">"要關閉行動數據嗎?"</string>
+ <string name="mobile_data_disable_message" msgid="4756541658791493506">"你將無法透過「<xliff:g id="CARRIER">%s</xliff:g>」存取行動數據或網際網路。你只能透過 Wi-Fi 存取網際網路。"</string>
+ <string name="mobile_data_disable_message_default_carrier" msgid="6078110473451946831">"你的電信業者"</string>
<string name="touch_filtered_warning" msgid="8671693809204767551">"由於某個應用程式覆蓋了權限要求畫面,因此「設定」應用程式無法驗證你的回應。"</string>
<string name="slice_permission_title" msgid="7465009437851044444">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的區塊嗎?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- 它可以讀取「<xliff:g id="APP">%1$s</xliff:g>」的資訊"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 1195ebc..346a134 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -38,9 +38,9 @@
<string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"<xliff:g id="PERCENTAGE">%s</xliff:g> okusele, cishe u-<xliff:g id="TIME">%s</xliff:g> osele ngokusukela ekusebenziseni kwakho"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="9025795469949145586">"<xliff:g id="PERCENTAGE">%s</xliff:g> okusele, cishe u-<xliff:g id="TIME">%s</xliff:g> osele"</string>
<string name="battery_low_percent_format_saver_started" msgid="7879389868952879166">"<xliff:g id="PERCENTAGE">%s</xliff:g> esele. Isilondolozi sebhethri sivuliwe."</string>
- <string name="invalid_charger" msgid="4549105996740522523">"Ukushaja i-USB akusekelwe.\nSebenzisa kuphela ishaja enikeziwe."</string>
- <string name="invalid_charger_title" msgid="3515740382572798460">"Ukushaja kwe-USB akusekelwe."</string>
- <string name="invalid_charger_text" msgid="5474997287953892710">"Sebenzisa kuphela ishaja enikeziwe."</string>
+ <string name="invalid_charger" msgid="2741987096648693172">"Ayikwazi ukushaja nge-USB. Sebenzisa ishaja eze nedivayisi yakho."</string>
+ <string name="invalid_charger_title" msgid="2836102177577255404">"Ayikwazi ukushaja nge-USB"</string>
+ <string name="invalid_charger_text" msgid="6480624964117840005">"Sebenzisa ishaja eze nedivayisi yakho"</string>
<string name="battery_low_why" msgid="4553600287639198111">"Izilungiselelo"</string>
<string name="battery_saver_confirmation_title" msgid="2052100465684817154">"Vula isilondolozi sebhethri?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Vula"</string>
@@ -103,8 +103,7 @@
<string name="camera_label" msgid="7261107956054836961">"vula ikhamera"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Khetha isakhiwo somsebenzi omusha"</string>
<string name="cancel" msgid="6442560571259935130">"Khansela"</string>
- <!-- no translation found for fingerprint_dialog_touch_sensor (8511557690663181761) -->
- <skip />
+ <string name="fingerprint_dialog_touch_sensor" msgid="8511557690663181761">"Thinta inzwa yesigxivizo somunwe"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Isithonjana sezigxivizo zeminwe"</string>
<string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Isithonjana sohlelo lokusebenza"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Indawo yosizo lomlayezo"</string>
@@ -148,28 +147,28 @@
<string name="accessibility_desc_off" msgid="6475508157786853157">"Vala."</string>
<string name="accessibility_desc_connected" msgid="8366256693719499665">"Ixhunyiwe."</string>
<string name="accessibility_desc_connecting" msgid="3812924520316280149">"Iyaxhuma."</string>
- <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
- <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
- <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"I-HSPA"</string>
- <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
- <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
- <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
- <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
- <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"I-LTE"</string>
- <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"I-LTE+"</string>
- <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Iyazulazula"</string>
- <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Ekucupheleni"</string>
+ <string name="data_connection_gprs" msgid="7652872568358508452">"I-GPRS"</string>
+ <string name="data_connection_hspa" msgid="1499615426569473562">"I-HSPA"</string>
+ <string name="data_connection_3g" msgid="503045449315378373">"3G"</string>
+ <string name="data_connection_3_5g" msgid="5218328297191657602">"3.5G"</string>
+ <string name="data_connection_3_5g_plus" msgid="7570783890290275297">"3.5G+"</string>
+ <string name="data_connection_4g" msgid="9139963475267449144">"4G"</string>
+ <string name="data_connection_4g_plus" msgid="1148687201877800700">"4G+"</string>
+ <string name="data_connection_lte" msgid="2694876797724028614">"I-LTE"</string>
+ <string name="data_connection_lte_plus" msgid="3423013208570937424">"I-LTE+"</string>
+ <string name="data_connection_cdma" msgid="4677985502159869585">"I-CDMA"</string>
+ <string name="data_connection_roaming" msgid="6037232010953697354">"Iyazulazula"</string>
+ <string name="data_connection_edge" msgid="871835227939216682">"I-EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"I-Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Ayikho i-SIM"</string>
<string name="accessibility_cell_data" msgid="5326139158682385073">"Idatha Yeselula"</string>
<string name="accessibility_cell_data_on" msgid="5927098403452994422">"Idatha yeselula ivuliwe"</string>
- <string name="accessibility_cell_data_off" msgid="443267573897409704">"Idatha yeselula ivaliwe"</string>
+ <string name="cell_data_off" msgid="5287705247512911922">"Idatha yeselula ivaliwe"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Imodemu nge-Bluetooth."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Imodi yendiza."</string>
<string name="accessibility_vpn_on" msgid="5993385083262856059">"I-VPN ivuliwe."</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"Alikho ikhadi le-SIM."</string>
- <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Iguqula inethiwekhi yenkampani yenethiwekhi."</string>
+ <string name="carrier_network_change_mode" msgid="8149202439957837762">"Inethiwekhi yenkampani yenethiwekhi iyashintsha"</string>
<string name="accessibility_battery_details" msgid="7645516654955025422">"Vula imininingwane yebhethri"</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Iphesenti <xliff:g id="NUMBER">%d</xliff:g> lebhethri"</string>
<string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Ibhethri liyashaja, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> iphesenti."</string>
@@ -208,7 +207,7 @@
<string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Imodi yendiza ivuliwe."</string>
<string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Imodi yendiza ivaliwe."</string>
<string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Imodi yendiza ivuliwe."</string>
- <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Ukungaphazamisi kuvuliwe, okubalulekile kuphela."</string>
+ <string name="accessibility_quick_settings_dnd_priority_on" msgid="5836205286254617194">"Ukungaphazamisi kuvuliwe."</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Ungaphazamisi, ukuthula okuphelele."</string>
<string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Ukungaphazamisi kuvuliwe, ama-alamu kuphela."</string>
<string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Ungaphazamisi."</string>
@@ -274,8 +273,7 @@
<string name="dessert_case" msgid="1295161776223959221">"Isikhwama soswidi"</string>
<string name="start_dreams" msgid="5640361424498338327">"Isigcini sihenqo"</string>
<string name="ethernet_label" msgid="7967563676324087464">"I-Ethernet"</string>
- <!-- no translation found for quick_settings_header_onboarding_text (7872508260264044734) -->
- <skip />
+ <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Thinta uphinde ubambe izithonjana ukuze uthole ezinye izinketho"</string>
<string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ungaphazamisi"</string>
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Okubalulekile kuphela"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Ama-alamu kuphela"</string>
@@ -288,6 +286,7 @@
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="5673845963301132071">"Umsindo"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="1880572731276240588">"Ihedisethi"</string>
<string name="quick_settings_bluetooth_secondary_label_input" msgid="2173322305072945905">"Okokufaka"</string>
+ <string name="quick_settings_bluetooth_secondary_label_transient" msgid="4551281899312150640">"Iyavula..."</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ukugqama"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Ukuphenduka okuzenzakalelayo"</string>
<string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Phendula iskrini ngokuzenzakalela"</string>
@@ -312,7 +311,7 @@
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"I-Wi-Fi ivuliwe"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Awekho amanethiwekhi we-Wi-Fi atholakalayo"</string>
- <string name="quick_settings_alarm_title" msgid="2416759007342260676">"I-alamu"</string>
+ <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"Iyavula..."</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"Abalingisi"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"Ukusakaza"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Idivayisi engenalo igama"</string>
@@ -329,7 +328,8 @@
<string name="quick_settings_connecting" msgid="47623027419264404">"Iyaxhuma..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Ukusebenzisa njengemodemu"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"I-Hotspot"</string>
- <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Iyavula..."</string>
+ <string name="quick_settings_hotspot_secondary_label_transient" msgid="8010579363691405477">"Iyavula..."</string>
+ <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="5672131949987422420">"Iseva yedatha ivuliwe"</string>
<plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428">
<item quantity="one">%d amadivayisi</item>
<item quantity="other">%d amadivayisi</item>
@@ -343,8 +343,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> isetshenzisiwe"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> umkhawulo"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> isexwayiso"</string>
- <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Iphrofayela yomsebenzi"</string>
- <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Izaziso nezinhlelo zokusebenza kuvaliwe"</string>
+ <string name="quick_settings_work_mode_label" msgid="7608026833638817218">"Iphrofayela yomsebenzi"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ukukhanya kwasebusuku"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Kuvulwe ekushoneni kwelanga"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Kuze kube sekuphumeni kwelanga"</string>
@@ -397,9 +396,9 @@
<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="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>
+ <string name="keyguard_indication_charging_time" msgid="2056340799276374421">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Iyashaja (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
+ <string name="keyguard_indication_charging_time_fast" msgid="7767562163577492332">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ishaja kaningi (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
+ <string name="keyguard_indication_charging_time_slowly" msgid="3769655133567307069">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ishaja kancane (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Shintsha umsebenzisi"</string>
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Shintsha umsebenzisi, umsebenzisi wamanje ngu-<xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Umsebenzisi wamanje <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -433,6 +432,7 @@
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> izoqala ukuthwebula yonke into eboniswa kusikrini sakho."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Ungabonisi futhi"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"Sula konke"</string>
+ <string name="dnd_suppressing_shade_text" msgid="7986451830430707907">"Ukungaphazamisi kufihle izaziso"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"Qala manje"</string>
<string name="empty_shade_text" msgid="708135716272867002">"Azikho izaziso"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Iphrofayela ingaqashwa"</string>
@@ -500,6 +500,7 @@
<string name="hidden_notifications_setup" msgid="41079514801976810">"Lungisa"</string>
<string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="volume_zen_end_now" msgid="6930243045593601084">"Vala manje"</string>
+ <string name="accessibility_volume_settings" msgid="4915364006817819212">"Izilungiselelo zomsindo"</string>
<string name="accessibility_volume_expand" msgid="5946812790999244205">"Nweba"</string>
<string name="accessibility_volume_collapse" msgid="3609549593031810875">"Goqa"</string>
<string name="accessibility_output_chooser" msgid="8185317493017988680">"Shintsha idivayisi yokukhipha"</string>
@@ -537,6 +538,7 @@
<string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Thepha ukuze usethele ekudlidlizeni."</string>
<string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Thepha ukuze uthulise."</string>
<string name="volume_dialog_title" msgid="7272969888820035876">"%s izilawuli zevolomu"</string>
+ <string name="volume_dialog_ringer_guidance_ring" msgid="6144469689490528338">"Amakholi nezaziso zizokhala"</string>
<string name="output_title" msgid="5355078100792942802">"Okukhiphayo kwemidiya"</string>
<string name="output_calls_title" msgid="8717692905017206161">"Okukhiphayo kwekholi yefoni"</string>
<string name="output_none_found" msgid="5544982839808921091">"Awekho amadivayisi atholiwe"</string>
@@ -592,12 +594,27 @@
<string name="power_notification_controls_description" msgid="4372459941671353358">"Ngezilawuli zesaziso zamandla, ungasetha ileveli ebalulekile kusuka ku-0 kuya ku-5 kusuka kuzaziso zohlelo lokusebenza. \n\n"<b>"Ileveli 5"</b>" \n- Ibonisa phezulu kuhlu lwesaziso \n- Vumela ukuphazamiseka kwesikrini esigcwele \n- Ukuhlola njalo \n\n"<b>"Ileveli 4"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukuhlola njalo \n\n"<b>"Ileveli 3"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n\n"<b>"Ileveli 2"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n- Ungenzi umsindo nokudlidliza \n\n"<b>"Ileveli 1"</b>" \n- Gwema ukuphazamiseka kwesikrini esigcwele \n- Ukungahloli \n- Ungenzi umsindo noma ukudlidliza \n- Fihla kusuka kusikrini sokukhiya nebha yesimo \n- Bonisa phansi kohlu lwesaziso \n\n"<b>"Ileveli 0"</b>" \n- Vimbela zonke izaziso kusuka kuhlelo lokusebenza"</string>
<string name="notification_header_default_channel" msgid="7506845022070889909">"Izaziso"</string>
<string name="notification_channel_disabled" msgid="344536703863700565">"Ngeke usabona lezi zaziso"</string>
+ <string name="notification_channel_minimized" msgid="1664411570378910931">"Lezi zaziso zizokwehlisa"</string>
<string name="inline_blocking_helper" msgid="3055064577771478591">"Uvamise ukucashisa lezi zaziso. \nQhubeka ulokhu uzibonisa?"</string>
<string name="inline_keep_showing" msgid="8945102997083836858">"Qhubeka nokubonisa lezi zaziso?"</string>
<string name="inline_stop_button" msgid="4172980096860941033">"Misa izaziso"</string>
<string name="inline_keep_button" msgid="6665940297019018232">"Qhubeka nokubonisa"</string>
+ <string name="inline_minimize_button" msgid="966233327974702195">"Nciphisa"</string>
<string name="inline_keep_showing_app" msgid="1723113469580031041">"Qhubeka nokubonisa izaziso kusuka kulolu hlelo lokusebenza?"</string>
<string name="notification_unblockable_desc" msgid="1037434112919403708">"Lezi zaziso azikwazi ukuvalwa"</string>
+ <string name="notification_appops_camera_active" msgid="730959943016785931">"ikhamera"</string>
+ <string name="notification_appops_microphone_active" msgid="1546319728924580686">"imakrofoni"</string>
+ <string name="notification_appops_overlay_active" msgid="633813008357934729">"iboniswa ngaphezulu kwezinye izinhlelo zokusebenza kusikrini sakho"</string>
+ <plurals name="notification_appops" formatted="false" msgid="1258122060887196817">
+ <item quantity="one">Lolu hlelo lokusebenza lwenza i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ <item quantity="other">Lolu hlelo lokusebenza lwenza i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g>.</item>
+ </plurals>
+ <plurals name="notification_using" formatted="false" msgid="2211008461429037973">
+ <item quantity="one">kusetshenziswa i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ <item quantity="other">kusetshenziswa i-<xliff:g id="PERFORMING_ACTIVITY_1">%1$s</xliff:g> ne-<xliff:g id="PERFORMING_ACTIVITY_2">%2$s</xliff:g></item>
+ </plurals>
+ <string name="notification_appops_settings" msgid="1028328314935908050">"Izilungiselelo"</string>
+ <string name="notification_appops_ok" msgid="602562195588819631">"Kulungile"</string>
<string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Izilawuli zesaziso ze-<xliff:g id="APP_NAME">%1$s</xliff:g> zivuliwe"</string>
<string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Izilawuli zesaziso ze-<xliff:g id="APP_NAME">%1$s</xliff:g> zivaliwe"</string>
<string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Zonke izaziso kusuka kulesi siteshi"</string>
@@ -705,8 +722,11 @@
<string name="right_keycode" msgid="708447961000848163">"Ikhodi yokhiye yangakwesokudla"</string>
<string name="left_icon" msgid="3096287125959387541">"Isithonjana esingakwesokunxele"</string>
<string name="right_icon" msgid="3952104823293824311">"Isithonjana sangakwesokudla"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Hudula ukuze ungeze amathayili"</string>
+ <!-- no translation found for drag_to_add_tiles (230586591689084925) -->
+ <skip />
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Hudulela lapha ukuze ususe"</string>
+ <!-- no translation found for drag_to_remove_disabled (2390968976638993382) -->
+ <skip />
<string name="qs_edit" msgid="2232596095725105230">"Hlela"</string>
<string name="tuner_time" msgid="6572217313285536011">"Isikhathi"</string>
<string-array name="clock_options">
@@ -750,7 +770,7 @@
<string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Vala izilungiselelo ezisheshayo."</string>
<string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"I-alamu isethiwe."</string>
<string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Ungene ngemvume njengo-<xliff:g id="ID_1">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Ayikho i-inthanethi."</string>
+ <string name="data_connection_no_internet" msgid="4503302451650972989">"Ayikho i-inthanethi"</string>
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Vula imininingwane."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Vula izilungiselelo ze-<xliff:g id="ID_1">%s</xliff:g>."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Hlela uhlelo lwezilungiselelo."</string>
@@ -798,6 +818,7 @@
<string name="app_info" msgid="6856026610594615344">"Ulwazi lohlelo lokusebenza"</string>
<string name="go_to_web" msgid="2650669128861626071">"Iya kusiphequluli"</string>
<string name="mobile_data" msgid="7094582042819250762">"Idatha yeselula"</string>
+ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string>
<string name="wifi_is_off" msgid="1838559392210456893">"I-Wi-Fi ivaliwe"</string>
<string name="bt_is_off" msgid="2640685272289706392">"I-Bluetooth ivaliwe"</string>
<string name="dnd_is_off" msgid="6167780215212497572">"Ungaphazamisi kuvaliwe"</string>
@@ -809,7 +830,12 @@
<string name="qs_dnd_replace" msgid="8019520786644276623">"Buyisela"</string>
<string name="running_foreground_services_title" msgid="381024150898615683">"Izinhlelo zokusebenza zisebenza ngasemuva"</string>
<string name="running_foreground_services_msg" msgid="6326247670075574355">"Thepha ngemininingwane ekusetshenzisweni kwebhethri nedatha"</string>
- <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vala idatha yeselula?"</string>
+ <!-- no translation found for mobile_data_disable_title (1068272097382942231) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message (4756541658791493506) -->
+ <skip />
+ <!-- no translation found for mobile_data_disable_message_default_carrier (6078110473451946831) -->
+ <skip />
<string name="touch_filtered_warning" msgid="8671693809204767551">"Ngoba uhlelo lokusebenza lusitha isicelo semvume, Izilungiselelo azikwazi ukuqinisekisa impendulo yakho."</string>
<string name="slice_permission_title" msgid="7465009437851044444">"Vumela i-<xliff:g id="APP_0">%1$s</xliff:g> ukuthi ibonise izingcezu ze-<xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="3514586565609596523">"- Ingafunda ulwazi kusukela ku-<xliff:g id="APP">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 9ebf557..f76603b 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -479,6 +479,9 @@
<!-- Smart replies in notifications: Whether smart replies in notifications are enabled. -->
<bool name="config_smart_replies_in_notifications_enabled">true</bool>
+ <!-- Smart replies in notifications: Whether we disable the feature unless the app targets P -->
+ <bool name="config_smart_replies_in_notifications_requires_targeting_p">true</bool>
+
<!-- Smart replies in notifications: Maximum number of times SmartReplyView will try to find a
better (narrower) line-break for a double-line smart reply button. -->
<integer name="config_smart_replies_in_notifications_max_squeeze_remeasure_attempts">3</integer>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 4513f14..91c8724 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -317,6 +317,8 @@
<dimen name="qs_tile_margin_vertical">24dp</dimen>
<dimen name="qs_tile_margin_top">18dp</dimen>
<dimen name="qs_quick_tile_size">48dp</dimen>
+ <!-- Width for the spacer, used between QS tiles. -->
+ <dimen name="qs_quick_tile_space_width">0dp</dimen>
<dimen name="qs_quick_tile_padding">12dp</dimen>
<dimen name="qs_header_gear_translation">16dp</dimen>
<dimen name="qs_header_tile_margin_horizontal">0dp</dimen>
@@ -929,14 +931,14 @@
<dimen name="wireless_charging_dots_radius_start">0dp</dimen>
<dimen name="wireless_charging_dots_radius_end">4dp</dimen>
<dimen name="wireless_charging_circle_radius_start">28dp</dimen>
- <dimen name="wireless_charging_circle_radius_end">92dp</dimen>
+ <dimen name="wireless_charging_circle_radius_end">84dp</dimen>
<integer name="wireless_charging_angle_offset">20</integer>
<integer name="wireless_charging_scale_dots_duration">83</integer>
- <integer name="wireless_charging_num_dots">20</integer>
- <!-- Starting text size in dp of batteryLevel for wireless charging animation -->
- <dimen name="wireless_charging_anim_battery_level_text_size_start">0dp</dimen>
- <!-- Ending text size in dp of batteryLevel for wireless charging animation -->
- <dimen name="wireless_charging_anim_battery_level_text_size_end">14dp</dimen>
+ <integer name="wireless_charging_num_dots">16</integer>
+ <!-- Starting text size in sp of batteryLevel for wireless charging animation -->
+ <item name="wireless_charging_anim_battery_level_text_size_start" format="float" type="dimen">0</item>
+ <!-- Ending text size in sp of batteryLevel for wireless charging animation -->
+ <item name="wireless_charging_anim_battery_level_text_size_end" format="float" type="dimen">24</item>
<!-- time until battery info is at full opacity-->
<integer name="wireless_charging_anim_opacity_offset">80</integer>
<!-- duration batteryLevel opacity goes from 0 to 1 duration -->
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index a4b7608..909c18b 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -61,10 +61,6 @@
<!-- When the battery is low, this is displayed to the user in a dialog. The title of the low battery alert. [CHAR LIMIT=NONE]-->
<string name="battery_low_title">Battery is low</string>
- <!-- When the battery is low and hybrid notifications are enabled, this is displayed to the user in a dialog.
- The title of the low battery alert. [CHAR LIMIT=NONE]-->
- <string name="battery_low_title_hybrid">Battery is low. Turn on Battery Saver</string>
-
<!-- A message that appears when the battery level is getting low in a dialog. This is
appended to the subtitle of the low battery alert. "percentage" is the percentage of battery
remaining [CHAR LIMIT=none]-->
@@ -195,16 +191,14 @@
<string name="screenshot_saving_ticker">Saving screenshot\u2026</string>
<!-- Notification title displayed when a screenshot is being saved to the Gallery. [CHAR LIMIT=50] -->
<string name="screenshot_saving_title">Saving screenshot\u2026</string>
- <!-- Notification text displayed when a screenshot is being saved to the Gallery. [CHAR LIMIT=100] -->
- <string name="screenshot_saving_text">Screenshot is being saved</string>
<!-- Notification title displayed when a screenshot is saved to the Gallery. [CHAR LIMIT=50] -->
<string name="screenshot_saved_title">Screenshot saved</string>
<!-- Notification text displayed when a screenshot is saved to the Gallery. [CHAR LIMIT=100] -->
<string name="screenshot_saved_text">Tap to view your screenshot</string>
<!-- Notification title displayed when we fail to take a screenshot. [CHAR LIMIT=50] -->
- <string name="screenshot_failed_title">Couldn\'t capture screenshot</string>
+ <string name="screenshot_failed_title">Couldn\'t save screenshot</string>
<!-- Notification text displayed when we fail to save a screenshot for unknown reasons. [CHAR LIMIT=100] -->
- <string name="screenshot_failed_to_save_unknown_text">Problem encountered while saving screenshot</string>
+ <string name="screenshot_failed_to_save_unknown_text">Try taking screenshot again</string>
<!-- Notification text displayed when we fail to save a screenshot. [CHAR LIMIT=100] -->
<string name="screenshot_failed_to_save_text">Can\'t save screenshot due to limited storage space</string>
<!-- Notification text displayed when we fail to take a screenshot. [CHAR LIMIT=100] -->
@@ -819,8 +813,8 @@
<string name="quick_settings_night_secondary_label_until_sunrise">Until sunrise</string>
<!-- QuickSettings: Secondary text for when the Night Light will be enabled at some user-selected time. [CHAR LIMIT=20] -->
<string name="quick_settings_night_secondary_label_on_at">On at <xliff:g id="time" example="10 pm">%s</xliff:g></string>
- <!-- QuickSettings: Secondary text for when the Night Light will be on until some user-selected time. [CHAR LIMIT=20] -->
- <string name="quick_settings_night_secondary_label_until">Until <xliff:g id="time" example="7 am">%s</xliff:g></string>
+ <!-- QuickSettings: Secondary text for when the Night Light or some other tile will be on until some user-selected time. [CHAR LIMIT=20] -->
+ <string name="quick_settings_secondary_label_until">Until <xliff:g id="time" example="7 am">%s</xliff:g></string>
<!-- QuickSettings: NFC tile [CHAR LIMIT=NONE] -->
<string name="quick_settings_nfc_label">NFC</string>
@@ -1059,6 +1053,9 @@
<!-- The text to clear all notifications. [CHAR LIMIT=60] -->
<string name="clear_all_notifications_text">Clear all</string>
+ <!-- The text for the manage notifications link. [CHAR LIMIT=40] -->
+ <string name="manage_notifications_text">Manage notifications</string>
+
<!-- The text to show in the notifications shade when dnd is suppressing notifications. [CHAR LIMIT=100] -->
<string name="dnd_suppressing_shade_text">Do Not disturb is hiding notifications</string>
@@ -1606,6 +1603,9 @@
<!-- Notification: Menu row: Content description for the snooze icon. [CHAR LIMIT=NONE] -->
<string name="notification_menu_snooze_description">notification snooze options</string>
+ <!-- Notification: Menu row: Label for the snooze action shown in local context menu. [CHAR LIMIT=NONE] -->
+ <string name="notification_menu_snooze_action">Snooze</string>
+
<!-- Notification: Snooze panel: Snooze undo button label. [CHAR LIMIT=50]-->
<string name="snooze_undo">UNDO</string>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl
index 8612445..939a868 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl
@@ -35,21 +35,13 @@
* guarantees the following order of events:
*
* Normal gesture: DOWN, (MOVE/POINTER_DOWN/POINTER_UP)*, UP
- * Quick switch: DOWN, (MOVE/POINTER_DOWN/POINTER_UP)*, SWITCH
* Quick scrub: DOWN, (MOVE/POINTER_DOWN/POINTER_UP)*, SCRUB_START, SCRUB_PROGRESS*, SCRUB_END
*
- * Once quick switch/scrub is sent, then no further motion events will be provided.
+ * Once quick scrub is sent, then no further motion events will be provided.
*/
void onMotionEvent(in MotionEvent event);
/**
- * Sent when a user has quickly flinged on the nav bar to switch tasks. Once this event is sent
- * the caller will stop sending any motion events and will no longer preemptively cancel any
- * recents animations started as a part of the motion event handling.
- */
- void onQuickSwitch();
-
- /**
* Sent when the user starts to actively scrub the nav bar to switch tasks. Once this event is
* sent the caller will stop sending any motion events and will no longer preemptively cancel
* any recents animations started as a part of the motion event handling.
@@ -89,8 +81,8 @@
* {@link onMotionEvent}. Since motion events will be sent, motion up or cancel can still be
* sent to cancel overview regardless the current state of launcher (eg. if overview is already
* visible, this event will still be sent if user swipes up). When this signal is sent,
- * navigation bar will not handle any gestures such as quick scrub or switch and the home button
- * will cancel (long) press.
+ * navigation bar will not handle any gestures such as quick scrub and the home button will
+ * cancel (long) press.
*/
void onQuickStep(in MotionEvent event);
}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java
index b8193a89..79c1cb1 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/NavigationBarCompat.java
@@ -45,7 +45,7 @@
public static final int FLAG_DISABLE_SWIPE_UP = 0x1;
/**
- * Interaction type: enable quick scrub and switch interaction on the home button
+ * Interaction type: enable quick scrub interaction on the home button
*/
public static final int FLAG_DISABLE_QUICK_SCRUB = 0x2;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java
index 62b5004..5b4d652 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostView.java
@@ -137,6 +137,10 @@
mCancelAction = cancelAction;
}
+ public boolean hasDismissActions() {
+ return mDismissAction != null || mCancelAction != null;
+ }
+
public void cancelDismissAction() {
setOnDismissAction(null, null);
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index d24675c..1bab36b 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -68,7 +68,6 @@
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
import android.util.Log;
-import android.util.Slog;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
@@ -88,6 +87,7 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
@@ -400,16 +400,9 @@
// Hack level over 9000: Because the subscription id is not yet valid when we see the
// first update in handleSimStateChange, we need to force refresh all all SIM states
// so the subscription id for them is consistent.
- ArrayList<SubscriptionInfo> changedSubscriptions = new ArrayList<>();
- for (int i = 0; i < subscriptionInfos.size(); i++) {
- SubscriptionInfo info = subscriptionInfos.get(i);
- boolean changed = refreshSimState(info.getSubscriptionId(), info.getSimSlotIndex());
- if (changed) {
- changedSubscriptions.add(info);
- }
- }
- for (int i = 0; i < changedSubscriptions.size(); i++) {
- SimData data = mSimDatas.get(changedSubscriptions.get(i).getSubscriptionId());
+ List<Integer> changedSubscriptionIds = refreshSimState(subscriptionInfos);
+ for (int i = 0; i < changedSubscriptionIds.size(); i++) {
+ SimData data = mSimDatas.get(changedSubscriptionIds.get(i));
for (int j = 0; j < mCallbacks.size(); j++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get();
if (cb != null) {
@@ -1846,34 +1839,56 @@
};
/**
- * @return true if and only if the state has changed for the specified {@code slotId}
+ * @return A list of changed subscriptions, maybe empty but never null
*/
- private boolean refreshSimState(int subId, int slotId) {
+ private List<Integer> refreshSimState(final List<SubscriptionInfo> activeSubscriptionInfos) {
// This is awful. It exists because there are two APIs for getting the SIM status
// that don't return the complete set of values and have different types. In Keyguard we
// need IccCardConstants, but TelephonyManager would only give us
// TelephonyManager.SIM_STATE*, so we retrieve it manually.
final TelephonyManager tele = TelephonyManager.from(mContext);
- int simState = tele.getSimState(slotId);
- State state;
- try {
- state = State.intToState(simState);
- } catch(IllegalArgumentException ex) {
- Log.w(TAG, "Unknown sim state: " + simState);
- state = State.UNKNOWN;
+ ArrayList<Integer> changedSubscriptionIds = new ArrayList<>();
+ HashSet<Integer> activeSubIds = new HashSet<>();
+
+ for (SubscriptionInfo info : activeSubscriptionInfos) {
+ int subId = info.getSubscriptionId();
+ int slotId = info.getSimSlotIndex();
+ int simState = tele.getSimState(slotId);
+ State state;
+ try {
+ state = State.intToState(simState);
+ } catch(IllegalArgumentException ex) {
+ Log.w(TAG, "Unknown sim state: " + simState);
+ state = State.UNKNOWN;
+ }
+
+ SimData data = mSimDatas.get(subId);
+ final boolean changed;
+ if (data == null) {
+ data = new SimData(state, slotId, subId);
+ mSimDatas.put(subId, data);
+ changed = true; // no data yet; force update
+ } else {
+ changed = data.simState != state;
+ data.simState = state;
+ }
+ if (changed) {
+ changedSubscriptionIds.add(subId);
+ }
+
+ activeSubIds.add(subId);
}
- SimData data = mSimDatas.get(subId);
- final boolean changed;
- if (data == null) {
- data = new SimData(state, slotId, subId);
- mSimDatas.put(subId, data);
- changed = true; // no data yet; force update
- } else {
- changed = data.simState != state;
- data.simState = state;
+
+ for (SimData data : mSimDatas.values()) {
+ if (!activeSubIds.contains(data.subId) && data.simState != State.ABSENT) {
+ // for the inactive subscriptions, reset state to ABSENT
+ data.simState = State.ABSENT;
+ changedSubscriptionIds.add(data.subId);
+ }
}
- return changed;
+
+ return changedSubscriptionIds;
}
public static boolean isSimPinSecure(IccCardConstants.State state) {
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingAnimation.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingAnimation.java
index afc9629..e11fe4e 100644
--- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingAnimation.java
+++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingAnimation.java
@@ -55,9 +55,9 @@
* @hide
*/
public WirelessChargingAnimation(@NonNull Context context, @Nullable Looper looper, int
- batteryLevel, Callback callback) {
+ batteryLevel, Callback callback, boolean isDozing) {
mCurrentWirelessChargingView = new WirelessChargingView(context, looper,
- batteryLevel, callback);
+ batteryLevel, callback, isDozing);
}
/**
@@ -65,8 +65,8 @@
* @hide
*/
public static WirelessChargingAnimation makeWirelessChargingAnimation(@NonNull Context context,
- @Nullable Looper looper, int batteryLevel, Callback callback) {
- return new WirelessChargingAnimation(context, looper, batteryLevel, callback);
+ @Nullable Looper looper, int batteryLevel, Callback callback, boolean isDozing) {
+ return new WirelessChargingAnimation(context, looper, batteryLevel, callback, isDozing);
}
/**
@@ -102,14 +102,14 @@
private Callback mCallback;
public WirelessChargingView(Context context, @Nullable Looper looper, int batteryLevel,
- Callback callback) {
+ Callback callback, boolean isDozing) {
mCallback = callback;
- mNextView = new WirelessChargingLayout(context, batteryLevel);
+ mNextView = new WirelessChargingLayout(context, batteryLevel, isDozing);
mGravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER;
final WindowManager.LayoutParams params = mParams;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
- params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.format = PixelFormat.TRANSLUCENT;
params.type = WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
index 9887533..c8e83de 100644
--- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
@@ -20,6 +20,7 @@
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
+import android.graphics.Color;
import android.util.AttributeSet;
import android.view.animation.PathInterpolator;
import android.widget.FrameLayout;
@@ -38,24 +39,24 @@
public WirelessChargingLayout(Context context) {
super(context);
- init(context, null);
+ init(context, null, false);
}
- public WirelessChargingLayout(Context context, int batterylLevel) {
+ public WirelessChargingLayout(Context context, int batteryLevel, boolean isDozing) {
super(context);
- init(context, null, batterylLevel);
+ init(context, null, batteryLevel, isDozing);
}
public WirelessChargingLayout(Context context, AttributeSet attrs) {
super(context, attrs);
- init(context, attrs);
+ init(context, attrs, false);
}
- private void init(Context c, AttributeSet attrs) {
- init(c, attrs, -1);
+ private void init(Context c, AttributeSet attrs, boolean isDozing) {
+ init(c, attrs, -1, false);
}
- private void init(Context context, AttributeSet attrs, int batteryLevel) {
+ private void init(Context context, AttributeSet attrs, int batteryLevel, boolean isDozing) {
final int mBatteryLevel = batteryLevel;
inflate(context, R.layout.wireless_charging_layout, this);
@@ -65,6 +66,11 @@
// amount of battery:
final TextView mPercentage = findViewById(R.id.wireless_charging_percentage);
+ if (isDozing) {
+ mChargingView.setPaintColor(Color.WHITE);
+ mPercentage.setTextColor(Color.WHITE);
+ }
+
if (batteryLevel != UNKNOWN_BATTERY_LEVEL) {
mPercentage.setText(NumberFormat.getPercentInstance().format(mBatteryLevel / 100f));
mPercentage.setAlpha(0);
@@ -74,9 +80,9 @@
R.integer.wireless_charging_fade_offset);
final long chargingAnimationFadeDuration = (long) context.getResources().getInteger(
R.integer.wireless_charging_fade_duration);
- final int batteryLevelTextSizeStart = context.getResources().getDimensionPixelSize(
+ final float batteryLevelTextSizeStart = context.getResources().getFloat(
R.dimen.wireless_charging_anim_battery_level_text_size_start);
- final int batteryLevelTextSizeEnd = context.getResources().getDimensionPixelSize(
+ final float batteryLevelTextSizeEnd = context.getResources().getFloat(
R.dimen.wireless_charging_anim_battery_level_text_size_end);
// Animation Scale: battery percentage text scales from 0% to 100%
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingView.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingView.java
index 19c6dc1..9c411d6 100644
--- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingView.java
+++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingView.java
@@ -98,6 +98,10 @@
mPaint.setColor(Utils.getColorAttr(mContext, R.attr.wallpaperTextColor));
}
+ public void setPaintColor(int color) {
+ mPaint.setColor(color);
+ }
+
@Override
protected void onDraw(final Canvas canvas) {
super.onDraw(canvas);
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index b89e15d..8d93157 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -195,7 +195,6 @@
// override notification copy if hybrid notification enabled
if (mEstimate != null) {
- title = mContext.getString(R.string.battery_low_title_hybrid);
contentText = getHybridContentString(percentage);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index 2270b60..c9c04d9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -17,6 +17,7 @@
package com.android.systemui.qs;
import android.content.Context;
+import android.content.res.Configuration;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
@@ -179,16 +180,56 @@
protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
private boolean mListening;
+ /** Size of the QS tile (width & height). */
+ private int mTileDimensionSize;
public HeaderTileLayout(Context context) {
super(context);
setClipChildren(false);
setClipToPadding(false);
- setGravity(Gravity.CENTER_VERTICAL);
+
+ mTileDimensionSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.qs_quick_tile_size);
+
+ setGravity(Gravity.CENTER);
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
@Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ setGravity(Gravity.CENTER);
+ LayoutParams staticSpaceLayoutParams = generateSpaceLayoutParams(
+ mContext.getResources().getDimensionPixelSize(
+ R.dimen.qs_quick_tile_space_width));
+
+ // Update space params since they fill any open space in portrait orientation and have
+ // a static width in landscape orientation.
+ final int childViewCount = getChildCount();
+ for (int i = 0; i < childViewCount; i++) {
+ View childView = getChildAt(i);
+ if (childView instanceof Space) {
+ childView.setLayoutParams(staticSpaceLayoutParams);
+ }
+ }
+ }
+
+ /**
+ * Returns {@link LayoutParams} based on the given {@code spaceWidth}. If the width is 0,
+ * then we're going to have the space expand to take up as much space as possible. If the
+ * width is non-zero, we want the inter-tile spacers to be fixed.
+ */
+ private LayoutParams generateSpaceLayoutParams(int spaceWidth) {
+ LayoutParams lp = new LayoutParams(spaceWidth, mTileDimensionSize);
+ if (spaceWidth == 0) {
+ lp.weight = 1;
+ }
+ lp.gravity = Gravity.CENTER;
+ return lp;
+ }
+
+ @Override
public void setListening(boolean listening) {
if (mListening == listening) return;
mListening = listening;
@@ -200,25 +241,22 @@
@Override
public void addTile(TileRecord tile) {
if (getChildCount() != 0) {
- // Add a spacer.
- addView(new Space(mContext), getChildCount(), generateSpaceParams());
+ // Add a spacer between tiles. We want static-width spaces if we're in landscape to
+ // keep the tiles close. For portrait, we stick with spaces that fill up any
+ // available space.
+ LayoutParams spaceLayoutParams = generateSpaceLayoutParams(
+ mContext.getResources().getDimensionPixelSize(
+ R.dimen.qs_quick_tile_space_width));
+ addView(new Space(mContext), getChildCount(), spaceLayoutParams);
}
- addView(tile.tileView, getChildCount(), generateLayoutParams());
+
+ addView(tile.tileView, getChildCount(), generateTileLayoutParams());
mRecords.add(tile);
tile.tile.setListening(this, mListening);
}
- private LayoutParams generateSpaceParams() {
- int size = mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size);
- LayoutParams lp = new LayoutParams(0, size);
- lp.weight = 1;
- lp.gravity = Gravity.CENTER;
- return lp;
- }
-
- private LayoutParams generateLayoutParams() {
- int size = mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size);
- LayoutParams lp = new LayoutParams(size, size);
+ private LayoutParams generateTileLayoutParams() {
+ LayoutParams lp = new LayoutParams(mTileDimensionSize, mTileDimensionSize);
lp.gravity = Gravity.CENTER;
return lp;
}
@@ -237,8 +275,8 @@
}
private int getChildIndex(QSTileView tileView) {
- final int N = getChildCount();
- for (int i = 0; i < N; i++) {
+ final int childViewCount = getChildCount();
+ for (int i = 0; i < childViewCount; i++) {
if (getChildAt(i) == tileView) {
return i;
}
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 3847040..a3d6c6c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -18,14 +18,9 @@
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorListenerAdapter;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.res.Configuration;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -36,8 +31,6 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.WindowManager;
-import android.view.WindowManager.LayoutParams;
import android.widget.LinearLayout;
import android.widget.Toolbar;
import android.widget.Toolbar.OnMenuItemClickListener;
@@ -48,12 +41,10 @@
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QSTile;
-import com.android.systemui.qs.QSContainerImpl;
import com.android.systemui.qs.QSDetailClipper;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
-import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.KeyguardMonitor.Callback;
@@ -73,6 +64,7 @@
private final QSDetailClipper mClipper;
private final LightBarController mLightBarController;
+ private final TileQueryHelper mTileQueryHelper;
private boolean isShown;
private QSTileHost mHost;
@@ -82,7 +74,6 @@
private boolean mCustomizing;
private NotificationsQuickSettingsContainer mNotifQsContainer;
private QS mQs;
- private boolean mFinishedFetchingTiles = false;
private int mX;
private int mY;
private boolean mOpening;
@@ -112,6 +103,7 @@
mRecyclerView = findViewById(android.R.id.list);
mTileAdapter = new TileAdapter(getContext());
+ mTileQueryHelper = new TileQueryHelper(context, mTileAdapter);
mRecyclerView.setAdapter(mTileAdapter);
mTileAdapter.getItemTouchHelper().attachToRecyclerView(mRecyclerView);
GridLayoutManager layout = new GridLayoutManager(getContext(), 3);
@@ -193,12 +185,7 @@
}
private void queryTiles() {
- mFinishedFetchingTiles = false;
- Runnable tileQueryFetchCompletion = () -> {
- Handler mainHandler = new Handler(Looper.getMainLooper());
- mainHandler.post(() -> mFinishedFetchingTiles = true);
- };
- new TileQueryHelper(mContext, mHost, mTileAdapter, tileQueryFetchCompletion);
+ mTileQueryHelper.queryTiles(mHost);
}
public void hide(int x, int y) {
@@ -259,7 +246,7 @@
}
private void save() {
- if (mFinishedFetchingTiles) {
+ if (mTileQueryHelper.isFinished()) {
mTileAdapter.saveSpecs(mHost);
}
}
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 8bf4096..9593b0f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
@@ -25,60 +25,63 @@
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Handler;
-import android.os.Looper;
import android.service.quicksettings.TileService;
import android.text.TextUtils;
+import android.util.ArraySet;
import android.widget.Button;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTile.State;
-import com.android.systemui.qs.tileimpl.QSTileImpl.DrawableIcon;
-import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.qs.external.CustomTile;
+import com.android.systemui.qs.tileimpl.QSTileImpl.DrawableIcon;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class TileQueryHelper {
-
private static final String TAG = "TileQueryHelper";
private final ArrayList<TileInfo> mTiles = new ArrayList<>();
- private final ArrayList<String> mSpecs = new ArrayList<>();
+ private final ArraySet<String> mSpecs = new ArraySet<>();
+ private final Handler mBgHandler;
+ private final Handler mMainHandler;
private final Context mContext;
private final TileStateListener mListener;
- private final QSTileHost mHost;
- private final Runnable mCompletion;
- public TileQueryHelper(Context context, QSTileHost host,
- TileStateListener listener, Runnable completion) {
+ private boolean mFinished;
+
+ public TileQueryHelper(Context context, TileStateListener listener) {
mContext = context;
mListener = listener;
- mHost = host;
- mCompletion = completion;
- addSystemTiles();
+ mBgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
+ mMainHandler = Dependency.get(Dependency.MAIN_HANDLER);
+ }
+
+ public void queryTiles(QSTileHost host) {
+ mTiles.clear();
+ mSpecs.clear();
+ mFinished = false;
+ // Enqueue jobs to fetch every system tile and then ever package tile.
+ addStockTiles(host);
+ addPackageTiles(host);
// TODO: Live?
}
- private void addSystemTiles() {
- // Enqueue jobs to fetch every system tile and then ever package tile.
- final Handler qsHandler = new Handler((Looper) Dependency.get(Dependency.BG_LOOPER));
- final Handler mainHandler = new Handler(Looper.getMainLooper());
- addStockTiles(mainHandler, qsHandler);
- addPackageTiles(mainHandler, qsHandler);
- // Then enqueue the completion. It should always be last
- qsHandler.post(mCompletion);
+ public boolean isFinished() {
+ return mFinished;
}
- private void addStockTiles(Handler mainHandler, Handler bgHandler) {
+ private void addStockTiles(QSTileHost host) {
String possible = mContext.getString(R.string.quick_settings_tiles_stock);
String[] possibleTiles = possible.split(",");
+ final ArrayList<QSTile> tilesToAdd = new ArrayList<>();
for (int i = 0; i < possibleTiles.length; i++) {
final String spec = possibleTiles[i];
- final QSTile tile = mHost.createTile(spec);
+ final QSTile tile = host.createTile(spec);
if (tile == null) {
continue;
} else if (!tile.isAvailable()) {
@@ -89,28 +92,25 @@
tile.clearState();
tile.refreshState();
tile.setListening(this, false);
- bgHandler.post(new Runnable() {
- @Override
- public void run() {
- final QSTile.State state = tile.getState().copy();
- // Ignore the current state and get the generic label instead.
- state.label = tile.getTileLabel();
- tile.destroy();
- mainHandler.post(new Runnable() {
- @Override
- public void run() {
- addTile(spec, null, state, true);
- mListener.onTilesChanged(mTiles);
- }
- });
- }
- });
+ tile.setTileSpec(spec);
+ tilesToAdd.add(tile);
}
+
+ mBgHandler.post(() -> {
+ for (QSTile tile : tilesToAdd) {
+ final QSTile.State state = tile.getState().copy();
+ // Ignore the current state and get the generic label instead.
+ state.label = tile.getTileLabel();
+ tile.destroy();
+ addTile(tile.getTileSpec(), null, state, true);
+ }
+ notifyTilesChanged(false);
+ });
}
- private void addPackageTiles(Handler mainHandler, Handler bgHandler) {
- bgHandler.post(() -> {
- Collection<QSTile> params = mHost.getTiles();
+ private void addPackageTiles(final QSTileHost host) {
+ mBgHandler.post(() -> {
+ Collection<QSTile> params = host.getTiles();
PackageManager pm = mContext.getPackageManager();
List<ResolveInfo> services = pm.queryIntentServicesAsUser(
new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser());
@@ -145,9 +145,18 @@
icon.mutate();
icon.setTint(mContext.getColor(android.R.color.white));
CharSequence label = info.serviceInfo.loadLabel(pm);
- addTile(spec, icon, label != null ? label.toString() : "null", appLabel, mContext);
+ addTile(spec, icon, label != null ? label.toString() : "null", appLabel);
}
- mainHandler.post(() -> mListener.onTilesChanged(mTiles));
+
+ notifyTilesChanged(true);
+ });
+ }
+
+ private void notifyTilesChanged(final boolean finished) {
+ final ArrayList<TileInfo> tilesToReturn = new ArrayList<>(mTiles);
+ mMainHandler.post(() -> {
+ mListener.onTilesChanged(tilesToReturn);
+ mFinished = finished;
});
}
@@ -177,8 +186,8 @@
mSpecs.add(spec);
}
- private void addTile(String spec, Drawable drawable, CharSequence label, CharSequence appLabel,
- Context context) {
+ private void addTile(
+ String spec, Drawable drawable, CharSequence label, CharSequence appLabel) {
QSTile.State state = new QSTile.State();
state.label = label;
state.contentDescription = label;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index 7ad5a59..f5f8ffa 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -33,7 +33,6 @@
import android.support.annotation.VisibleForTesting;
import android.util.Log;
-import com.android.systemui.qs.customize.TileQueryHelper.TileStateListener;
import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener;
import java.util.List;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
index c9c678c..a9defc8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java
@@ -15,7 +15,6 @@
import static com.android.systemui.qs.tileimpl.QSIconViewImpl.QS_ANIM_LENGTH;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -122,14 +121,14 @@
private void setRipple(RippleDrawable tileBackground) {
mRipple = tileBackground;
if (getWidth() != 0) {
- updateRippleSize(getWidth(), getHeight());
+ updateRippleSize();
}
}
- private void updateRippleSize(int width, int height) {
+ private void updateRippleSize() {
// center the touch feedback on the center of the icon, and dial it down a bit
- final int cx = width / 2;
- final int cy = mIconFrame.getMeasuredHeight() / 2;
+ final int cx = mIconFrame.getMeasuredWidth() / 2 + mIconFrame.getLeft();
+ final int cy = mIconFrame.getMeasuredHeight() / 2 + mIconFrame.getTop();
final int rad = (int) (mIcon.getHeight() * .85f);
mRipple.setHotspotBounds(cx - rad, cy - rad, cx + rad, cy + rad);
}
@@ -151,11 +150,8 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
- final int w = getMeasuredWidth();
- final int h = getMeasuredHeight();
-
if (mRipple != null) {
- updateRippleSize(w, h);
+ updateRippleSize();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java
index 4774785..3cb4c71 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java
@@ -32,11 +32,12 @@
import com.android.systemui.plugins.qs.QSIconView;
import com.android.systemui.plugins.qs.QSTile;
+
import java.util.Objects;
/** View that represents a standard quick settings tile. **/
public class QSTileView extends QSTileBaseView {
-
+ private static final int DEFAULT_MAX_LINES = 2;
private static final boolean DUAL_TARGET_ALLOWED = false;
private View mDivider;
protected TextView mLabel;
@@ -61,7 +62,7 @@
setId(View.generateViewId());
createLabel();
setOrientation(VERTICAL);
- setGravity(Gravity.CENTER);
+ setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
}
TextView getLabel() {
@@ -72,6 +73,7 @@
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
FontSizeUtils.updateFontSize(mLabel, R.dimen.qs_tile_text_size);
+ FontSizeUtils.updateFontSize(mSecondLine, R.dimen.qs_tile_text_size);
}
@Override
@@ -85,17 +87,33 @@
mLabelContainer.setClipChildren(false);
mLabelContainer.setClipToPadding(false);
mLabel = mLabelContainer.findViewById(R.id.tile_label);
+ mLabel.setSelected(true); // Allow marquee to work.
mPadLock = mLabelContainer.findViewById(R.id.restricted_padlock);
mDivider = mLabelContainer.findViewById(R.id.underline);
mExpandIndicator = mLabelContainer.findViewById(R.id.expand_indicator);
mExpandSpace = mLabelContainer.findViewById(R.id.expand_space);
mSecondLine = mLabelContainer.findViewById(R.id.app_label);
mSecondLine.setAlpha(.6f);
-
+ mSecondLine.setSelected(true); // Allow marquee to work.
addView(mLabelContainer);
}
@Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (mLabel.getMaxLines() != DEFAULT_MAX_LINES) {
+ mLabel.setMaxLines(DEFAULT_MAX_LINES);
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ // Remeasure view if the secondary label text will be cut off.
+ if (!TextUtils.isEmpty(mSecondLine.getText())
+ && mSecondLine.getLineHeight() > mSecondLine.getHeight()) {
+ mLabel.setSingleLine();
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+
+ @Override
protected void handleStateChanged(QSTile.State state) {
super.handleStateChanged(state);
if (!Objects.equals(mLabel.getText(), state.label) || mState != state.state) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index 5aace97..63be4b7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -133,7 +133,7 @@
if (isNightLightActivated) {
toggleTime = mController.getCustomEndTime();
- toggleTimeStringRes = R.string.quick_settings_night_secondary_label_until;
+ toggleTimeStringRes = R.string.quick_settings_secondary_label_until;
} else {
toggleTime = mController.getCustomStartTime();
toggleTimeStringRes = R.string.quick_settings_night_secondary_label_on_at;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index 28fdc11..8a1e4da 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -150,8 +150,8 @@
cb = mSignalCallback.mInfo;
}
boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING;
- boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null);
- boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null);
+ boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.ssid != null);
+ boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.ssid == null);
boolean enabledChanging = state.value != cb.enabled;
if (enabledChanging) {
mDetailAdapter.setItemsVisible(cb.enabled);
@@ -163,7 +163,7 @@
}
state.slash.isSlashed = false;
boolean isTransient = transientEnabling || cb.isTransient;
- state.secondaryLabel = getSecondaryLabel(isTransient);
+ state.secondaryLabel = getSecondaryLabel(isTransient, cb.statusLabel);
state.state = Tile.STATE_ACTIVE;
state.dualTarget = true;
state.value = transientEnabling || cb.enabled;
@@ -181,7 +181,7 @@
state.label = r.getString(R.string.quick_settings_wifi_label);
} else if (wifiConnected) {
state.icon = ResourceIcon.get(cb.wifiSignalIconId);
- state.label = removeDoubleQuotes(cb.enabledDesc);
+ state.label = removeDoubleQuotes(cb.ssid);
} else if (wifiNotConnected) {
state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_disconnected);
state.label = r.getString(R.string.quick_settings_wifi_label);
@@ -194,7 +194,7 @@
if (state.value) {
if (wifiConnected) {
minimalContentDescription.append(cb.wifiSignalContentDescription).append(",");
- minimalContentDescription.append(removeDoubleQuotes(cb.enabledDesc));
+ minimalContentDescription.append(removeDoubleQuotes(cb.ssid));
}
}
state.contentDescription = minimalContentDescription.toString();
@@ -203,10 +203,10 @@
state.expandedAccessibilityClassName = Switch.class.getName();
}
- private CharSequence getSecondaryLabel(boolean isTransient) {
+ private CharSequence getSecondaryLabel(boolean isTransient, String statusLabel) {
return isTransient
? mContext.getString(R.string.quick_settings_wifi_secondary_label_transient)
- : null;
+ : statusLabel;
}
@Override
@@ -246,11 +246,12 @@
boolean enabled;
boolean connected;
int wifiSignalIconId;
- String enabledDesc;
+ String ssid;
boolean activityIn;
boolean activityOut;
String wifiSignalContentDescription;
boolean isTransient;
+ public String statusLabel;
@Override
public String toString() {
@@ -258,7 +259,7 @@
.append("enabled=").append(enabled)
.append(",connected=").append(connected)
.append(",wifiSignalIconId=").append(wifiSignalIconId)
- .append(",enabledDesc=").append(enabledDesc)
+ .append(",ssid=").append(ssid)
.append(",activityIn=").append(activityIn)
.append(",activityOut=").append(activityOut)
.append(",wifiSignalContentDescription=").append(wifiSignalContentDescription)
@@ -272,16 +273,18 @@
@Override
public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
- boolean activityIn, boolean activityOut, String description, boolean isTransient) {
+ boolean activityIn, boolean activityOut, String description, boolean isTransient,
+ String statusLabel) {
if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + enabled);
mInfo.enabled = enabled;
mInfo.connected = qsIcon.visible;
mInfo.wifiSignalIconId = qsIcon.icon;
- mInfo.enabledDesc = description;
+ mInfo.ssid = description;
mInfo.activityIn = activityIn;
mInfo.activityOut = activityOut;
mInfo.wifiSignalContentDescription = qsIcon.contentDescription;
mInfo.isTransient = isTransient;
+ mInfo.statusLabel = statusLabel;
if (isShowingDetail()) {
mDetailAdapter.updateItems();
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 068fd3f..227f2d2 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -189,7 +189,6 @@
mPublicNotificationBuilder =
new Notification.Builder(context, NotificationChannels.SCREENSHOTS_HEADSUP)
.setContentTitle(r.getString(R.string.screenshot_saving_title))
- .setContentText(r.getString(R.string.screenshot_saving_text))
.setSmallIcon(R.drawable.stat_notify_image)
.setCategory(Notification.CATEGORY_PROGRESS)
.setWhen(now)
@@ -203,7 +202,6 @@
.setTicker(r.getString(R.string.screenshot_saving_ticker)
+ (mTickerAddSpace ? " " : ""))
.setContentTitle(r.getString(R.string.screenshot_saving_title))
- .setContentText(r.getString(R.string.screenshot_saving_text))
.setSmallIcon(R.drawable.stat_notify_image)
.setWhen(now)
.setShowWhen(true)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java
index 3698c3a0..4388b41 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java
@@ -48,6 +48,11 @@
return findViewById(R.id.no_notifications);
}
+ @Override
+ protected View findSecondaryView() {
+ return null;
+ }
+
public void setTextColor(@ColorInt int color) {
mEmptyText.setTextColor(color);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index b087a292..ebc7b94 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -1559,6 +1559,11 @@
}
}
invalidateOutline();
+
+ // In order to keep the shelf in sync with this swiping, we're simply translating
+ // it's icon by the same amount. The translation is already being used for the normal
+ // positioning, so we can use the scrollX instead.
+ getEntry().expandedIcon.setScrollX((int) -translationX);
}
if (mMenuRow.getMenuView() != null) {
mMenuRow.onTranslationUpdate(translationX);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java b/packages/SystemUI/src/com/android/systemui/statusbar/FooterView.java
similarity index 68%
rename from packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java
rename to packages/SystemUI/src/com/android/systemui/statusbar/FooterView.java
index d7c6443..0f4b621 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/FooterView.java
@@ -26,11 +26,12 @@
import com.android.systemui.statusbar.stack.ExpandableViewState;
import com.android.systemui.statusbar.stack.StackScrollState;
-public class DismissView extends StackScrollerDecorView {
+public class FooterView extends StackScrollerDecorView {
private final int mClearAllTopPadding;
- private DismissViewButton mDismissButton;
+ private FooterViewButton mDismissButton;
+ private FooterViewButton mManageButton;
- public DismissView(Context context, AttributeSet attrs) {
+ public FooterView(Context context, AttributeSet attrs) {
super(context, attrs);
mClearAllTopPadding = context.getResources().getDimensionPixelSize(
R.dimen.clear_all_padding_top);
@@ -38,21 +39,31 @@
@Override
protected View findContentView() {
+ return findViewById(R.id.content);
+ }
+
+ protected View findSecondaryView() {
return findViewById(R.id.dismiss_text);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mDismissButton = (DismissViewButton) findContentView();
+ mDismissButton = (FooterViewButton) findSecondaryView();
+ mManageButton = findViewById(R.id.manage_text);
}
public void setTextColor(@ColorInt int color) {
+ mManageButton.setTextColor(color);
mDismissButton.setTextColor(color);
}
- public void setOnButtonClickListener(OnClickListener listener) {
- mContent.setOnClickListener(listener);
+ public void setManageButtonClickListener(OnClickListener listener) {
+ mManageButton.setOnClickListener(listener);
+ }
+
+ public void setDismissButtonClickListener(OnClickListener listener) {
+ mDismissButton.setOnClickListener(listener);
}
public boolean isOnEmptySpace(float touchX, float touchY) {
@@ -68,25 +79,26 @@
mDismissButton.setText(R.string.clear_all_notifications_text);
mDismissButton.setContentDescription(
mContext.getString(R.string.accessibility_clear_all));
+ mManageButton.setText(R.string.manage_notifications_text);
}
public boolean isButtonVisible() {
- return mDismissButton.getAlpha() != 0.0f;
+ return mManageButton.getAlpha() != 0.0f;
}
@Override
public ExpandableViewState createNewViewState(StackScrollState stackScrollState) {
- return new DismissViewState();
+ return new FooterViewState();
}
- public class DismissViewState extends ExpandableViewState {
+ public class FooterViewState extends ExpandableViewState {
@Override
public void applyToView(View view) {
super.applyToView(view);
- if (view instanceof DismissView) {
- DismissView dismissView = (DismissView) view;
+ if (view instanceof FooterView) {
+ FooterView footerView = (FooterView) view;
boolean visible = this.clipTopAmount < mClearAllTopPadding;
- dismissView.performVisibilityAnimation(visible && !dismissView.willBeGone());
+ footerView.performVisibilityAnimation(visible && !footerView.willBeGone());
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/FooterViewButton.java
similarity index 84%
rename from packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java
rename to packages/SystemUI/src/com/android/systemui/statusbar/FooterViewButton.java
index b608d67..16ca0f2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/FooterViewButton.java
@@ -23,21 +23,21 @@
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
-public class DismissViewButton extends AlphaOptimizedButton {
+public class FooterViewButton extends AlphaOptimizedButton {
- public DismissViewButton(Context context) {
+ public FooterViewButton(Context context) {
this(context, null);
}
- public DismissViewButton(Context context, AttributeSet attrs) {
+ public FooterViewButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
- public DismissViewButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ public FooterViewButton(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
- public DismissViewButton(Context context, AttributeSet attrs, int defStyleAttr,
+ public FooterViewButton(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index f64b1bc..b81e9af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -1210,7 +1210,9 @@
return;
}
- boolean enableSmartReplies = mSmartReplyConstants.isEnabled();
+ boolean enableSmartReplies = (mSmartReplyConstants.isEnabled()
+ && (!mSmartReplyConstants.requiresTargetingP()
+ || entry.targetSdk >= Build.VERSION_CODES.P));
boolean hasRemoteInput = false;
RemoteInput remoteInputWithChoices = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 41c7559..a4aa598 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -85,6 +85,7 @@
private boolean mAnimationsEnabled = true;
private boolean mShowNotificationShelf;
private float mFirstElementRoundness;
+ private Rect mClipRect = new Rect();
public NotificationShelf(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -672,6 +673,11 @@
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
updateRelativeOffset();
+
+ // we always want to clip to our sides, such that nothing can draw outside of these bounds
+ int height = getResources().getDisplayMetrics().heightPixels;
+ mClipRect.set(0, -height, getWidth(), height);
+ mShelfIcons.setClipBounds(mClipRect);
}
private void updateRelativeOffset() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 3cf7741..e7b768f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -55,7 +55,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
// Intimately tied to the design of res/layout/signal_cluster_view.xml
public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback,
@@ -277,7 +276,8 @@
@Override
public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
- boolean activityIn, boolean activityOut, String description, boolean isTransient) {
+ boolean activityIn, boolean activityOut, String description, boolean isTransient,
+ String secondaryLabel) {
mWifiVisible = statusIcon.visible && !mBlockWifi;
mWifiStrengthId = statusIcon.icon;
mWifiDescription = statusIcon.contentDescription;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java
index badc40d..14a6c42 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java
@@ -31,8 +31,11 @@
public abstract class StackScrollerDecorView extends ExpandableView {
protected View mContent;
+ protected View mSecondaryView;
private boolean mIsVisible;
+ private boolean mIsSecondaryVisible;
private boolean mAnimating;
+ private int mDuration = 260;
public StackScrollerDecorView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -42,6 +45,7 @@
protected void onFinishInflate() {
super.onFinishInflate();
mContent = findContentView();
+ mSecondaryView = findSecondaryView();
setInvisible();
}
@@ -57,17 +61,37 @@
}
public void performVisibilityAnimation(boolean nowVisible) {
- animateText(nowVisible, null /* onFinishedRunnable */);
+ animateText(mContent, nowVisible, null /* onFinishedRunnable */);
+ mIsVisible = nowVisible;
}
public void performVisibilityAnimation(boolean nowVisible, Runnable onFinishedRunnable) {
- animateText(nowVisible, onFinishedRunnable);
+ animateText(mContent, nowVisible, onFinishedRunnable);
+ mIsVisible = nowVisible;
+ }
+
+ public void performSecondaryVisibilityAnimation(boolean nowVisible) {
+ performSecondaryVisibilityAnimation(nowVisible, null /* onFinishedRunnable */);
+ }
+
+ public void performSecondaryVisibilityAnimation(boolean nowVisible,
+ Runnable onFinishedRunnable) {
+ animateText(mSecondaryView, nowVisible, onFinishedRunnable);
+ mIsSecondaryVisible = nowVisible;
+ }
+
+ public boolean isSecondaryVisible() {
+ return mSecondaryView != null && (mIsSecondaryVisible || mAnimating);
}
public boolean isVisible() {
return mIsVisible || mAnimating;
}
+ void setDuration(int duration) {
+ mDuration = duration;
+ }
+
/**
* Animate the text to a new visibility.
*
@@ -75,7 +99,10 @@
* @param onFinishedRunnable A runnable which should be run when the animation is
* finished.
*/
- private void animateText(boolean nowVisible, final Runnable onFinishedRunnable) {
+ private void animateText(View view, boolean nowVisible, final Runnable onFinishedRunnable) {
+ if (view == null) {
+ return;
+ }
if (nowVisible != mIsVisible) {
// Animate text
float endValue = nowVisible ? 1.0f : 0.0f;
@@ -86,10 +113,10 @@
interpolator = Interpolators.ALPHA_OUT;
}
mAnimating = true;
- mContent.animate()
+ view.animate()
.alpha(endValue)
.setInterpolator(interpolator)
- .setDuration(260)
+ .setDuration(mDuration)
.withEndAction(new Runnable() {
@Override
public void run() {
@@ -99,7 +126,6 @@
}
}
});
- mIsVisible = nowVisible;
} else {
if (onFinishedRunnable != null) {
onFinishedRunnable.run();
@@ -109,7 +135,11 @@
public void setInvisible() {
mContent.setAlpha(0.0f);
+ if (mSecondaryView != null) {
+ mSecondaryView.setAlpha(0.0f);
+ }
mIsVisible = false;
+ mIsSecondaryVisible = false;
}
@Override
@@ -134,7 +164,15 @@
public void cancelAnimation() {
mContent.animate().cancel();
+ if (mSecondaryView != null) {
+ mSecondaryView.animate().cancel();
+ }
}
protected abstract View findContentView();
+
+ /**
+ * Returns a view that might not always appear while the main content view is still visible.
+ */
+ protected abstract View findSecondaryView();
}
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 d609ae7..fcd4e8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -330,6 +330,10 @@
}
}
+ public boolean willDismissWithAction() {
+ return mKeyguardView != null && mKeyguardView.hasDismissActions();
+ }
+
protected void ensureView() {
// Removal of the view might be deferred to reduce unlock latency,
// in this case we need to force the removal, otherwise we'll
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index a39800d..58f8baa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -171,7 +171,7 @@
private final OverviewProxyListener mOverviewProxyListener = new OverviewProxyListener() {
@Override
public void onConnectionChanged(boolean isConnected) {
- mNavigationBarView.onOverviewProxyConnectionChanged(isConnected);
+ mNavigationBarView.updateStates();
updateScreenPinningGestures();
WindowManagerWrapper.getInstance()
.setNavBarVirtualKeyHapticFeedbackEnabled(!isConnected);
@@ -188,6 +188,7 @@
@Override
public void onInteractionFlagsChanged(@InteractionType int flags) {
mNavigationBarView.updateStates();
+ updateScreenPinningGestures();
}
};
@@ -925,7 +926,9 @@
private boolean onLongPressRecents() {
if (mRecents == null || !ActivityManager.supportsMultiWindow(getContext())
|| !mDivider.getView().getSnapAlgorithm().isSplitScreenFeasible()
- || Recents.getConfiguration().isLowRamDevice) {
+ || Recents.getConfiguration().isLowRamDevice
+ // If we are connected to the overview service, then disable the recents button
+ || mOverviewProxyService.getProxy() != null) {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 8fb0620..b4cb088 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -681,6 +681,7 @@
updateSlippery();
reloadNavIcons();
updateNavButtonIcons();
+ setUpSwipeUpOnboarding(isQuickStepSwipeUpEnabled());
}
private void updateSlippery() {
@@ -816,11 +817,6 @@
}
}
- public void onOverviewProxyConnectionChanged(boolean isConnected) {
- updateStates();
- setUpSwipeUpOnboarding(isQuickStepSwipeUpEnabled());
- }
-
@Override
protected void onDraw(Canvas canvas) {
mGestureHelper.onDraw(canvas);
@@ -842,10 +838,17 @@
buttonBounds.setEmpty();
return;
}
+ // Temporarily reset the translation back to origin to get the position in window
+ final float posX = view.getTranslationX();
+ final float posY = view.getTranslationY();
+ view.setTranslationX(0);
+ view.setTranslationY(0);
view.getLocationInWindow(mTmpPosition);
buttonBounds.set(mTmpPosition[0], mTmpPosition[1],
mTmpPosition[0] + view.getMeasuredWidth(),
mTmpPosition[1] + view.getMeasuredHeight());
+ view.setTranslationX(posX);
+ view.setTranslationY(posY);
}
private void updateRotatedViews() {
@@ -1038,7 +1041,7 @@
onPluginDisconnected(null); // Create default gesture helper
Dependency.get(PluginManager.class).addPluginListener(this,
NavGesture.class, false /* Only one */);
- setUpSwipeUpOnboarding(mOverviewProxyService.getProxy() != null);
+ setUpSwipeUpOnboarding(isQuickStepSwipeUpEnabled());
}
@Override
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 64e205d..cccda90 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -2165,18 +2165,18 @@
@Override
protected boolean fullyExpandedClearAllVisible() {
- return mNotificationStackScroller.isDismissViewNotGone()
+ return mNotificationStackScroller.isFooterViewNotGone()
&& mNotificationStackScroller.isScrolledToBottom() && !mQsExpandImmediate;
}
@Override
protected boolean isClearAllVisible() {
- return mNotificationStackScroller.isDismissViewVisible();
+ return mNotificationStackScroller.isFooterViewVisible();
}
@Override
protected int getClearAllHeight() {
- return mNotificationStackScroller.getDismissViewHeight();
+ return mNotificationStackScroller.getFooterViewHeight();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
index 9abbfb83..a51cd93 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
@@ -32,7 +32,6 @@
import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
-import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
@@ -54,28 +53,16 @@
import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_HOME;
/**
- * Class to detect gestures on the navigation bar and implement quick scrub and switch.
+ * Class to detect gestures on the navigation bar and implement quick scrub.
*/
-public class QuickStepController extends GestureDetector.SimpleOnGestureListener implements
- GestureHelper {
+public class QuickStepController implements GestureHelper {
private static final String TAG = "QuickStepController";
- private static final int QUICK_SWITCH_FLING_VELOCITY = 0;
private static final int ANIM_DURATION_MS = 200;
- private static final long LONG_PRESS_DELAY_MS = 225;
-
- /**
- * For quick step, set a damping value to allow the button to stick closer its origin position
- * when dragging before quick scrub is active.
- */
- private static final int SWITCH_STICKINESS = 4;
private NavigationBarView mNavigationBarView;
- private GestureDetector mGestureDetector;
- private boolean mDraggingActive;
private boolean mQuickScrubActive;
- private boolean mAllowQuickSwitch;
private boolean mAllowGestureDetection;
private boolean mQuickStepStarted;
private float mDownOffset;
@@ -134,45 +121,10 @@
}
};
- private Runnable mLongPressRunnable = this::startQuickScrub;
-
- private final GestureDetector.SimpleOnGestureListener mGestureListener =
- new GestureDetector.SimpleOnGestureListener() {
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) {
- if (!mNavigationBarView.isQuickScrubEnabled() || mQuickScrubActive
- || !mAllowQuickSwitch
- || mNavigationBarView.getDownHitTarget() != HIT_TARGET_HOME) {
- return false;
- }
- float velocityX = mIsRTL ? -velX : velX;
- float absVelY = Math.abs(velY);
- final boolean isValidFling = velocityX > QUICK_SWITCH_FLING_VELOCITY &&
- mIsVertical ? (absVelY > velocityX) : (velocityX > absVelY);
- if (isValidFling) {
- mDraggingActive = false;
- animateEnd();
- mHandler.removeCallbacks(mLongPressRunnable);
- try {
- final IOverviewProxy overviewProxy = mOverviewEventSender.getProxy();
- overviewProxy.onQuickSwitch();
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Switch");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send start of quick switch.", e);
- }
- return true;
- }
- return false;
- }
- };
-
public QuickStepController(Context context) {
mContext = context;
mScrollTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mOverviewEventSender = Dependency.get(OverviewProxyService.class);
- mGestureDetector = new GestureDetector(mContext, mGestureListener);
mTrackThickness = getDimensionPixelSize(mContext, R.dimen.nav_quick_scrub_track_thickness);
mTrackPadding = getDimensionPixelSize(mContext, R.dimen.nav_quick_scrub_track_edge_padding);
mTrackPaint.setAlpha(0);
@@ -195,8 +147,8 @@
}
/**
- * @return true if we want to intercept touch events for quick scrub/switch and prevent proxying
- * the event to the overview service.
+ * @return true if we want to intercept touch events for quick scrub and prevent proxying the
+ * event to the overview service.
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
@@ -204,8 +156,8 @@
}
/**
- * @return true if we want to handle touch events for quick scrub/switch or if down event (that
- * will get consumed and ignored). No events will be proxied to the overview service.
+ * @return true if we want to handle touch events for quick scrub or if down event (that will
+ * get consumed and ignored). No events will be proxied to the overview service.
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
@@ -224,10 +176,6 @@
mNavigationBarView.requestUnbufferedDispatch(event);
final ButtonDispatcher homeButton = mNavigationBarView.getHomeButton();
- if (mGestureDetector.onTouchEvent(event)) {
- // If the fling has been handled on UP, then skip proxying the UP
- return true;
- }
final boolean homePressed = mNavigationBarView.getDownHitTarget() == HIT_TARGET_HOME;
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
@@ -242,15 +190,11 @@
homeButton.setDelayTouchFeedback(true /* delay */);
mTouchDownX = x;
mTouchDownY = y;
- if (homePressed) {
- mHandler.postDelayed(mLongPressRunnable, LONG_PRESS_DELAY_MS);
- }
mTransformGlobalMatrix.set(Matrix.IDENTITY_MATRIX);
mTransformLocalMatrix.set(Matrix.IDENTITY_MATRIX);
mNavigationBarView.transformMatrixToGlobal(mTransformGlobalMatrix);
mNavigationBarView.transformMatrixToLocal(mTransformLocalMatrix);
mQuickStepStarted = false;
- mAllowQuickSwitch = true;
mAllowGestureDetection = true;
break;
}
@@ -284,14 +228,14 @@
}
// Decide to start quickstep if dragging away from the navigation bar, otherwise in
// the parallel direction, decide to start quickscrub. Only one may run.
- if (!mDraggingActive && !mQuickScrubActive && exceededPerpendicularTouchSlop) {
+ if (!mQuickScrubActive && exceededPerpendicularTouchSlop) {
if (mNavigationBarView.isQuickStepSwipeUpEnabled()) {
startQuickStep(event);
}
break;
}
- // Do not handle quick scrub/switch if disabled or hit target is not home button
+ // Do not handle quick scrub if disabled or hit target is not home button
if (!homePressed || !mNavigationBarView.isQuickScrubEnabled()) {
break;
}
@@ -301,32 +245,28 @@
}
// Control the button movement
- if (!mDraggingActive && exceededTouchSlop) {
+ if (!mQuickScrubActive && exceededTouchSlop) {
boolean allowDrag = !mDragPositive
? offset < 0 && pos < touchDown : offset >= 0 && pos > touchDown;
if (allowDrag) {
mDownOffset = offset;
homeButton.abortCurrentGesture();
- mDraggingActive = true;
+ startQuickScrub();
}
}
- if (mDraggingActive && (mDragPositive && offset >= 0
+ if (mQuickScrubActive && (mDragPositive && offset >= 0
|| !mDragPositive && offset <= 0)) {
float scrubFraction = Utilities.clamp(Math.abs(offset) * 1f / trackSize, 0, 1);
mTranslation = !mDragPositive
? Utilities.clamp(offset - mDownOffset, -trackSize, 0)
: Utilities.clamp(offset - mDownOffset, 0, trackSize);
- if (mQuickScrubActive) {
- try {
- mOverviewEventSender.getProxy().onQuickScrubProgress(scrubFraction);
- if (DEBUG_OVERVIEW_PROXY) {
- Log.d(TAG_OPS, "Quick Scrub Progress:" + scrubFraction);
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to send progress of quick scrub.", e);
+ try {
+ mOverviewEventSender.getProxy().onQuickScrubProgress(scrubFraction);
+ if (DEBUG_OVERVIEW_PROXY) {
+ Log.d(TAG_OPS, "Quick Scrub Progress:" + scrubFraction);
}
- } else {
- mTranslation /= SWITCH_STICKINESS;
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to send progress of quick scrub.", e);
}
if (mIsVertical) {
mHomeButtonView.setTranslationY(mTranslation);
@@ -342,12 +282,11 @@
break;
}
- // Proxy motion events to launcher if not handled by quick scrub/switch
- boolean handled = mDraggingActive || mQuickScrubActive;
- if (!handled && mAllowGestureDetection) {
+ // Proxy motion events to launcher if not handled by quick scrub
+ if (!mQuickScrubActive && mAllowGestureDetection) {
proxyMotionEvents(event);
}
- return handled || mQuickStepStarted;
+ return mQuickScrubActive || mQuickStepStarted;
}
@Override
@@ -364,16 +303,18 @@
@Override
public void onLayout(boolean changed, int left, int top, int right, int bottom) {
- final int width = right - left;
- final int height = bottom - top;
+ final int width = (right - left) - mNavigationBarView.getPaddingEnd()
+ - mNavigationBarView.getPaddingStart();
+ final int height = (bottom - top) - mNavigationBarView.getPaddingBottom()
+ - mNavigationBarView.getPaddingTop();
final int x1, x2, y1, y2;
if (mIsVertical) {
- x1 = (width - mTrackThickness) / 2;
+ x1 = (width - mTrackThickness) / 2 + mNavigationBarView.getPaddingStart();
x2 = x1 + mTrackThickness;
y1 = mDragPositive ? height / 2 : mTrackPadding;
y2 = y1 + height / 2 - mTrackPadding;
} else {
- y1 = (height - mTrackThickness) / 2;
+ y1 = (height - mTrackThickness) / 2 + mNavigationBarView.getPaddingTop();
y2 = y1 + mTrackThickness;
x1 = mDragPositive ? width / 2 : mTrackPadding;
x2 = x1 + width / 2 - mTrackPadding;
@@ -428,12 +369,11 @@
}
mOverviewEventSender.notifyQuickStepStarted();
mNavigationBarView.getHomeButton().abortCurrentGesture();
- cancelQuickSwitch();
mHandler.removeCallbacksAndMessages(null);
}
private void startQuickScrub() {
- if (!mQuickScrubActive && mDraggingActive) {
+ if (!mQuickScrubActive) {
mQuickScrubActive = true;
mLightTrackColor = mContext.getColor(R.color.quick_step_track_background_light);
mDarkTrackColor = mContext.getColor(R.color.quick_step_track_background_dark);
@@ -451,8 +391,7 @@
}
private void endQuickScrub(boolean animate) {
- mHandler.removeCallbacks(mLongPressRunnable);
- if (mDraggingActive || mQuickScrubActive) {
+ if (mQuickScrubActive) {
animateEnd();
try {
mOverviewEventSender.getProxy().onQuickScrubEnd();
@@ -466,7 +405,6 @@
if (mHomeButtonView != null && !animate) {
mQuickScrubEndAnimator.end();
}
- mDraggingActive = false;
}
private boolean proxyMotionEvents(MotionEvent event) {
@@ -489,11 +427,6 @@
return false;
}
- public void cancelQuickSwitch() {
- mAllowQuickSwitch = false;
- mHandler.removeCallbacks(mLongPressRunnable);
- }
-
private void animateEnd() {
mButtonAnimator.setIntValues((int) mTranslation, 0);
mTrackAnimator.setFloatValues(mTrackAlpha, 0);
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 cfc0cc6..7a6e98d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -148,7 +148,7 @@
private float mNotificationDensity;
// Scrim blanking callbacks
- private Choreographer.FrameCallback mPendingFrameCallback;
+ private Runnable mPendingFrameCallback;
private Runnable mBlankingTransitionRunnable;
private final WakeLock mWakeLock;
@@ -240,7 +240,7 @@
// Cancel blanking transitions that were pending before we requested a new state
if (mPendingFrameCallback != null) {
- Choreographer.getInstance().removeFrameCallback(mPendingFrameCallback);
+ mScrimBehind.removeCallbacks(mPendingFrameCallback);
mPendingFrameCallback = null;
}
if (getHandler().hasCallbacks(mBlankingTransitionRunnable)) {
@@ -278,7 +278,7 @@
// with too many things at this case, in order to not skip the initial frames.
mScrimInFront.postOnAnimationDelayed(this::scheduleUpdate, 16);
mAnimationDelay = StatusBar.FADE_KEYGUARD_START_DELAY;
- } else if (!mDozeParameters.getAlwaysOn() && oldState == ScrimState.AOD
+ } else if ((!mDozeParameters.getAlwaysOn() && oldState == ScrimState.AOD)
|| (mState == ScrimState.AOD && !mDozeParameters.getDisplayNeedsBlanking())) {
// Scheduling a frame isn't enough when:
// • Leaving doze and we need to modify scrim color immediately
@@ -727,7 +727,7 @@
// Notify callback that the screen is completely black and we're
// ready to change the display power mode
- mPendingFrameCallback = frameTimeNanos -> {
+ mPendingFrameCallback = () -> {
if (mCallback != null) {
mCallback.onDisplayBlanked();
mScreenBlankingCallbackCalled = true;
@@ -743,7 +743,7 @@
// Setting power states can happen after we push out the frame. Make sure we
// stay fully opaque until the power state request reaches the lower levels.
- final int delay = mScreenOn ? 16 : 500;
+ final int delay = mScreenOn ? 32 : 500;
if (DEBUG) {
Log.d(TAG, "Fading out scrims with delay: " + delay);
}
@@ -752,9 +752,15 @@
doOnTheNextFrame(mPendingFrameCallback);
}
+ /**
+ * Executes a callback after the frame has hit the display.
+ * @param callback What to run.
+ */
@VisibleForTesting
- protected void doOnTheNextFrame(Choreographer.FrameCallback callback) {
- Choreographer.getInstance().postFrameCallback(callback);
+ protected void doOnTheNextFrame(Runnable callback) {
+ // Just calling View#postOnAnimation isn't enough because the frame might not have reached
+ // the display yet. A timeout is the safest solution.
+ mScrimBehind.postOnAnimationDelayed(callback, 32 /* delayMillis */);
}
@VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index e6a9b46..ddb67df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -130,7 +130,6 @@
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.widget.LockPatternUtils;
@@ -185,12 +184,11 @@
import com.android.systemui.statusbar.BackDropView;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CrossFadeHelper;
-import com.android.systemui.statusbar.DismissView;
import com.android.systemui.statusbar.DragDownHelper;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
+import com.android.systemui.statusbar.FooterView;
import com.android.systemui.statusbar.GestureRecorder;
-import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.KeyboardShortcuts;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationData;
@@ -237,7 +235,6 @@
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
-import com.android.systemui.util.NotificationChannels;
import com.android.systemui.volume.VolumeComponent;
import java.io.FileDescriptor;
@@ -577,7 +574,7 @@
private final LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
protected NotificationIconAreaController mNotificationIconAreaController;
private boolean mReinflateNotificationsOnUserSwitched;
- private boolean mClearAllEnabled;
+ protected boolean mClearAllEnabled;
@Nullable private View mAmbientIndicationContainer;
private SysuiColorExtractor mColorExtractor;
private ScreenLifecycle mScreenLifecycle;
@@ -868,7 +865,7 @@
mVisualStabilityManager.setVisibilityLocationProvider(mStackScroller);
inflateEmptyShadeView();
- inflateDismissView();
+ inflateFooterView();
mBackdrop = mStatusBarWindow.findViewById(R.id.backdrop);
mBackdropFront = mBackdrop.findViewById(R.id.backdrop_front);
@@ -1133,8 +1130,8 @@
protected void reevaluateStyles() {
inflateSignalClusters();
- inflateDismissView();
- updateClearAll();
+ inflateFooterView();
+ updateFooter();
inflateEmptyShadeView();
updateEmptyShadeView();
}
@@ -1186,18 +1183,21 @@
mStackScroller.setEmptyShadeView(mEmptyShadeView);
}
- private void inflateDismissView() {
- if (!mClearAllEnabled || mStackScroller == null) {
+ private void inflateFooterView() {
+ if (mStackScroller == null) {
return;
}
- mDismissView = (DismissView) LayoutInflater.from(mContext).inflate(
- R.layout.status_bar_notification_dismiss_all, mStackScroller, false);
- mDismissView.setOnButtonClickListener(v -> {
+ mFooterView = (FooterView) LayoutInflater.from(mContext).inflate(
+ R.layout.status_bar_notification_footer, mStackScroller, false);
+ mFooterView.setDismissButtonClickListener(v -> {
mMetricsLogger.action(MetricsEvent.ACTION_DISMISS_ALL_NOTES);
clearAllNotifications();
});
- mStackScroller.setDismissView(mDismissView);
+ mFooterView.setManageButtonClickListener(v -> {
+ manageNotifications();
+ });
+ mStackScroller.setFooterView(mFooterView);
}
protected void createUserSwitcher() {
@@ -1211,6 +1211,12 @@
R.layout.super_status_bar, null);
}
+ public void manageNotifications() {
+ Intent intent = new Intent(Settings.ACTION_ALL_APPS_NOTIFICATION_SETTINGS);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent, true, true);
+ }
+
public void clearAllNotifications() {
// animate-swipe all dismissable notifications, then animate the shade closed
@@ -1393,7 +1399,7 @@
mViewHierarchyManager.updateNotificationViews();
updateSpeedBumpIndex();
- updateClearAll();
+ updateFooter();
updateEmptyShadeView();
updateQsExpansionEnabled();
@@ -1457,13 +1463,14 @@
mQSPanel.clickTile(tile);
}
- private void updateClearAll() {
- if (!mClearAllEnabled) {
- return;
- }
- boolean showDismissView = mState != StatusBarState.KEYGUARD
+ @VisibleForTesting
+ protected void updateFooter() {
+ boolean showFooterView = mState != StatusBarState.KEYGUARD
+ && mEntryManager.getNotificationData().getActiveNotifications().size() != 0;
+ boolean showDismissView = mClearAllEnabled && mState != StatusBarState.KEYGUARD
&& hasActiveClearableNotifications();
- mStackScroller.updateDismissView(showDismissView);
+
+ mStackScroller.updateFooterView(showFooterView, showDismissView);
}
/**
@@ -2502,11 +2509,11 @@
public void onAnimationEnded() {
CrossFadeHelper.fadeIn(mNotificationPanel);
}
- }).show();
+ }, mDozing).show();
} else {
// workspace
WirelessChargingAnimation.makeWirelessChargingAnimation(mContext, null,
- batteryLevel, null).show();
+ batteryLevel, null, false).show();
}
}
@@ -4654,9 +4661,12 @@
if (mBouncerShowing) {
// Bouncer needs the front scrim when it's on top of an activity,
- // tapping on a notification or editing QS.
- mScrimController.transitionTo(mIsOccluded || mNotificationPanel.needsScrimming() ?
- ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER);
+ // tapping on a notification, editing QS or being dismissed by
+ // FLAG_DISMISS_KEYGUARD_ACTIVITY.
+ ScrimState state = mIsOccluded || mNotificationPanel.needsScrimming()
+ || mStatusBarKeyguardViewManager.willDismissWithAction() ?
+ ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
+ mScrimController.transitionTo(state);
} else if (mLaunchCameraOnScreenTurningOn || isInLaunchTransition()) {
mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
} else if (mBrightnessMirrorVisible) {
@@ -4935,7 +4945,7 @@
protected RecentsComponent mRecents;
protected NotificationShelf mNotificationShelf;
- protected DismissView mDismissView;
+ protected FooterView mFooterView;
protected EmptyShadeView mEmptyShadeView;
protected AssistManager mAssistManager;
@@ -5408,8 +5418,8 @@
// incremented in the following "changeViewPosition" calls so that its value is correct for
// subsequent calls.
int offsetFromEnd = 1;
- if (mDismissView != null) {
- mStackScroller.changeViewPosition(mDismissView,
+ if (mFooterView != null) {
+ mStackScroller.changeViewPosition(mFooterView,
mStackScroller.getChildCount() - offsetFromEnd++);
}
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 56a7b1b..1a64b00 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -140,11 +140,14 @@
}
private void onPanelExpansionChanged(float expansion, boolean tracking) {
- // We don't want to translate the bounce when the keyguard is occluded, because we're in
- // a FLAG_SHOW_WHEN_LOCKED activity and need to conserve the original animation.
- // We also don't want to show the bouncer when the user quickly taps on the display.
+ // We don't want to translate the bounce when:
+ // • Keyguard is occluded, because we're in a FLAG_SHOW_WHEN_LOCKED activity and need to
+ // conserve the original animation.
+ // • The user quickly taps on the display and we show "swipe up to unlock."
+ // • Keyguard will be dismissed by an action. a.k.a: FLAG_DISMISS_KEYGUARD_ACTIVITY
final boolean noLongerTracking = mLastTracking != tracking && !tracking;
- if (mOccluded || mNotificationPanelView.isUnlockHintRunning()) {
+ if (mOccluded || mNotificationPanelView.isUnlockHintRunning()
+ || mBouncer.willDismissWithAction()) {
mBouncer.setExpansion(0);
} else if (mShowing && mStatusBar.isKeyguardCurrentlySecure() && !mDozing) {
mBouncer.setExpansion(expansion);
@@ -696,6 +699,10 @@
}
}
+ public boolean willDismissWithAction() {
+ return mBouncer.willDismissWithAction();
+ }
+
private static class DismissWithActionRequest {
final OnDismissAction dismissAction;
final Runnable cancelAction;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
index 5159e8d..b76d536 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -109,13 +109,13 @@
@Override
public void setWifiIndicators(final boolean enabled, final IconState statusIcon,
final IconState qsIcon, final boolean activityIn, final boolean activityOut,
- final String description, boolean isTransient) {
+ final String description, boolean isTransient, String secondaryLabel) {
post(new Runnable() {
@Override
public void run() {
for (SignalCallback callback : mSignalCallbacks) {
callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
- description, isTransient);
+ description, isTransient, secondaryLabel);
}
}
});
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 76e3ad7..51fef7d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -47,7 +47,8 @@
public interface SignalCallback {
default void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
- boolean activityIn, boolean activityOut, String description, boolean isTransient) {}
+ boolean activityIn, boolean activityOut, String description, boolean isTransient,
+ String statusLabel) {}
default void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
index c5067a6..7b0b8004 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
@@ -33,13 +33,16 @@
private static final String TAG = "SmartReplyConstants";
private static final String KEY_ENABLED = "enabled";
+ private static final String KEY_REQUIRES_TARGETING_P = "requires_targeting_p";
private static final String KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS =
"max_squeeze_remeasure_attempts";
private final boolean mDefaultEnabled;
+ private final boolean mDefaultRequiresP;
private final int mDefaultMaxSqueezeRemeasureAttempts;
private boolean mEnabled;
+ private boolean mRequiresTargetingP;
private int mMaxSqueezeRemeasureAttempts;
private final Context mContext;
@@ -52,6 +55,8 @@
final Resources resources = mContext.getResources();
mDefaultEnabled = resources.getBoolean(
R.bool.config_smart_replies_in_notifications_enabled);
+ mDefaultRequiresP = resources.getBoolean(
+ R.bool.config_smart_replies_in_notifications_requires_targeting_p);
mDefaultMaxSqueezeRemeasureAttempts = resources.getInteger(
R.integer.config_smart_replies_in_notifications_max_squeeze_remeasure_attempts);
@@ -75,6 +80,7 @@
Log.e(TAG, "Bad smart reply constants", e);
}
mEnabled = mParser.getBoolean(KEY_ENABLED, mDefaultEnabled);
+ mRequiresTargetingP = mParser.getBoolean(KEY_REQUIRES_TARGETING_P, mDefaultRequiresP);
mMaxSqueezeRemeasureAttempts = mParser.getInt(
KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS, mDefaultMaxSqueezeRemeasureAttempts);
}
@@ -86,6 +92,14 @@
}
/**
+ * Returns whether smart replies in notifications should be disabled when the app targets a
+ * version of Android older than P.
+ */
+ public boolean requiresTargetingP() {
+ return mRequiresTargetingP;
+ }
+
+ /**
* Returns the maximum number of times {@link SmartReplyView#onMeasure(int, int)} will try to
* find a better (narrower) line-break for a double-line smart reply button.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
index 0f65421..e5e576d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
@@ -17,12 +17,15 @@
import android.content.Context;
import android.content.Intent;
+import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
+import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -37,7 +40,6 @@
public class WifiSignalController extends
SignalController<WifiSignalController.WifiState, SignalController.IconGroup> {
- private final WifiManager mWifiManager;
private final AsyncChannel mWifiChannel;
private final boolean mHasMobileData;
private final WifiStatusTracker mWifiTracker;
@@ -47,12 +49,17 @@
WifiManager wifiManager) {
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
callbackHandler, networkController);
- mWifiManager = wifiManager;
- mWifiTracker = new WifiStatusTracker(mWifiManager);
+ NetworkScoreManager networkScoreManager =
+ context.getSystemService(NetworkScoreManager.class);
+ ConnectivityManager connectivityManager =
+ context.getSystemService(ConnectivityManager.class);
+ mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager,
+ connectivityManager, this::handleStatusUpdated);
+ mWifiTracker.setListening(true);
mHasMobileData = hasMobileData;
Handler handler = new WifiHandler(Looper.getMainLooper());
mWifiChannel = new AsyncChannel();
- Messenger wifiMessenger = mWifiManager.getWifiServiceMessenger();
+ Messenger wifiMessenger = wifiManager.getWifiServiceMessenger();
if (wifiMessenger != null) {
mWifiChannel.connect(context, handler, wifiMessenger);
}
@@ -68,7 +75,6 @@
WifiIcons.QS_WIFI_NO_NETWORK,
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
);
-
}
@Override
@@ -87,13 +93,12 @@
if (mCurrentState.inetCondition == 0) {
contentDescription += ("," + mContext.getString(R.string.data_connection_no_internet));
}
-
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
contentDescription);
callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon,
ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut,
- wifiDesc, mCurrentState.isTransient);
+ wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel);
}
/**
@@ -106,6 +111,12 @@
mCurrentState.ssid = mWifiTracker.ssid;
mCurrentState.rssi = mWifiTracker.rssi;
mCurrentState.level = mWifiTracker.level;
+ mCurrentState.statusLabel = mWifiTracker.statusLabel;
+ notifyListenersIfNecessary();
+ }
+
+ private void handleStatusUpdated() {
+ mCurrentState.statusLabel = mWifiTracker.statusLabel;
notifyListenersIfNecessary();
}
@@ -150,6 +161,7 @@
static class WifiState extends SignalController.State {
String ssid;
boolean isTransient;
+ String statusLabel;
@Override
public void copyFrom(State s) {
@@ -157,20 +169,26 @@
WifiState state = (WifiState) s;
ssid = state.ssid;
isTransient = state.isTransient;
+ statusLabel = state.statusLabel;
}
@Override
protected void toString(StringBuilder builder) {
super.toString(builder);
- builder.append(',').append("ssid=").append(ssid);
- builder.append(',').append("isTransient=").append(isTransient);
+ builder.append(",ssid=").append(ssid)
+ .append(",isTransient=").append(isTransient)
+ .append(",statusLabel=").append(statusLabel);
}
@Override
public boolean equals(Object o) {
- return super.equals(o)
- && Objects.equals(((WifiState) o).ssid, ssid)
- && (((WifiState) o).isTransient == isTransient);
+ if (!super.equals(o)) {
+ return false;
+ }
+ WifiState other = (WifiState) o;
+ return Objects.equals(other.ssid, ssid)
+ && other.isTransient == isTransient
+ && TextUtils.equals(other.statusLabel, statusLabel);
}
}
}
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 dc94203..8f6fa49 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -16,7 +16,8 @@
package com.android.systemui.statusbar.stack;
-import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters;
+import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator
+ .ExpandAnimationParameters;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -43,6 +44,7 @@
import android.service.notification.StatusBarNotification;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
+import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.util.Log;
@@ -77,10 +79,10 @@
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
import com.android.systemui.statusbar.ActivatableNotificationView;
-import com.android.systemui.statusbar.DismissView;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
+import com.android.systemui.statusbar.FooterView;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationGuts;
import com.android.systemui.statusbar.NotificationListContainer;
@@ -99,8 +101,6 @@
import com.android.systemui.statusbar.policy.HeadsUpUtil;
import com.android.systemui.statusbar.policy.ScrollAdapter;
-import android.support.v4.graphics.ColorUtils;
-
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -109,7 +109,6 @@
import java.util.HashSet;
import java.util.List;
import java.util.function.BiConsumer;
-import java.util.function.Consumer;
/**
* A layout which handles a dynamic amount of notifications and presents them in a scrollable stack.
@@ -226,7 +225,7 @@
private boolean mExpandingNotification;
private boolean mExpandedInThisMotion;
protected boolean mScrollingEnabled;
- protected DismissView mDismissView;
+ protected FooterView mFooterView;
protected EmptyShadeView mEmptyShadeView;
private boolean mDismissAllInProgress;
private boolean mFadeNotificationsOnDismiss;
@@ -3838,13 +3837,13 @@
Context context = new ContextThemeWrapper(mContext,
lightTheme ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI);
final int textColor = Utils.getColorAttr(context, R.attr.wallpaperTextColor);
- mDismissView.setTextColor(textColor);
+ mFooterView.setTextColor(textColor);
mEmptyShadeView.setTextColor(textColor);
}
public void goToFullShade(long delay) {
- if (mDismissView != null) {
- mDismissView.setInvisible();
+ if (mFooterView != null) {
+ mFooterView.setInvisible();
}
mEmptyShadeView.setInvisible();
mGoToFullShadeNeedsAnimation = true;
@@ -3967,14 +3966,14 @@
return -1;
}
- public void setDismissView(@NonNull DismissView dismissView) {
+ public void setFooterView(@NonNull FooterView footerView) {
int index = -1;
- if (mDismissView != null) {
- index = indexOfChild(mDismissView);
- removeView(mDismissView);
+ if (mFooterView != null) {
+ index = indexOfChild(mFooterView);
+ removeView(mFooterView);
}
- mDismissView = dismissView;
- addView(mDismissView, index);
+ mFooterView = footerView;
+ addView(mFooterView, index);
}
public void setEmptyShadeView(EmptyShadeView emptyShadeView) {
@@ -3992,77 +3991,64 @@
int newVisibility = visible ? VISIBLE : GONE;
if (oldVisibility != newVisibility) {
if (newVisibility != GONE) {
- if (mEmptyShadeView.willBeGone()) {
- mEmptyShadeView.cancelAnimation();
- } else {
- mEmptyShadeView.setInvisible();
- }
if (mStatusBar.areNotificationsHidden()) {
mEmptyShadeView.setText(R.string.dnd_suppressing_shade_text);
} else {
mEmptyShadeView.setText(R.string.empty_shade_text);
}
- mEmptyShadeView.setVisibility(newVisibility);
- mEmptyShadeView.setWillBeGone(false);
- updateContentHeight();
- notifyHeightChangeListener(mEmptyShadeView);
+ showFooterView(mEmptyShadeView);
} else {
- Runnable onFinishedRunnable = new Runnable() {
- @Override
- public void run() {
- mEmptyShadeView.setVisibility(GONE);
- mEmptyShadeView.setWillBeGone(false);
- updateContentHeight();
- notifyHeightChangeListener(mEmptyShadeView);
- }
- };
- if (mAnimationsEnabled && mIsExpanded) {
- mEmptyShadeView.setWillBeGone(true);
- mEmptyShadeView.performVisibilityAnimation(false, onFinishedRunnable);
- } else {
- mEmptyShadeView.setInvisible();
- onFinishedRunnable.run();
- }
+ hideFooterView(mEmptyShadeView, true);
}
}
}
- public void updateDismissView(boolean visible) {
- if (mDismissView == null) {
+ public void updateFooterView(boolean visible, boolean showDismissView) {
+ if (mFooterView == null) {
return;
}
-
- int oldVisibility = mDismissView.willBeGone() ? GONE : mDismissView.getVisibility();
+ int oldVisibility = mFooterView.willBeGone() ? GONE : mFooterView.getVisibility();
int newVisibility = visible ? VISIBLE : GONE;
if (oldVisibility != newVisibility) {
if (newVisibility != GONE) {
- if (mDismissView.willBeGone()) {
- mDismissView.cancelAnimation();
- } else {
- mDismissView.setInvisible();
- }
- mDismissView.setVisibility(newVisibility);
- mDismissView.setWillBeGone(false);
- updateContentHeight();
- notifyHeightChangeListener(mDismissView);
+ showFooterView(mFooterView);
} else {
- Runnable dimissHideFinishRunnable = new Runnable() {
- @Override
- public void run() {
- mDismissView.setVisibility(GONE);
- mDismissView.setWillBeGone(false);
- updateContentHeight();
- notifyHeightChangeListener(mDismissView);
- }
- };
- if (mDismissView.isButtonVisible() && mIsExpanded && mAnimationsEnabled) {
- mDismissView.setWillBeGone(true);
- mDismissView.performVisibilityAnimation(false, dimissHideFinishRunnable);
- } else {
- dimissHideFinishRunnable.run();
- }
+ hideFooterView(mFooterView, mFooterView.isButtonVisible());
}
}
+ if (mFooterView.isSecondaryVisible() != showDismissView) {
+ mFooterView.performSecondaryVisibilityAnimation(showDismissView);
+ }
+ }
+
+ private void showFooterView(StackScrollerDecorView footerView) {
+ if (footerView.willBeGone()) {
+ footerView.cancelAnimation();
+ } else {
+ footerView.setInvisible();
+ }
+ footerView.setVisibility(VISIBLE);
+ footerView.setWillBeGone(false);
+ updateContentHeight();
+ notifyHeightChangeListener(footerView);
+ }
+
+ private void hideFooterView(StackScrollerDecorView footerView, boolean isButtonVisible) {
+ Runnable onHideFinishRunnable = new Runnable() {
+ @Override
+ public void run() {
+ footerView.setVisibility(GONE);
+ footerView.setWillBeGone(false);
+ updateContentHeight();
+ notifyHeightChangeListener(footerView);
+ }
+ };
+ if (isButtonVisible && mIsExpanded && mAnimationsEnabled) {
+ footerView.setWillBeGone(true);
+ footerView.performVisibilityAnimation(false, onHideFinishRunnable);
+ } else {
+ onHideFinishRunnable.run();
+ }
}
public void setDismissAllInProgress(boolean dismissAllInProgress) {
@@ -4088,18 +4074,18 @@
}
}
- public boolean isDismissViewNotGone() {
- return mDismissView != null
- && mDismissView.getVisibility() != View.GONE
- && !mDismissView.willBeGone();
+ public boolean isFooterViewNotGone() {
+ return mFooterView != null
+ && mFooterView.getVisibility() != View.GONE
+ && !mFooterView.willBeGone();
}
- public boolean isDismissViewVisible() {
- return mDismissView != null && mDismissView.isVisible();
+ public boolean isFooterViewVisible() {
+ return mFooterView != null && mFooterView.isVisible();
}
- public int getDismissViewHeight() {
- return mDismissView == null ? 0 : mDismissView.getHeight() + mPaddingBetweenElements;
+ public int getFooterViewHeight() {
+ return mFooterView == null ? 0 : mFooterView.getHeight() + mPaddingBetweenElements;
}
public int getEmptyShadeViewHeight() {
@@ -4155,8 +4141,8 @@
}
boolean belowChild = touchY > childTop + child.getActualHeight()
- child.getClipBottomAmount();
- if (child == mDismissView) {
- if(!belowChild && !mDismissView.isOnEmptySpace(touchX - mDismissView.getX(),
+ if (child == mFooterView) {
+ if(!belowChild && !mFooterView.isOnEmptySpace(touchX - mFooterView.getX(),
touchY - childTop)) {
// We clicked on the dismiss button
return false;
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 7c8e0fc..a8d2d98 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -22,10 +22,10 @@
import android.view.View;
import android.view.ViewGroup;
import com.android.systemui.R;
-import com.android.systemui.statusbar.DismissView;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
+import com.android.systemui.statusbar.FooterView;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.notification.NotificationUtils;
@@ -390,7 +390,7 @@
int paddingAfterChild = getPaddingAfterChild(algorithmState, child);
int childHeight = getMaxAllowedChildHeight(child);
childViewState.yTranslation = currentYPosition;
- boolean isDismissView = child instanceof DismissView;
+ boolean isFooterView = child instanceof FooterView;
boolean isEmptyShadeView = child instanceof EmptyShadeView;
childViewState.location = ExpandableViewState.LOCATION_MAIN_AREA;
@@ -404,7 +404,7 @@
float end = childViewState.yTranslation + childViewState.height + inset;
childViewState.headsUpIsVisible = end < ambientState.getMaxHeadsUpTranslation();
}
- if (isDismissView) {
+ if (isFooterView) {
childViewState.yTranslation = Math.min(childViewState.yTranslation,
ambientState.getInnerHeight() - childHeight);
} else if (isEmptyShadeView) {
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewTest.java
new file mode 100644
index 0000000..3f85c9d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.keyguard;
+
+import static org.mockito.Mockito.mock;
+
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class KeyguardHostViewTest extends SysuiTestCase {
+
+ private KeyguardHostView mKeyguardHostView;
+
+ @Before
+ public void setup() {
+ mKeyguardHostView = new KeyguardHostView(getContext());
+ }
+
+ @Test
+ public void testHasDismissActions() {
+ Assert.assertFalse("Action not set yet", mKeyguardHostView.hasDismissActions());
+ mKeyguardHostView.setOnDismissAction(mock(KeyguardHostView.OnDismissAction.class),
+ null /* cancelAction */);
+ Assert.assertTrue("Action should exist", mKeyguardHostView.hasDismissActions());
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
index 5ae107a..f63d236 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
@@ -15,71 +15,87 @@
package com.android.systemui.qs.customize;
import static junit.framework.Assert.assertEquals;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static junit.framework.Assert.assertTrue;
-import com.android.systemui.Dependency;
+import static org.junit.Assert.assertFalse;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.qs.QSTile;
-import com.android.systemui.plugins.qs.QSTile.State;
-import com.android.systemui.qs.QSTileHost;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import com.android.systemui.Dependency;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.qs.QSTileHost;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
-import android.os.Message;
-import android.test.suitebuilder.annotation.SmallTest;
+import java.util.ArrayList;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
public class TileQueryHelperTest extends SysuiTestCase {
+ @Mock private TileQueryHelper.TileStateListener mListener;
+ @Mock private QSTileHost mQSTileHost;
+
private TestableLooper mBGLooper;
- private Runnable mLastCallback;
+
+ private TileQueryHelper mTileQueryHelper;
@Before
public void setup() {
+ MockitoAnnotations.initMocks(this);
mBGLooper = TestableLooper.get(this);
mDependency.injectTestDependency(Dependency.BG_LOOPER, mBGLooper.getLooper());
+ mTileQueryHelper = new TileQueryHelper(mContext, mListener);
}
@Test
- public void testCompletionCalled() {
- QSTileHost mockHost = mock(QSTileHost.class);
- TileAdapter mockAdapter = mock(TileAdapter.class);
- Runnable mockCompletion = mock(Runnable.class);
- new TileQueryHelper(mContext, mockHost, mockAdapter, mockCompletion);
- mBGLooper.processAllMessages();
- verify(mockCompletion).run();
+ public void testIsFinished_falseBeforeQuerying() {
+ assertFalse(mTileQueryHelper.isFinished());
}
@Test
- public void testCompletionCalledAfterTilesFetched() {
- QSTile mockTile = mock(QSTile.class);
- State mockState = mock(State.class);
- when(mockState.copy()).thenReturn(mockState);
- when(mockTile.getState()).thenReturn(mockState);
- when(mockTile.isAvailable()).thenReturn(true);
+ public void testIsFinished_trueAfterQuerying() {
+ mTileQueryHelper.queryTiles(mQSTileHost);
- QSTileHost mockHost = mock(QSTileHost.class);
- when(mockHost.createTile(any())).thenReturn(mockTile);
-
- mBGLooper.setMessageHandler((Message m) -> {
- mLastCallback = m.getCallback();
- return true;
- });
- TileAdapter mockAdapter = mock(TileAdapter.class);
- Runnable mockCompletion = mock(Runnable.class);
- new TileQueryHelper(mContext, mockHost, mockAdapter, mockCompletion);
-
- // Verify that the last thing in the queue was our callback
mBGLooper.processAllMessages();
- assertEquals(mockCompletion, mLastCallback);
+ waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER));
+
+ assertTrue(mTileQueryHelper.isFinished());
+ }
+
+ @Test
+ public void testQueryTiles_callsListenerTwice() {
+ mTileQueryHelper.queryTiles(mQSTileHost);
+
+ mBGLooper.processAllMessages();
+ waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER));
+
+ verify(mListener, times(2)).onTilesChanged(any());
+ }
+
+ @Test
+ public void testQueryTiles_isFinishedFalseOnListenerCalls_thenTrueAfterCompletion() {
+ doAnswer(invocation -> {
+ assertFalse(mTileQueryHelper.isFinished());
+ return null;
+ }).when(mListener).onTilesChanged(any());
+
+ mTileQueryHelper.queryTiles(mQSTileHost);
+
+ mBGLooper.processAllMessages();
+ waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER));
+
+ assertTrue(mTileQueryHelper.isFinished());
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java
new file mode 100644
index 0000000..96b0255
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.graphics.drawable.Icon;
+import android.os.UserHandle;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.android.internal.statusbar.StatusBarIcon;
+import com.android.internal.util.NotificationColorUtil;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class FooterViewTest extends SysuiTestCase {
+
+ FooterView mView;
+
+ @Before
+ public void setUp() {
+ mView = (FooterView) LayoutInflater.from(mContext).inflate(
+ R.layout.status_bar_notification_footer, null, false);
+ mView.setDuration(0);
+ }
+
+ @Test
+ public void testViewsNotNull() {
+ assertNotNull(mView.findContentView());
+ assertNotNull(mView.findSecondaryView());
+ }
+
+ @Test
+ public void setDismissOnClick() {
+ mView.setDismissButtonClickListener(mock(View.OnClickListener.class));
+ assertTrue(mView.findSecondaryView().hasOnClickListeners());
+ }
+
+ @Test
+ public void setManageOnClick() {
+ mView.setManageButtonClickListener(mock(View.OnClickListener.class));
+ assertTrue(mView.findViewById(R.id.manage_text).hasOnClickListeners());
+ }
+
+ @Test
+ public void testPerformVisibilityAnimation() {
+ mView.setInvisible();
+ assertFalse(mView.isVisible());
+
+ Runnable test = new Runnable() {
+ @Override
+ public void run() {
+ assertEquals(1.0f, mView.findContentView().getAlpha());
+ assertEquals(0.0f, mView.findSecondaryView().getAlpha());
+ assertTrue(mView.isVisible());
+ }
+ };
+ mView.performVisibilityAnimation(true, test);
+ }
+
+ @Test
+ public void testPerformSecondaryVisibilityAnimation() {
+ mView.setInvisible();
+ assertFalse(mView.isSecondaryVisible());
+
+ Runnable test = new Runnable() {
+ @Override
+ public void run() {
+ assertEquals(0.0f, mView.findContentView().getAlpha());
+ assertEquals(1.0f, mView.findSecondaryView().getAlpha());
+ assertTrue(mView.isSecondaryVisible());
+ }
+ };
+ mView.performSecondaryVisibilityAnimation(true, test);
+ }
+}
+
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index a37947d..67453d5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -22,6 +22,7 @@
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
@@ -307,4 +308,12 @@
mBouncer.isSecure(), mode != KeyguardSecurityModel.SecurityMode.None);
}
}
+
+ @Test
+ public void testWillDismissWithAction() {
+ mBouncer.ensureView();
+ Assert.assertFalse("Action not set yet", mBouncer.willDismissWithAction());
+ when(mKeyguardHostView.hasDismissActions()).thenReturn(true);
+ Assert.assertTrue("Action should exist", mBouncer.willDismissWithAction());
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 45845fc..7743c6b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -39,10 +39,8 @@
import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
-import android.view.Choreographer;
import android.view.View;
-import com.android.internal.util.Preconditions;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.ScrimView;
@@ -557,8 +555,8 @@
* @param callback What to execute.
*/
@Override
- protected void doOnTheNextFrame(Choreographer.FrameCallback callback) {
- callback.doFrame(0);
+ protected void doOnTheNextFrame(Runnable callback) {
+ callback.run();
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index f13fa4e..f81ffd8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -18,7 +18,9 @@
import static android.app.NotificationManager.IMPORTANCE_HIGH;
+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 static junit.framework.TestCase.fail;
@@ -55,6 +57,8 @@
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.SparseArray;
+import android.view.Gravity;
+import android.view.View;
import android.view.ViewGroup.LayoutParams;
import com.android.internal.logging.MetricsLogger;
@@ -65,13 +69,15 @@
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.UiOffloadThread;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.statusbar.ActivatableNotificationView;
import com.android.systemui.statusbar.AppOpsListener;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
+import com.android.systemui.statusbar.FooterView;
+import com.android.systemui.statusbar.FooterViewButton;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationData.Entry;
@@ -88,7 +94,6 @@
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
-import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
@@ -97,12 +102,14 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.function.Predicate;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -558,6 +565,68 @@
verify(mScrimController).setKeyguardOccluded(eq(false));
}
+ @Test
+ public void testInflateFooterView() {
+ mStatusBar.reevaluateStyles();
+ ArgumentCaptor<FooterView> captor = ArgumentCaptor.forClass(FooterView.class);
+ verify(mStackScroller).setFooterView(captor.capture());
+
+ assertNotNull(captor.getValue().findViewById(R.id.manage_text).hasOnClickListeners());
+ assertNotNull(captor.getValue().findViewById(R.id.dismiss_text).hasOnClickListeners());
+ }
+
+ @Test
+ public void testUpdateFooter_noNotifications() {
+ mStatusBar.setBarStateForTest(StatusBarState.SHADE);
+ assertEquals(0, mEntryManager.getNotificationData().getActiveNotifications().size());
+
+ mStatusBar.updateFooter();
+ verify(mStackScroller).updateFooterView(false, false);
+ }
+
+ @Test
+ public void testUpdateFooter_oneClearableNotification() {
+ mStatusBar.setBarStateForTest(StatusBarState.SHADE);
+ ArrayList<Entry> entries = new ArrayList<>();
+ entries.add(mock(Entry.class));
+ when(mNotificationData.getActiveNotifications()).thenReturn(entries);
+
+ ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
+ when(row.canViewBeDismissed()).thenReturn(true);
+ when(mStackScroller.getChildCount()).thenReturn(1);
+ when(mStackScroller.getChildAt(anyInt())).thenReturn(row);
+
+ mStatusBar.updateFooter();
+ verify(mStackScroller).updateFooterView(true, true);
+ }
+
+ @Test
+ public void testUpdateFooter_oneNonClearableNotification() {
+ mStatusBar.setBarStateForTest(StatusBarState.SHADE);
+ ArrayList<Entry> entries = new ArrayList<>();
+ entries.add(mock(Entry.class));
+ when(mNotificationData.getActiveNotifications()).thenReturn(entries);
+
+ mStatusBar.updateFooter();
+ verify(mStackScroller).updateFooterView(true, false);
+ }
+
+ @Test
+ public void testUpdateFooter_atEnd() {
+ // add footer
+ mStatusBar.reevaluateStyles();
+
+ // add notification
+ ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
+ when(row.isClearable()).thenReturn(true);
+ mStackScroller.addContainerView(row);
+
+ mStatusBar.onUpdateRowStates();
+
+ // move footer to end
+ verify(mStackScroller).changeViewPosition(any(FooterView.class), eq(-1 /* end */));
+ }
+
static class TestableStatusBar extends StatusBar {
public TestableStatusBar(StatusBarKeyguardViewManager man,
UnlockMethodCache unlock, KeyguardIndicationController key,
@@ -587,6 +656,7 @@
mScrimController = scrimController;
mFingerprintUnlockController = fingerprintUnlockController;
mActivityLaunchAnimator = launchAnimator;
+ mClearAllEnabled = true;
}
private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
index 2afb48c..ed0f9ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
@@ -18,7 +18,6 @@
import android.os.HandlerThread;
import android.support.test.runner.AndroidJUnit4;
import android.telephony.SubscriptionInfo;
-import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -81,7 +80,8 @@
boolean in = true;
boolean out = true;
String description = "Test";
- mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true);
+ String secondaryLabel = "Secondary label";
+ mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true, secondaryLabel);
waitForCallbacks();
ArgumentCaptor<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class);
@@ -91,9 +91,10 @@
ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class);
+ ArgumentCaptor<String> secondary = ArgumentCaptor.forClass(String.class);
Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(),
statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(),
- descArg.capture(), isTransient.capture());
+ descArg.capture(), isTransient.capture(), secondary.capture());
assertEquals(enabled, (boolean) enableArg.getValue());
assertEquals(status, statusArg.getValue());
assertEquals(qs, qsArg.getValue());
@@ -101,6 +102,7 @@
assertEquals(out, (boolean) outArg.getValue());
assertEquals(description, descArg.getValue());
assertTrue(isTransient.getValue());
+ assertEquals(secondaryLabel, secondary.getValue());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java
index fc3de84..d30e777 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java
@@ -5,8 +5,6 @@
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
-import android.net.wifi.WifiSsid;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -20,6 +18,7 @@
import static junit.framework.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.when;
@@ -39,6 +38,7 @@
verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK);
setWifiState(true, testSsid);
+ setWifiLevel(0);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]);
for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
@@ -160,7 +160,8 @@
ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
- anyBoolean(), any(), any(), inArg.capture(), outArg.capture(), any(), anyBoolean());
+ anyBoolean(), any(), any(), inArg.capture(), outArg.capture(), any(), anyBoolean(),
+ any());
assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue());
assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue());
}
@@ -173,7 +174,7 @@
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
enabledArg.capture(), any(), iconArg.capture(), anyBoolean(),
- anyBoolean(), descArg.capture(), anyBoolean());
+ anyBoolean(), descArg.capture(), anyBoolean(), any());
IconState iconState = iconArg.getValue();
assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue());
assertEquals("WiFi connected, in quick settings", connected, iconState.visible);
@@ -186,7 +187,7 @@
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
anyBoolean(), iconArg.capture(), any(), anyBoolean(), anyBoolean(),
- any(), anyBoolean());
+ any(), anyBoolean(), any());
IconState iconState = iconArg.getValue();
assertEquals("WiFi visible, in status bar", visible, iconState.visible);
assertEquals("WiFi signal, in status bar", icon, iconState.icon);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
index 32a7cb9..aca7c9c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
@@ -74,6 +74,17 @@
}
@Test
+ public void testRequiresTargetingPConfig() {
+ overrideSetting("enabled=true,requires_targeting_p=false");
+ triggerConstantsOnChange();
+ assertEquals(false, mConstants.requiresTargetingP());
+
+ overrideSetting("enabled=true");
+ triggerConstantsOnChange();
+ assertEquals(true, mConstants.requiresTargetingP());
+ }
+
+ @Test
public void testGetMaxSqueezeRemeasureAttemptsWithNoConfig() {
assertTrue(mConstants.isEnabled());
assertEquals(7, mConstants.getMaxSqueezeRemeasureAttempts());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java
index 6fa91ff..42069e2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java
@@ -23,10 +23,12 @@
import android.support.test.annotation.UiThreadTest;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import android.view.View;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.EmptyShadeView;
+import com.android.systemui.statusbar.FooterView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -94,4 +96,30 @@
verify(view).setText(R.string.empty_shade_text);
}
+
+ @Test
+ public void manageNotifications_visible() {
+ FooterView view = mock(FooterView.class);
+ mStackScroller.setFooterView(view);
+ when(view.willBeGone()).thenReturn(true);
+ when(view.isSecondaryVisible()).thenReturn(true);
+
+ mStackScroller.updateFooterView(true, false);
+
+ verify(view).setVisibility(View.VISIBLE);
+ verify(view).performSecondaryVisibilityAnimation(false);
+ }
+
+ @Test
+ public void clearAll_visible() {
+ FooterView view = mock(FooterView.class);
+ mStackScroller.setFooterView(view);
+ when(view.willBeGone()).thenReturn(true);
+ when(view.isSecondaryVisible()).thenReturn(false);
+
+ mStackScroller.updateFooterView(true, true);
+
+ verify(view).setVisibility(View.VISIBLE);
+ verify(view).performSecondaryVisibilityAnimation(true);
+ }
}
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml
new file mode 100644
index 0000000..3eca94e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hoekskermuitsnede"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml
new file mode 100644
index 0000000..abb4247
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Künc ekran kəsimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml
new file mode 100644
index 0000000..edd9e65
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Зрабіць выраз у кутку экрана"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml
new file mode 100644
index 0000000..681a9b9
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ъглов прорез на екрана"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml
new file mode 100644
index 0000000..194949d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"কর্নার ডিসপ্লে কাট-আউট"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml
new file mode 100644
index 0000000..e79efe6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Urez ekrana u uglu"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml
new file mode 100644
index 0000000..627ef24
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Retall de l\'extrem de la pantalla"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml
new file mode 100644
index 0000000..ec27419
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Udskæring i hjørnet af skærmen"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml
new file mode 100644
index 0000000..da7c237
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Display-Ausschnitt in der Ecke"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml
new file mode 100644
index 0000000..460a8b6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Διακοπή γωνιακής οθόνης"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..a4d8e64
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de la esquina de la pantalla"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml
new file mode 100644
index 0000000..a4d8e64
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de la esquina de la pantalla"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml
new file mode 100644
index 0000000..1dec970
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ekraani nurga väljalõige"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml
new file mode 100644
index 0000000..a82e8ea
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Pantailaren izkinako mozketa"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml
new file mode 100644
index 0000000..4803b54
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Aukko näytön kulmassa"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml
new file mode 100644
index 0000000..ff341a2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Encoche d\'angle pour écran"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml
new file mode 100644
index 0000000..7838d69
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de pantalla na esquina"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml
new file mode 100644
index 0000000..0680f7f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ખૂણાનું ડિસ્પ્લે કટઆઉટ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml
new file mode 100644
index 0000000..01b8d69
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कॉर्नर डिसप्ले कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml
new file mode 100644
index 0000000..f8b2f79
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Obrezana slika za kut zaslona"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml
new file mode 100644
index 0000000..7658edc
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Sarokban található képernyőkivágás"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml
new file mode 100644
index 0000000..78247f6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Potongan tampilan sudut"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml
new file mode 100644
index 0000000..3eadd5f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ritaglio display angolo"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml
new file mode 100644
index 0000000..fee2d70
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"画面隅のディスプレイ カットアウト"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml
new file mode 100644
index 0000000..6cea242
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ეკრანის კუთხის ამოჭრა"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml
new file mode 100644
index 0000000..a2a6948
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Экран бұрышындағы ойық"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml
new file mode 100644
index 0000000..bbf23c6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ស្នាមចោះផ្ទាំងអេក្រង់នៅជ្រុង"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..7b9879a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ಮೂಲೆಯ ಪ್ರದರ್ಶನ ಕಟೌಟ್"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml
new file mode 100644
index 0000000..8fafcfa
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"모서리 디스플레이 컷아웃"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml
new file mode 100644
index 0000000..4d8c946
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Бурчтагы дисплей кесиндиси"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml
new file mode 100644
index 0000000..257839d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ແຜ່ນສະແດງມຸມ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml
new file mode 100644
index 0000000..2d0babf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Исечок на аголот на екранот"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml
new file mode 100644
index 0000000..6adb3ec
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"കോർണർ ഡിസ്പ്ലേ കട്ടൗട്ട്"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml
new file mode 100644
index 0000000..7998f15
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Булангийн дэлгэцийг таслах"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml
new file mode 100644
index 0000000..a5d2133
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कॉर्नर डिस्प्ले कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml
new file mode 100644
index 0000000..9fccad6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Potongan paparan penjuru"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml
new file mode 100644
index 0000000..731668f
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hjørneskjermutklipp"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..e024d2a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कुनाको प्रदर्शनसम्बन्धी कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml
new file mode 100644
index 0000000..149041e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hoekdisplay-cutout"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..274e791
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ਕਿਨਾਰਿਆਂ ਤੱਕ ਜੁੜੀ ਡਿਸਪਲੇ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml
new file mode 100644
index 0000000..6768407
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Wycięcie wyświetlacza z narożnikami"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..ed7e2b5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corte de tela de canto"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e4ed794
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ecrã com recorte nos cantos"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml
new file mode 100644
index 0000000..ed7e2b5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corte de tela de canto"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml
new file mode 100644
index 0000000..eebfe6a
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Decupare ecran pe colț"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml
new file mode 100644
index 0000000..ae833f2
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"කොණ් තිර කට්අවුට්"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml
new file mode 100644
index 0000000..5b40d71
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Rohový výrez obrazovky"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml
new file mode 100644
index 0000000..52c5aa1
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Kotni izrez prikaza"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml
new file mode 100644
index 0000000..cb39653
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Prerje e ekranit në qoshe"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml
new file mode 100644
index 0000000..ccc72fd
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Urklipp av skärmens hörn"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml
new file mode 100644
index 0000000..6066426
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Mwonekano wenye pengo pembeni"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml
new file mode 100644
index 0000000..a0a30cf
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"மூலை கட்அவுட் காட்சி"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..6c10a13
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"మూల డిస్ప్లే కట్అవుట్"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml
new file mode 100644
index 0000000..57f49d4
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"คัตเอาท์ดิสเพลย์แบบมุม"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml
new file mode 100644
index 0000000..a065978
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Köşe ekran kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml
new file mode 100644
index 0000000..0b6a774
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Відключення кутового дисплея"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml
new file mode 100644
index 0000000..2aeecc6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"کارنر ڈسپلے کٹ آؤٹ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml
new file mode 100644
index 0000000..249ff2e
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Burchak ekran kesimi"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml
new file mode 100644
index 0000000..a217bf8
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Cắt hiển thị ở góc"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..5fcfbc3
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"邊角顯示屏凹口"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..e6c75b5
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"邊角螢幕凹口"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml
new file mode 100644
index 0000000..961d036
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ukusikwa kwekhona lesiboniso"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml
new file mode 100644
index 0000000..d1eee2f3
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ডবল ডিসপ্লে কাট-আউট"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml
index 1600d00..c73fa2d 100644
--- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Doppelter Ausschnitt im Display"</string>
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Doppelter Display-Ausschnitt"</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml
new file mode 100644
index 0000000..43e67a0
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ડબલ ડિસ્પ્લે કટઆઉટ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml
new file mode 100644
index 0000000..8412c14
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"डबल डिसप्ले कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml
new file mode 100644
index 0000000..02500db
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ಡಬಲ್ ಡಿಸ್ಪ್ಲೇ ಕಟೌಟ್"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml
new file mode 100644
index 0000000..9aff47d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ഇരട്ട ഡിസ്പ്ലേ കട്ടൗട്ട്"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml
new file mode 100644
index 0000000..e2065ac
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"दुहेरी डिस्प्ले कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml
index 14f66fa..0744f12 100644
--- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု"</string>
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"မျက်နှာပြင် အထက်အောက် ဖြတ်ညှပ်ပြသမှု"</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml
new file mode 100644
index 0000000..49f82b9
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"दोहोरो प्रदर्शनसम्बन्धी कटआउट"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml
new file mode 100644
index 0000000..da57fde
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ਡਿਸਪਲੇ ਦੀ ਦੋਹਰੀ ਵੰਡ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml
new file mode 100644
index 0000000..b3c19b6
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"இரட்டை கட்அவுட் காட்சி"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml
new file mode 100644
index 0000000..b8573db
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"డబుల్ డిస్ప్లే కట్అవుట్"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml
index 98884c5..8fdd693 100644
--- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"คัตเอาท์ดิสเพลย์คู่"</string>
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ตัดหน้าจอสองด้าน"</string>
</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml
new file mode 100644
index 0000000..3c9666d
--- /dev/null
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"دوہرا ڈسپلے کٹ آؤٹ"</string>
+</resources>
diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml
index 307ba1f..9e74192 100644
--- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml
+++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ikkitali ekran kesimi"</string>
+ <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ekran kesimini ikki marta kattalashtirish"</string>
</resources>
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 9417f04..c6878d7 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -5547,6 +5547,21 @@
// OS: P
ACTION_ANOMALY_TRIGGERED = 1367;
+ // ACTION: Settings > Condition > Device muted
+ // CATEGORY: SETTINGS
+ // OS: P
+ SETTINGS_CONDITION_DEVICE_MUTED = 1368;
+
+ // ACTION: Settings > Condition > Device vibrate
+ // CATEGORY: SETTINGS
+ // OS: P
+ SETTINGS_CONDITION_DEVICE_VIBRATE = 1369;
+
+ // OPEN: Settings > Connected devices > previously connected devices
+ // CATEGORY: SETTINGS
+ // OS: P
+ PREVIOUSLY_CONNECTED_DEVICES = 1370;
+
// ---- End P Constants, all P constants go above this line ----
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto
index 39d0070..9c74188 100644
--- a/proto/src/wifi.proto
+++ b/proto/src/wifi.proto
@@ -382,6 +382,9 @@
// WifiWake statistics
optional WifiWakeStats wifi_wake_stats = 94;
+
+ // Histogram counting instances of scans with N many 802.11mc (RTT) supporting APs
+ repeated NumConnectableNetworksBucket observed_80211mc_supporting_aps_in_scan_histogram = 95;
}
// Information that gets logged for every WiFi connection.
diff --git a/rs/java/android/renderscript/ScriptIntrinsic.java b/rs/java/android/renderscript/ScriptIntrinsic.java
index 4edce84..61211a2 100644
--- a/rs/java/android/renderscript/ScriptIntrinsic.java
+++ b/rs/java/android/renderscript/ScriptIntrinsic.java
@@ -17,9 +17,9 @@
package android.renderscript;
/**
- * Base class for all Intrinsic scripts. An intrinsic a script
- * which implements a pre-defined function. Intrinsics are
- * provided to provide effecient implemtations of common
+ * Base class for all Intrinsic scripts. An intrinsic is a script
+ * that implements a pre-defined function. Intrinsics are
+ * provided to provide efficient implementations of common
* operations.
*
* Not intended for direct use.
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 7bb532e..58f78ec 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -180,9 +180,11 @@
*
* @param structure Assist structure
* @param urlBarIds list of ids; only the first id found will be sanitized.
+ *
+ * @return the node containing the URL bar
*/
@Nullable
- public static void sanitizeUrlBar(@NonNull AssistStructure structure,
+ public static ViewNode sanitizeUrlBar(@NonNull AssistStructure structure,
@NonNull String[] urlBarIds) {
final ViewNode urlBarNode = findViewNode(structure, (node) -> {
return ArrayUtils.contains(urlBarIds, node.getIdEntry());
@@ -191,7 +193,7 @@
final String domain = urlBarNode.getText().toString();
if (domain.isEmpty()) {
if (sDebug) Slog.d(TAG, "sanitizeUrlBar(): empty on " + urlBarNode.getIdEntry());
- return;
+ return null;
}
urlBarNode.setWebDomain(domain);
if (sDebug) {
@@ -199,6 +201,7 @@
+ urlBarNode.getWebDomain());
}
}
+ return urlBarNode;
}
private interface ViewNodeFilter {
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 1e1de35..bcb0bc4 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -146,6 +146,13 @@
/** Whether the app being autofilled is running in compat mode. */
private final boolean mCompatMode;
+ /** Node representing the URL bar on compat mode. */
+ @GuardedBy("mLock")
+ private ViewNode mUrlBar;
+
+ @GuardedBy("mLock")
+ private boolean mSaveOnAllViewsInvisible;
+
@GuardedBy("mLock")
private final ArrayMap<AutofillId, ViewState> mViewStates = new ArrayMap<>();
@@ -280,7 +287,17 @@
Slog.d(TAG, "url_bars in compat mode: " + Arrays.toString(urlBarIds));
}
if (urlBarIds != null) {
- Helper.sanitizeUrlBar(structure, urlBarIds);
+ mUrlBar = Helper.sanitizeUrlBar(structure, urlBarIds);
+ if (mUrlBar != null) {
+ final AutofillId urlBarId = mUrlBar.getAutofillId();
+ if (sDebug) {
+ Slog.d(TAG, "Setting urlBar as id=" + urlBarId + " and domain "
+ + mUrlBar.getWebDomain());
+ }
+ final ViewState viewState = new ViewState(Session.this, urlBarId,
+ Session.this, ViewState.STATE_URL_BAR);
+ mViewStates.put(urlBarId, viewState);
+ }
}
}
structure.sanitizeForParceling(true);
@@ -1878,14 +1895,15 @@
return;
}
if (sVerbose) {
- Slog.v(TAG, "updateLocked(): id=" + id + ", action=" + action + ", flags=" + flags);
+ Slog.v(TAG, "updateLocked(): id=" + id + ", action=" + actionAsString(action)
+ + ", flags=" + flags);
}
ViewState viewState = mViewStates.get(id);
if (viewState == null) {
if (action == ACTION_START_SESSION || action == ACTION_VALUE_CHANGED
|| action == ACTION_VIEW_ENTERED) {
- if (sVerbose) Slog.v(TAG, "Creating viewState for " + id + " on " + action);
+ if (sVerbose) Slog.v(TAG, "Creating viewState for " + id);
boolean isIgnored = isIgnoredLocked(id);
viewState = new ViewState(this, id, this,
isIgnored ? ViewState.STATE_IGNORED : ViewState.STATE_INITIAL);
@@ -1895,11 +1913,11 @@
// detectable, and batch-send them when the session is finished (but that will
// require tracking detectable fields on AutofillManager)
if (isIgnored) {
- if (sDebug) Slog.d(TAG, "updateLocked(): ignoring view " + id);
+ if (sDebug) Slog.d(TAG, "updateLocked(): ignoring view " + viewState);
return;
}
} else {
- if (sVerbose) Slog.v(TAG, "Ignored action " + action + " for " + id);
+ if (sVerbose) Slog.v(TAG, "Ignoring specific action when viewState=null");
return;
}
}
@@ -1913,6 +1931,40 @@
requestNewFillResponseLocked(flags);
break;
case ACTION_VALUE_CHANGED:
+ if (mCompatMode && (viewState.getState() & ViewState.STATE_URL_BAR) != 0) {
+ // Must cancel the session if the value of the URL bar changed
+ final String currentUrl = mUrlBar == null ? null
+ : mUrlBar.getText().toString().trim();
+ if (currentUrl == null) {
+ // Sanity check - shouldn't happen.
+ wtf(null, "URL bar value changed, but current value is null");
+ return;
+ }
+ if (value == null || ! value.isText()) {
+ // Sanity check - shouldn't happen.
+ wtf(null, "URL bar value changed to null or non-text: %s", value);
+ return;
+ }
+ final String newUrl = value.getTextValue().toString();
+ if (newUrl.equals(currentUrl)) {
+ if (sDebug) Slog.d(TAG, "Ignoring change on URL bar as it's the same");
+ return;
+ }
+ if (mSaveOnAllViewsInvisible) {
+ // We cannot cancel the session because it could hinder Save when all views
+ // are finished, as the URL bar changed callback is usually called before
+ // the virtual views become invisible.
+ if (sDebug) {
+ Slog.d(TAG, "Ignoring change on URL because session will finish when "
+ + "views are gone");
+ }
+ return;
+ }
+ if (sDebug) Slog.d(TAG, "Finishing session because URL bar changed");
+ forceRemoveSelfLocked(AutofillManager.STATE_UNKNOWN_COMPAT_MODE);
+ return;
+ }
+
if (value != null && !value.equals(viewState.getCurrentValue())) {
if (value.isEmpty()
&& viewState.getCurrentValue() != null
@@ -1953,6 +2005,12 @@
if (sVerbose && virtualBounds != null) {
Slog.v(TAG, "entered on virtual child " + id + ": " + virtualBounds);
}
+
+ if (mCompatMode && (viewState.getState() & ViewState.STATE_URL_BAR) != 0) {
+ if (sDebug) Slog.d(TAG, "Ignoring VIEW_ENTERED on URL BAR (id=" + id + ")");
+ return;
+ }
+
requestNewFillResponseOnViewEnteredIfNecessaryLocked(id, viewState, flags);
// Remove the UI if the ViewState has changed.
@@ -2068,7 +2126,7 @@
if (response == null) return;
ArraySet<AutofillId> trackedViews = null;
- boolean saveOnAllViewsInvisible = false;
+ mSaveOnAllViewsInvisible = false;
boolean saveOnFinish = true;
final SaveInfo saveInfo = response.getSaveInfo();
final AutofillId saveTriggerId;
@@ -2081,10 +2139,10 @@
if (mCompatMode) {
flags |= SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE;
}
- saveOnAllViewsInvisible = (flags & SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE) != 0;
+ mSaveOnAllViewsInvisible = (flags & SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE) != 0;
// We only need to track views if we want to save once they become invisible.
- if (saveOnAllViewsInvisible) {
+ if (mSaveOnAllViewsInvisible) {
if (trackedViews == null) {
trackedViews = new ArraySet<>();
}
@@ -2129,7 +2187,7 @@
Slog.v(TAG, "updateTrackedIdsLocked(): " + trackedViews + " => " + fillableIds
+ " triggerId: " + saveTriggerId + " saveOnFinish:" + saveOnFinish);
}
- mClient.setTrackedViews(id, toArray(trackedViews), saveOnAllViewsInvisible,
+ mClient.setTrackedViews(id, toArray(trackedViews), mSaveOnAllViewsInvisible,
saveOnFinish, toArray(fillableIds), saveTriggerId);
} catch (RemoteException e) {
Slog.w(TAG, "Cannot set tracked ids", e);
@@ -2421,6 +2479,16 @@
pw.print(prefix); pw.print("mClientState: "); pw.println(
Helper.bundleToString(mClientState));
pw.print(prefix); pw.print("mCompatMode: "); pw.println(mCompatMode);
+ pw.print(prefix); pw.print("mUrlBar: ");
+ if (mUrlBar == null) {
+ pw.println("N/A");
+ } else {
+ pw.print("id="); pw.print(mUrlBar.getAutofillId());
+ pw.print(" domain="); pw.print(mUrlBar.getWebDomain());
+ pw.print(" text="); Helper.printlnRedactedText(pw, mUrlBar.getText());
+ }
+ pw.print(prefix); pw.print("mSaveOnAllViewsInvisible: "); pw.println(
+ mSaveOnAllViewsInvisible);
pw.print(prefix); pw.print("mSelectedDatasetIds: "); pw.println(mSelectedDatasetIds);
mRemoteFillService.dump(prefix, pw);
}
@@ -2513,6 +2581,11 @@
*/
@GuardedBy("mLock")
void forceRemoveSelfLocked() {
+ forceRemoveSelfLocked(AutofillManager.STATE_UNKNOWN);
+ }
+
+ @GuardedBy("mLock")
+ void forceRemoveSelfLocked(int clientState) {
if (sVerbose) Slog.v(TAG, "forceRemoveSelfLocked(): " + mPendingSaveUi);
final boolean isPendingSaveUi = isSaveUiPendingLocked();
@@ -2521,7 +2594,7 @@
mUi.destroyAll(mPendingSaveUi, this, false);
if (!isPendingSaveUi) {
try {
- mClient.setSessionFinished(AutofillManager.STATE_UNKNOWN);
+ mClient.setSessionFinished(clientState);
} catch (RemoteException e) {
Slog.e(TAG, "Error notifying client to finish session", e);
}
@@ -2624,4 +2697,19 @@
Slog.wtf(TAG, message);
}
}
+
+ private static String actionAsString(int action) {
+ switch (action) {
+ case ACTION_START_SESSION:
+ return "START_SESSION";
+ case ACTION_VIEW_ENTERED:
+ return "VIEW_ENTERED";
+ case ACTION_VIEW_EXITED:
+ return "VIEW_EXITED";
+ case ACTION_VALUE_CHANGED:
+ return "VALUE_CHANGED";
+ default:
+ return "UNKNOWN_" + action;
+ }
+ }
}
diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java
index 03c5850..97ab97b 100644
--- a/services/autofill/java/com/android/server/autofill/ViewState.java
+++ b/services/autofill/java/com/android/server/autofill/ViewState.java
@@ -67,6 +67,8 @@
public static final int STATE_IGNORED = 0x080;
/** User manually request autofill in this view, after it was already autofilled. */
public static final int STATE_RESTARTED_SESSION = 0x100;
+ /** View is the URL bar of a package on compat mode. */
+ public static final int STATE_URL_BAR = 0x200;
public final AutofillId id;
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 9756d17..4c0578d 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -97,6 +97,9 @@
// Write at most every 30 minutes.
static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000;
+ // Constant meaning that any UID should be matched when dispatching callbacks
+ private static final int UID_ANY = -2;
+
Context mContext;
final AtomicFile mFile;
final Handler mHandler;
@@ -766,7 +769,7 @@
private void notifyOpChanged(ModeCallback callback, int code,
int uid, String packageName) {
- if (callback.mUid >= 0 && callback.mUid != uid) {
+ if (uid != UID_ANY && callback.mUid >= 0 && callback.mUid != uid) {
return;
}
// There are components watching for mode changes such as window manager
@@ -1114,7 +1117,7 @@
}
mHandler.sendMessage(PooledLambda.obtainMessage(
- AppOpsService::notifyWatchersOfChange, this, code));
+ AppOpsService::notifyWatchersOfChange, this, code, UID_ANY));
}
@Override
@@ -1346,8 +1349,24 @@
return;
}
if (!client.mStartedOps.remove(op)) {
- Slog.wtf(TAG, "Operation not started: uid" + op.uid
- + " pkg=" + op.packageName + " op=" + op.op);
+ // We finish ops when packages get removed to guarantee no dangling
+ // started ops. However, some part of the system may asynchronously
+ // finish ops for an already gone package. Hence, finishing an op
+ // for a non existing package is fine and we don't log as a wtf.
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ if (LocalServices.getService(PackageManagerInternal.class).getPackageUid(
+ resolvedPackageName, 0, UserHandle.getUserId(uid)) < 0) {
+ Slog.i(TAG, "Finishing op=" + AppOpsManager.opToName(code)
+ + " for non-existing package=" + resolvedPackageName
+ + " in uid=" + uid);
+ return;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ Slog.wtf(TAG, "Operation not started: uid=" + op.uid + " pkg="
+ + op.packageName + " op=" + AppOpsManager.opToName(op.op));
return;
}
finishOperationLocked(op, /*finishNested*/ false);
@@ -2682,7 +2701,7 @@
if (restrictionState.setRestriction(code, restricted, exceptionPackages, userHandle)) {
mHandler.sendMessage(PooledLambda.obtainMessage(
- AppOpsService::notifyWatchersOfChange, this, code));
+ AppOpsService::notifyWatchersOfChange, this, code, UID_ANY));
}
if (restrictionState.isDefault()) {
@@ -2692,7 +2711,7 @@
}
}
- private void notifyWatchersOfChange(int code) {
+ private void notifyWatchersOfChange(int code, int uid) {
final ArraySet<ModeCallback> clonedCallbacks;
synchronized (this) {
ArraySet<ModeCallback> callbacks = mOpModeWatchers.get(code);
@@ -2702,7 +2721,7 @@
clonedCallbacks = new ArraySet<>(callbacks);
}
- notifyOpChanged(clonedCallbacks, code, -1, null);
+ notifyOpChanged(clonedCallbacks, code, uid, null);
}
@Override
@@ -2937,7 +2956,7 @@
for (int j = 0; j < restrictionCount; j++) {
if (restrictions[j]) {
final int changedCode = j;
- mHandler.post(() -> notifyWatchersOfChange(changedCode));
+ mHandler.post(() -> notifyWatchersOfChange(changedCode, UID_ANY));
}
}
}
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 02b1380..8d10cfa 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -60,6 +60,7 @@
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Slog;
+import android.util.StatsLog;
import com.android.internal.R;
import com.android.internal.util.DumpUtils;
@@ -632,23 +633,14 @@
if (DBG) {
Slog.d(TAG, "Binder is dead - unregister " + mPackageName);
}
- if (isBleAppPresent()) {
- // Nothing to do, another app is here.
- return;
- }
- if (DBG) {
- Slog.d(TAG, "Disabling LE only mode after application crash");
- }
- try {
- mBluetoothLock.readLock().lock();
- if (mBluetooth != null && mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) {
- mEnable = false;
- mBluetooth.onBrEdrDown();
+
+ for (Map.Entry<IBinder, ClientDeathRecipient> entry : mBleApps.entrySet()) {
+ IBinder token = entry.getKey();
+ ClientDeathRecipient deathRec = entry.getValue();
+ if (deathRec.equals(this)) {
+ updateBleAppCount(token, false, mPackageName);
+ break;
}
- } catch (RemoteException e) {
- Slog.e(TAG, "Unable to call onBrEdrDown", e);
- } finally {
- mBluetoothLock.readLock().unlock();
}
}
@@ -2178,6 +2170,11 @@
mActiveLogs.add(
new ActiveLog(reason, packageName, enable, System.currentTimeMillis()));
}
+
+ int state = enable ? StatsLog.BLUETOOTH_ENABLED_STATE_CHANGED__STATE__ENABLED :
+ StatsLog.BLUETOOTH_ENABLED_STATE_CHANGED__STATE__DISABLED;
+ StatsLog.write_non_chained(StatsLog.BLUETOOTH_ENABLED_STATE_CHANGED,
+ Binder.getCallingUid(), null, state, reason, packageName);
}
private void addCrashLog() {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 088f366..91d3afb 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -101,6 +101,8 @@
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.ServiceSpecificException;
+import android.os.ShellCallback;
+import android.os.ShellCommand;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
@@ -4581,17 +4583,17 @@
return nai.network.netId;
}
- private void handleRegisterNetworkAgent(NetworkAgentInfo na) {
+ private void handleRegisterNetworkAgent(NetworkAgentInfo nai) {
if (VDBG) log("Got NetworkAgent Messenger");
- mNetworkAgentInfos.put(na.messenger, na);
+ mNetworkAgentInfos.put(nai.messenger, nai);
synchronized (mNetworkForNetId) {
- mNetworkForNetId.put(na.network.netId, na);
+ mNetworkForNetId.put(nai.network.netId, nai);
}
- na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger);
- NetworkInfo networkInfo = na.networkInfo;
- na.networkInfo = null;
- updateNetworkInfo(na, networkInfo);
- updateUids(na, null, na.networkCapabilities);
+ nai.asyncChannel.connect(mContext, mTrackerHandler, nai.messenger);
+ NetworkInfo networkInfo = nai.networkInfo;
+ nai.networkInfo = null;
+ updateNetworkInfo(nai, networkInfo);
+ updateUids(nai, null, nai.networkCapabilities);
}
private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties oldLp) {
@@ -5848,4 +5850,61 @@
private static int encodeBool(boolean b) {
return b ? 1 : 0;
}
-}
+
+ @Override
+ public void onShellCommand(FileDescriptor in, FileDescriptor out,
+ FileDescriptor err, String[] args, ShellCallback callback,
+ ResultReceiver resultReceiver) {
+ (new ShellCmd()).exec(this, in, out, err, args, callback, resultReceiver);
+ }
+
+ private class ShellCmd extends ShellCommand {
+
+ @Override
+ public int onCommand(String cmd) {
+ if (cmd == null) {
+ return handleDefaultCommands(cmd);
+ }
+ final PrintWriter pw = getOutPrintWriter();
+ try {
+ switch (cmd) {
+ case "airplane-mode":
+ final String action = getNextArg();
+ if ("enable".equals(action)) {
+ setAirplaneMode(true);
+ return 0;
+ } else if ("disable".equals(action)) {
+ setAirplaneMode(false);
+ return 0;
+ } else if (action == null) {
+ final ContentResolver cr = mContext.getContentResolver();
+ final int enabled = Settings.Global.getInt(cr,
+ Settings.Global.AIRPLANE_MODE_ON);
+ pw.println(enabled == 0 ? "disabled" : "enabled");
+ return 0;
+ } else {
+ onHelp();
+ return -1;
+ }
+ default:
+ return handleDefaultCommands(cmd);
+ }
+ } catch (Exception e) {
+ pw.println(e);
+ }
+ return -1;
+ }
+
+ @Override
+ public void onHelp() {
+ PrintWriter pw = getOutPrintWriter();
+ pw.println("Connectivity service commands:");
+ pw.println(" help");
+ pw.println(" Print this help text.");
+ pw.println(" airplane-mode [enable|disable]");
+ pw.println(" Turn airplane mode on or off.");
+ pw.println(" airplane-mode");
+ pw.println(" Get airplane mode.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index af4c1a0..b0a7443 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -1944,13 +1944,13 @@
@Override
public void setDnsConfigurationForNetwork(int netId, String[] servers, String[] domains,
- int[] params, boolean useTls, String tlsHostname) {
+ int[] params, String tlsHostname, String[] tlsServers) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
final String[] tlsFingerprints = new String[0];
try {
mNetdService.setResolverConfiguration(
- netId, servers, domains, params, useTls, tlsHostname, tlsFingerprints);
+ netId, servers, domains, params, tlsHostname, tlsServers, tlsFingerprints);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
diff --git a/services/core/java/com/android/server/PruneInstantAppsJobService.java b/services/core/java/com/android/server/PruneInstantAppsJobService.java
index a6c3685..48e3a43 100644
--- a/services/core/java/com/android/server/PruneInstantAppsJobService.java
+++ b/services/core/java/com/android/server/PruneInstantAppsJobService.java
@@ -23,6 +23,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManagerInternal;
+import android.os.AsyncTask;
import java.util.concurrent.TimeUnit;
@@ -47,10 +48,12 @@
@Override
public boolean onStartJob(JobParameters params) {
- PackageManagerInternal packageManagerInternal = LocalServices.getService(
- PackageManagerInternal.class);
- packageManagerInternal.pruneInstantApps();
- jobFinished(params, false);
+ AsyncTask.execute(() -> {
+ PackageManagerInternal packageManagerInternal = LocalServices.getService(
+ PackageManagerInternal.class);
+ packageManagerInternal.pruneInstantApps();
+ jobFinished(params, false);
+ });
return true;
}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 3d7b21d..379658f 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -2668,6 +2668,9 @@
final int userId = UserHandle.getUserId(Binder.getCallingUid());
final UserEnvironment userEnv = new UserEnvironment(userId);
+ // Ignore requests to create directories while storage is locked
+ if (!isUserKeyUnlocked(userId)) return;
+
// Validate that reported package name belongs to caller
final AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(
Context.APP_OPS_SERVICE);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 955035b..5131a93 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -281,6 +281,7 @@
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy;
import android.content.pm.ConfigurationInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageManager;
@@ -1266,6 +1267,8 @@
}
}
+ boolean mSystemProvidersInstalled;
+
CoreSettingsObserver mCoreSettingsObserver;
FontScaleSettingObserver mFontScaleSettingObserver;
@@ -4183,12 +4186,14 @@
runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES;
}
- if (!app.info.isAllowedToUseHiddenApi() &&
- !disableHiddenApiChecks &&
- !mHiddenApiBlacklist.isDisabled()) {
- // This app is not allowed to use undocumented and private APIs, or blacklisting is
- // enabled. Set up its runtime with the appropriate flag.
- runtimeFlags |= Zygote.ENABLE_HIDDEN_API_CHECKS;
+ if (!disableHiddenApiChecks && !mHiddenApiBlacklist.isDisabled()) {
+ @HiddenApiEnforcementPolicy int policy =
+ app.info.getHiddenApiEnforcementPolicy();
+ int policyBits = (policy << Zygote.API_ENFORCEMENT_POLICY_SHIFT);
+ if ((policyBits & Zygote.API_ENFORCEMENT_POLICY_MASK) != policyBits) {
+ throw new IllegalStateException("Invalid API policy: " + policy);
+ }
+ runtimeFlags |= policyBits;
}
String invokeWith = null;
@@ -12110,6 +12115,14 @@
"Attempt to launch content provider before system ready");
}
+ // If system providers are not installed yet we aggressively crash to avoid
+ // creating multiple instance of these providers and then bad things happen!
+ if (!mSystemProvidersInstalled && cpi.applicationInfo.isSystemApp()
+ && "system".equals(cpi.processName)) {
+ throw new IllegalStateException("Cannot access system provider: '"
+ + cpi.authority + "' before system providers are installed!");
+ }
+
// Make sure that the user who owns this provider is running. If not,
// we don't want to allow it to run.
if (!mUserController.isUserRunning(userId, 0)) {
@@ -12663,6 +12676,10 @@
mSystemThread.installSystemProviders(providers);
}
+ synchronized (this) {
+ mSystemProvidersInstalled = true;
+ }
+
mConstants.start(mContext.getContentResolver());
mCoreSettingsObserver = new CoreSettingsObserver(this);
mFontScaleSettingObserver = new FontScaleSettingObserver();
@@ -26704,4 +26721,17 @@
}
}
}
+
+ /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */
+ @Override
+ public void alwaysShowUnsupportedCompileSdkWarning(ComponentName activity) {
+ synchronized (this) {
+ final long origId = Binder.clearCallingIdentity();
+ try {
+ mAppWarnings.alwaysShowUnsupportedCompileSdkWarning(activity);
+ } finally {
+ Binder.restoreCallingIdentity(origId);
+ }
+ }
+ }
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 20b938b..aa462ec 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1769,9 +1769,11 @@
}
final ActivityDisplay display = getDisplay();
+ boolean gotSplitScreenStack = false;
boolean gotOpaqueSplitScreenPrimary = false;
boolean gotOpaqueSplitScreenSecondary = false;
final int windowingMode = getWindowingMode();
+ final boolean isAssistantType = isActivityTypeAssistant();
for (int i = display.getChildCount() - 1; i >= 0; --i) {
final ActivityStack other = display.getChildAt(i);
if (other == this) {
@@ -1789,6 +1791,7 @@
return false;
} else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
&& !gotOpaqueSplitScreenPrimary) {
+ gotSplitScreenStack = true;
gotOpaqueSplitScreenPrimary =
!other.isStackTranslucent(starting);
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
@@ -1798,6 +1801,7 @@
}
} else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
&& !gotOpaqueSplitScreenSecondary) {
+ gotSplitScreenStack = true;
gotOpaqueSplitScreenSecondary =
!other.isStackTranslucent(starting);
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
@@ -1811,6 +1815,12 @@
// the screen are opaque.
return false;
}
+ if (isAssistantType && gotSplitScreenStack) {
+ // Assistant stack can't be visible behind split-screen. In addition to this not
+ // making sense, it also works around an issue here we boost the z-order of the
+ // assistant window surfaces in window manager whenever it is visible.
+ return false;
+ }
}
// Well, nothing is stopping you from being visible...
@@ -5259,7 +5269,9 @@
return "ActivityStack{" + Integer.toHexString(System.identityHashCode(this))
+ " stackId=" + mStackId + " type=" + activityTypeToString(getActivityType())
+ " mode=" + windowingModeToString(getWindowingMode())
- + " visible=" + shouldBeVisible(null /* starting */) + ", "
+ + " visible=" + shouldBeVisible(null /* starting */)
+ + " translucent=" + isStackTranslucent(null /* starting */)
+ + ", "
+ mTaskHistory.size() + " tasks}";
}
diff --git a/services/core/java/com/android/server/am/AppWarnings.java b/services/core/java/com/android/server/am/AppWarnings.java
index 4b43bd9..ab1d7bf 100644
--- a/services/core/java/com/android/server/am/AppWarnings.java
+++ b/services/core/java/com/android/server/am/AppWarnings.java
@@ -17,6 +17,8 @@
package com.android.server.am;
import android.annotation.UiThread;
+import android.app.ActivityManager;
+import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
@@ -39,6 +41,7 @@
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
/**
@@ -64,6 +67,15 @@
private UnsupportedCompileSdkDialog mUnsupportedCompileSdkDialog;
private DeprecatedTargetSdkVersionDialog mDeprecatedTargetSdkVersionDialog;
+ /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */
+ private HashSet<ComponentName> mAlwaysShowUnsupportedCompileSdkWarningActivities =
+ new HashSet<>();
+
+ /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */
+ void alwaysShowUnsupportedCompileSdkWarning(ComponentName activity) {
+ mAlwaysShowUnsupportedCompileSdkWarningActivities.add(activity);
+ }
+
/**
* Creates a new warning dialog manager.
* <p>
@@ -110,6 +122,13 @@
return;
}
+ if (ActivityManager.isRunningInTestHarness()
+ && !mAlwaysShowUnsupportedCompileSdkWarningActivities.contains(r.realActivity)) {
+ // Don't show warning if we are running in a test harness and we don't have to always
+ // show for this activity.
+ return;
+ }
+
// If the application was built against an pre-release SDK that's older than the current
// platform OR if the current platform is pre-release and older than the SDK against which
// the application was built OR both are pre-release with the same SDK_INT but different
diff --git a/services/core/java/com/android/server/am/RecentTasks.java b/services/core/java/com/android/server/am/RecentTasks.java
index 1335ced..efd8153 100644
--- a/services/core/java/com/android/server/am/RecentTasks.java
+++ b/services/core/java/com/android/server/am/RecentTasks.java
@@ -1243,15 +1243,13 @@
*/
private int findRemoveIndexForAddTask(TaskRecord task) {
final int recentsCount = mTasks.size();
- final int taskActivityType = task.getActivityType();
final Intent intent = task.intent;
final boolean document = intent != null && intent.isDocument();
int maxRecents = task.maxRecents - 1;
for (int i = 0; i < recentsCount; i++) {
final TaskRecord tr = mTasks.get(i);
- final int trActivityType = tr.getActivityType();
if (task != tr) {
- if (taskActivityType != trActivityType || task.userId != tr.userId) {
+ if (!task.hasCompatibleActivityType(tr)) {
continue;
}
final Intent trIntent = tr.intent;
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 776e93d..3f39f45 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -368,6 +368,19 @@
return related;
}
+ /** Check if the user has the given restriction set. Default to true if error occured during
+ * calling UserManager, so it fails safe.
+ */
+ private boolean hasRestriction(String restriction, int userId) {
+ try {
+ return mUm.hasUserRestriction(restriction, userId);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote Exception calling UserManager.getUserRestrictions: ", e);
+ // Fails safe
+ return true;
+ }
+ }
+
void setPrimaryClipInternal(@Nullable ClipData clip, int callingUid) {
// Push clipboard to host, if any
if (mHostClipboardMonitor != null) {
@@ -391,13 +404,8 @@
if (related != null) {
int size = related.size();
if (size > 1) { // Related profiles list include the current profile.
- boolean canCopy = false;
- try {
- canCopy = !mUm.getUserRestrictions(userId).getBoolean(
- UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE);
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote Exception calling UserManager: " + e);
- }
+ final boolean canCopy = !hasRestriction(
+ UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE, userId);
// Copy clip data to related users if allowed. If disallowed, then remove
// primary clip in related users to prevent pasting stale content.
if (!canCopy) {
@@ -416,7 +424,11 @@
for (int i = 0; i < size; i++) {
int id = related.get(i).id;
if (id != userId) {
- setPrimaryClipInternal(getClipboard(id), clip, callingUid);
+ final boolean canCopyIntoProfile = !hasRestriction(
+ UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id);
+ if (canCopyIntoProfile) {
+ setPrimaryClipInternal(getClipboard(id), clip, callingUid);
+ }
}
}
}
diff --git a/services/core/java/com/android/server/connectivity/DnsManager.java b/services/core/java/com/android/server/connectivity/DnsManager.java
index 557828a..36f5a6c 100644
--- a/services/core/java/com/android/server/connectivity/DnsManager.java
+++ b/services/core/java/com/android/server/connectivity/DnsManager.java
@@ -192,6 +192,12 @@
public void setDnsConfigurationForNetwork(
int netId, LinkProperties lp, boolean isDefaultNetwork) {
+ final String[] assignedServers = NetworkUtils.makeStrings(lp.getDnsServers());
+ final String[] domainStrs = getDomainStrings(lp.getDomains());
+
+ updateParametersSettings();
+ final int[] params = { mSampleValidity, mSuccessThreshold, mMinSamples, mMaxSamples };
+
// We only use the PrivateDnsConfig data pushed to this class instance
// from ConnectivityService because it works in coordination with
// NetworkMonitor to decide which networks need validation and runs the
@@ -204,23 +210,20 @@
final boolean useTls = (privateDnsCfg != null) && privateDnsCfg.useTls;
final boolean strictMode = (privateDnsCfg != null) && privateDnsCfg.inStrictMode();
final String tlsHostname = strictMode ? privateDnsCfg.hostname : "";
-
- final String[] serverStrs = NetworkUtils.makeStrings(
- strictMode ? Arrays.stream(privateDnsCfg.ips)
- .filter((ip) -> lp.isReachable(ip))
- .collect(Collectors.toList())
- : lp.getDnsServers());
- final String[] domainStrs = getDomainStrings(lp.getDomains());
-
- updateParametersSettings();
- final int[] params = { mSampleValidity, mSuccessThreshold, mMinSamples, mMaxSamples };
+ final String[] tlsServers =
+ strictMode ? NetworkUtils.makeStrings(
+ Arrays.stream(privateDnsCfg.ips)
+ .filter((ip) -> lp.isReachable(ip))
+ .collect(Collectors.toList()))
+ : useTls ? assignedServers // Opportunistic
+ : new String[0]; // Off
Slog.d(TAG, String.format("setDnsConfigurationForNetwork(%d, %s, %s, %s, %s, %s)",
- netId, Arrays.toString(serverStrs), Arrays.toString(domainStrs),
- Arrays.toString(params), useTls, tlsHostname));
+ netId, Arrays.toString(assignedServers), Arrays.toString(domainStrs),
+ Arrays.toString(params), tlsHostname, Arrays.toString(tlsServers)));
try {
mNMS.setDnsConfigurationForNetwork(
- netId, serverStrs, domainStrs, params, useTls, tlsHostname);
+ netId, assignedServers, domainStrs, params, tlsHostname, tlsServers);
} catch (Exception e) {
Slog.e(TAG, "Error setting DNS configuration: " + e);
return;
diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
index d578e95..e471c7d 100644
--- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java
+++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
@@ -202,7 +202,9 @@
// Only using the first package name. There may be multiple names if multiple
// apps share the same UID, but in that case they also share permissions so
// querying with any of the names will return the same results.
- final PackageInfo app = mPackageManager.getPackageInfo(names[0], GET_PERMISSIONS);
+ int userId = UserHandle.getUserId(uid);
+ final PackageInfo app = mPackageManager.getPackageInfoAsUser(
+ names[0], GET_PERMISSIONS, userId);
return hasUseBackgroundNetworksPermission(app);
} catch (NameNotFoundException e) {
// App not found.
diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
index 4313d17..711d40b 100644
--- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
+++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
@@ -60,8 +60,14 @@
int[] backlightRange = resources.getIntArray(
com.android.internal.R.array.config_screenBrightnessBacklight);
+ float[] minimumBrightnessCurveLux = getLuxLevels(resources.getIntArray(
+ com.android.internal.R.array.config_autoBrightnessMinimumBrightnessCurveLux));
+ float[] minimumBrightnessCurveNits = getFloatArray(resources.obtainTypedArray(
+ com.android.internal.R.array.config_autoBrightnessMinimumBrightnessCurveNits));
+
if (isValidMapping(nitsRange, backlightRange)
- && isValidMapping(luxLevels, brightnessLevelsNits)) {
+ && isValidMapping(luxLevels, brightnessLevelsNits)
+ && isValidMapping(minimumBrightnessCurveLux, minimumBrightnessCurveNits)) {
int minimumBacklight = resources.getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMinimum);
int maximumBacklight = resources.getInteger(
@@ -73,7 +79,8 @@
}
BrightnessConfiguration.Builder builder = new BrightnessConfiguration.Builder();
builder.setCurve(luxLevels, brightnessLevelsNits);
- return new PhysicalMappingStrategy(builder.build(), nitsRange, backlightRange);
+ return new PhysicalMappingStrategy(builder.build(), nitsRange, backlightRange,
+ minimumBrightnessCurveLux, minimumBrightnessCurveNits);
} else if (isValidMapping(luxLevels, brightnessLevelsBacklight)) {
return new SimpleMappingStrategy(luxLevels, brightnessLevelsBacklight);
} else {
@@ -448,8 +455,11 @@
private float mUserLux;
private float mUserBrightness;
+ private final Spline mMinimumBrightnessCurve;
+
public PhysicalMappingStrategy(BrightnessConfiguration config,
- float[] nits, int[] backlight) {
+ float[] nits, int[] backlight, float[] minimumBrightnessCurveLux,
+ float[] minimumBrightnessCurveNits) {
Preconditions.checkArgument(nits.length != 0 && backlight.length != 0,
"Nits and backlight arrays must not be empty!");
Preconditions.checkArgument(nits.length == backlight.length,
@@ -469,6 +479,9 @@
normalizedBacklight[i] = normalizeAbsoluteBrightness(backlight[i]);
}
+ mMinimumBrightnessCurve = Spline.createSpline(
+ minimumBrightnessCurveLux, minimumBrightnessCurveNits);
+
mNitsToBacklightSpline = createSpline(nits, normalizedBacklight);
mBacklightToNitsSpline = createSpline(normalizedBacklight, nits);
@@ -484,7 +497,7 @@
if (config.equals(mConfig)) {
return false;
}
-
+ validateBrightnessConfiguration(config);
Pair<float[], float[]> curve = config.getCurve();
mBrightnessSpline = createSpline(curve.first /*lux*/, curve.second /*nits*/);
mConfig = config;
@@ -549,5 +562,24 @@
pw.println(" mUserLux=" + mUserLux);
pw.println(" mUserBrightness=" + mUserBrightness);
}
+
+ private void validateBrightnessConfiguration(BrightnessConfiguration config) {
+ Pair<float[], float[]> curve = config.getCurve();
+ Spline brightnessSpline = Spline.createSpline(curve.first, curve.second);
+ if (isBrightnessSplineTooDark(brightnessSpline)) {
+ throw new IllegalArgumentException("brightness curve is too dark");
+ }
+ }
+
+ private boolean isBrightnessSplineTooDark(Spline brightnessSpline) {
+ float[] lux = mDefaultConfig.getCurve().first;
+ for (int i = 0; i < lux.length; i++) {
+ if (brightnessSpline.interpolate(lux[i]) <
+ mMinimumBrightnessCurve.interpolate(lux[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
}
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index ff8b88b..1784ef1 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -500,7 +500,7 @@
}
public void onSwitchUser(@UserIdInt int newUserId) {
- handleSettingsChange();
+ handleSettingsChange(true /* userSwitch */);
mBrightnessTracker.onSwitchUser(newUserId);
}
@@ -1420,8 +1420,12 @@
mHandler.post(mOnStateChangedRunnable);
}
- private void handleSettingsChange() {
+ private void handleSettingsChange(boolean userSwitch) {
mPendingScreenBrightnessSetting = getScreenBrightnessSetting();
+ if (userSwitch) {
+ // Don't treat user switches as user initiated change.
+ mCurrentScreenBrightnessSetting = mPendingScreenBrightnessSetting;
+ }
mPendingAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
// We don't bother with a pending variable for VR screen brightness since we just
// immediately adapt to it.
@@ -1735,7 +1739,7 @@
@Override
public void onChange(boolean selfChange, Uri uri) {
- handleSettingsChange();
+ handleSettingsChange(false /* userSwitch */);
}
}
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java
index 7235faa..4f8b1dc 100644
--- a/services/core/java/com/android/server/job/JobStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -477,6 +477,9 @@
final NetworkRequest network = jobStatus.getJob().getRequiredNetwork();
out.attribute(null, "net-capabilities", Long.toString(
BitUtils.packBits(network.networkCapabilities.getCapabilities())));
+ out.attribute(null, "net-unwanted-capabilities", Long.toString(
+ BitUtils.packBits(network.networkCapabilities.getUnwantedCapabilities())));
+
out.attribute(null, "net-transport-types", Long.toString(
BitUtils.packBits(network.networkCapabilities.getTransportTypes())));
}
@@ -888,12 +891,19 @@
String val;
final String netCapabilities = parser.getAttributeValue(null, "net-capabilities");
+ final String netUnwantedCapabilities = parser.getAttributeValue(
+ null, "net-unwanted-capabilities");
final String netTransportTypes = parser.getAttributeValue(null, "net-transport-types");
if (netCapabilities != null && netTransportTypes != null) {
final NetworkRequest request = new NetworkRequest.Builder().build();
+ final long unwantedCapabilities = netUnwantedCapabilities != null
+ ? Long.parseLong(netUnwantedCapabilities)
+ : BitUtils.packBits(request.networkCapabilities.getUnwantedCapabilities());
+
// We're okay throwing NFE here; caught by caller
request.networkCapabilities.setCapabilities(
- BitUtils.unpackBits(Long.parseLong(netCapabilities)));
+ BitUtils.unpackBits(Long.parseLong(netCapabilities)),
+ BitUtils.unpackBits(unwantedCapabilities));
request.networkCapabilities.setTransportTypes(
BitUtils.unpackBits(Long.parseLong(netTransportTypes)));
jobBuilder.setRequiredNetwork(request);
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index abe55bb..8365fd2 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -160,7 +160,7 @@
private static boolean isRelaxedSatisfied(JobStatus jobStatus, Network network,
NetworkCapabilities capabilities, Constants constants) {
// Only consider doing this for prefetching jobs
- if ((jobStatus.getJob().getFlags() & JobInfo.FLAG_IS_PREFETCH) == 0) {
+ if (!jobStatus.getJob().isPrefetch()) {
return false;
}
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index b5eb8bf..f617964 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -21,6 +21,7 @@
import static android.content.Context.KEYGUARD_SERVICE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_ENABLED_KEY;
import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_HANDLE_KEY;
@@ -524,6 +525,10 @@
public void onCleanupUser(int userId) {
hideEncryptionNotification(new UserHandle(userId));
+ // User is stopped with its CE key evicted. Require strong auth next time to be able to
+ // unlock the user's storage. Use STRONG_AUTH_REQUIRED_AFTER_BOOT since stopping and
+ // restarting a user later is equivalent to rebooting the device.
+ requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_BOOT, userId);
}
public void onStartUser(final int userId) {
@@ -1990,19 +1995,16 @@
}
@Override
- public KeyChainSnapshot getKeyChainSnapshot() throws RemoteException {
+ public @NonNull KeyChainSnapshot getKeyChainSnapshot() throws RemoteException {
return mRecoverableKeyStoreManager.getKeyChainSnapshot();
}
+ @Override
public void setSnapshotCreatedPendingIntent(@Nullable PendingIntent intent)
throws RemoteException {
mRecoverableKeyStoreManager.setSnapshotCreatedPendingIntent(intent);
}
- public Map getRecoverySnapshotVersions() throws RemoteException {
- return mRecoverableKeyStoreManager.getRecoverySnapshotVersions();
- }
-
@Override
public void setServerParams(byte[] serverParams) throws RemoteException {
mRecoverableKeyStoreManager.setServerParams(serverParams);
@@ -2013,7 +2015,8 @@
mRecoverableKeyStoreManager.setRecoveryStatus(alias, status);
}
- public Map getRecoveryStatus() throws RemoteException {
+ @Override
+ public @NonNull Map getRecoveryStatus() throws RemoteException {
return mRecoverableKeyStoreManager.getRecoveryStatus();
}
@@ -2024,17 +2027,12 @@
}
@Override
- public int[] getRecoverySecretTypes() throws RemoteException {
+ public @NonNull int[] getRecoverySecretTypes() throws RemoteException {
return mRecoverableKeyStoreManager.getRecoverySecretTypes();
}
@Override
- public int[] getPendingRecoverySecretTypes() throws RemoteException {
- throw new SecurityException("Not implemented");
- }
-
- @Override
public byte[] startRecoverySession(@NonNull String sessionId,
@NonNull byte[] verifierPublicKey, @NonNull byte[] vaultParams,
@NonNull byte[] vaultChallenge, @NonNull List<KeyChainProtectionParams> secrets)
@@ -2044,7 +2042,7 @@
}
@Override
- public byte[] startRecoverySessionWithCertPath(@NonNull String sessionId,
+ public @NonNull byte[] startRecoverySessionWithCertPath(@NonNull String sessionId,
@NonNull String rootCertificateAlias, @NonNull RecoveryCertPath verifierCertPath,
@NonNull byte[] vaultParams, @NonNull byte[] vaultChallenge,
@NonNull List<KeyChainProtectionParams> secrets)
@@ -2054,6 +2052,7 @@
secrets);
}
+ @Override
public void closeSession(@NonNull String sessionId) throws RemoteException {
mRecoverableKeyStoreManager.closeSession(sessionId);
}
@@ -2068,7 +2067,7 @@
}
@Override
- public Map<String, byte[]> recoverKeys(@NonNull String sessionId,
+ public @NonNull Map<String, byte[]> recoverKeys(@NonNull String sessionId,
@NonNull byte[] recoveryKeyBlob, @NonNull List<WrappedApplicationKey> applicationKeys)
throws RemoteException {
return mRecoverableKeyStoreManager.recoverKeys(sessionId, recoveryKeyBlob, applicationKeys);
@@ -2085,17 +2084,17 @@
}
@Override
- public String generateKey(@NonNull String alias) throws RemoteException {
+ public @Nullable String generateKey(@NonNull String alias) throws RemoteException {
return mRecoverableKeyStoreManager.generateKey(alias);
}
@Override
- public String importKey(@NonNull String alias, byte[] keyBytes) throws RemoteException {
+ public @Nullable String importKey(@NonNull String alias, byte[] keyBytes) throws RemoteException {
return mRecoverableKeyStoreManager.importKey(alias, keyBytes);
}
@Override
- public String getKey(@NonNull String alias) throws RemoteException {
+ public @Nullable String getKey(@NonNull String alias) throws RemoteException {
return mRecoverableKeyStoreManager.getKey(alias);
}
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
index e75722a..e0487ea 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
@@ -247,6 +247,7 @@
@NonNull String rootCertificateAlias, @NonNull byte[] recoveryServiceCertFile,
@NonNull byte[] recoveryServiceSigFile)
throws RemoteException {
+ checkRecoverKeyStorePermission();
if (rootCertificateAlias == null) {
Log.e(TAG, "rootCertificateAlias is null");
}
@@ -317,25 +318,34 @@
}
/**
- * Gets recovery snapshot versions for all accounts. Note that snapshot may have 0 application
- * keys, but it still needs to be synced, if previous versions were not empty.
- *
- * @return Map from Recovery agent account to snapshot version.
+ * Set the server params for the user's key chain. This is used to uniquely identify a key
+ * chain. Along with the counter ID, it is used to uniquely identify an instance of a vault.
*/
- public @NonNull Map<byte[], Integer> getRecoverySnapshotVersions()
- throws RemoteException {
- checkRecoverKeyStorePermission();
- throw new UnsupportedOperationException();
- }
-
public void setServerParams(@NonNull byte[] serverParams) throws RemoteException {
checkRecoverKeyStorePermission();
int userId = UserHandle.getCallingUserId();
int uid = Binder.getCallingUid();
- long updatedRows = mDatabase.setServerParams(userId, uid, serverParams);
- if (updatedRows > 0) {
- mDatabase.setShouldCreateSnapshot(userId, uid, true);
+
+ byte[] currentServerParams = mDatabase.getServerParams(userId, uid);
+
+ if (Arrays.equals(serverParams, currentServerParams)) {
+ Log.v(TAG, "Not updating server params - same as old value.");
+ return;
}
+
+ long updatedRows = mDatabase.setServerParams(userId, uid, serverParams);
+ if (updatedRows < 1) {
+ throw new ServiceSpecificException(
+ ERROR_SERVICE_INTERNAL_ERROR, "Database failure trying to set server params.");
+ }
+
+ if (currentServerParams == null) {
+ Log.i(TAG, "Initialized server params.");
+ return;
+ }
+
+ Log.i(TAG, "Updated server params. Snapshot pending.");
+ mDatabase.setShouldCreateSnapshot(userId, uid, true);
}
/**
@@ -356,6 +366,7 @@
* {@link RecoveryController#RECOVERY_STATUS_PERMANENT_FAILURE}.
*/
public @NonNull Map<String, Integer> getRecoveryStatus() throws RemoteException {
+ checkRecoverKeyStorePermission();
return mDatabase.getStatusForAllKeys(Binder.getCallingUid());
}
@@ -371,10 +382,26 @@
Preconditions.checkNotNull(secretTypes, "secretTypes is null");
int userId = UserHandle.getCallingUserId();
int uid = Binder.getCallingUid();
- long updatedRows = mDatabase.setRecoverySecretTypes(userId, uid, secretTypes);
- if (updatedRows > 0) {
- mDatabase.setShouldCreateSnapshot(userId, uid, true);
+
+ int[] currentSecretTypes = mDatabase.getRecoverySecretTypes(userId, uid);
+ if (Arrays.equals(secretTypes, currentSecretTypes)) {
+ Log.v(TAG, "Not updating secret types - same as old value.");
+ return;
}
+
+ long updatedRows = mDatabase.setRecoverySecretTypes(userId, uid, secretTypes);
+ if (updatedRows < 1) {
+ throw new ServiceSpecificException(ERROR_SERVICE_INTERNAL_ERROR,
+ "Database error trying to set secret types.");
+ }
+
+ if (currentSecretTypes.length == 0) {
+ Log.i(TAG, "Initialized secret types.");
+ return;
+ }
+
+ Log.i(TAG, "Updated secret types. Snapshot pending.");
+ mDatabase.setShouldCreateSnapshot(userId, uid, true);
}
/**
@@ -390,29 +417,6 @@
}
/**
- * Gets secret types RecoveryManagers is waiting for to create new Recovery Data.
- *
- * @return secret types
- * @hide
- */
- public @NonNull int[] getPendingRecoverySecretTypes() throws RemoteException {
- checkRecoverKeyStorePermission();
- throw new UnsupportedOperationException();
- }
-
- public void recoverySecretAvailable(
- @NonNull KeyChainProtectionParams recoverySecret) throws RemoteException {
- int uid = Binder.getCallingUid();
- if (recoverySecret.getLockScreenUiFormat() == KeyChainProtectionParams.TYPE_LOCKSCREEN) {
- throw new SecurityException(
- "Caller " + uid + " is not allowed to set lock screen secret");
- }
- checkRecoverKeyStorePermission();
- // TODO: add hook from LockSettingsService to set lock screen secret.
- throw new UnsupportedOperationException();
- }
-
- /**
* Initializes recovery session given the X509-encoded public key of the recovery service.
*
* @param sessionId A unique ID to identify the recovery session.
@@ -547,7 +551,7 @@
* @return Map from alias to raw key material.
* @throws RemoteException if an error occurred recovering the keys.
*/
- public Map<String, byte[]> recoverKeys(
+ public @NonNull Map<String, byte[]> recoverKeys(
@NonNull String sessionId,
@NonNull byte[] encryptedRecoveryKey,
@NonNull List<WrappedApplicationKey> applicationKeys)
@@ -585,7 +589,7 @@
* were wrapped with the recovery key.
* @throws RemoteException if an error occurred recovering the keys.
*/
- public Map<String, String> recoverKeyChainSnapshot(
+ public @NonNull Map<String, String> recoverKeyChainSnapshot(
@NonNull String sessionId,
@NonNull byte[] encryptedRecoveryKey,
@NonNull List<WrappedApplicationKey> applicationKeys) throws RemoteException {
@@ -621,7 +625,7 @@
* @param keysByAlias The key materials, keyed by alias.
* @throws KeyStoreException if an error occurs importing the key or getting the grant.
*/
- private Map<String, String> importKeyMaterials(
+ private @NonNull Map<String, String> importKeyMaterials(
int userId, int uid, Map<String, byte[]> keysByAlias) throws KeyStoreException {
ArrayMap<String, String> grantAliasesByAlias = new ArrayMap<>(keysByAlias.size());
for (String alias : keysByAlias.keySet()) {
@@ -641,7 +645,7 @@
* @param alias The alias of the key.
* @return The alias in the calling process's keystore.
*/
- private String getAlias(int userId, int uid, String alias) {
+ private @Nullable String getAlias(int userId, int uid, String alias) {
return mApplicationKeyStorage.getGrantAlias(userId, uid, alias);
}
@@ -656,6 +660,7 @@
* @hide
*/
public byte[] generateAndStoreKey(@NonNull String alias) throws RemoteException {
+ checkRecoverKeyStorePermission();
int uid = Binder.getCallingUid();
int userId = UserHandle.getCallingUserId();
@@ -688,6 +693,7 @@
}
public void removeKey(@NonNull String alias) throws RemoteException {
+ checkRecoverKeyStorePermission();
Preconditions.checkNotNull(alias, "alias is null");
int uid = Binder.getCallingUid();
int userId = UserHandle.getCallingUserId();
@@ -706,6 +712,7 @@
* @return grant alias, which caller can use to access the key.
*/
public String generateKey(@NonNull String alias) throws RemoteException {
+ checkRecoverKeyStorePermission();
Preconditions.checkNotNull(alias, "alias is null");
int uid = Binder.getCallingUid();
int userId = UserHandle.getCallingUserId();
@@ -743,8 +750,9 @@
*
* @hide
*/
- public String importKey(@NonNull String alias, @NonNull byte[] keyBytes)
+ public @Nullable String importKey(@NonNull String alias, @NonNull byte[] keyBytes)
throws RemoteException {
+ checkRecoverKeyStorePermission();
Preconditions.checkNotNull(alias, "alias is null");
Preconditions.checkNotNull(keyBytes, "keyBytes is null");
if (keyBytes.length != RecoverableKeyGenerator.KEY_SIZE_BITS / Byte.SIZE) {
@@ -789,7 +797,8 @@
*
* @return grant alias, which caller can use to access the key.
*/
- public String getKey(@NonNull String alias) throws RemoteException {
+ public @Nullable String getKey(@NonNull String alias) throws RemoteException {
+ checkRecoverKeyStorePermission();
Preconditions.checkNotNull(alias, "alias is null");
int uid = Binder.getCallingUid();
int userId = UserHandle.getCallingUserId();
@@ -840,7 +849,7 @@
* @return Map from alias to raw key material.
* @throws RemoteException if an error occurred decrypting the keys.
*/
- private Map<String, byte[]> recoverApplicationKeys(
+ private @NonNull Map<String, byte[]> recoverApplicationKeys(
@NonNull byte[] recoveryKey,
@NonNull List<WrappedApplicationKey> applicationKeys) throws RemoteException {
HashMap<String, byte[]> keyMaterialByAlias = new HashMap<>();
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 7348b84..01f0d74 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -1532,7 +1532,7 @@
@Override
public boolean createSession2(Bundle sessionToken) {
final int uid = Binder.getCallingUid();
- final SessionToken2 token = SessionToken2.fromBundle(getContext(), sessionToken);
+ final SessionToken2 token = SessionToken2.fromBundle(sessionToken);
if (token == null || token.getUid() != uid) {
Log.w(TAG, "onSessionCreated failed, expected caller uid=" + token.getUid()
+ " but from uid=" + uid);
@@ -1571,7 +1571,7 @@
@Override
public void destroySession2(Bundle sessionToken) {
final int uid = Binder.getCallingUid();
- final SessionToken2 token = SessionToken2.fromBundle(getContext(), sessionToken);
+ final SessionToken2 token = SessionToken2.fromBundle(sessionToken);
if (token == null || token.getUid() != uid) {
Log.w(TAG, "onSessionDestroyed failed, expected caller uid=" + token.getUid()
+ " but from uid=" + uid);
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index efca159..8febecf 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -1141,7 +1141,7 @@
// TODO: support shared UIDs
if (maxBytes > 0 && maxBytes > totalBytes / 2) {
final String[] packageNames = mContext.getPackageManager().getPackagesForUid(maxUid);
- if (packageNames.length == 1) {
+ if (packageNames != null && packageNames.length == 1) {
try {
return mContext.getPackageManager().getApplicationInfo(packageNames[0],
MATCH_ANY_USER | MATCH_DISABLED_COMPONENTS | MATCH_DIRECT_BOOT_AWARE
diff --git a/services/core/java/com/android/server/net/watchlist/WatchlistConfig.java b/services/core/java/com/android/server/net/watchlist/WatchlistConfig.java
index 2714d5e..d793842 100644
--- a/services/core/java/com/android/server/net/watchlist/WatchlistConfig.java
+++ b/services/core/java/com/android/server/net/watchlist/WatchlistConfig.java
@@ -107,6 +107,10 @@
* Reload watchlist by reading config file.
*/
public void reloadConfig() {
+ if (!mXmlFile.exists()) {
+ // No config file
+ return;
+ }
try (FileInputStream stream = new FileInputStream(mXmlFile)){
final List<byte[]> crc32DomainList = new ArrayList<>();
final List<byte[]> sha256DomainList = new ArrayList<>();
diff --git a/services/core/java/com/android/server/net/watchlist/WatchlistSettings.java b/services/core/java/com/android/server/net/watchlist/WatchlistSettings.java
index f5ba889..e20a510 100644
--- a/services/core/java/com/android/server/net/watchlist/WatchlistSettings.java
+++ b/services/core/java/com/android/server/net/watchlist/WatchlistSettings.java
@@ -87,6 +87,10 @@
}
public void reloadSettings() {
+ if (!mXmlFile.exists()) {
+ // No settings config
+ return;
+ }
try (FileInputStream stream = mXmlFile.openRead()){
XmlPullParser parser = Xml.newPullParser();
parser.setInput(stream, StandardCharsets.UTF_8.name());
@@ -97,7 +101,7 @@
mPrivacySecretKey = parseSecretKey(parser);
}
}
- Log.i(TAG, "Reload watchlist settings done");
+ Slog.i(TAG, "Reload watchlist settings done");
} catch (IllegalStateException | NullPointerException | NumberFormatException |
XmlPullParserException | IOException | IndexOutOfBoundsException e) {
Slog.e(TAG, "Failed parsing xml", e);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 27eeb93..59cd561 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1877,13 +1877,13 @@
return newSuppressedVisualEffects;
}
- // TODO: log visual differences, not just audible ones
@GuardedBy("mNotificationLock")
protected void maybeRecordInterruptionLocked(NotificationRecord r) {
if (r.isInterruptive()) {
mAppUsageStats.reportInterruptiveNotification(r.sbn.getPackageName(),
r.getChannel().getId(),
getRealUserId(r.sbn.getUserId()));
+ logRecentLocked(r);
}
}
@@ -4344,10 +4344,6 @@
mNotificationsByKey.put(n.getKey(), r);
- if (!r.isUpdate) {
- logRecentLocked(r);
- }
-
// Ensure if this is a foreground service that the proper additional
// flags are set.
if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 9e7ad47..61c6be7 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -47,6 +47,8 @@
import dalvik.system.DexFile;
+import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_NONE;
+
import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE;
import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE;
import static com.android.server.pm.Installer.DEXOPT_PROFILE_GUIDED;
@@ -532,7 +534,10 @@
int profileFlag = isProfileGuidedFilter ? DEXOPT_PROFILE_GUIDED : 0;
// Some apps are executed with restrictions on hidden API usage. If this app is one
// of them, pass a flag to dexopt to enable the same restrictions during compilation.
- int hiddenApiFlag = info.isAllowedToUseHiddenApi() ? 0 : DEXOPT_ENABLE_HIDDEN_API_CHECKS;
+ // TODO we should pass the actual flag value to dexopt, rather than assuming blacklist
+ int hiddenApiFlag = info.getHiddenApiEnforcementPolicy() == HIDDEN_API_ENFORCEMENT_NONE
+ ? 0
+ : DEXOPT_ENABLE_HIDDEN_API_CHECKS;
// Avoid generating CompactDex for modes that are latency critical.
final int compilationReason = options.getCompilationReason();
boolean generateCompactDex = true;
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 0300548..5a63f29 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -17,6 +17,7 @@
package com.android.server.pm;
import static android.Manifest.permission.DELETE_PACKAGES;
+import static android.Manifest.permission.MANAGE_DEVICE_ADMINS;
import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
import static android.Manifest.permission.INSTALL_PACKAGES;
import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS;
@@ -115,6 +116,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppOpsManager;
@@ -10353,7 +10355,7 @@
if (Build.IS_DEBUGGABLE &&
pkg.isPrivileged() &&
- !SystemProperties.getBoolean(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, true)) {
+ SystemProperties.getBoolean(PROPERTY_NAME_PM_DEXOPT_PRIV_APPS_OOB, false)) {
PackageManagerServiceUtils.logPackageHasUncompressedCode(pkg);
}
@@ -24025,6 +24027,32 @@
}
}
+ @Override
+ public void grantDefaultPermissionsToEnabledTelephonyDataServices(
+ String[] packageNames, int userId) {
+ enforceSystemOrPhoneCaller("grantDefaultPermissionsToEnabledTelephonyDataServices");
+ synchronized (mPackages) {
+ Binder.withCleanCallingIdentity( () -> {
+ mDefaultPermissionPolicy.
+ grantDefaultPermissionsToEnabledTelephonyDataServices(
+ packageNames, userId);
+ });
+ }
+ }
+
+ @Override
+ public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
+ String[] packageNames, int userId) {
+ enforceSystemOrPhoneCaller("revokeDefaultPermissionsFromDisabledTelephonyDataServices");
+ synchronized (mPackages) {
+ Binder.withCleanCallingIdentity( () -> {
+ mDefaultPermissionPolicy.
+ revokeDefaultPermissionsFromDisabledTelephonyDataServices(
+ packageNames, userId);
+ });
+ }
+ }
+
private static void enforceSystemOrPhoneCaller(String tag) {
int callingUid = Binder.getCallingUid();
if (callingUid != Process.PHONE_UID && callingUid != Process.SYSTEM_UID) {
@@ -24289,6 +24317,23 @@
return mSettings.getHarmfulAppWarningLPr(packageName, userId);
}
}
+
+ @Override
+ public boolean isPackageStateProtected(@NonNull String packageName, @UserIdInt int userId) {
+ final int callingUid = Binder.getCallingUid();
+ final int callingAppId = UserHandle.getAppId(callingUid);
+
+ mPermissionManager.enforceCrossUserPermission(callingUid, userId,
+ false /*requireFullPermission*/, true /*checkShell*/, "isPackageStateProtected");
+
+ if (callingAppId != Process.SYSTEM_UID && callingAppId != Process.ROOT_UID
+ && checkUidPermission(MANAGE_DEVICE_ADMINS, callingUid) != PERMISSION_GRANTED) {
+ throw new SecurityException("Caller must have the "
+ + MANAGE_DEVICE_ADMINS + " permission.");
+ }
+
+ return mProtectedPackages.isPackageStateProtected(userId, packageName);
+ }
}
interface PackageSender {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 5060c4d..853081a 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -331,18 +331,18 @@
ZipEntry entry = it.next();
if (entry.getName().endsWith(".dex")) {
if (entry.getMethod() != ZipEntry.STORED) {
- Slog.wtf(TAG, "APK " + fileName + " has compressed dex code " +
+ Slog.w(TAG, "APK " + fileName + " has compressed dex code " +
entry.getName());
} else if ((entry.getDataOffset() & 0x3) != 0) {
- Slog.wtf(TAG, "APK " + fileName + " has unaligned dex code " +
+ Slog.w(TAG, "APK " + fileName + " has unaligned dex code " +
entry.getName());
}
} else if (entry.getName().endsWith(".so")) {
if (entry.getMethod() != ZipEntry.STORED) {
- Slog.wtf(TAG, "APK " + fileName + " has compressed native code " +
+ Slog.w(TAG, "APK " + fileName + " has compressed native code " +
entry.getName());
} else if ((entry.getDataOffset() & (0x1000 - 1)) != 0) {
- Slog.wtf(TAG, "APK " + fileName + " has unaligned native code " +
+ Slog.w(TAG, "APK " + fileName + " has unaligned native code " +
entry.getName());
}
}
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index ad32ed3..3116480 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -976,6 +976,40 @@
}
}
+ public void grantDefaultPermissionsToEnabledTelephonyDataServices(
+ String[] packageNames, int userId) {
+ Log.i(TAG, "Granting permissions to enabled data services for user:" + userId);
+ if (packageNames == null) {
+ return;
+ }
+ for (String packageName : packageNames) {
+ PackageParser.Package dataServicePackage = getSystemPackage(packageName);
+ if (dataServicePackage != null
+ && doesPackageSupportRuntimePermissions(dataServicePackage)) {
+ // Grant these permissions as system-fixed, so that nobody can accidentally
+ // break cellular data.
+ grantRuntimePermissions(dataServicePackage, PHONE_PERMISSIONS, true, userId);
+ grantRuntimePermissions(dataServicePackage, LOCATION_PERMISSIONS, true, userId);
+ }
+ }
+ }
+
+ public void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
+ String[] packageNames, int userId) {
+ Log.i(TAG, "Revoking permissions from disabled data services for user:" + userId);
+ if (packageNames == null) {
+ return;
+ }
+ for (String packageName : packageNames) {
+ PackageParser.Package dataServicePackage = getSystemPackage(packageName);
+ if (dataServicePackage != null
+ && doesPackageSupportRuntimePermissions(dataServicePackage)) {
+ revokeRuntimePermissions(dataServicePackage, PHONE_PERMISSIONS, true, userId);
+ revokeRuntimePermissions(dataServicePackage, LOCATION_PERMISSIONS, true, userId);
+ }
+ }
+ }
+
public void grantDefaultPermissionsToDefaultBrowser(String packageName, int userId) {
Log.i(TAG, "Granting permissions to default browser for user:" + userId);
if (packageName == null) {
@@ -1078,6 +1112,51 @@
grantRuntimePermissions(pkg, permissions, systemFixed, false, userId);
}
+ private void revokeRuntimePermissions(PackageParser.Package pkg, Set<String> permissions,
+ boolean systemFixed, int userId) {
+ if (pkg.requestedPermissions.isEmpty()) {
+ return;
+ }
+ Set<String> revokablePermissions = new ArraySet<>(pkg.requestedPermissions);
+
+ for (String permission : permissions) {
+ // We can't revoke what wasn't requested.
+ if (!revokablePermissions.contains(permission)) {
+ continue;
+ }
+
+ final int flags = mServiceInternal.getPermissionFlagsTEMP(
+ permission, pkg.packageName, userId);
+
+ // We didn't get this through the default grant policy. Move along.
+ if ((flags & PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT) == 0) {
+ continue;
+ }
+ // We aren't going to clobber device policy with a DefaultGrant.
+ if ((flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0) {
+ continue;
+ }
+ // Do not revoke system fixed permissions unless caller set them that way;
+ // there is no refcount for the number of sources of this, so there
+ // should be at most one grantor doing SYSTEM_FIXED for any given package.
+ if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0 && !systemFixed) {
+ continue;
+ }
+ mServiceInternal.revokeRuntimePermission(pkg.packageName, permission, userId, false);
+
+ if (DEBUG) {
+ Log.i(TAG, "revoked " + (systemFixed ? "fixed " : "not fixed ")
+ + permission + " to " + pkg.packageName);
+ }
+
+ // Remove the GRANTED_BY_DEFAULT flag without touching the others.
+ // Note that we do not revoke FLAG_PERMISSION_SYSTEM_FIXED. That bit remains
+ // sticky once set.
+ mServiceInternal.updatePermissionFlagsTEMP(permission, pkg.packageName,
+ PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, 0, userId);
+ }
+ }
+
private void grantRuntimePermissions(PackageParser.Package pkg, Set<String> permissions,
boolean systemFixed, boolean ignoreSystemPackage, int userId) {
if (pkg.requestedPermissions.isEmpty()) {
@@ -1128,10 +1207,10 @@
// to make sure we can grant the needed permission to the default
// sms and phone apps after the user chooses this in the UI.
if (flags == 0 || ignoreSystemPackage) {
- // Never clobber policy or system.
- final int fixedFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
- | PackageManager.FLAG_PERMISSION_POLICY_FIXED;
- if ((flags & fixedFlags) != 0) {
+ // Never clobber policy fixed permissions.
+ // We must allow the grant of a system-fixed permission because
+ // system-fixed is sticky, but the permission itself may be revoked.
+ if ((flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index afa9dd0..f5b52fc 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1457,8 +1457,10 @@
final PermissionsState permissionsState = ps.getPermissionsState();
final int flags = permissionsState.getPermissionFlags(permName, userId);
- if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
- throw new SecurityException("Cannot revoke system fixed permission "
+ // Only the system may revoke SYSTEM_FIXED permissions.
+ if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0
+ && UserHandle.getCallingAppId() != Process.SYSTEM_UID) {
+ throw new SecurityException("Non-System UID cannot revoke system fixed permission "
+ permName + " for package " + packageName);
}
if (!overridePolicy && (flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0) {
@@ -1503,6 +1505,9 @@
return EmptyArray.INT;
}
for (PackageParser.Package pkg : pkgList) {
+ if (pkg.requestedPermissions == null) {
+ continue;
+ }
final int requestedPermCount = pkg.requestedPermissions.size();
for (int j = 0; j < requestedPermCount; j++) {
String permission = pkg.requestedPermissions.get(j);
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index dd88cd1..2ffc4e7 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -64,6 +64,7 @@
import android.os.WorkSource;
import android.os.WorkSource.WorkChain;
import android.provider.Settings;
+import android.provider.Settings.Global;
import android.provider.Settings.SettingNotFoundException;
import android.service.dreams.DreamManagerInternal;
import android.service.vr.IVrManager;
@@ -97,6 +98,7 @@
import com.android.server.lights.LightsManager;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.power.batterysaver.BatterySaverController;
+import com.android.server.power.batterysaver.BatterySaverStateMachine;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -225,6 +227,7 @@
private final AmbientDisplayConfiguration mAmbientDisplayConfiguration;
private final BatterySaverPolicy mBatterySaverPolicy;
private final BatterySaverController mBatterySaverController;
+ private final BatterySaverStateMachine mBatterySaverStateMachine;
private LightsManager mLightsManager;
private BatteryManagerInternal mBatteryManagerInternal;
@@ -492,18 +495,6 @@
// Time when we last logged a warning about calling userActivity() without permission.
private long mLastWarningAboutUserActivityPermission = Long.MIN_VALUE;
- // If true, the device is in low power mode.
- private boolean mLowPowerModeEnabled;
-
- // Current state of the low power mode setting.
- private boolean mLowPowerModeSetting;
-
- // Current state of whether the settings are allowing auto low power mode.
- private boolean mAutoLowPowerModeConfigured;
-
- // The user turned off low power mode below the trigger level
- private boolean mAutoLowPowerModeSnoozing;
-
// True if the battery level is currently considered low.
private boolean mBatteryLevelLow;
@@ -667,6 +658,7 @@
mBatterySaverPolicy = new BatterySaverPolicy(mHandler);
mBatterySaverController = new BatterySaverController(mContext,
BackgroundThread.get().getLooper(), mBatterySaverPolicy);
+ mBatterySaverStateMachine = new BatterySaverStateMachine(mContext, mBatterySaverController);
synchronized (mLock) {
mWakeLockSuspendBlocker = createSuspendBlockerLocked("PowerManagerService.WakeLocks");
@@ -704,6 +696,7 @@
mBatterySaverPolicy = batterySaverPolicy;
mBatterySaverController = new BatterySaverController(context,
BackgroundThread.getHandler().getLooper(), batterySaverPolicy);
+ mBatterySaverStateMachine = new BatterySaverStateMachine(mContext, mBatterySaverController);
}
@Override
@@ -725,6 +718,8 @@
final long now = SystemClock.uptimeMillis();
mBootCompleted = true;
mDirty |= DIRTY_BOOT_COMPLETED;
+
+ mBatterySaverStateMachine.onBootCompleted();
userActivityNoUpdateLocked(
now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID);
updatePowerStateLocked();
@@ -820,12 +815,6 @@
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ),
false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.Global.getUriFor(
- Settings.Global.LOW_POWER_MODE),
- false, mSettingsObserver, UserHandle.USER_ALL);
- resolver.registerContentObserver(Settings.Global.getUriFor(
- Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
- false, mSettingsObserver, UserHandle.USER_ALL);
- resolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.THEATER_MODE_ON),
false, mSettingsObserver, UserHandle.USER_ALL);
resolver.registerContentObserver(Settings.Secure.getUriFor(
@@ -953,17 +942,6 @@
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, UserHandle.USER_CURRENT);
- final boolean lowPowerModeEnabled = Settings.Global.getInt(resolver,
- Settings.Global.LOW_POWER_MODE, 0) != 0;
- final boolean autoLowPowerModeConfigured = Settings.Global.getInt(resolver,
- Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) != 0;
- if (lowPowerModeEnabled != mLowPowerModeSetting
- || autoLowPowerModeConfigured != mAutoLowPowerModeConfigured) {
- mLowPowerModeSetting = lowPowerModeEnabled;
- mAutoLowPowerModeConfigured = autoLowPowerModeConfigured;
- updateLowPowerModeLocked();
- }
-
mDirty |= DIRTY_SETTINGS;
}
@@ -977,29 +955,6 @@
}
}
- private void updateLowPowerModeLocked() {
- if ((mIsPowered || !mBatteryLevelLow && !mBootCompleted) && mLowPowerModeSetting) {
- if (DEBUG_SPEW) {
- Slog.d(TAG, "updateLowPowerModeLocked: powered or booting with sufficient battery,"
- + " turning setting off");
- }
- // Turn setting off if powered
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.LOW_POWER_MODE, 0);
- mLowPowerModeSetting = false;
- }
- final boolean autoLowPowerModeEnabled = !mIsPowered && mAutoLowPowerModeConfigured
- && !mAutoLowPowerModeSnoozing && mBatteryLevelLow;
- final boolean lowPowerModeEnabled = mLowPowerModeSetting || autoLowPowerModeEnabled;
-
- if (mLowPowerModeEnabled != lowPowerModeEnabled) {
- mLowPowerModeEnabled = lowPowerModeEnabled;
-
- postAfterBootCompleted(() ->
- mBatterySaverController.enableBatterySaver(mLowPowerModeEnabled));
- }
- }
-
private void handleSettingsChangedLocked() {
updateSettingsLocked();
updatePowerStateLocked();
@@ -1751,15 +1706,7 @@
}
}
- if (wasPowered != mIsPowered || oldLevelLow != mBatteryLevelLow) {
- if (oldLevelLow != mBatteryLevelLow && !mBatteryLevelLow) {
- if (DEBUG_SPEW) {
- Slog.d(TAG, "updateIsPoweredLocked: resetting low power snooze");
- }
- mAutoLowPowerModeSnoozing = false;
- }
- updateLowPowerModeLocked();
- }
+ mBatterySaverStateMachine.setBatteryStatus(mIsPowered, mBatteryLevel, mBatteryLevelLow);
}
}
@@ -2733,36 +2680,20 @@
}
private boolean isLowPowerModeInternal() {
- synchronized (mLock) {
- return mLowPowerModeEnabled;
- }
+ return mBatterySaverController.isEnabled();
}
- private boolean setLowPowerModeInternal(boolean mode) {
+ private boolean setLowPowerModeInternal(boolean enabled) {
synchronized (mLock) {
- if (DEBUG) Slog.d(TAG, "setLowPowerModeInternal " + mode + " mIsPowered=" + mIsPowered);
+ if (DEBUG) {
+ Slog.d(TAG, "setLowPowerModeInternal " + enabled + " mIsPowered=" + mIsPowered);
+ }
if (mIsPowered) {
return false;
}
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.LOW_POWER_MODE, mode ? 1 : 0);
- mLowPowerModeSetting = mode;
- if (mAutoLowPowerModeConfigured && mBatteryLevelLow) {
- if (mode && mAutoLowPowerModeSnoozing) {
- if (DEBUG_SPEW) {
- Slog.d(TAG, "setLowPowerModeInternal: clearing low power mode snooze");
- }
- mAutoLowPowerModeSnoozing = false;
- } else if (!mode && !mAutoLowPowerModeSnoozing) {
- if (DEBUG_SPEW) {
- Slog.d(TAG, "setLowPowerModeInternal: snoozing low power mode");
- }
- mAutoLowPowerModeSnoozing = true;
- }
- }
+ mBatterySaverStateMachine.setBatterySaverEnabledManually(enabled);
- updateLowPowerModeLocked();
return true;
}
}
@@ -2848,7 +2779,8 @@
@VisibleForTesting
void updatePowerRequestFromBatterySaverPolicy(DisplayPowerRequest displayPowerRequest) {
PowerSaveState state = mBatterySaverPolicy.
- getBatterySaverPolicy(ServiceType.SCREEN_BRIGHTNESS, mLowPowerModeEnabled);
+ getBatterySaverPolicy(ServiceType.SCREEN_BRIGHTNESS,
+ mBatterySaverController.isEnabled());
displayPowerRequest.lowPowerMode = state.batterySaverEnabled;
displayPowerRequest.screenLowPowerBrightnessFactor = state.brightnessFactor;
}
@@ -3325,7 +3257,6 @@
pw.println(" mRequestWaitForNegativeProximity=" + mRequestWaitForNegativeProximity);
pw.println(" mSandmanScheduled=" + mSandmanScheduled);
pw.println(" mSandmanSummoned=" + mSandmanSummoned);
- pw.println(" mLowPowerModeEnabled=" + mLowPowerModeEnabled);
pw.println(" mBatteryLevelLow=" + mBatteryLevelLow);
pw.println(" mLightDeviceIdleMode=" + mLightDeviceIdleMode);
pw.println(" mDeviceIdleMode=" + mDeviceIdleMode);
@@ -3378,9 +3309,6 @@
pw.println(" mDreamsActivateOnSleepSetting=" + mDreamsActivateOnSleepSetting);
pw.println(" mDreamsActivateOnDockSetting=" + mDreamsActivateOnDockSetting);
pw.println(" mDozeAfterScreenOff=" + mDozeAfterScreenOff);
- pw.println(" mLowPowerModeSetting=" + mLowPowerModeSetting);
- pw.println(" mAutoLowPowerModeConfigured=" + mAutoLowPowerModeConfigured);
- pw.println(" mAutoLowPowerModeSnoozing=" + mAutoLowPowerModeSnoozing);
pw.println(" mMinimumScreenOffTimeoutConfig=" + mMinimumScreenOffTimeoutConfig);
pw.println(" mMaximumScreenDimDurationConfig=" + mMaximumScreenDimDurationConfig);
pw.println(" mMaximumScreenDimRatioConfig=" + mMaximumScreenDimRatioConfig);
@@ -3456,6 +3384,7 @@
pw.println("Display Power: " + mDisplayPowerCallbacks);
mBatterySaverPolicy.dump(pw);
+ mBatterySaverStateMachine.dump(pw);
pw.println();
final int numProfiles = mProfilePowerState.size();
@@ -3557,7 +3486,6 @@
mRequestWaitForNegativeProximity);
proto.write(PowerManagerServiceDumpProto.IS_SANDMAN_SCHEDULED, mSandmanScheduled);
proto.write(PowerManagerServiceDumpProto.IS_SANDMAN_SUMMONED, mSandmanSummoned);
- proto.write(PowerManagerServiceDumpProto.IS_LOW_POWER_MODE_ENABLED, mLowPowerModeEnabled);
proto.write(PowerManagerServiceDumpProto.IS_BATTERY_LEVEL_LOW, mBatteryLevelLow);
proto.write(PowerManagerServiceDumpProto.IS_LIGHT_DEVICE_IDLE_MODE, mLightDeviceIdleMode);
proto.write(PowerManagerServiceDumpProto.IS_DEVICE_IDLE_MODE, mDeviceIdleMode);
@@ -3663,15 +3591,6 @@
PowerServiceSettingsAndConfigurationDumpProto.IS_DOZE_AFTER_SCREEN_OFF_CONFIG,
mDozeAfterScreenOff);
proto.write(
- PowerServiceSettingsAndConfigurationDumpProto.IS_LOW_POWER_MODE_SETTING,
- mLowPowerModeSetting);
- proto.write(
- PowerServiceSettingsAndConfigurationDumpProto.IS_AUTO_LOW_POWER_MODE_CONFIGURED,
- mAutoLowPowerModeConfigured);
- proto.write(
- PowerServiceSettingsAndConfigurationDumpProto.IS_AUTO_LOW_POWER_MODE_SNOOZING,
- mAutoLowPowerModeSnoozing);
- proto.write(
PowerServiceSettingsAndConfigurationDumpProto
.MINIMUM_SCREEN_OFF_TIMEOUT_CONFIG_MS,
mMinimumScreenOffTimeoutConfig);
@@ -3792,6 +3711,9 @@
proto.end(uIDToken);
}
+ mBatterySaverStateMachine.dumpProto(proto,
+ PowerManagerServiceDumpProto.BATTERY_SAVER_STATE_MACHINE);
+
mHandler.getLooper().writeToProto(proto, PowerManagerServiceDumpProto.LOOPER);
for (WakeLock wl : mWakeLocks) {
@@ -4432,12 +4354,12 @@
}
@Override // Binder call
- public boolean setPowerSaveMode(boolean mode) {
+ public boolean setPowerSaveMode(boolean enabled) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.DEVICE_POWER, null);
final long ident = Binder.clearCallingIdentity();
try {
- return setLowPowerModeInternal(mode);
+ return setLowPowerModeInternal(enabled);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -4752,7 +4674,8 @@
@Override
public PowerSaveState getLowPowerState(@ServiceType int serviceType) {
synchronized (mLock) {
- return mBatterySaverPolicy.getBatterySaverPolicy(serviceType, mLowPowerModeEnabled);
+ return mBatterySaverPolicy.getBatterySaverPolicy(serviceType,
+ mBatterySaverController.isEnabled());
}
}
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java
new file mode 100644
index 0000000..5b3182e
--- /dev/null
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java
@@ -0,0 +1,413 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.power.batterysaver;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.util.Slog;
+import android.util.proto.ProtoOutputStream;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.power.BatterySaverPolicy;
+import com.android.server.power.BatterySaverStateMachineProto;
+
+import java.io.PrintWriter;
+
+/**
+ * Decides when to enable / disable battery saver.
+ *
+ * (n.b. This isn't really implemented as a "state machine" though.)
+ *
+ * Test:
+ atest $ANDROID_BUILD_TOP/frameworks/base/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java
+ */
+public class BatterySaverStateMachine {
+ private static final String TAG = "BatterySaverStateMachine";
+ private final Object mLock = new Object();
+
+ private static final boolean DEBUG = BatterySaverPolicy.DEBUG;
+
+ private final Context mContext;
+ private final BatterySaverController mBatterySaverController;
+
+ /** Whether the system has booted. */
+ @GuardedBy("mLock")
+ private boolean mBootCompleted;
+
+ /** Whether global settings have been loaded already. */
+ @GuardedBy("mLock")
+ private boolean mSettingsLoaded;
+
+ /** Whether the first battery status has arrived. */
+ @GuardedBy("mLock")
+ private boolean mBatteryStatusSet;
+
+ /** Whether the device is connected to any power source. */
+ @GuardedBy("mLock")
+ private boolean mIsPowered;
+
+ /** Current battery level in %, 0-100. (Currently only used in dumpsys.) */
+ @GuardedBy("mLock")
+ private int mBatteryLevel;
+
+ /** Whether the battery level is considered to be "low" or not.*/
+ @GuardedBy("mLock")
+ private boolean mIsBatteryLevelLow;
+
+ /** Previously known value of Global.LOW_POWER_MODE. */
+ @GuardedBy("mLock")
+ private boolean mSettingBatterySaverEnabled;
+
+ /** Previously known value of Global.LOW_POWER_MODE_STICKY. */
+ @GuardedBy("mLock")
+ private boolean mSettingBatterySaverEnabledSticky;
+
+ /**
+ * Previously known value of Global.LOW_POWER_MODE_TRIGGER_LEVEL.
+ * (Currently only used in dumpsys.)
+ */
+ @GuardedBy("mLock")
+ private int mSettingBatterySaverTriggerThreshold;
+
+ /**
+ * Whether BS has been manually disabled while the battery level is low, in which case we
+ * shouldn't auto re-enable it until the battery level is not low.
+ */
+ @GuardedBy("mLock")
+ private boolean mBatterySaverSnoozing;
+
+ private final ContentObserver mSettingsObserver = new ContentObserver(null) {
+ @Override
+ public void onChange(boolean selfChange) {
+ synchronized (mLock) {
+ refreshSettingsLocked();
+ }
+ }
+ };
+
+ public BatterySaverStateMachine(
+ Context context, BatterySaverController batterySaverController) {
+ mContext = context;
+ mBatterySaverController = batterySaverController;
+ }
+
+ private boolean isBatterySaverEnabled() {
+ return mBatterySaverController.isEnabled();
+ }
+
+ private boolean isAutoBatterySaverConfigured() {
+ return mSettingBatterySaverTriggerThreshold > 0;
+ }
+
+ /**
+ * {@link com.android.server.power.PowerManagerService} calls it when the system is booted.
+ */
+ public void onBootCompleted() {
+ if (DEBUG) {
+ Slog.d(TAG, "onBootCompleted");
+ }
+ synchronized (mLock) {
+
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE),
+ false, mSettingsObserver, UserHandle.USER_SYSTEM);
+ cr.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_STICKY),
+ false, mSettingsObserver, UserHandle.USER_SYSTEM);
+ cr.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
+ false, mSettingsObserver, UserHandle.USER_SYSTEM);
+
+ mBootCompleted = true;
+
+ refreshSettingsLocked();
+
+ doAutoBatterySaverLocked();
+ }
+ }
+
+ void refreshSettingsLocked() {
+ final ContentResolver cr = mContext.getContentResolver();
+
+ final boolean lowPowerModeEnabled = getGlobalSetting(
+ Settings.Global.LOW_POWER_MODE, 0) != 0;
+ final boolean lowPowerModeEnabledSticky = getGlobalSetting(
+ Settings.Global.LOW_POWER_MODE_STICKY, 0) != 0;
+ final int lowPowerModeTriggerLevel = getGlobalSetting(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+
+ setSettingsLocked(lowPowerModeEnabled, lowPowerModeEnabledSticky,
+ lowPowerModeTriggerLevel);
+ }
+
+ /**
+ * {@link com.android.server.power.PowerManagerService} calls it when relevant global settings
+ * have changed.
+ *
+ * Note this will be called before {@link #onBootCompleted} too.
+ */
+ @VisibleForTesting
+ void setSettingsLocked(boolean batterySaverEnabled, boolean batterySaverEnabledSticky,
+ int batterySaverTriggerThreshold) {
+ if (DEBUG) {
+ Slog.d(TAG, "setSettings: enabled=" + batterySaverEnabled
+ + " sticky=" + batterySaverEnabledSticky
+ + " threshold=" + batterySaverTriggerThreshold);
+ }
+
+ mSettingsLoaded = true;
+
+ final boolean enabledChanged = mSettingBatterySaverEnabled != batterySaverEnabled;
+ final boolean stickyChanged =
+ mSettingBatterySaverEnabledSticky != batterySaverEnabledSticky;
+ final boolean thresholdChanged
+ = mSettingBatterySaverTriggerThreshold != batterySaverTriggerThreshold;
+
+ if (!(enabledChanged || stickyChanged || thresholdChanged)) {
+ return;
+ }
+
+ mSettingBatterySaverEnabled = batterySaverEnabled;
+ mSettingBatterySaverEnabledSticky = batterySaverEnabledSticky;
+ mSettingBatterySaverTriggerThreshold = batterySaverTriggerThreshold;
+
+ if (enabledChanged) {
+ final String reason = batterySaverEnabled
+ ? "Global.low_power changed to 1" : "Global.low_power changed to 0";
+ enableBatterySaverLocked(/*enable=*/ batterySaverEnabled, /*manual=*/ true,
+ reason);
+ }
+ }
+
+ /**
+ * {@link com.android.server.power.PowerManagerService} calls it when battery state changes.
+ *
+ * Note this may be called before {@link #onBootCompleted} too.
+ */
+ public void setBatteryStatus(boolean newPowered, int newLevel, boolean newBatteryLevelLow) {
+ if (DEBUG) {
+ Slog.d(TAG, "setBatteryStatus: powered=" + newPowered + " level=" + newLevel
+ + " low=" + newBatteryLevelLow);
+ }
+ synchronized (mLock) {
+ mBatteryStatusSet = true;
+
+ final boolean poweredChanged = mIsPowered != newPowered;
+ final boolean levelChanged = mBatteryLevel != newLevel;
+ final boolean lowChanged = mIsBatteryLevelLow != newBatteryLevelLow;
+
+ if (!(poweredChanged || levelChanged || lowChanged)) {
+ return;
+ }
+
+ mIsPowered = newPowered;
+ mBatteryLevel = newLevel;
+ mIsBatteryLevelLow = newBatteryLevelLow;
+
+ doAutoBatterySaverLocked();
+ }
+ }
+
+ /**
+ * Decide whether to auto-start / stop battery saver.
+ */
+ private void doAutoBatterySaverLocked() {
+ if (DEBUG) {
+ Slog.d(TAG, "doAutoBatterySaverLocked: mBootCompleted=" + mBootCompleted
+ + " mSettingsLoaded=" + mSettingsLoaded
+ + " mBatteryStatusSet=" + mBatteryStatusSet
+ + " mIsBatteryLevelLow=" + mIsBatteryLevelLow
+ + " mBatterySaverSnoozing=" + mBatterySaverSnoozing
+ + " mIsPowered=" + mIsPowered
+ + " mSettingBatterySaverEnabledSticky=" + mSettingBatterySaverEnabledSticky);
+ }
+ if (!(mBootCompleted && mSettingsLoaded && mBatteryStatusSet)) {
+ return; // Not fully initialized yet.
+ }
+ if (!mIsBatteryLevelLow) {
+ updateSnoozingLocked(false, "Battery not low");
+ }
+ if (mIsPowered) {
+ updateSnoozingLocked(false, "Plugged in");
+ enableBatterySaverLocked(/*enable=*/ false, /*manual=*/ false, "Plugged in");
+
+ } else if (mSettingBatterySaverEnabledSticky) {
+ // Re-enable BS.
+ enableBatterySaverLocked(/*enable=*/ true, /*manual=*/ true, "Sticky restore");
+
+ } else if (mIsBatteryLevelLow) {
+ if (!mBatterySaverSnoozing && isAutoBatterySaverConfigured()) {
+ enableBatterySaverLocked(/*enable=*/ true, /*manual=*/ false, "Auto ON");
+ }
+ } else { // Battery not low
+ enableBatterySaverLocked(/*enable=*/ false, /*manual=*/ false, "Auto OFF");
+ }
+ }
+
+ /**
+ * {@link com.android.server.power.PowerManagerService} calls it when
+ * {@link android.os.PowerManager#setPowerSaveMode} is called.
+ *
+ * Note this could? be called before {@link #onBootCompleted} too.
+ */
+ public void setBatterySaverEnabledManually(boolean enabled) {
+ if (DEBUG) {
+ Slog.d(TAG, "setBatterySaverEnabledManually: enabled=" + enabled);
+ }
+ synchronized (mLock) {
+ enableBatterySaverLocked(/*enable=*/ enabled, /*manual=*/ true,
+ (enabled ? "Manual ON" : "Manual OFF"));
+ }
+ }
+
+ /**
+ * Actually enable / disable battery saver. Write the new state to the global settings
+ * and propagate it to {@link #mBatterySaverController}.
+ */
+ private void enableBatterySaverLocked(boolean enable, boolean manual, String reason) {
+ if (DEBUG) {
+ Slog.d(TAG, "enableBatterySaver: enable=" + enable + " manual=" + manual
+ + " reason=" + reason);
+ }
+ final boolean wasEnabled = mBatterySaverController.isEnabled();
+
+ if (wasEnabled == enable) {
+ if (DEBUG) {
+ Slog.d(TAG, "Already " + (enable ? "enabled" : "disabled"));
+ }
+ return;
+ }
+ if (enable && mIsPowered) {
+ if (DEBUG) Slog.d(TAG, "Can't enable: isPowered");
+ return;
+ }
+
+ if (manual) {
+ if (enable) {
+ updateSnoozingLocked(false, "Manual snooze OFF");
+ } else {
+ // When battery saver is disabled manually (while battery saver is enabled)
+ // when the battery level is low, we "snooze" BS -- i.e. disable auto battery saver.
+ // We resume auto-BS once the battery level is not low, or the device is plugged in.
+ if (isBatterySaverEnabled() && mIsBatteryLevelLow) {
+ updateSnoozingLocked(true, "Manual snooze");
+ }
+ }
+ }
+
+ mSettingBatterySaverEnabled = enable;
+ putGlobalSetting(Global.LOW_POWER_MODE, enable ? 1 : 0);
+
+ if (manual) {
+ mSettingBatterySaverEnabledSticky = enable;
+ putGlobalSetting(Global.LOW_POWER_MODE_STICKY, enable ? 1 : 0);
+ }
+ mBatterySaverController.enableBatterySaver(enable);
+
+ if (DEBUG) {
+ Slog.d(TAG, "Battery saver: Enabled=" + enable
+ + " manual=" + manual
+ + " reason=" + reason);
+ }
+ }
+
+ private void updateSnoozingLocked(boolean snoozing, String reason) {
+ if (mBatterySaverSnoozing == snoozing) {
+ return;
+ }
+ if (DEBUG) Slog.d(TAG, "Snooze: " + (snoozing ? "start" : "stop") + " reason=" + reason);
+ mBatterySaverSnoozing = snoozing;
+ }
+
+ @VisibleForTesting
+ protected void putGlobalSetting(String key, int value) {
+ Global.putInt(mContext.getContentResolver(), key, value);
+ }
+
+ @VisibleForTesting
+ protected int getGlobalSetting(String key, int defValue) {
+ return Global.getInt(mContext.getContentResolver(), key, defValue);
+ }
+
+ public void dump(PrintWriter pw) {
+ synchronized (mLock) {
+ pw.println();
+ pw.println("Battery saver state machine:");
+
+ pw.print(" Enabled=");
+ pw.println(mBatterySaverController.isEnabled());
+
+ pw.print(" mBootCompleted=");
+ pw.println(mBootCompleted);
+ pw.print(" mSettingsLoaded=");
+ pw.println(mSettingsLoaded);
+ pw.print(" mBatteryStatusSet=");
+ pw.println(mBatteryStatusSet);
+
+ pw.print(" mBatterySaverSnoozing=");
+ pw.println(mBatterySaverSnoozing);
+
+ pw.print(" mIsPowered=");
+ pw.println(mIsPowered);
+ pw.print(" mBatteryLevel=");
+ pw.println(mBatteryLevel);
+ pw.print(" mIsBatteryLevelLow=");
+ pw.println(mIsBatteryLevelLow);
+
+ pw.print(" mSettingBatterySaverEnabled=");
+ pw.println(mSettingBatterySaverEnabled);
+ pw.print(" mSettingBatterySaverEnabledSticky=");
+ pw.println(mSettingBatterySaverEnabledSticky);
+ pw.print(" mSettingBatterySaverTriggerThreshold=");
+ pw.println(mSettingBatterySaverTriggerThreshold);
+ }
+ }
+
+ public void dumpProto(ProtoOutputStream proto, long tag) {
+ synchronized (mLock) {
+ final long token = proto.start(tag);
+
+ proto.write(BatterySaverStateMachineProto.ENABLED,
+ mBatterySaverController.isEnabled());
+
+ proto.write(BatterySaverStateMachineProto.BOOT_COMPLETED, mBootCompleted);
+ proto.write(BatterySaverStateMachineProto.SETTINGS_LOADED, mSettingsLoaded);
+ proto.write(BatterySaverStateMachineProto.BATTERY_STATUS_SET, mBatteryStatusSet);
+
+ proto.write(BatterySaverStateMachineProto.BATTERY_SAVER_SNOOZING,
+ mBatterySaverSnoozing);
+
+ proto.write(BatterySaverStateMachineProto.IS_POWERED, mIsPowered);
+ proto.write(BatterySaverStateMachineProto.BATTERY_LEVEL, mBatteryLevel);
+ proto.write(BatterySaverStateMachineProto.IS_BATTERY_LEVEL_LOW, mIsBatteryLevelLow);
+
+ proto.write(BatterySaverStateMachineProto.SETTING_BATTERY_SAVER_ENABLED,
+ mSettingBatterySaverEnabled);
+ proto.write(BatterySaverStateMachineProto.SETTING_BATTERY_SAVER_ENABLED_STICKY,
+ mSettingBatterySaverEnabledSticky);
+ proto.write(BatterySaverStateMachineProto.SETTING_BATTERY_SAVER_TRIGGER_THRESHOLD,
+ mSettingBatterySaverTriggerThreshold);
+
+ proto.end(token);
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index 74c5ee9..b3d28fc 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -972,10 +972,13 @@
public void triggerUidSnapshot() {
enforceCallingPermission();
synchronized (sStatsdLock) {
+ final long token = Binder.clearCallingIdentity();
try {
informAllUidsLocked(mContext);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to trigger uid snapshot.", e);
+ } finally {
+ restoreCallingIdentity(token);
}
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 3e47ea6..a7eac55 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -385,6 +385,11 @@
*/
private int mSurfaceSize;
+ /**
+ * Sequence number for the current layout pass.
+ */
+ int mLayoutSeq = 0;
+
/** Temporary float array to retrieve 3x3 matrix values. */
private final float[] mTmpFloats = new float[9];
@@ -554,7 +559,7 @@
w.prelayout();
final boolean firstLayout = !w.isLaidOut();
mService.mPolicy.layoutWindowLw(w, null, mDisplayFrames);
- w.mLayoutSeq = mService.mLayoutSeq;
+ w.mLayoutSeq = mLayoutSeq;
// If this is the first layout, we need to initialize the last inset values as
// otherwise we'd immediately cause an unnecessary resize.
@@ -593,7 +598,7 @@
w.mLayoutNeeded = false;
w.prelayout();
mService.mPolicy.layoutWindowLw(w, w.getParentWindow(), mDisplayFrames);
- w.mLayoutSeq = mService.mLayoutSeq;
+ w.mLayoutSeq = mLayoutSeq;
if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + w.mFrame
+ " mContainingFrame=" + w.mContainingFrame
+ " mDisplayFrame=" + w.mDisplayFrame);
@@ -2219,6 +2224,9 @@
pw.println(" mTouchExcludeRegion=" + mTouchExcludeRegion);
pw.println();
+ pw.print(prefix); pw.print("mLayoutSeq="); pw.println(mLayoutSeq);
+
+ pw.println();
pw.println(prefix + "Application tokens in top down Z order:");
for (int stackNdx = mTaskStackContainers.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
final TaskStack stack = mTaskStackContainers.getChildAt(stackNdx);
@@ -2927,9 +2935,9 @@
mService.mScreenRect.set(0, 0, dw, dh);
}
- int seq = mService.mLayoutSeq + 1;
+ int seq = mLayoutSeq + 1;
if (seq < 0) seq = 0;
- mService.mLayoutSeq = seq;
+ mLayoutSeq = seq;
// Used to indicate that we have processed the dream window and all additional windows are
// behind it.
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 19d6691..87a7a74 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -51,6 +51,7 @@
import com.google.android.collect.Sets;
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
+import com.android.server.wm.utils.InsetUtils;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -400,9 +401,11 @@
if (mainWindow == null) {
return null;
}
+ final Rect insets = new Rect(mainWindow.mContentInsets);
+ InsetUtils.addInsets(insets, mainWindow.mAppToken.getLetterboxInsets());
mTarget = new RemoteAnimationTarget(mTask.mTaskId, MODE_CLOSING, mCapturedLeash,
!mTask.fillsParent(), mainWindow.mWinAnimator.mLastClipRect,
- mainWindow.mContentInsets, mTask.getPrefixOrderIndex(), position, bounds,
+ insets, mTask.getPrefixOrderIndex(), position, bounds,
mTask.getWindowConfiguration(), mIsRecentTaskInvisible);
return mTarget;
}
diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java
index c590067..3e7feda 100644
--- a/services/core/java/com/android/server/wm/RemoteAnimationController.java
+++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java
@@ -16,14 +16,15 @@
package com.android.server.wm;
+import static com.android.server.wm.AnimationAdapterProto.REMOTE;
+import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.AnimationAdapterProto.REMOTE;
-import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
import android.graphics.Point;
import android.graphics.Rect;
+import android.os.Binder;
import android.os.Handler;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -37,6 +38,7 @@
import com.android.internal.util.FastPrintWriter;
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
+import com.android.server.wm.utils.InsetUtils;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -194,12 +196,17 @@
@Override
public void onAnimationFinished() throws RemoteException {
- if (mOuter != null) {
- mOuter.onAnimationFinished();
+ final long token = Binder.clearCallingIdentity();
+ try {
+ if (mOuter != null) {
+ mOuter.onAnimationFinished();
- // In case the client holds on to the finish callback, make sure we don't leak
- // RemoteAnimationController which in turn would leak the runner on the client.
- mOuter = null;
+ // In case the client holds on to the finish callback, make sure we don't leak
+ // RemoteAnimationController which in turn would leak the runner on the client.
+ mOuter = null;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
}
}
@@ -235,9 +242,11 @@
|| mCapturedLeash == null) {
return null;
}
+ final Rect insets = new Rect(mainWindow.mContentInsets);
+ InsetUtils.addInsets(insets, mAppWindowToken.getLetterboxInsets());
mTarget = new RemoteAnimationTarget(task.mTaskId, getMode(),
mCapturedLeash, !mAppWindowToken.fillsParent(),
- mainWindow.mWinAnimator.mLastClipRect, mainWindow.mContentInsets,
+ mainWindow.mWinAnimator.mLastClipRect, insets,
mAppWindowToken.getPrefixOrderIndex(), mPosition, mStackBounds,
task.getWindowConfiguration(), false /*isNotInRecents*/);
return mTarget;
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index 970a8d7..5f9d679 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -27,7 +27,6 @@
import android.app.ActivityManager.TaskSnapshot;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
-import android.graphics.Color;
import android.graphics.GraphicBuffer;
import android.graphics.Rect;
import android.os.Environment;
@@ -45,6 +44,7 @@
import com.android.server.policy.WindowManagerPolicy.ScreenOffListener;
import com.android.server.policy.WindowManagerPolicy.StartingSurface;
import com.android.server.wm.TaskSnapshotSurface.SystemBarBackgroundPainter;
+import com.android.server.wm.utils.InsetUtils;
import com.google.android.collect.Sets;
@@ -273,7 +273,7 @@
return null;
}
return new TaskSnapshot(buffer, top.getConfiguration().orientation,
- getInsetsFromTaskBounds(mainWindow, task),
+ getInsets(mainWindow),
isLowRamDevice /* reduced */, scaleFraction /* scale */,
true /* isRealSnapshot */);
}
@@ -282,11 +282,11 @@
return mIsRunningOnWear || mIsRunningOnTv || mIsRunningOnIoT;
}
- private Rect getInsetsFromTaskBounds(WindowState state, Task task) {
+ private Rect getInsets(WindowState state) {
// XXX(b/72757033): These are insets relative to the window frame, but we're really
// interested in the insets relative to the task bounds.
- Rect insets = minRect(state.mContentInsets, state.mStableInsets);
- insets = maxRect(insets, state.mAppToken.getLetterboxInsets());
+ final Rect insets = minRect(state.mContentInsets, state.mStableInsets);
+ InsetUtils.addInsets(insets, state.mAppToken.getLetterboxInsets());
return insets;
}
@@ -297,13 +297,6 @@
Math.min(rect1.bottom, rect2.bottom));
}
- private Rect maxRect(Rect rect1, Rect rect2) {
- return new Rect(Math.max(rect1.left, rect2.left),
- Math.max(rect1.top, rect2.top),
- Math.max(rect1.right, rect2.right),
- Math.max(rect1.bottom, rect2.bottom));
- }
-
/**
* Retrieves all closing tasks based on the list of closing apps during an app transition.
*/
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 56b314f..449aa2c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -596,8 +596,6 @@
boolean mClientFreezingScreen = false;
int mAppsFreezingScreen = 0;
- int mLayoutSeq = 0;
-
// Last systemUiVisibility we received from status bar.
int mLastStatusBarVisibility = 0;
// Last systemUiVisibility we dispatched to windows.
@@ -6344,8 +6342,7 @@
if (mInputMethodTarget != null) {
pw.print(" mInputMethodTarget="); pw.println(mInputMethodTarget);
}
- pw.print(" mInTouchMode="); pw.print(mInTouchMode);
- pw.print(" mLayoutSeq="); pw.println(mLayoutSeq);
+ pw.print(" mInTouchMode="); pw.println(mInTouchMode);
pw.print(" mLastDisplayFreezeDuration=");
TimeUtils.formatDuration(mLastDisplayFreezeDuration, pw);
if ( mLastFinishedFreezeSource != null) {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 993556f..30bbfe0 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1236,7 +1236,7 @@
*/
void updateResizingWindowIfNeeded() {
final WindowStateAnimator winAnimator = mWinAnimator;
- if (!mHasSurface || mService.mLayoutSeq != mLayoutSeq || isGoneForLayoutLw()) {
+ if (!mHasSurface || getDisplayContent().mLayoutSeq != mLayoutSeq || isGoneForLayoutLw()) {
return;
}
@@ -1360,6 +1360,15 @@
return mToken.getDisplayContent();
}
+ @Override
+ void onDisplayChanged(DisplayContent dc) {
+ super.onDisplayChanged(dc);
+ // Window was not laid out for this display yet, so make sure mLayoutSeq does not match.
+ if (dc != null) {
+ mLayoutSeq = dc.mLayoutSeq - 1;
+ }
+ }
+
DisplayInfo getDisplayInfo() {
final DisplayContent displayContent = getDisplayContent();
return displayContent != null ? displayContent.getDisplayInfo() : null;
diff --git a/services/core/java/com/android/server/wm/utils/InsetUtils.java b/services/core/java/com/android/server/wm/utils/InsetUtils.java
new file mode 100644
index 0000000..b4a998a
--- /dev/null
+++ b/services/core/java/com/android/server/wm/utils/InsetUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm.utils;
+
+import android.graphics.Rect;
+
+/**
+ * Utility methods to handle insets represented as rects.
+ */
+public class InsetUtils {
+
+ private InsetUtils() {
+ }
+
+ /**
+ * Adds {@code insetsToAdd} to {@code inOutInsets}.
+ */
+ public static void addInsets(Rect inOutInsets, Rect insetsToAdd) {
+ inOutInsets.left += insetsToAdd.left;
+ inOutInsets.top += insetsToAdd.top;
+ inOutInsets.right += insetsToAdd.right;
+ inOutInsets.bottom += insetsToAdd.bottom;
+ }
+}
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 427b9d2..89efe12 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -86,6 +86,7 @@
"libhardware_legacy",
"libhidlbase",
"libkeystore_binder",
+ "libmtp",
"libnativehelper",
"libutils",
"libui",
diff --git a/services/core/jni/com_android_server_UsbDeviceManager.cpp b/services/core/jni/com_android_server_UsbDeviceManager.cpp
index f37f870..ff1ec04 100644
--- a/services/core/jni/com_android_server_UsbDeviceManager.cpp
+++ b/services/core/jni/com_android_server_UsbDeviceManager.cpp
@@ -21,6 +21,7 @@
#include <nativehelper/JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
#include "android_runtime/Log.h"
+#include "MtpDescriptors.h"
#include <stdio.h>
#include <asm/byteorder.h>
@@ -118,6 +119,38 @@
return result;
}
+static jobject android_server_UsbDeviceManager_openControl(JNIEnv *env, jobject /* thiz */, jstring jFunction) {
+ const char *function = env->GetStringUTFChars(jFunction, NULL);
+ bool ptp = false;
+ int fd = -1;
+ if (!strcmp(function, "ptp")) {
+ ptp = true;
+ }
+ if (!strcmp(function, "mtp") || ptp) {
+ fd = TEMP_FAILURE_RETRY(open(ptp ? FFS_PTP_EP0 : FFS_MTP_EP0, O_RDWR));
+ if (fd < 0) {
+ ALOGE("could not open control for %s %s", function, strerror(errno));
+ goto error;
+ }
+ if (!writeDescriptors(fd, ptp)) {
+ goto error;
+ }
+ }
+
+ if (function != NULL) {
+ env->ReleaseStringUTFChars(jFunction, function);
+ }
+ return jniCreateFileDescriptor(env, fd);
+error:
+ if (fd != -1) {
+ close(fd);
+ }
+ if (function != NULL) {
+ env->ReleaseStringUTFChars(jFunction, function);
+ }
+ return NULL;
+}
+
static const JNINativeMethod method_table[] = {
{ "nativeGetAccessoryStrings", "()[Ljava/lang/String;",
(void*)android_server_UsbDeviceManager_getAccessoryStrings },
@@ -127,6 +160,8 @@
(void*)android_server_UsbDeviceManager_isStartRequested },
{ "nativeGetAudioMode", "()I",
(void*)android_server_UsbDeviceManager_getAudioMode },
+ { "nativeOpenControl", "(Ljava/lang/String;)Ljava/io/FileDescriptor;",
+ (void*)android_server_UsbDeviceManager_openControl },
};
int register_android_server_UsbDeviceManager(JNIEnv *env)
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 2e07703..1e216a3 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -566,9 +566,7 @@
}
public static class DevicePolicyData {
- @NonNull PasswordMetrics mActivePasswordMetrics = new PasswordMetrics();
int mFailedPasswordAttempts = 0;
- boolean mPasswordStateHasBeenSetSinceBoot = false;
boolean mPasswordValidAtLastCheckpoint = true;
int mUserHandle;
@@ -628,6 +626,8 @@
}
final SparseArray<DevicePolicyData> mUserData = new SparseArray<>();
+ @GuardedBy("DevicePolicyManagerService.this")
+ final SparseArray<PasswordMetrics> mUserPasswordMetrics = new SparseArray<>();
final Handler mHandler;
final Handler mBackgroundHandler;
@@ -2158,6 +2158,16 @@
}
/**
+ * Provides PasswordMetrics object corresponding to the given user.
+ * @param userHandle the user for whom to provide metrics.
+ * @return the user password metrics, or {@code null} if none have been associated with
+ * the user yet (for example, if the device has booted but not been unlocked).
+ */
+ PasswordMetrics getUserPasswordMetricsLocked(int userHandle) {
+ return mUserPasswordMetrics.get(userHandle);
+ }
+
+ /**
* Creates and loads the policy data from xml for data that is shared between
* various profiles of a user. In contrast to {@link #getUserData(int)}
* it allows access to data of users other than the calling user.
@@ -2191,6 +2201,10 @@
if (policy != null) {
mUserData.remove(userHandle);
}
+ if (mUserPasswordMetrics.get(userHandle) != null) {
+ mUserPasswordMetrics.remove(userHandle);
+ }
+
File policyFile = new File(mInjector.environmentGetUserSystemDirectory(userHandle),
DEVICE_POLICIES_XML);
policyFile.delete();
@@ -3907,9 +3921,15 @@
private void updatePasswordValidityCheckpointLocked(int userHandle, boolean parent) {
final int credentialOwner = getCredentialOwner(userHandle, parent);
DevicePolicyData policy = getUserData(credentialOwner);
+ PasswordMetrics metrics = getUserPasswordMetricsLocked(credentialOwner);
+ if (metrics == null) {
+ Slog.wtf(LOG_TAG, "Should have had a valid password metrics for updating checkpoint " +
+ "validity.");
+ metrics = new PasswordMetrics();
+ }
policy.mPasswordValidAtLastCheckpoint =
isPasswordSufficientForUserWithoutCheckpointLocked(
- policy.mActivePasswordMetrics, userHandle, parent);
+ metrics, userHandle, parent);
saveSettingsLocked(credentialOwner);
}
@@ -4532,8 +4552,11 @@
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
getActiveAdminForCallerLocked(null, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
- DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, parent));
- return isActivePasswordSufficientForUserLocked(policy, userHandle, parent);
+ int credentialOwner = getCredentialOwner(userHandle, parent);
+ DevicePolicyData policy = getUserDataUnchecked(credentialOwner);
+ PasswordMetrics metrics = getUserPasswordMetricsLocked(credentialOwner);
+ return isActivePasswordSufficientForUserLocked(
+ policy.mPasswordValidAtLastCheckpoint, metrics, userHandle, parent);
}
}
@@ -4559,25 +4582,31 @@
synchronized (this) {
final int targetUser = getProfileParentId(userHandle);
enforceUserUnlocked(targetUser, false);
- DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, false));
- return isActivePasswordSufficientForUserLocked(policy, targetUser, false);
+ int credentialOwner = getCredentialOwner(userHandle, false);
+ DevicePolicyData policy = getUserDataUnchecked(credentialOwner);
+ PasswordMetrics metrics = getUserPasswordMetricsLocked(credentialOwner);
+ return isActivePasswordSufficientForUserLocked(
+ policy.mPasswordValidAtLastCheckpoint, metrics, targetUser, false);
}
}
private boolean isActivePasswordSufficientForUserLocked(
- DevicePolicyData policy, int userHandle, boolean parent) {
- if (!mInjector.storageManagerIsFileBasedEncryptionEnabled()
- && !policy.mPasswordStateHasBeenSetSinceBoot) {
+ boolean passwordValidAtLastCheckpoint, PasswordMetrics metrics, int userHandle,
+ boolean parent) {
+ if (!mInjector.storageManagerIsFileBasedEncryptionEnabled() && (metrics == null)) {
// Before user enters their password for the first time after a reboot, return the
// value of this flag, which tells us whether the password was valid the last time
// settings were saved. If DPC changes password requirements on boot so that the
// current password no longer meets the requirements, this value will be stale until
// the next time the password is entered.
- return policy.mPasswordValidAtLastCheckpoint;
+ return passwordValidAtLastCheckpoint;
}
- return isPasswordSufficientForUserWithoutCheckpointLocked(
- policy.mActivePasswordMetrics, userHandle, parent);
+ if (metrics == null) {
+ Slog.wtf(LOG_TAG, "FBE device, should have been unlocked and had valid metrics.");
+ metrics = new PasswordMetrics();
+ }
+ return isPasswordSufficientForUserWithoutCheckpointLocked(metrics, userHandle, parent);
}
/**
@@ -6123,10 +6152,8 @@
}
validateQualityConstant(metrics.quality);
- DevicePolicyData policy = getUserData(userHandle);
synchronized (this) {
- policy.mActivePasswordMetrics = metrics;
- policy.mPasswordStateHasBeenSetSinceBoot = true;
+ mUserPasswordMetrics.put(userHandle, metrics);
}
}
@@ -7640,6 +7667,7 @@
if (!mHasFeature) {
return DevicePolicyManager.STATE_USER_UNMANAGED;
}
+ enforceManageUsers();
int userHandle = mInjector.userHandleGetCallingUserId();
return getUserProvisioningState(userHandle);
}
@@ -7833,8 +7861,7 @@
ApplicationInfo appInfo = userContext.getApplicationInfo();
CharSequence result = null;
if (appInfo != null) {
- PackageManager pm = userContext.getPackageManager();
- result = pm.getApplicationLabel(appInfo);
+ result = appInfo.loadUnsafeLabel(userContext.getPackageManager());
}
return result != null ? result.toString() : null;
} finally {
@@ -11816,6 +11843,7 @@
@Override
public boolean isDeviceProvisioned() {
+ enforceManageUsers();
synchronized (this) {
return getUserDataUnchecked(UserHandle.USER_SYSTEM).mUserSetupComplete;
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
index 0268519..8366114 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java
@@ -723,6 +723,11 @@
mSystemUpdatePolicy.saveToXml(out);
out.endTag(null, TAG_SYSTEM_UPDATE_POLICY);
}
+
+ if (mSystemUpdateInfo != null) {
+ mSystemUpdateInfo.writeToXml(out, TAG_PENDING_OTA_INFO);
+ }
+
if (mSystemUpdateFreezeStart != null || mSystemUpdateFreezeEnd != null) {
out.startTag(null, TAG_FREEZE_PERIOD_RECORD);
if (mSystemUpdateFreezeStart != null) {
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
index 08158ec..b9ddf5c 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
@@ -222,7 +222,7 @@
assertFalse(splitScreenSecondary.shouldBeVisible(null /* starting */));
assertTrue(splitScreenSecondary2.shouldBeVisible(null /* starting */));
- // First split-screen secondary should be visible behind another translucent split-split
+ // First split-screen secondary should be visible behind another translucent split-screen
// secondary.
splitScreenSecondary2.setIsTranslucent(true);
assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */));
@@ -244,6 +244,16 @@
assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */));
assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */));
assertTrue(splitScreenSecondary2.shouldBeVisible(null /* starting */));
+
+ // Assistant stack shouldn't be visible behind translucent split-screen stack
+ assistantStack.setIsTranslucent(false);
+ splitScreenPrimary.setIsTranslucent(true);
+ splitScreenSecondary2.setIsTranslucent(true);
+ splitScreenSecondary2.moveToFront("testShouldBeVisible_SplitScreen");
+ splitScreenPrimary.moveToFront("testShouldBeVisible_SplitScreen");
+ assertFalse(assistantStack.shouldBeVisible(null /* starting */));
+ assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */));
+ assertTrue(splitScreenSecondary2.shouldBeVisible(null /* starting */));
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
index 376f5b1..7765387 100644
--- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java
@@ -42,11 +42,13 @@
import android.app.ActivityManager;
import android.app.ActivityManager.RecentTaskInfo;
import android.app.ActivityManager.RunningTaskInfo;
+import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.pm.UserInfo;
+import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Debug;
@@ -101,8 +103,8 @@
private TestRecentTasks mRecentTasks;
private TestRunningTasks mRunningTasks;
- private static ArrayList<TaskRecord> mTasks = new ArrayList<>();
- private static ArrayList<TaskRecord> mSameDocumentTasks = new ArrayList<>();
+ private ArrayList<TaskRecord> mTasks;
+ private ArrayList<TaskRecord> mSameDocumentTasks;
private CallbacksRecorder mCallbacksRecorder;
@@ -155,12 +157,14 @@
mRecentTasks.registerCallback(mCallbacksRecorder);
QUIET_USER_INFO.flags = UserInfo.FLAG_MANAGED_PROFILE | UserInfo.FLAG_QUIET_MODE;
+ mTasks = new ArrayList<>();
mTasks.add(createTaskBuilder(".Task1").build());
mTasks.add(createTaskBuilder(".Task2").build());
mTasks.add(createTaskBuilder(".Task3").build());
mTasks.add(createTaskBuilder(".Task4").build());
mTasks.add(createTaskBuilder(".Task5").build());
+ mSameDocumentTasks = new ArrayList<>();
mSameDocumentTasks.add(createDocumentTask(".DocumentTask1"));
mSameDocumentTasks.add(createDocumentTask(".DocumentTask1"));
}
@@ -294,7 +298,32 @@
assertTrue(mCallbacksRecorder.added.contains(task2));
assertTrue(mCallbacksRecorder.trimmed.isEmpty());
assertTrue(mCallbacksRecorder.removed.isEmpty());
+ }
+ @Test
+ public void testAddTaskCompatibleActivityType_expectRemove() throws Exception {
+ Configuration config1 = new Configuration();
+ config1.windowConfiguration.setActivityType(ACTIVITY_TYPE_UNDEFINED);
+ TaskRecord task1 = createTaskBuilder(".Task1")
+ .setFlags(FLAG_ACTIVITY_NEW_TASK)
+ .setStack(mStack)
+ .build();
+ task1.onConfigurationChanged(config1);
+ assertTrue(task1.getActivityType() == ACTIVITY_TYPE_UNDEFINED);
+ mRecentTasks.add(task1);
+ mCallbacksRecorder.clear();
+
+ TaskRecord task2 = createTaskBuilder(".Task1")
+ .setFlags(FLAG_ACTIVITY_NEW_TASK)
+ .setStack(mStack)
+ .build();
+ assertTrue(task2.getActivityType() == ACTIVITY_TYPE_STANDARD);
+ mRecentTasks.add(task2);
+ assertTrue(mCallbacksRecorder.added.size() == 1);
+ assertTrue(mCallbacksRecorder.added.contains(task2));
+ assertTrue(mCallbacksRecorder.trimmed.isEmpty());
+ assertTrue(mCallbacksRecorder.removed.size() == 1);
+ assertTrue(mCallbacksRecorder.removed.contains(task1));
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
index ea207f1..9e6055d 100644
--- a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
@@ -29,6 +29,9 @@
import java.io.File;
import java.util.Random;
+/**
+ * atest FrameworksServicesTests:TaskPersisterTest
+ */
public class TaskPersisterTest extends AndroidTestCase {
private static final String TEST_USER_NAME = "AM-Test-User";
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index 43490d3..a64efb7 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -2387,12 +2387,12 @@
}
public void testGetUserProvisioningState_defaultResult() {
+ mContext.callerPermissions.add(permission.MANAGE_USERS);
assertEquals(DevicePolicyManager.STATE_USER_UNMANAGED, dpm.getUserProvisioningState());
}
public void testSetUserProvisioningState_permission() throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(DpmMockContext.CALLER_USER_HANDLE,
DevicePolicyManager.STATE_USER_SETUP_FINALIZED);
@@ -2407,6 +2407,7 @@
public void testSetUserProvisioningState_noManagement() {
mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
+ mContext.callerPermissions.add(permission.MANAGE_USERS);
assertExpectException(IllegalStateException.class,
/* messageRegex= */ "change provisioning state unless a .* owner is set",
() -> dpm.setUserProvisioningState(DevicePolicyManager.STATE_USER_SETUP_FINALIZED,
@@ -2417,7 +2418,6 @@
public void testSetUserProvisioningState_deviceOwnerFromSetupWizard() throws Exception {
mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
setupDeviceOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(UserHandle.USER_SYSTEM,
DevicePolicyManager.STATE_USER_SETUP_COMPLETE,
@@ -2428,7 +2428,6 @@
throws Exception {
mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
setupDeviceOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(UserHandle.USER_SYSTEM,
DevicePolicyManager.STATE_USER_SETUP_INCOMPLETE,
@@ -2438,7 +2437,6 @@
public void testSetUserProvisioningState_deviceOwnerWithoutSetupWizard() throws Exception {
mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
setupDeviceOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(UserHandle.USER_SYSTEM,
DevicePolicyManager.STATE_USER_SETUP_FINALIZED);
@@ -2447,7 +2445,6 @@
public void testSetUserProvisioningState_managedProfileFromSetupWizard_primaryUser()
throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(DpmMockContext.CALLER_USER_HANDLE,
DevicePolicyManager.STATE_USER_PROFILE_COMPLETE,
@@ -2457,7 +2454,6 @@
public void testSetUserProvisioningState_managedProfileFromSetupWizard_managedProfile()
throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(DpmMockContext.CALLER_USER_HANDLE,
DevicePolicyManager.STATE_USER_SETUP_COMPLETE,
@@ -2466,7 +2462,6 @@
public void testSetUserProvisioningState_managedProfileWithoutSetupWizard() throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
exerciseUserProvisioningTransitions(DpmMockContext.CALLER_USER_HANDLE,
DevicePolicyManager.STATE_USER_SETUP_FINALIZED);
@@ -2474,7 +2469,6 @@
public void testSetUserProvisioningState_illegalTransitionOutOfFinalized1() throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
assertExpectException(IllegalStateException.class,
/* messageRegex= */ "Cannot move to user provisioning state",
@@ -2486,7 +2480,6 @@
public void testSetUserProvisioningState_illegalTransitionToAnotherInProgressState()
throws Exception {
setupProfileOwner();
- mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
assertExpectException(IllegalStateException.class,
/* messageRegex= */ "Cannot move to user provisioning state",
@@ -2496,6 +2489,9 @@
}
private void exerciseUserProvisioningTransitions(int userId, int... states) {
+ mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
+ mContext.callerPermissions.add(permission.MANAGE_USERS);
+
assertEquals(DevicePolicyManager.STATE_USER_UNMANAGED, dpm.getUserProvisioningState());
for (int state : states) {
dpm.setUserProvisioningState(state, userId);
diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
index fb25cf3..d922df3 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
@@ -85,6 +85,9 @@
255
};
+ private static final int[] MINIMUM_BRIGHTNESS_CURVE_LUX = { 2000, 4000 };
+ private static final float[] MINIMUM_BRIGHTNESS_CURVE_NITS = { 1.0f, 50.0f, 90.0f };
+
private static final float[] DISPLAY_RANGE_NITS = { 2.685f, 478.5f };
private static final int[] BACKLIGHT_RANGE = { 1, 255 };
@@ -381,6 +384,19 @@
com.android.internal.R.array.config_autoBrightnessDisplayValuesNits))
.thenReturn(mockBrightnessLevelNits);
+ int[] mockMinimumBrightnessCurveLux = new int[MINIMUM_BRIGHTNESS_CURVE_LUX.length];
+ for (int i = 0; i < mockMinimumBrightnessCurveLux.length; i++) {
+ mockMinimumBrightnessCurveLux[i] = (int) MINIMUM_BRIGHTNESS_CURVE_LUX[i];
+ }
+ when(mockResources.getIntArray(
+ com.android.internal.R.array.config_autoBrightnessMinimumBrightnessCurveLux))
+ .thenReturn(mockMinimumBrightnessCurveLux);
+ TypedArray mockMinimumBrightnessCurveNits = createFloatTypedArray(
+ MINIMUM_BRIGHTNESS_CURVE_NITS);
+ when(mockResources.obtainTypedArray(
+ com.android.internal.R.array.config_autoBrightnessMinimumBrightnessCurveNits))
+ .thenReturn(mockMinimumBrightnessCurveNits);
+
TypedArray mockNitsRange = createFloatTypedArray(nitsRange);
when(mockResources.obtainTypedArray(
com.android.internal.R.array.config_screenBrightnessNits))
@@ -419,4 +435,78 @@
return mockArray;
}
+ private float[] getNearMinimumNits(float epsilon) {
+ float[] lux = new float[MINIMUM_BRIGHTNESS_CURVE_LUX.length + 1];
+ for (int i = 0; i < MINIMUM_BRIGHTNESS_CURVE_LUX.length; i++) {
+ lux[i+1] = MINIMUM_BRIGHTNESS_CURVE_LUX[i];
+ }
+ Spline minimumBrightnessCurve = Spline.createSpline(lux, MINIMUM_BRIGHTNESS_CURVE_NITS);
+ float[] nits = new float[LUX_LEVELS.length];
+ for (int i = 0; i < nits.length; i++) {
+ nits[i] = minimumBrightnessCurve.interpolate(LUX_LEVELS[i]) + epsilon;
+ }
+ return nits;
+ }
+
+ @Test
+ public void testCreateWithTooDarkBrightnessConfigurationThrowsException() {
+ float[] nits = getNearMinimumNits(-0.1f);
+ Resources res = createResources(LUX_LEVELS, nits, DISPLAY_RANGE_NITS, BACKLIGHT_RANGE);
+ Exception thrown = null;
+ try {
+ BrightnessMappingStrategy.create(res);
+ } catch (IllegalArgumentException e) {
+ thrown = e;
+ }
+ assertNotNull("Failed to throw IllegalArgumentException", thrown);
+ }
+
+ @Test
+ public void testCreationWithBrightEnoughBrightnessConfigurationDoesNotThrowException() {
+ float[] nits = getNearMinimumNits(0);
+ Resources res = createResources(LUX_LEVELS, nits, DISPLAY_RANGE_NITS, BACKLIGHT_RANGE);
+ assertNotNull("Failed to create BrightnessMappingStrategy",
+ BrightnessMappingStrategy.create(res));
+ }
+
+ @Test
+ public void testSettingTooDarkBrightnessConfigurationThrowsException() {
+ Resources res = createResources(LUX_LEVELS, DISPLAY_LEVELS_NITS, DISPLAY_RANGE_NITS,
+ BACKLIGHT_RANGE);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res);
+ assertNotNull("Failed to create BrightnessMappingStrategy", strategy);
+ float[] lux = new float[LUX_LEVELS.length];
+ for (int i = 0; i < lux.length; i++) {
+ lux[i] = LUX_LEVELS[i];
+ }
+ float[] nits = getNearMinimumNits(-0.1f);
+ BrightnessConfiguration config = new BrightnessConfiguration.Builder()
+ .setCurve(lux, nits)
+ .build();
+ Exception thrown = null;
+ try {
+ strategy.setBrightnessConfiguration(config);
+ } catch (IllegalArgumentException e) {
+ thrown = e;
+ }
+ assertNotNull("Failed to throw IllegalArgumentException", thrown);
+ }
+
+ @Test
+ public void testSettingBrightEnouhgBrightnessConfigurationDoesNotThrowException() {
+ Resources res = createResources(LUX_LEVELS, DISPLAY_LEVELS_NITS, DISPLAY_RANGE_NITS,
+ BACKLIGHT_RANGE);
+ BrightnessMappingStrategy strategy = BrightnessMappingStrategy.create(res);
+ assertNotNull("Failed to create BrightnessMappingStrategy", strategy);
+ float[] lux = new float[LUX_LEVELS.length];
+ for (int i = 0; i < lux.length; i++) {
+ lux[i] = LUX_LEVELS[i];
+ }
+ float[] nits = getNearMinimumNits(0);
+ BrightnessConfiguration config = new BrightnessConfiguration.Builder()
+ .setCurve(lux, nits)
+ .build();
+ assertTrue("failed to set brightness configuration",
+ strategy.setBrightnessConfiguration(config));
+ }
}
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 e2064aa..4ee2ff4 100644
--- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
@@ -1,6 +1,7 @@
package com.android.server.job;
import static android.net.NetworkCapabilities.NET_CAPABILITY_IMS;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static org.junit.Assert.assertEquals;
@@ -374,7 +375,9 @@
assertPersistedEquals(new JobInfo.Builder(0, mComponent)
.setPersisted(true)
.setRequiredNetwork(new NetworkRequest.Builder()
- .addCapability(NET_CAPABILITY_IMS).build())
+ .addCapability(NET_CAPABILITY_IMS)
+ .addUnwantedCapability(NET_CAPABILITY_OEM_PAID)
+ .build())
.build());
}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
index 0d6d525b..06b94cb 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java
@@ -144,6 +144,13 @@
private static final String ANDROID_KEY_STORE_PROVIDER = "AndroidKeyStore";
private static final String WRAPPING_KEY_ALIAS = "RecoverableKeyStoreManagerTest/WrappingKey";
private static final String TEST_ROOT_CERT_ALIAS = "";
+ private static final KeyChainProtectionParams TEST_PROTECTION_PARAMS =
+ new KeyChainProtectionParams.Builder()
+ .setUserSecretType(TYPE_LOCKSCREEN)
+ .setLockScreenUiFormat(UI_FORMAT_PASSWORD)
+ .setKeyDerivationParams(KeyDerivationParams.createSha256Params(TEST_SALT))
+ .setSecret(TEST_SECRET)
+ .build();
@Mock private Context mMockContext;
@Mock private RecoverySnapshotListenersStorage mMockListenersStorage;
@@ -459,12 +466,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
verify(mMockContext, times(1))
.enforceCallingOrSelfPermission(
@@ -481,12 +483,7 @@
RecoveryCertPath.createRecoveryCertPath(TestData.CERT_PATH_1),
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
assertEquals(1, mRecoverySessionStorage.size());
RecoverySessionStorage.Entry entry =
@@ -503,12 +500,7 @@
RecoveryCertPath.createRecoveryCertPath(TestData.CERT_PATH_1),
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
verify(mMockContext, times(2))
.enforceCallingOrSelfPermission(
@@ -522,12 +514,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
assertEquals(1, mRecoverySessionStorage.size());
RecoverySessionStorage.Entry entry =
@@ -543,12 +530,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
mRecoverableKeyStoreManager.closeSession(TEST_SESSION_ID);
@@ -562,12 +544,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
mRecoverableKeyStoreManager.closeSession("some random session");
@@ -604,18 +581,14 @@
public void startRecoverySession_throwsIfPublicKeysMismatch() throws Exception {
byte[] vaultParams = TEST_VAULT_PARAMS.clone();
vaultParams[1] ^= (byte) 1; // Flip 1 bit
+
try {
mRecoverableKeyStoreManager.startRecoverySession(
TEST_SESSION_ID,
TEST_PUBLIC_KEY,
vaultParams,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
fail("should have thrown");
} catch (ServiceSpecificException e) {
assertThat(e.getMessage()).contains("do not match");
@@ -650,12 +623,7 @@
RecoveryCertPath.createRecoveryCertPath(TestData.CERT_PATH_1),
vaultParams,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
fail("should have thrown");
} catch (ServiceSpecificException e) {
assertThat(e.getMessage()).contains("do not match");
@@ -673,12 +641,7 @@
RecoveryCertPath.createRecoveryCertPath(emptyCertPath),
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
fail("should have thrown");
} catch (ServiceSpecificException e) {
assertThat(e.getMessage()).contains("empty");
@@ -698,12 +661,7 @@
RecoveryCertPath.createRecoveryCertPath(shortCertPath),
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(
- new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
fail("should have thrown");
} catch (ServiceSpecificException e) {
// expected
@@ -713,12 +671,14 @@
@Test
public void recoverKeyChainSnapshot_throwsIfNoSessionIsPresent() throws Exception {
try {
+ WrappedApplicationKey applicationKey = new WrappedApplicationKey.Builder()
+ .setAlias(TEST_ALIAS)
+ .setEncryptedKeyMaterial(randomBytes(32))
+ .build();
mRecoverableKeyStoreManager.recoverKeyChainSnapshot(
TEST_SESSION_ID,
/*recoveryKeyBlob=*/ randomBytes(32),
- /*applicationKeys=*/ ImmutableList.of(
- new WrappedApplicationKey("alias", randomBytes(32))
- ));
+ /*applicationKeys=*/ ImmutableList.of(applicationKey));
fail("should have thrown");
} catch (ServiceSpecificException e) {
// expected
@@ -732,11 +692,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
try {
mRecoverableKeyStoreManager.recoverKeyChainSnapshot(
@@ -756,20 +712,17 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
byte[] keyClaimant = mRecoverySessionStorage.get(Binder.getCallingUid(), TEST_SESSION_ID)
.getKeyClaimant();
SecretKey recoveryKey = randomRecoveryKey();
byte[] encryptedClaimResponse = encryptClaimResponse(
keyClaimant, TEST_SECRET, TEST_VAULT_PARAMS, recoveryKey);
- WrappedApplicationKey badApplicationKey = new WrappedApplicationKey(
- TEST_ALIAS,
- encryptedApplicationKey(randomRecoveryKey(), randomBytes(32)));
-
+ WrappedApplicationKey badApplicationKey = new WrappedApplicationKey.Builder()
+ .setAlias(TEST_ALIAS)
+ .setEncryptedKeyMaterial(
+ encryptedApplicationKey(randomRecoveryKey(), randomBytes(32)))
+ .build();
try {
mRecoverableKeyStoreManager.recoverKeyChainSnapshot(
TEST_SESSION_ID,
@@ -789,11 +742,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
byte[] keyClaimant = mRecoverySessionStorage.get(Binder.getCallingUid(), TEST_SESSION_ID)
.getKeyClaimant();
SecretKey recoveryKey = randomRecoveryKey();
@@ -813,20 +762,18 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
byte[] keyClaimant = mRecoverySessionStorage.get(Binder.getCallingUid(), TEST_SESSION_ID)
.getKeyClaimant();
SecretKey recoveryKey = randomRecoveryKey();
byte[] encryptedClaimResponse = encryptClaimResponse(
keyClaimant, TEST_SECRET, TEST_VAULT_PARAMS, recoveryKey);
byte[] applicationKeyBytes = randomBytes(32);
- WrappedApplicationKey applicationKey = new WrappedApplicationKey(
- TEST_ALIAS,
- encryptedApplicationKey(recoveryKey, applicationKeyBytes));
+ WrappedApplicationKey applicationKey = new WrappedApplicationKey.Builder()
+ .setAlias(TEST_ALIAS)
+ .setEncryptedKeyMaterial(
+ encryptedApplicationKey(recoveryKey, applicationKeyBytes))
+ .build();
Map<String, String> recoveredKeys = mRecoverableKeyStoreManager.recoverKeyChainSnapshot(
TEST_SESSION_ID,
@@ -845,11 +792,7 @@
TEST_PUBLIC_KEY,
TEST_VAULT_PARAMS,
TEST_VAULT_CHALLENGE,
- ImmutableList.of(new KeyChainProtectionParams(
- TYPE_LOCKSCREEN,
- UI_FORMAT_PASSWORD,
- KeyDerivationParams.createSha256Params(TEST_SALT),
- TEST_SECRET)));
+ ImmutableList.of(TEST_PROTECTION_PARAMS));
byte[] keyClaimant = mRecoverySessionStorage.get(Binder.getCallingUid(), TEST_SESSION_ID)
.getKeyClaimant();
SecretKey recoveryKey = randomRecoveryKey();
@@ -858,14 +801,17 @@
byte[] applicationKeyBytes1 = randomBytes(32);
byte[] applicationKeyBytes2 = randomBytes(32);
-
- WrappedApplicationKey applicationKey1 = new WrappedApplicationKey(
- TEST_ALIAS,
- // Use a different recovery key here, so the decryption will fail
- encryptedApplicationKey(randomRecoveryKey(), applicationKeyBytes1));
- WrappedApplicationKey applicationKey2 = new WrappedApplicationKey(
- TEST_ALIAS2,
- encryptedApplicationKey(recoveryKey, applicationKeyBytes2));
+ WrappedApplicationKey applicationKey1 = new WrappedApplicationKey.Builder()
+ .setAlias(TEST_ALIAS)
+ // Use a different recovery key here, so the decryption will fail
+ .setEncryptedKeyMaterial(
+ encryptedApplicationKey(randomRecoveryKey(), applicationKeyBytes1))
+ .build();
+ WrappedApplicationKey applicationKey2 = new WrappedApplicationKey.Builder()
+ .setAlias(TEST_ALIAS2)
+ .setEncryptedKeyMaterial(
+ encryptedApplicationKey(recoveryKey, applicationKeyBytes2))
+ .build();
Map<String, String> recoveredKeys = mRecoverableKeyStoreManager.recoverKeyChainSnapshot(
TEST_SESSION_ID,
@@ -888,7 +834,52 @@
}
@Test
- public void setRecoverySecretTypes() throws Exception {
+ public void setServerParams_updatesServerParams() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ byte[] serverParams = new byte[] { 1 };
+
+ mRecoverableKeyStoreManager.setServerParams(serverParams);
+
+ assertThat(mRecoverableKeyStoreDb.getServerParams(userId, uid)).isEqualTo(serverParams);
+ }
+
+ @Test
+ public void setServerParams_doesNotSetSnapshotPendingIfInitializing() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ byte[] serverParams = new byte[] { 1 };
+
+ mRecoverableKeyStoreManager.setServerParams(serverParams);
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+ }
+
+ @Test
+ public void setServerParams_doesNotSetSnapshotPendingIfSettingSameValue() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ byte[] serverParams = new byte[] { 1 };
+
+ mRecoverableKeyStoreManager.setServerParams(serverParams);
+ mRecoverableKeyStoreManager.setServerParams(serverParams);
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+ }
+
+ @Test
+ public void setServerParams_setsSnapshotPendingIfUpdatingValue() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+
+ mRecoverableKeyStoreManager.setServerParams(new byte[] { 1 });
+ mRecoverableKeyStoreManager.setServerParams(new byte[] { 2 });
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
+ }
+
+ @Test
+ public void setRecoverySecretTypes_updatesSecretTypes() throws Exception {
int[] types1 = new int[]{11, 2000};
int[] types2 = new int[]{1, 2, 3};
int[] types3 = new int[]{};
@@ -907,6 +898,41 @@
}
@Test
+ public void setRecoverySecretTypes_doesNotSetSnapshotPendingIfIniting() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ int[] secretTypes = new int[] { 101 };
+
+ mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+ }
+
+ @Test
+ public void setRecoverySecretTypes_doesNotSetSnapshotPendingIfSettingSameValue()
+ throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+ int[] secretTypes = new int[] { 101 };
+
+ mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
+ mRecoverableKeyStoreManager.setRecoverySecretTypes(secretTypes);
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isFalse();
+ }
+
+ @Test
+ public void setRecoverySecretTypes_setsSnapshotPendingIfUpdatingValue() throws Exception {
+ int uid = Binder.getCallingUid();
+ int userId = UserHandle.getCallingUserId();
+
+ mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 101 });
+ mRecoverableKeyStoreManager.setRecoverySecretTypes(new int[] { 102 });
+
+ assertThat(mRecoverableKeyStoreDb.getShouldCreateSnapshot(userId, uid)).isTrue();
+ }
+
+ @Test
public void setRecoverySecretTypes_throwsIfNullTypes() throws Exception {
try {
mRecoverableKeyStoreManager.setRecoverySecretTypes(/*types=*/ null);
@@ -963,8 +989,8 @@
private static byte[] encryptedApplicationKey(
SecretKey recoveryKey, byte[] applicationKey) throws Exception {
return KeySyncUtils.encryptKeysWithRecoveryKey(recoveryKey, ImmutableMap.of(
- "alias", new SecretKeySpec(applicationKey, "AES")
- )).get("alias");
+ TEST_ALIAS, new SecretKeySpec(applicationKey, "AES")
+ )).get(TEST_ALIAS);
}
private static byte[] encryptClaimResponse(
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java
index d61a294..c772956 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java
@@ -7,14 +7,19 @@
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import com.android.server.locksettings.recoverablekeystore.TestData;
+
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.security.cert.CertificateException;
import java.util.ArrayList;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class RecoverySnapshotStorageTest {
+ private static final KeyChainSnapshot MINIMAL_KEYCHAIN_SNAPSHOT =
+ createMinimalKeyChainSnapshot();
private final RecoverySnapshotStorage mRecoverySnapshotStorage = new RecoverySnapshotStorage();
@@ -26,28 +31,36 @@
@Test
public void get_returnsSetSnapshot() {
int userId = 1000;
- KeyChainSnapshot keyChainSnapshot = new KeyChainSnapshot(
- /*snapshotVersion=*/ 1,
- new ArrayList<>(),
- new ArrayList<>(),
- new byte[0]);
- mRecoverySnapshotStorage.put(userId, keyChainSnapshot);
- assertEquals(keyChainSnapshot, mRecoverySnapshotStorage.get(userId));
+ mRecoverySnapshotStorage.put(userId, MINIMAL_KEYCHAIN_SNAPSHOT);
+
+ assertEquals(MINIMAL_KEYCHAIN_SNAPSHOT, mRecoverySnapshotStorage.get(userId));
}
@Test
public void remove_removesSnapshots() {
int userId = 1000;
- KeyChainSnapshot keyChainSnapshot = new KeyChainSnapshot(
- /*snapshotVersion=*/ 1,
- new ArrayList<>(),
- new ArrayList<>(),
- new byte[0]);
- mRecoverySnapshotStorage.put(userId, keyChainSnapshot);
+ mRecoverySnapshotStorage.put(userId, MINIMAL_KEYCHAIN_SNAPSHOT);
mRecoverySnapshotStorage.remove(userId);
assertNull(mRecoverySnapshotStorage.get(1000));
}
+
+ private static KeyChainSnapshot createMinimalKeyChainSnapshot() {
+ try {
+ return new KeyChainSnapshot.Builder()
+ .setCounterId(1)
+ .setSnapshotVersion(1)
+ .setServerParams(new byte[0])
+ .setMaxAttempts(10)
+ .setEncryptedRecoveryKeyBlob(new byte[0])
+ .setKeyChainProtectionParams(new ArrayList<>())
+ .setWrappedApplicationKeys(new ArrayList<>())
+ .setTrustedHardwareCertPath(TestData.CERT_PATH_1)
+ .build();
+ } catch (CertificateException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java
new file mode 100644
index 0000000..ab640d6
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java
@@ -0,0 +1,532 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.power.batterysaver;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.provider.Settings.Global;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.mock.MockContext;
+
+import com.google.common.base.Objects;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.HashMap;
+
+/**
+ atest $ANDROID_BUILD_TOP/frameworks/base/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BatterySaverStateMachineTest {
+
+ private MyMockContext mMockContext;
+ private ContentResolver mMockContextResolver;
+ private BatterySaverController mMockBatterySaverController;
+ private Device mDevice;
+ private TestableBatterySaverStateMachine mTarget;
+
+ private class MyMockContext extends MockContext {
+ @Override
+ public ContentResolver getContentResolver() {
+ return mMockContextResolver;
+ }
+ }
+
+ private DevicePersistedState mPersistedState;
+
+ private class DevicePersistedState {
+ // Current battery level.
+ public int batteryLevel = 100;
+
+ // Whether battery level is currently low or not.
+ public boolean batteryLow = false;
+
+ // Whether the device is plugged in or not.
+ public boolean powered = false;
+
+ // Global settings.
+ public final HashMap<String, Integer> global = new HashMap<>();
+ }
+
+ /**
+ * This class simulates a device's volatile status that will be reset by {@link #initDevice()}.
+ */
+ private class Device {
+ public boolean batterySaverEnabled = false;
+
+ public int getLowPowerModeTriggerLevel() {
+ return mPersistedState.global.getOrDefault(Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ }
+
+ public void setBatteryLevel(int level) {
+ mPersistedState.batteryLevel = level;
+ if (mPersistedState.batteryLevel <= Math.max(15, getLowPowerModeTriggerLevel())) {
+ mPersistedState.batteryLow = true;
+ } else if (mPersistedState.batteryLow
+ && (mPersistedState.batteryLevel >= (getLowPowerModeTriggerLevel() + 5))) {
+ mPersistedState.batteryLow = false;
+ }
+ pushBatteryStatus();
+ }
+
+ public void setPowered(boolean newPowered) {
+ mPersistedState.powered = newPowered;
+ pushBatteryStatus();
+ }
+
+ public void pushBatteryStatus() {
+ mTarget.setBatteryStatus(mPersistedState.powered, mPersistedState.batteryLevel,
+ mPersistedState.batteryLow);
+ }
+
+ public void pushGlobalSettings() {
+ mTarget.setSettingsLocked(
+ mPersistedState.global.getOrDefault(Global.LOW_POWER_MODE, 0) != 0,
+ mPersistedState.global.getOrDefault(Global.LOW_POWER_MODE_STICKY, 0) != 0,
+ mDevice.getLowPowerModeTriggerLevel());
+ }
+
+ public void putGlobalSetting(String key, int value) {
+ mPersistedState.global.put(key, value);
+ pushGlobalSettings();
+ }
+
+ public int getGlobalSetting(String key, int defValue) {
+ return mPersistedState.global.getOrDefault(key, defValue);
+ }
+ }
+
+ /**
+ * Test target class.
+ */
+ private class TestableBatterySaverStateMachine extends BatterySaverStateMachine {
+ public TestableBatterySaverStateMachine() {
+ super(mMockContext, mMockBatterySaverController);
+ }
+
+ @Override
+ protected void putGlobalSetting(String key, int value) {
+ if (Objects.equal(mPersistedState.global.get(key), value)) {
+ return;
+ }
+ mDevice.putGlobalSetting(key, value);
+ }
+
+ @Override
+ protected int getGlobalSetting(String key, int defValue) {
+ return mDevice.getGlobalSetting(key, defValue);
+ }
+ }
+
+ @Before
+ public void setUp() {
+ mMockContext = new MyMockContext();
+ mMockContextResolver = mock(ContentResolver.class);
+ mMockBatterySaverController = mock(BatterySaverController.class);
+
+ doAnswer((inv) -> mDevice.batterySaverEnabled = inv.getArgument(0))
+ .when(mMockBatterySaverController).enableBatterySaver(anyBoolean());
+ when(mMockBatterySaverController.isEnabled())
+ .thenAnswer((inv) -> mDevice.batterySaverEnabled);
+
+ mPersistedState = new DevicePersistedState();
+ initDevice();
+ }
+
+ private void initDevice() {
+ mDevice = new Device();
+
+ mTarget = new TestableBatterySaverStateMachine();
+
+ mDevice.pushBatteryStatus();
+ mDevice.pushGlobalSettings();
+ mTarget.onBootCompleted();
+ }
+
+ @Test
+ public void testNoAutoBatterySaver() {
+ assertEquals(0, mDevice.getLowPowerModeTriggerLevel());
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(100, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(90);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(50);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(50, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(16);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(16, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // When LOW_POWER_MODE_TRIGGER_LEVEL is 0, 15% will still trigger low-battery, but
+ // BS wont be enabled.
+ mDevice.setBatteryLevel(15);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(15, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(10);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(10, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ // Manually enable BS.
+ mTarget.setBatterySaverEnabledManually(true);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(10, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(50);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(50, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Start charging. It'll disable BS.
+ mDevice.setPowered(true);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(50, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(60);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(60, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Unplug.
+ mDevice.setPowered(false);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(60, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(10);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(10, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(80);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(80, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Reboot the device.
+ initDevice();
+
+ assertEquals(true, mDevice.batterySaverEnabled); // Sticky.
+ assertEquals(80, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(30);
+ initDevice();
+
+ assertEquals(true, mDevice.batterySaverEnabled); // Still sticky.
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mTarget.setBatterySaverEnabledManually(false);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ initDevice(); // reboot.
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+ }
+
+ @Test
+ public void testAutoBatterySaver() {
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE_TRIGGER_LEVEL, 50);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(100, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(90);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(51);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(51, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Hit the threshold. BS should be enabled.
+ mDevice.setBatteryLevel(50);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(50, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ // Battery goes up, but until it hits 55%, we still keep BS on.
+ mDevice.setBatteryLevel(54);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(54, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ // 50% + 5%, now BS will be off.
+ mDevice.setBatteryLevel(55);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(55, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(40);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(40, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setPowered(true);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(40, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setPowered(false);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(40, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mTarget.setBatterySaverEnabledManually(false); // Manually disable -> snooze.
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(40, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(30);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ // Plug in and out, snooze will reset.
+ mDevice.setPowered(true);
+ mDevice.setPowered(false);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setPowered(true);
+ mDevice.setBatteryLevel(60);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(60, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setPowered(false);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(60, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(50);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(50, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(70);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(70, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Bump ump the threshold.
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE_TRIGGER_LEVEL, 70);
+ mDevice.setBatteryLevel(mPersistedState.batteryLevel);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(70, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ // Then down.
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE_TRIGGER_LEVEL, 60);
+ mDevice.setBatteryLevel(mPersistedState.batteryLevel);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(70, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Reboot in low state -> automatically enable BS.
+ mDevice.setPowered(false);
+ mDevice.setBatteryLevel(30);
+ mTarget.setBatterySaverEnabledManually(false);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ initDevice();
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+ }
+
+ @Test
+ public void testAutoBatterySaver_withSticky() {
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE_TRIGGER_LEVEL, 50);
+
+ mTarget.setBatterySaverEnabledManually(true);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(100, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(30);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(80);
+
+ assertEquals(true, mDevice.batterySaverEnabled); // Still enabled.
+ assertEquals(80, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setPowered(true);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(80, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(30);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setPowered(false);
+
+ assertEquals(true, mDevice.batterySaverEnabled); // Restores BS.
+ assertEquals(30, mPersistedState.batteryLevel);
+ assertEquals(true, mPersistedState.batteryLow);
+
+ mDevice.setPowered(true);
+ mDevice.setBatteryLevel(90);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ initDevice();
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setPowered(false);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mTarget.setBatterySaverEnabledManually(false);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ initDevice();
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+ }
+
+ @Test
+ public void testNoAutoBatterySaver_fromAdb() {
+
+ assertEquals(0, mDevice.getLowPowerModeTriggerLevel());
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(100, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ mDevice.setBatteryLevel(90);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Enable
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE, 1);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Disable
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE, 0);
+
+ assertEquals(false, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Enable again
+ mDevice.putGlobalSetting(Global.LOW_POWER_MODE, 1);
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+
+ // Reboot -- setting BS from adb is also sticky.
+ initDevice();
+
+ assertEquals(true, mDevice.batterySaverEnabled);
+ assertEquals(90, mPersistedState.batteryLevel);
+ assertEquals(false, mPersistedState.batteryLow);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
index 552c915..601999d 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
@@ -19,6 +19,7 @@
import static android.app.usage.UsageEvents.Event.NOTIFICATION_SEEN;
import static android.app.usage.UsageEvents.Event.SLICE_PINNED;
import static android.app.usage.UsageEvents.Event.SLICE_PINNED_PRIV;
+import static android.app.usage.UsageEvents.Event.SYSTEM_INTERACTION;
import static android.app.usage.UsageEvents.Event.USER_INTERACTION;
import static android.app.usage.UsageStatsManager.REASON_MAIN_DEFAULT;
import static android.app.usage.UsageStatsManager.REASON_MAIN_FORCED;
@@ -569,6 +570,31 @@
}
@Test
+ public void testSystemInteractionTimeout() throws Exception {
+ setChargingState(mController, false);
+
+ reportEvent(mController, USER_INTERACTION, 0);
+ // Fast forward to RARE
+ mInjector.mElapsedRealtime = RARE_THRESHOLD + 100;
+ mController.checkIdleStates(USER_ID);
+ assertBucket(STANDBY_BUCKET_RARE);
+
+ // Trigger a SYSTEM_INTERACTION and verify bucket
+ reportEvent(mController, SYSTEM_INTERACTION, mInjector.mElapsedRealtime);
+ assertBucket(STANDBY_BUCKET_ACTIVE);
+
+ // Verify it's still in ACTIVE close to end of timeout
+ mInjector.mElapsedRealtime += mController.mSystemInteractionTimeoutMillis - 100;
+ mController.checkIdleStates(USER_ID);
+ assertBucket(STANDBY_BUCKET_ACTIVE);
+
+ // Verify bucket moves to RARE after timeout
+ mInjector.mElapsedRealtime += 200;
+ mController.checkIdleStates(USER_ID);
+ assertBucket(STANDBY_BUCKET_RARE);
+ }
+
+ @Test
public void testPredictionNotOverridden() throws Exception {
setChargingState(mController, false);
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index b645700..7f1bcac 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -30,8 +30,10 @@
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
+import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -436,6 +438,20 @@
}
@Test
+ public void testLayoutSeq_assignedDuringLayout() throws Exception {
+ synchronized (sWm.getWindowManagerLock()) {
+
+ final DisplayContent dc = createNewDisplay();
+ final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, dc, "w");
+
+ dc.setLayoutNeeded();
+ dc.performLayout(true /* initial */, false /* updateImeWindows */);
+
+ assertThat(win.mLayoutSeq, is(dc.mLayoutSeq));
+ }
+ }
+
+ @Test
@SuppressLint("InlinedApi")
public void testOrientationDefinedByKeyguard() {
final DisplayContent dc = createNewDisplay();
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
index 56b7d9f..1248eae 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java
@@ -40,9 +40,12 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
@@ -312,6 +315,17 @@
assertTrue(child2.isSelfOrAncestorWindowAnimatingExit());
}
+ @Test
+ public void testLayoutSeqResetOnReparent() throws Exception {
+ final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
+ app.mLayoutSeq = 1;
+ mDisplayContent.mLayoutSeq = 1;
+
+ app.onDisplayChanged(mDisplayContent);
+
+ assertThat(app.mLayoutSeq, not(is(mDisplayContent.mLayoutSeq)));
+ }
+
private void testPrepareWindowToDisplayDuringRelayout(boolean wasVisible) {
reset(mPowerManagerWrapper);
final WindowState root = createWindow(null, TYPE_APPLICATION, "root");
diff --git a/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java
new file mode 100644
index 0000000..d0f0fe3
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm.utils;
+
+import static junit.framework.Assert.assertEquals;
+
+import android.graphics.Rect;
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Pair;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+@Presubmit
+public class InsetUtilsTest {
+
+ @Test
+ public void testAdd() throws Exception {
+ final Rect rect1 = new Rect(10, 20, 30, 40);
+ final Rect rect2 = new Rect(50, 60, 70, 80);
+ InsetUtils.addInsets(rect1, rect2);
+ assertEquals(new Rect(60, 80, 100, 120), rect1);
+ }
+}
+
diff --git a/services/usage/java/com/android/server/usage/AppStandbyController.java b/services/usage/java/com/android/server/usage/AppStandbyController.java
index 1af5f46..9139a4c 100644
--- a/services/usage/java/com/android/server/usage/AppStandbyController.java
+++ b/services/usage/java/com/android/server/usage/AppStandbyController.java
@@ -198,6 +198,10 @@
long mSystemUpdateUsageTimeoutMillis;
/** Maximum time to wait for a prediction before using simple timeouts to downgrade buckets. */
long mPredictionTimeoutMillis;
+ /** Maximum time a sync adapter associated with a CP should keep the buckets elevated. */
+ long mSyncAdapterTimeoutMillis;
+ /** Maximum time a system interaction should keep the buckets elevated. */
+ long mSystemInteractionTimeoutMillis;
volatile boolean mAppIdleEnabled;
boolean mAppIdleTempParoled;
@@ -357,8 +361,8 @@
synchronized (mAppIdleLock) {
AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
STANDBY_BUCKET_ACTIVE, REASON_SUB_USAGE_SYNC_ADAPTER,
- elapsedRealtime,
- elapsedRealtime + mStrongUsageTimeoutMillis);
+ 0,
+ elapsedRealtime + mSyncAdapterTimeoutMillis);
maybeInformListeners(packageName, userId, elapsedRealtime,
appUsage.currentBucket, appUsage.bucketingReason, false);
}
@@ -708,7 +712,11 @@
STANDBY_BUCKET_WORKING_SET, subReason,
0, elapsedRealtime + mNotificationSeenTimeoutMillis);
nextCheckTime = mNotificationSeenTimeoutMillis;
-
+ } else if (event.mEventType == UsageEvents.Event.SYSTEM_INTERACTION) {
+ mAppIdleHistory.reportUsage(appHistory, event.mPackage,
+ STANDBY_BUCKET_ACTIVE, subReason,
+ 0, elapsedRealtime + mSystemInteractionTimeoutMillis);
+ nextCheckTime = mSystemInteractionTimeoutMillis;
} else {
mAppIdleHistory.reportUsage(appHistory, event.mPackage,
STANDBY_BUCKET_ACTIVE, subReason,
@@ -1523,6 +1531,14 @@
private static final String KEY_SYSTEM_UPDATE_HOLD_DURATION =
"system_update_usage_duration";
private static final String KEY_PREDICTION_TIMEOUT = "prediction_timeout";
+ private static final String KEY_SYNC_ADAPTER_HOLD_DURATION = "sync_adapter_duration";
+ private static final String KEY_SYSTEM_INTERACTION_HOLD_DURATION =
+ "system_interaction_duration";
+ public static final long DEFAULT_STRONG_USAGE_TIMEOUT = 1 * ONE_HOUR;
+ public static final long DEFAULT_NOTIFICATION_TIMEOUT = 12 * ONE_HOUR;
+ public static final long DEFAULT_SYSTEM_UPDATE_TIMEOUT = 2 * ONE_HOUR;
+ public static final long DEFAULT_SYSTEM_INTERACTION_TIMEOUT = 10 * ONE_MINUTE;
+ public static final long DEFAULT_SYNC_ADAPTER_TIMEOUT = 10 * ONE_MINUTE;
private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -1585,16 +1601,22 @@
COMPRESS_TIME ? ONE_MINUTE : 4 * 60 * ONE_MINUTE); // 4 hours
mStrongUsageTimeoutMillis = mParser.getDurationMillis
(KEY_STRONG_USAGE_HOLD_DURATION,
- COMPRESS_TIME ? ONE_MINUTE : 1 * ONE_HOUR);
+ COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STRONG_USAGE_TIMEOUT);
mNotificationSeenTimeoutMillis = mParser.getDurationMillis
(KEY_NOTIFICATION_SEEN_HOLD_DURATION,
- COMPRESS_TIME ? 12 * ONE_MINUTE : 12 * ONE_HOUR);
+ COMPRESS_TIME ? 12 * ONE_MINUTE : DEFAULT_NOTIFICATION_TIMEOUT);
mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis
(KEY_SYSTEM_UPDATE_HOLD_DURATION,
- COMPRESS_TIME ? 2 * ONE_MINUTE : 2 * ONE_HOUR);
+ COMPRESS_TIME ? 2 * ONE_MINUTE : DEFAULT_SYSTEM_UPDATE_TIMEOUT);
mPredictionTimeoutMillis = mParser.getDurationMillis
(KEY_PREDICTION_TIMEOUT,
COMPRESS_TIME ? 10 * ONE_MINUTE : DEFAULT_PREDICTION_TIMEOUT);
+ mSyncAdapterTimeoutMillis = mParser.getDurationMillis
+ (KEY_SYNC_ADAPTER_HOLD_DURATION,
+ COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYNC_ADAPTER_TIMEOUT);
+ mSystemInteractionTimeoutMillis = mParser.getDurationMillis
+ (KEY_SYSTEM_INTERACTION_HOLD_DURATION,
+ COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYSTEM_INTERACTION_TIMEOUT);
}
}
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index ef0780a..9f8042c 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -83,6 +83,7 @@
import com.android.server.LocalServices;
import java.io.File;
+import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
@@ -181,6 +182,7 @@
private final UEventObserver mUEventObserver;
private static Set<Integer> sBlackListedInterfaces;
+ private HashMap<Long, FileDescriptor> mControlFds;
static {
sBlackListedInterfaces = new HashSet<>();
@@ -270,6 +272,18 @@
Slog.i(TAG, "USB GADGET HAL not present in the device", e);
}
+ mControlFds = new HashMap<>();
+ FileDescriptor mtpFd = nativeOpenControl(UsbManager.USB_FUNCTION_MTP);
+ if (mtpFd == null) {
+ Slog.e(TAG, "Failed to open control for mtp");
+ }
+ mControlFds.put(UsbManager.FUNCTION_MTP, mtpFd);
+ FileDescriptor ptpFd = nativeOpenControl(UsbManager.USB_FUNCTION_PTP);
+ if (mtpFd == null) {
+ Slog.e(TAG, "Failed to open control for mtp");
+ }
+ mControlFds.put(UsbManager.FUNCTION_PTP, ptpFd);
+
boolean secureAdbEnabled = SystemProperties.getBoolean("ro.adb.secure", false);
boolean dataEncrypted = "1".equals(SystemProperties.get("vold.decrypt"));
if (secureAdbEnabled && !dataEncrypted) {
@@ -704,8 +718,7 @@
return false;
}
- protected void updateUsbStateBroadcastIfNeeded(long functions,
- boolean configChanged) {
+ protected void updateUsbStateBroadcastIfNeeded(long functions) {
// send a sticky broadcast containing current USB state
Intent intent = new Intent(UsbManager.ACTION_USB_STATE);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
@@ -716,7 +729,6 @@
intent.putExtra(UsbManager.USB_CONFIGURED, mConfigured);
intent.putExtra(UsbManager.USB_DATA_UNLOCKED,
isUsbTransferAllowed() && isUsbDataTransferActive(mCurrentFunctions));
- intent.putExtra(UsbManager.USB_CONFIG_CHANGED, configChanged);
long remainingFunctions = functions;
while (remainingFunctions != 0) {
@@ -726,7 +738,7 @@
}
// send broadcast intent only if the USB state has changed
- if (!isUsbStateChanged(intent) && !configChanged) {
+ if (!isUsbStateChanged(intent)) {
if (DEBUG) {
Slog.d(TAG, "skip broadcasting " + intent + " extras: " + intent.getExtras());
}
@@ -798,8 +810,7 @@
updateUsbNotification(false);
updateAdbNotification(false);
if (mBootCompleted) {
- updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions),
- false);
+ updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
}
if ((mCurrentFunctions & UsbManager.FUNCTION_ACCESSORY) != 0) {
updateCurrentAccessory();
@@ -812,7 +823,7 @@
&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
setScreenUnlockedFunctions();
} else {
- setEnabledFunctions(UsbManager.FUNCTION_NONE, !mAdbEnabled);
+ setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
}
}
updateUsbFunctions();
@@ -847,8 +858,7 @@
updateUsbNotification(false);
if (mBootCompleted) {
if (mHostConnected || prevHostConnected) {
- updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions),
- false);
+ updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
}
} else {
mPendingBootBroadcast = true;
@@ -994,7 +1004,7 @@
protected void finishBoot() {
if (mBootCompleted && mCurrentUsbFunctionsReceived && mSystemReady) {
if (mPendingBootBroadcast) {
- updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions), false);
+ updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
mPendingBootBroadcast = false;
}
if (!mScreenLocked
@@ -1597,7 +1607,7 @@
/**
* Start up dependent services.
*/
- updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions), true);
+ updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
}
if (!waitForState(oemFunctions)) {
@@ -1943,7 +1953,7 @@
if (mBootCompleted && isUsbDataTransferActive(functions)) {
// Start up dependent services.
- updateUsbStateBroadcastIfNeeded(functions, true);
+ updateUsbStateBroadcastIfNeeded(functions);
}
}
}
@@ -1979,6 +1989,22 @@
return mHandler.getEnabledFunctions();
}
+ /**
+ * Returns a dup of the control file descriptor for the given function.
+ */
+ public ParcelFileDescriptor getControlFd(long usbFunction) {
+ FileDescriptor fd = mControlFds.get(usbFunction);
+ if (fd == null) {
+ return null;
+ }
+ try {
+ return ParcelFileDescriptor.dup(fd);
+ } catch (IOException e) {
+ Slog.e(TAG, "Could not dup fd for " + usbFunction);
+ return null;
+ }
+ }
+
public long getScreenUnlockedFunctions() {
return mHandler.getScreenUnlockedFunctions();
}
@@ -2063,6 +2089,8 @@
private native ParcelFileDescriptor nativeOpenAccessory();
+ private native FileDescriptor nativeOpenControl(String usbFunction);
+
private native boolean nativeIsStartRequested();
private native int nativeGetAudioMode();
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java
index 0fcd075..67ad090 100644
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -54,6 +54,7 @@
public class UsbHostManager {
private static final String TAG = UsbHostManager.class.getSimpleName();
private static final boolean DEBUG = false;
+ private static final int LINUX_FOUNDATION_VID = 0x1d6b;
private final Context mContext;
@@ -267,7 +268,6 @@
}
private boolean isBlackListed(String deviceAddress) {
- Slog.i(TAG, "isBlackListed(" + deviceAddress + ")");
int count = mHostBlacklist.length;
for (int i = 0; i < count; i++) {
if (deviceAddress.startsWith(mHostBlacklist[i])) {
@@ -279,7 +279,6 @@
/* returns true if the USB device should not be accessible by applications */
private boolean isBlackListed(int clazz, int subClass) {
- Slog.i(TAG, "isBlackListed(" + clazz + ", " + subClass + ")");
// blacklist hubs
if (clazz == UsbConstants.USB_CLASS_HUB) return true;
@@ -302,6 +301,40 @@
}
}
+ private void logUsbDevice(UsbDescriptorParser descriptorParser) {
+ int vid = 0;
+ int pid = 0;
+ String mfg = "<unknown>";
+ String product = "<unknown>";
+ String version = "<unknown>";
+ String serial = "<unknown>";
+
+ UsbDeviceDescriptor deviceDescriptor = descriptorParser.getDeviceDescriptor();
+ if (deviceDescriptor != null) {
+ vid = deviceDescriptor.getVendorID();
+ pid = deviceDescriptor.getProductID();
+ mfg = deviceDescriptor.getMfgString(descriptorParser);
+ product = deviceDescriptor.getProductString(descriptorParser);
+ version = deviceDescriptor.getDeviceReleaseString();
+ serial = deviceDescriptor.getSerialString(descriptorParser);
+ }
+
+ if (vid == LINUX_FOUNDATION_VID) {
+ return; // don't care about OS-constructed virtual USB devices.
+ }
+ boolean hasAudio = descriptorParser.hasAudioInterface();
+ boolean hasHid = descriptorParser.hasHIDInterface();
+ boolean hasStorage = descriptorParser.hasStorageInterface();
+
+ String attachedString = "USB device attached: ";
+ attachedString += String.format("vidpid %04x:%04x", vid, pid);
+ attachedString += String.format(" mfg/product/ver/serial %s/%s/%s/%s",
+ mfg, product, version, serial);
+ attachedString += String.format(" hasAudio/HID/Storage: %b/%b/%b",
+ hasAudio, hasHid, hasStorage);
+ Slog.d(TAG, attachedString);
+ }
+
/* Called from JNI in monitorUsbHostBus() to report new USB devices
Returns true if successful, i.e. the USB Audio device descriptors are
correctly parsed and the unique device is added to the audio device list.
@@ -313,10 +346,18 @@
Slog.d(TAG, "usbDeviceAdded(" + deviceAddress + ") - start");
}
- // check class/subclass first as it is more likely to be blacklisted
- if (isBlackListed(deviceClass, deviceSubclass) || isBlackListed(deviceAddress)) {
+ if (isBlackListed(deviceAddress)) {
if (DEBUG) {
- Slog.d(TAG, "device is black listed");
+ Slog.d(TAG, "device address is black listed");
+ }
+ return false;
+ }
+ UsbDescriptorParser parser = new UsbDescriptorParser(deviceAddress, descriptors);
+ logUsbDevice(parser);
+
+ if (isBlackListed(deviceClass, deviceSubclass)) {
+ if (DEBUG) {
+ Slog.d(TAG, "device class is black listed");
}
return false;
}
@@ -329,40 +370,31 @@
return false;
}
- UsbDescriptorParser parser = new UsbDescriptorParser(deviceAddress);
- if (parser.parseDescriptors(descriptors)) {
-
- UsbDevice newDevice = parser.toAndroidUsbDevice();
- if (newDevice == null) {
- Slog.e(TAG, "Couldn't create UsbDevice object.");
- // Tracking
- addConnectionRecord(deviceAddress, ConnectionRecord.CONNECT_BADDEVICE,
- parser.getRawDescriptors());
- } else {
- mDevices.put(deviceAddress, newDevice);
-
- // It is fine to call this only for the current user as all broadcasts are
- // sent to all profiles of the user and the dialogs should only show once.
- ComponentName usbDeviceConnectionHandler = getUsbDeviceConnectionHandler();
- if (usbDeviceConnectionHandler == null) {
- getCurrentUserSettings().deviceAttached(newDevice);
- } else {
- getCurrentUserSettings().deviceAttachedForFixedHandler(newDevice,
- usbDeviceConnectionHandler);
- }
-
- mUsbAlsaManager.usbDeviceAdded(deviceAddress, newDevice, parser);
-
- // Tracking
- addConnectionRecord(deviceAddress, ConnectionRecord.CONNECT,
- parser.getRawDescriptors());
- }
- } else {
- Slog.e(TAG, "Error parsing USB device descriptors for " + deviceAddress);
+ UsbDevice newDevice = parser.toAndroidUsbDevice();
+ if (newDevice == null) {
+ Slog.e(TAG, "Couldn't create UsbDevice object.");
// Tracking
- addConnectionRecord(deviceAddress, ConnectionRecord.CONNECT_BADPARSE,
+ addConnectionRecord(deviceAddress, ConnectionRecord.CONNECT_BADDEVICE,
parser.getRawDescriptors());
- return false;
+ } else {
+ mDevices.put(deviceAddress, newDevice);
+ Slog.d(TAG, "Added device " + newDevice);
+
+ // It is fine to call this only for the current user as all broadcasts are
+ // sent to all profiles of the user and the dialogs should only show once.
+ ComponentName usbDeviceConnectionHandler = getUsbDeviceConnectionHandler();
+ if (usbDeviceConnectionHandler == null) {
+ getCurrentUserSettings().deviceAttached(newDevice);
+ } else {
+ getCurrentUserSettings().deviceAttachedForFixedHandler(newDevice,
+ usbDeviceConnectionHandler);
+ }
+
+ mUsbAlsaManager.usbDeviceAdded(deviceAddress, newDevice, parser);
+
+ // Tracking
+ addConnectionRecord(deviceAddress, ConnectionRecord.CONNECT,
+ parser.getRawDescriptors());
}
}
@@ -376,18 +408,18 @@
/* Called from JNI in monitorUsbHostBus to report USB device removal */
@SuppressWarnings("unused")
private void usbDeviceRemoved(String deviceAddress) {
- if (DEBUG) {
- Slog.d(TAG, "usbDeviceRemoved(" + deviceAddress + ") - start");
- }
synchronized (mLock) {
UsbDevice device = mDevices.remove(deviceAddress);
if (device != null) {
+ Slog.d(TAG, "Removed device at " + deviceAddress + ": " + device.getProductName());
mUsbAlsaManager.usbDeviceRemoved(deviceAddress/*device*/);
mSettingsManager.usbDeviceRemoved(device);
getCurrentUserSettings().usbDeviceRemoved(device);
// Tracking
addConnectionRecord(deviceAddress, ConnectionRecord.DISCONNECT, null);
+ } else {
+ Slog.d(TAG, "Removed device at " + deviceAddress + " was already gone");
}
}
}
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index c1a7591..e92bd74 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -304,6 +304,13 @@
return null;
}
+ /* Returns a dup of the control file descriptor for the given function. */
+ @Override
+ public ParcelFileDescriptor getControlFd(long function) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_MTP, null);
+ return mDeviceManager.getControlFd(function);
+ }
+
@Override
public void setDevicePackage(UsbDevice device, String packageName, int userId) {
device = Preconditions.checkNotNull(device);
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
index 956efc0..e615428 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
@@ -43,11 +43,6 @@
// Obtained from the first AudioClass Header descriptor.
private int mACInterfacesSpec = UsbDeviceDescriptor.USBSPEC_1_0;
- public UsbDescriptorParser(String deviceAddr) {
- mDeviceAddr = deviceAddr;
- mDescriptors = new ArrayList<UsbDescriptor>(DESCRIPTORS_ALLOC_SIZE);
- }
-
/**
* Connect this parser to an existing set of already parsed descriptors.
* This is useful for reporting.
@@ -214,7 +209,7 @@
/**
* @hide
*/
- public boolean parseDescriptors(byte[] descriptors) {
+ public void parseDescriptors(byte[] descriptors) {
if (DEBUG) {
Log.d(TAG, "parseDescriptors() - start");
}
@@ -248,17 +243,6 @@
if (DEBUG) {
Log.d(TAG, "parseDescriptors() - end " + mDescriptors.size() + " descriptors.");
}
- return true;
- }
-
- /**
- * @hide
- */
- public boolean parseDevice() {
- byte[] rawDescriptors = getRawDescriptors();
-
- return rawDescriptors != null
- ? parseDescriptors(rawDescriptors) : false;
}
public byte[] getRawDescriptors() {
@@ -491,9 +475,18 @@
}
/**
+ *@ hide
+ */
+ public boolean hasAudioInterface() {
+ ArrayList<UsbDescriptor> descriptors =
+ getInterfaceDescriptorsForClass(UsbDescriptor.CLASSID_AUDIO);
+ return !descriptors.isEmpty();
+ }
+
+ /**
* @hide
*/
- public boolean hasHIDDescriptor() {
+ public boolean hasHIDInterface() {
ArrayList<UsbDescriptor> descriptors =
getInterfaceDescriptorsForClass(UsbDescriptor.CLASSID_HID);
return !descriptors.isEmpty();
@@ -502,6 +495,15 @@
/**
* @hide
*/
+ public boolean hasStorageInterface() {
+ ArrayList<UsbDescriptor> descriptors =
+ getInterfaceDescriptorsForClass(UsbDescriptor.CLASSID_STORAGE);
+ return !descriptors.isEmpty();
+ }
+
+ /**
+ * @hide
+ */
public boolean hasMIDIInterface() {
ArrayList<UsbDescriptor> descriptors =
getInterfaceDescriptorsForClass(UsbDescriptor.CLASSID_AUDIO);
@@ -540,7 +542,7 @@
probability += 0.75f;
}
- if (hasMic && hasHIDDescriptor()) {
+ if (hasMic && hasHIDInterface()) {
probability += 0.25f;
}
@@ -593,7 +595,7 @@
probability += 0.75f;
}
- if (hasSpeaker && hasHIDDescriptor()) {
+ if (hasSpeaker && hasHIDInterface()) {
probability += 0.25f;
}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
index e31e3a3..fae594a 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
@@ -48,7 +48,7 @@
private int mDeviceRelease; // 12:2 Device Release number - BCD
private byte mMfgIndex; // 14:1 Index of Manufacturer String Descriptor
private byte mProductIndex; // 15:1 Index of Product String Descriptor
- private byte mSerialNum; // 16:1 Index of Serial Number String Descriptor
+ private byte mSerialIndex; // 16:1 Index of Serial Number String Descriptor
private byte mNumConfigs; // 17:1 Number of Possible Configurations
private ArrayList<UsbConfigDescriptor> mConfigDescriptors =
@@ -91,16 +91,37 @@
return mDeviceRelease;
}
+ // mDeviceRelease is binary-coded decimal, format DD.DD
+ public String getDeviceReleaseString() {
+ int hundredths = mDeviceRelease & 0xF;
+ int tenths = (mDeviceRelease & 0xF0) >> 4;
+ int ones = (mDeviceRelease & 0xF00) >> 8;
+ int tens = (mDeviceRelease & 0xF000) >> 12;
+ return String.format("%d.%d%d", tens * 10 + ones, tenths, hundredths);
+ }
+
public byte getMfgIndex() {
return mMfgIndex;
}
+ public String getMfgString(UsbDescriptorParser p) {
+ return p.getDescriptorString(mMfgIndex);
+ }
+
public byte getProductIndex() {
return mProductIndex;
}
- public byte getSerialNum() {
- return mSerialNum;
+ public String getProductString(UsbDescriptorParser p) {
+ return p.getDescriptorString(mProductIndex);
+ }
+
+ public byte getSerialIndex() {
+ return mSerialIndex;
+ }
+
+ public String getSerialString(UsbDescriptorParser p) {
+ return p.getDescriptorString(mSerialIndex);
}
public byte getNumConfigs() {
@@ -119,16 +140,14 @@
Log.d(TAG, "toAndroid()");
}
- String mfgName = parser.getDescriptorString(mMfgIndex);
- String prodName = parser.getDescriptorString(mProductIndex);
+ String mfgName = getMfgString(parser);
+ String prodName = getProductString(parser);
if (DEBUG) {
Log.d(TAG, " mfgName:" + mfgName + " prodName:" + prodName);
}
- // Create version string in "%.%" format
- String versionString =
- Integer.toString(mDeviceRelease >> 8) + "." + (mDeviceRelease & 0xFF);
- String serialStr = parser.getDescriptorString(mSerialNum);
+ String versionString = getDeviceReleaseString();
+ String serialStr = getSerialString(parser);
if (DEBUG) {
Log.d(TAG, " versionString:" + versionString + " serialStr:" + serialStr);
}
@@ -159,7 +178,7 @@
mDeviceRelease = stream.unpackUsbShort();
mMfgIndex = stream.getByte();
mProductIndex = stream.getByte();
- mSerialNum = stream.getByte();
+ mSerialIndex = stream.getByte();
mNumConfigs = stream.getByte();
return mLength;
diff --git a/telephony/java/android/telephony/CellIdentity.java b/telephony/java/android/telephony/CellIdentity.java
index 08f8bb6..890a6ea 100644
--- a/telephony/java/android/telephony/CellIdentity.java
+++ b/telephony/java/android/telephony/CellIdentity.java
@@ -18,11 +18,14 @@
import android.annotation.CallSuper;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
/**
* CellIdentity represents the identity of a unique cell. This is the base class for
@@ -84,8 +87,16 @@
/** @hide */
protected final String mMncStr;
+ // long alpha Operator Name String or Enhanced Operator Name String
/** @hide */
- protected CellIdentity(String tag, int type, String mcc, String mnc) {
+ protected final String mAlphaLong;
+ // short alpha Operator Name String or Enhanced Operator Name String
+ /** @hide */
+ protected final String mAlphaShort;
+
+ /** @hide */
+ protected CellIdentity(String tag, int type, String mcc, String mnc, String alphal,
+ String alphas) {
mTag = tag;
mType = type;
@@ -113,6 +124,8 @@
mMncStr = null;
log("invalid MNC format: " + mnc);
}
+ mAlphaLong = alphal;
+ mAlphaShort = alphas;
}
/** Implement the Parcelable interface */
@@ -138,6 +151,40 @@
}
/**
+ * @return The long alpha tag associated with the current scan result (may be the operator
+ * name string or extended operator name string). May be null if unknown.
+ */
+ @Nullable
+ public CharSequence getOperatorAlphaLong() {
+ return mAlphaLong;
+ }
+
+ /**
+ * @return The short alpha tag associated with the current scan result (may be the operator
+ * name string or extended operator name string). May be null if unknown.
+ */
+ @Nullable
+ public CharSequence getOperatorAlphaShort() {
+ return mAlphaShort;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof CellIdentity)) {
+ return false;
+ }
+
+ CellIdentity o = (CellIdentity) other;
+ return TextUtils.equals(mAlphaLong, o.mAlphaLong)
+ && TextUtils.equals(mAlphaShort, o.mAlphaShort);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mAlphaLong, mAlphaShort, mMccStr, mMncStr, mType);
+ }
+
+ /**
* Used by child classes for parceling.
*
* @hide
@@ -147,6 +194,8 @@
dest.writeInt(type);
dest.writeString(mMccStr);
dest.writeString(mMncStr);
+ dest.writeString(mAlphaLong);
+ dest.writeString(mAlphaShort);
}
/**
@@ -154,7 +203,8 @@
* @hide
*/
protected CellIdentity(String tag, int type, Parcel source) {
- this(tag, type, source.readString(), source.readString());
+ this(tag, type, source.readString(), source.readString(),
+ source.readString(), source.readString());
}
/** Implement the Parcelable interface */
diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java
index 713ac00..58a2c45 100644
--- a/telephony/java/android/telephony/CellIdentityCdma.java
+++ b/telephony/java/android/telephony/CellIdentityCdma.java
@@ -49,23 +49,17 @@
* to +90 degrees).
*/
private final int mLatitude;
- // long alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaLong;
- // short alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaShort;
/**
* @hide
*/
public CellIdentityCdma() {
- super(TAG, TYPE_CDMA, null, null);
+ super(TAG, TYPE_CDMA, null, null, null, null);
mNetworkId = Integer.MAX_VALUE;
mSystemId = Integer.MAX_VALUE;
mBasestationId = Integer.MAX_VALUE;
mLongitude = Integer.MAX_VALUE;
mLatitude = Integer.MAX_VALUE;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
@@ -100,7 +94,7 @@
*/
public CellIdentityCdma(int nid, int sid, int bid, int lon, int lat, String alphal,
String alphas) {
- super(TAG, TYPE_CDMA, null, null);
+ super(TAG, TYPE_CDMA, null, null, alphal, alphas);
mNetworkId = nid;
mSystemId = sid;
mBasestationId = bid;
@@ -110,8 +104,6 @@
} else {
mLongitude = mLatitude = Integer.MAX_VALUE;
}
- mAlphaLong = alphal;
- mAlphaShort = alphas;
}
private CellIdentityCdma(CellIdentityCdma cid) {
@@ -178,28 +170,10 @@
return mLatitude;
}
- /**
- * @return The long alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaLong() {
- return mAlphaLong;
- }
-
- /**
- * @return The short alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaShort() {
- return mAlphaShort;
- }
-
@Override
public int hashCode() {
return Objects.hash(mNetworkId, mSystemId, mBasestationId, mLatitude, mLongitude,
- mAlphaLong, mAlphaShort);
+ super.hashCode());
}
@Override
@@ -219,8 +193,7 @@
&& mBasestationId == o.mBasestationId
&& mLatitude == o.mLatitude
&& mLongitude == o.mLongitude
- && TextUtils.equals(mAlphaLong, o.mAlphaLong)
- && TextUtils.equals(mAlphaShort, o.mAlphaShort);
+ && super.equals(other);
}
@Override
@@ -246,8 +219,6 @@
dest.writeInt(mBasestationId);
dest.writeInt(mLongitude);
dest.writeInt(mLatitude);
- dest.writeString(mAlphaLong);
- dest.writeString(mAlphaShort);
}
/** Construct from Parcel, type has already been processed */
@@ -258,8 +229,6 @@
mBasestationId = in.readInt();
mLongitude = in.readInt();
mLatitude = in.readInt();
- mAlphaLong = in.readString();
- mAlphaShort = in.readString();
if (DBG) log(toString());
}
diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java
index aae7929..c697880 100644
--- a/telephony/java/android/telephony/CellIdentityGsm.java
+++ b/telephony/java/android/telephony/CellIdentityGsm.java
@@ -37,22 +37,16 @@
private final int mArfcn;
// 6-bit Base Station Identity Code
private final int mBsic;
- // long alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaLong;
- // short alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaShort;
/**
* @hide
*/
public CellIdentityGsm() {
- super(TAG, TYPE_GSM, null, null);
+ super(TAG, TYPE_GSM, null, null, null, null);
mLac = Integer.MAX_VALUE;
mCid = Integer.MAX_VALUE;
mArfcn = Integer.MAX_VALUE;
mBsic = Integer.MAX_VALUE;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
* public constructor
@@ -98,16 +92,13 @@
*/
public CellIdentityGsm(int lac, int cid, int arfcn, int bsic, String mccStr,
String mncStr, String alphal, String alphas) {
- super(TAG, TYPE_GSM, mccStr, mncStr);
+ super(TAG, TYPE_GSM, mccStr, mncStr, alphal, alphas);
mLac = lac;
mCid = cid;
mArfcn = arfcn;
// In RIL BSIC is a UINT8, so 0xFF is the 'INVALID' designator
// for inbound parcels
mBsic = (bsic == 0xFF) ? Integer.MAX_VALUE : bsic;
-
- mAlphaLong = alphal;
- mAlphaShort = alphas;
}
private CellIdentityGsm(CellIdentityGsm cid) {
@@ -188,24 +179,6 @@
return mMncStr;
}
- /**
- * @return The long alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaLong() {
- return mAlphaLong;
- }
-
- /**
- * @return The short alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaShort() {
- return mAlphaShort;
- }
-
/** @hide */
@Override
public int getChannelNumber() {
@@ -223,7 +196,7 @@
@Override
public int hashCode() {
- return Objects.hash(mMccStr, mMncStr, mLac, mCid, mAlphaLong, mAlphaShort);
+ return Objects.hash(mLac, mCid, super.hashCode());
}
@Override
@@ -243,8 +216,7 @@
&& mBsic == o.mBsic
&& TextUtils.equals(mMccStr, o.mMccStr)
&& TextUtils.equals(mMncStr, o.mMncStr)
- && TextUtils.equals(mAlphaLong, o.mAlphaLong)
- && TextUtils.equals(mAlphaShort, o.mAlphaShort);
+ && super.equals(other);
}
@Override
@@ -270,8 +242,6 @@
dest.writeInt(mCid);
dest.writeInt(mArfcn);
dest.writeInt(mBsic);
- dest.writeString(mAlphaLong);
- dest.writeString(mAlphaShort);
}
/** Construct from Parcel, type has already been processed */
@@ -281,8 +251,6 @@
mCid = in.readInt();
mArfcn = in.readInt();
mBsic = in.readInt();
- mAlphaLong = in.readString();
- mAlphaShort = in.readString();
if (DBG) log(toString());
}
diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java
index 9b3ef56..177fced 100644
--- a/telephony/java/android/telephony/CellIdentityLte.java
+++ b/telephony/java/android/telephony/CellIdentityLte.java
@@ -37,10 +37,6 @@
private final int mTac;
// 18-bit Absolute RF Channel Number
private final int mEarfcn;
- // long alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaLong;
- // short alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaShort;
// cell bandwidth, in kHz
private final int mBandwidth;
@@ -48,14 +44,12 @@
* @hide
*/
public CellIdentityLte() {
- super(TAG, TYPE_LTE, null, null);
+ super(TAG, TYPE_LTE, null, null, null, null);
mCi = Integer.MAX_VALUE;
mPci = Integer.MAX_VALUE;
mTac = Integer.MAX_VALUE;
mEarfcn = Integer.MAX_VALUE;
mBandwidth = Integer.MAX_VALUE;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
@@ -105,14 +99,12 @@
*/
public CellIdentityLte(int ci, int pci, int tac, int earfcn, int bandwidth, String mccStr,
String mncStr, String alphal, String alphas) {
- super(TAG, TYPE_LTE, mccStr, mncStr);
+ super(TAG, TYPE_LTE, mccStr, mncStr, alphal, alphas);
mCi = ci;
mPci = pci;
mTac = tac;
mEarfcn = earfcn;
mBandwidth = bandwidth;
- mAlphaLong = alphal;
- mAlphaShort = alphas;
}
private CellIdentityLte(CellIdentityLte cid) {
@@ -198,24 +190,6 @@
return (mMccStr == null || mMncStr == null) ? null : mMccStr + mMncStr;
}
- /**
- * @return The long alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaLong() {
- return mAlphaLong;
- }
-
- /**
- * @return The short alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaShort() {
- return mAlphaShort;
- }
-
/** @hide */
@Override
public int getChannelNumber() {
@@ -224,7 +198,7 @@
@Override
public int hashCode() {
- return Objects.hash(mMccStr, mMncStr, mCi, mPci, mTac, mAlphaLong, mAlphaShort);
+ return Objects.hash(mCi, mPci, mTac, super.hashCode());
}
@Override
@@ -245,8 +219,7 @@
&& mBandwidth == o.mBandwidth
&& TextUtils.equals(mMccStr, o.mMccStr)
&& TextUtils.equals(mMncStr, o.mMncStr)
- && TextUtils.equals(mAlphaLong, o.mAlphaLong)
- && TextUtils.equals(mAlphaShort, o.mAlphaShort);
+ && super.equals(other);
}
@Override
@@ -274,8 +247,6 @@
dest.writeInt(mTac);
dest.writeInt(mEarfcn);
dest.writeInt(mBandwidth);
- dest.writeString(mAlphaLong);
- dest.writeString(mAlphaShort);
}
/** Construct from Parcel, type has already been processed */
@@ -286,8 +257,6 @@
mTac = in.readInt();
mEarfcn = in.readInt();
mBandwidth = in.readInt();
- mAlphaLong = in.readString();
- mAlphaShort = in.readString();
if (DBG) log(toString());
}
diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java
index 7475c74..18ab6d4 100644
--- a/telephony/java/android/telephony/CellIdentityTdscdma.java
+++ b/telephony/java/android/telephony/CellIdentityTdscdma.java
@@ -35,21 +35,15 @@
private final int mCid;
// 8-bit Cell Parameters ID described in TS 25.331, 0..127, INT_MAX if unknown.
private final int mCpid;
- // long alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaLong;
- // short alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaShort;
/**
* @hide
*/
public CellIdentityTdscdma() {
- super(TAG, TYPE_TDSCDMA, null, null);
+ super(TAG, TYPE_TDSCDMA, null, null, null, null);
mLac = Integer.MAX_VALUE;
mCid = Integer.MAX_VALUE;
mCpid = Integer.MAX_VALUE;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
@@ -76,12 +70,10 @@
* @hide
*/
public CellIdentityTdscdma(String mcc, String mnc, int lac, int cid, int cpid) {
- super(TAG, TYPE_TDSCDMA, mcc, mnc);
+ super(TAG, TYPE_TDSCDMA, mcc, mnc, null, null);
mLac = lac;
mCid = cid;
mCpid = cpid;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
@@ -97,12 +89,10 @@
*/
public CellIdentityTdscdma(String mcc, String mnc, int lac, int cid, int cpid,
String alphal, String alphas) {
- super(TAG, TYPE_TDSCDMA, mcc, mnc);
+ super(TAG, TYPE_TDSCDMA, mcc, mnc, alphal, alphas);
mLac = lac;
mCid = cid;
mCpid = cpid;
- mAlphaLong = alphal;
- mAlphaShort = alphas;
}
private CellIdentityTdscdma(CellIdentityTdscdma cid) {
@@ -151,31 +141,9 @@
return mCpid;
}
- /**
- * @return The long alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- *
- * @hide
- */
- @Nullable
- public CharSequence getOperatorAlphaLong() {
- return mAlphaLong;
- }
-
- /**
- * @return The short alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- *
- * @hide
- */
- @Nullable
- public CharSequence getOperatorAlphaShort() {
- return mAlphaShort;
- }
-
@Override
public int hashCode() {
- return Objects.hash(mMccStr, mMncStr, mLac, mCid, mCpid, mAlphaLong, mAlphaShort);
+ return Objects.hash(mLac, mCid, mCpid, super.hashCode());
}
@Override
@@ -194,8 +162,7 @@
&& mLac == o.mLac
&& mCid == o.mCid
&& mCpid == o.mCpid
- && mAlphaLong == o.mAlphaLong
- && mAlphaShort == o.mAlphaShort;
+ && super.equals(other);
}
@Override
@@ -219,8 +186,6 @@
dest.writeInt(mLac);
dest.writeInt(mCid);
dest.writeInt(mCpid);
- dest.writeString(mAlphaLong);
- dest.writeString(mAlphaShort);
}
/** Construct from Parcel, type has already been processed */
@@ -229,8 +194,6 @@
mLac = in.readInt();
mCid = in.readInt();
mCpid = in.readInt();
- mAlphaLong = in.readString();
- mAlphaShort = in.readString();
if (DBG) log(toString());
}
diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java
index 52fa54f..984483e 100644
--- a/telephony/java/android/telephony/CellIdentityWcdma.java
+++ b/telephony/java/android/telephony/CellIdentityWcdma.java
@@ -37,22 +37,16 @@
private final int mPsc;
// 16-bit UMTS Absolute RF Channel Number
private final int mUarfcn;
- // long alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaLong;
- // short alpha Operator Name String or Enhanced Operator Name String
- private final String mAlphaShort;
/**
* @hide
*/
public CellIdentityWcdma() {
- super(TAG, TYPE_TDSCDMA, null, null);
+ super(TAG, TYPE_TDSCDMA, null, null, null, null);
mLac = Integer.MAX_VALUE;
mCid = Integer.MAX_VALUE;
mPsc = Integer.MAX_VALUE;
mUarfcn = Integer.MAX_VALUE;
- mAlphaLong = null;
- mAlphaShort = null;
}
/**
* public constructor
@@ -99,13 +93,11 @@
*/
public CellIdentityWcdma (int lac, int cid, int psc, int uarfcn,
String mccStr, String mncStr, String alphal, String alphas) {
- super(TAG, TYPE_WCDMA, mccStr, mncStr);
+ super(TAG, TYPE_WCDMA, mccStr, mncStr, alphal, alphas);
mLac = lac;
mCid = cid;
mPsc = psc;
mUarfcn = uarfcn;
- mAlphaLong = alphal;
- mAlphaShort = alphas;
}
private CellIdentityWcdma(CellIdentityWcdma cid) {
@@ -179,27 +171,9 @@
return (mMccStr == null || mMncStr == null) ? null : mMccStr + mMncStr;
}
- /**
- * @return The long alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaLong() {
- return mAlphaLong;
- }
-
- /**
- * @return The short alpha tag associated with the current scan result (may be the operator
- * name string or extended operator name string). May be null if unknown.
- */
- @Nullable
- public CharSequence getOperatorAlphaShort() {
- return mAlphaShort;
- }
-
@Override
public int hashCode() {
- return Objects.hash(mMccStr, mMncStr, mLac, mCid, mPsc, mAlphaLong, mAlphaShort);
+ return Objects.hash(mLac, mCid, mPsc, super.hashCode());
}
/**
@@ -232,8 +206,7 @@
&& mUarfcn == o.mUarfcn
&& TextUtils.equals(mMccStr, o.mMccStr)
&& TextUtils.equals(mMncStr, o.mMncStr)
- && TextUtils.equals(mAlphaLong, o.mAlphaLong)
- && TextUtils.equals(mAlphaShort, o.mAlphaShort);
+ && super.equals(other);
}
@Override
@@ -259,8 +232,6 @@
dest.writeInt(mCid);
dest.writeInt(mPsc);
dest.writeInt(mUarfcn);
- dest.writeString(mAlphaLong);
- dest.writeString(mAlphaShort);
}
/** Construct from Parcel, type has already been processed */
@@ -270,8 +241,6 @@
mCid = in.readInt();
mPsc = in.readInt();
mUarfcn = in.readInt();
- mAlphaLong = in.readString();
- mAlphaShort = in.readString();
if (DBG) log(toString());
}
diff --git a/telephony/java/android/telephony/LocationAccessPolicy.java b/telephony/java/android/telephony/LocationAccessPolicy.java
index 26ffe32..6480aab 100644
--- a/telephony/java/android/telephony/LocationAccessPolicy.java
+++ b/telephony/java/android/telephony/LocationAccessPolicy.java
@@ -21,31 +21,25 @@
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.AppOpsManager;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.location.LocationManager;
import android.os.Binder;
-import android.os.Build;
import android.os.Process;
import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.Settings;
-import android.util.SparseBooleanArray;
+import android.util.Log;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* Helper for performing location access checks.
* @hide
*/
public final class LocationAccessPolicy {
+ private static final String LOG_TAG = LocationAccessPolicy.class.getSimpleName();
/**
* API to determine if the caller has permissions to get cell location.
*
@@ -94,10 +88,12 @@
}
private static boolean isLocationModeEnabled(@NonNull Context context, @UserIdInt int userId) {
- int locationMode = Settings.Secure.getIntForUser(context.getContentResolver(),
- Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF, userId);
- return locationMode != Settings.Secure.LOCATION_MODE_OFF
- && locationMode != Settings.Secure.LOCATION_MODE_SENSORS_ONLY;
+ LocationManager locationManager = context.getSystemService(LocationManager.class);
+ if (locationManager == null) {
+ Log.w(LOG_TAG, "Couldn't get location manager, denying location access");
+ return false;
+ }
+ return locationManager.isLocationEnabledForUser(UserHandle.of(userId));
}
private static boolean checkInteractAcrossUsersFull(@NonNull Context context) {
diff --git a/telephony/java/android/telephony/MbmsDownloadSession.java b/telephony/java/android/telephony/MbmsDownloadSession.java
index 81a966b..9dc07c1 100644
--- a/telephony/java/android/telephony/MbmsDownloadSession.java
+++ b/telephony/java/android/telephony/MbmsDownloadSession.java
@@ -31,11 +31,13 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
-import android.telephony.mbms.DownloadStateCallback;
+import android.telephony.mbms.DownloadProgressListener;
+import android.telephony.mbms.DownloadStatusListener;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.InternalDownloadProgressListener;
import android.telephony.mbms.InternalDownloadSessionCallback;
-import android.telephony.mbms.InternalDownloadStateCallback;
+import android.telephony.mbms.InternalDownloadStatusListener;
import android.telephony.mbms.MbmsDownloadSessionCallback;
import android.telephony.mbms.MbmsDownloadReceiver;
import android.telephony.mbms.MbmsErrors;
@@ -240,8 +242,10 @@
private AtomicReference<IMbmsDownloadService> mService = new AtomicReference<>(null);
private final InternalDownloadSessionCallback mInternalCallback;
- private final Map<DownloadStateCallback, InternalDownloadStateCallback>
- mInternalDownloadCallbacks = new HashMap<>();
+ private final Map<DownloadStatusListener, InternalDownloadStatusListener>
+ mInternalDownloadStatusListeners = new HashMap<>();
+ private final Map<DownloadProgressListener, InternalDownloadProgressListener>
+ mInternalDownloadProgressListeners = new HashMap<>();
private MbmsDownloadSession(Context context, Executor executor, int subscriptionId,
MbmsDownloadSessionCallback callback) {
@@ -569,34 +573,33 @@
}
/**
- * Registers a callback for a {@link DownloadRequest} previously requested via
+ * Registers a download status listener for a {@link DownloadRequest} previously requested via
* {@link #download(DownloadRequest)}. This callback will only be called as long as both this
* app and the middleware are both running -- if either one stops, no further calls on the
- * provided {@link DownloadStateCallback} will be enqueued.
+ * provided {@link DownloadStatusListener} will be enqueued.
*
* If the middleware is not aware of the specified download request,
* this method will throw an {@link IllegalArgumentException}.
*
* @param request The {@link DownloadRequest} that you want updates on.
- * @param executor The {@link Executor} on which calls to {@code callback} should be executed.
- * @param callback The callback that should be called when the middleware has information to
- * share on the download.
+ * @param executor The {@link Executor} on which calls to {@code listener } should be executed.
+ * @param listener The listener that should be called when the middleware has information to
+ * share on the status download.
* @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
* and some other error code otherwise.
*/
- public int registerStateCallback(@NonNull DownloadRequest request,
- @NonNull Executor executor, @NonNull DownloadStateCallback callback) {
+ public int addStatusListener(@NonNull DownloadRequest request,
+ @NonNull Executor executor, @NonNull DownloadStatusListener listener) {
IMbmsDownloadService downloadService = mService.get();
if (downloadService == null) {
throw new IllegalStateException("Middleware not yet bound");
}
- InternalDownloadStateCallback internalCallback =
- new InternalDownloadStateCallback(callback, executor);
+ InternalDownloadStatusListener internalListener =
+ new InternalDownloadStatusListener(listener, executor);
try {
- int result = downloadService.registerStateCallback(request, internalCallback,
- callback.getCallbackFilterFlags());
+ int result = downloadService.addStatusListener(request, internalListener);
if (result != MbmsErrors.SUCCESS) {
if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
throw new IllegalArgumentException("Unknown download request.");
@@ -608,40 +611,41 @@
sIsInitialized.set(false);
return MbmsErrors.ERROR_MIDDLEWARE_LOST;
}
- mInternalDownloadCallbacks.put(callback, internalCallback);
+ mInternalDownloadStatusListeners.put(listener, internalListener);
return MbmsErrors.SUCCESS;
+
}
/**
- * Un-register a callback previously registered via
- * {@link #registerStateCallback(DownloadRequest, Executor, DownloadStateCallback)}. After
- * this method is called, no further callbacks will be enqueued on the {@link Handler}
+ * Un-register a listener previously registered via
+ * {@link #addStatusListener(DownloadRequest, Executor, DownloadStatusListener)}. After
+ * this method is called, no further calls will be enqueued on the {@link Executor}
* provided upon registration, even if this method throws an exception.
*
* If the middleware is not aware of the specified download request,
* this method will throw an {@link IllegalArgumentException}.
*
* @param request The {@link DownloadRequest} provided during registration
- * @param callback The callback provided during registration.
+ * @param listener The listener provided during registration.
* @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
* and some other error code otherwise.
*/
- public int unregisterStateCallback(@NonNull DownloadRequest request,
- @NonNull DownloadStateCallback callback) {
+ public int removeStatusListener(@NonNull DownloadRequest request,
+ @NonNull DownloadStatusListener listener) {
try {
IMbmsDownloadService downloadService = mService.get();
if (downloadService == null) {
throw new IllegalStateException("Middleware not yet bound");
}
- InternalDownloadStateCallback internalCallback =
- mInternalDownloadCallbacks.get(callback);
- if (internalCallback == null) {
- throw new IllegalArgumentException("Provided callback was never registered");
+ InternalDownloadStatusListener internalListener =
+ mInternalDownloadStatusListeners.get(listener);
+ if (internalListener == null) {
+ throw new IllegalArgumentException("Provided listener was never registered");
}
try {
- int result = downloadService.unregisterStateCallback(request, internalCallback);
+ int result = downloadService.removeStatusListener(request, internalListener);
if (result != MbmsErrors.SUCCESS) {
if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
throw new IllegalArgumentException("Unknown download request.");
@@ -654,8 +658,102 @@
return MbmsErrors.ERROR_MIDDLEWARE_LOST;
}
} finally {
- InternalDownloadStateCallback internalCallback =
- mInternalDownloadCallbacks.remove(callback);
+ InternalDownloadStatusListener internalCallback =
+ mInternalDownloadStatusListeners.remove(listener);
+ if (internalCallback != null) {
+ internalCallback.stop();
+ }
+ }
+ return MbmsErrors.SUCCESS;
+ }
+
+ /**
+ * Registers a progress listener for a {@link DownloadRequest} previously requested via
+ * {@link #download(DownloadRequest)}. This listener will only be called as long as both this
+ * app and the middleware are both running -- if either one stops, no further calls on the
+ * provided {@link DownloadProgressListener} will be enqueued.
+ *
+ * If the middleware is not aware of the specified download request,
+ * this method will throw an {@link IllegalArgumentException}.
+ *
+ * @param request The {@link DownloadRequest} that you want updates on.
+ * @param executor The {@link Executor} on which calls to {@code listener} should be executed.
+ * @param listener The listener that should be called when the middleware has information to
+ * share on the progress of the download.
+ * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
+ * and some other error code otherwise.
+ */
+ public int addProgressListener(@NonNull DownloadRequest request,
+ @NonNull Executor executor, @NonNull DownloadProgressListener listener) {
+ IMbmsDownloadService downloadService = mService.get();
+ if (downloadService == null) {
+ throw new IllegalStateException("Middleware not yet bound");
+ }
+
+ InternalDownloadProgressListener internalListener =
+ new InternalDownloadProgressListener(listener, executor);
+
+ try {
+ int result = downloadService.addProgressListener(request, internalListener);
+ if (result != MbmsErrors.SUCCESS) {
+ if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+ throw new IllegalArgumentException("Unknown download request.");
+ }
+ return result;
+ }
+ } catch (RemoteException e) {
+ mService.set(null);
+ sIsInitialized.set(false);
+ return MbmsErrors.ERROR_MIDDLEWARE_LOST;
+ }
+ mInternalDownloadProgressListeners.put(listener, internalListener);
+ return MbmsErrors.SUCCESS;
+ }
+
+ /**
+ * Un-register a listener previously registered via
+ * {@link #addProgressListener(DownloadRequest, Executor, DownloadProgressListener)}. After
+ * this method is called, no further callbacks will be enqueued on the {@link Handler}
+ * provided upon registration, even if this method throws an exception.
+ *
+ * If the middleware is not aware of the specified download request,
+ * this method will throw an {@link IllegalArgumentException}.
+ *
+ * @param request The {@link DownloadRequest} provided during registration
+ * @param listener The listener provided during registration.
+ * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
+ * and some other error code otherwise.
+ */
+ public int removeProgressListener(@NonNull DownloadRequest request,
+ @NonNull DownloadProgressListener listener) {
+ try {
+ IMbmsDownloadService downloadService = mService.get();
+ if (downloadService == null) {
+ throw new IllegalStateException("Middleware not yet bound");
+ }
+
+ InternalDownloadProgressListener internalListener =
+ mInternalDownloadProgressListeners.get(listener);
+ if (internalListener == null) {
+ throw new IllegalArgumentException("Provided listener was never registered");
+ }
+
+ try {
+ int result = downloadService.removeProgressListener(request, internalListener);
+ if (result != MbmsErrors.SUCCESS) {
+ if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+ throw new IllegalArgumentException("Unknown download request.");
+ }
+ return result;
+ }
+ } catch (RemoteException e) {
+ mService.set(null);
+ sIsInitialized.set(false);
+ return MbmsErrors.ERROR_MIDDLEWARE_LOST;
+ }
+ } finally {
+ InternalDownloadProgressListener internalCallback =
+ mInternalDownloadProgressListeners.remove(listener);
if (internalCallback != null) {
internalCallback.stop();
}
@@ -700,9 +798,9 @@
* Requests information about the state of a file pending download.
*
* The state will be delivered as a callback via
- * {@link DownloadStateCallback#onStateUpdated(DownloadRequest, FileInfo, int)}. If no such
+ * {@link DownloadStatusListener#onStatusUpdated(DownloadRequest, FileInfo, int)}. If no such
* callback has been registered via
- * {@link #registerStateCallback(DownloadRequest, Executor, DownloadStateCallback)}, this
+ * {@link #addProgressListener(DownloadRequest, Executor, DownloadProgressListener)}, this
* method will be a no-op.
*
* If the middleware has no record of the
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index 9d03b59..57f89e3 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -207,7 +207,10 @@
*/
public static SmsMessage createFromPdu(byte[] pdu, String format) {
SmsMessageBase wrappedMessage;
-
+ if (pdu == null) {
+ Rlog.i(LOG_TAG, "createFromPdu(): pdu is null");
+ return null;
+ }
if (SmsConstants.FORMAT_3GPP2.equals(format)) {
wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu);
} else if (SmsConstants.FORMAT_3GPP.equals(format)) {
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index c5386ef..a12a7a0 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -40,6 +40,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.PersistableBundle;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
@@ -214,6 +215,10 @@
return ActivityThread.currentOpPackageName();
}
+ private boolean isSystemProcess() {
+ return Process.myUid() == Process.SYSTEM_UID;
+ }
+
/**
* Returns the multi SIM variant
* Returns DSDS for Dual SIM Dual Standby
@@ -2866,15 +2871,18 @@
IPhoneSubInfo info = getSubscriberInfo();
if (info == null) {
Rlog.e(TAG, "IMSI error: Subscriber Info is null");
+ if (!isSystemProcess()) {
+ throw new RuntimeException("IMSI error: Subscriber Info is null");
+ }
return;
}
int subId = getSubId(SubscriptionManager.getDefaultDataSubscriptionId());
info.resetCarrierKeysForImsiEncryption(subId, mContext.getOpPackageName());
} catch (RemoteException ex) {
Rlog.e(TAG, "getCarrierInfoForImsiEncryption RemoteException" + ex);
- } catch (NullPointerException ex) {
- // This could happen before phone restarts due to crashing
- Rlog.e(TAG, "getCarrierInfoForImsiEncryption NullPointerException" + ex);
+ if (!isSystemProcess()) {
+ ex.rethrowAsRuntimeException();
+ }
}
}
@@ -3863,11 +3871,18 @@
public void sendDialerSpecialCode(String inputCode) {
try {
final ITelephony telephony = getITelephony();
+ if (telephony == null) {
+ if (!isSystemProcess()) {
+ throw new RuntimeException("Telephony service unavailable");
+ }
+ return;
+ }
telephony.sendDialerSpecialCode(mContext.getOpPackageName(), inputCode);
} catch (RemoteException ex) {
// This could happen if binder process crashes.
- } catch (NullPointerException ex) {
- // This could happen before phone restarts due to crashing
+ if (!isSystemProcess()) {
+ ex.rethrowAsRuntimeException();
+ }
}
}
@@ -7836,6 +7851,9 @@
}
} catch (RemoteException ex) {
// This could happen if binder process crashes.
+ if (!isSystemProcess()) {
+ ex.rethrowAsRuntimeException();
+ }
}
}
}
diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java
index 7d65430..34d7c65 100644
--- a/telephony/java/android/telephony/ims/ImsReasonInfo.java
+++ b/telephony/java/android/telephony/ims/ImsReasonInfo.java
@@ -455,7 +455,6 @@
mExtraMessage = null;
}
- /** @hide */
public ImsReasonInfo(int code, int extraCode, String extraMessage) {
mCode = code;
mExtraCode = extraCode;
diff --git a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
index 0664a7e..852c8e0 100644
--- a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
@@ -197,6 +197,9 @@
* platform will deliver the message to the messages database and notify the IMS provider of the
* result by calling {@link #acknowledgeSms(int, int, int)}.
*
+ * This method must not be called before {@link #onReady()} is called or the call will fail. If
+ * the platform is not available, {@link #acknowledgeSms(int, int, int)} will be called with the
+ * {@link #DELIVER_STATUS_ERROR_GENERIC} result code.
* @param token unique token generated by IMS providers that the platform will use to trigger
* callbacks for this message.
* @param format the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and
@@ -213,7 +216,14 @@
mListener.onSmsReceived(token, format, pdu);
} catch (RemoteException e) {
Log.e(LOG_TAG, "Can not deliver sms: " + e.getMessage());
- acknowledgeSms(token, 0, DELIVER_STATUS_ERROR_GENERIC);
+ SmsMessage message = SmsMessage.createFromPdu(pdu, format);
+ if (message != null && message.mWrappedSmsMessage != null) {
+ acknowledgeSms(token, message.mWrappedSmsMessage.mMessageRef,
+ DELIVER_STATUS_ERROR_GENERIC);
+ } else {
+ Log.w(LOG_TAG, "onSmsReceived: Invalid pdu entered.");
+ acknowledgeSms(token, 0, DELIVER_STATUS_ERROR_GENERIC);
+ }
}
}
}
diff --git a/telephony/java/android/telephony/mbms/DownloadProgressListener.java b/telephony/java/android/telephony/mbms/DownloadProgressListener.java
new file mode 100644
index 0000000..4301cb1
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/DownloadProgressListener.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms;
+
+import android.telephony.MbmsDownloadSession;
+
+/**
+ * A optional listener class used by download clients to track progress. Apps should extend this
+ * class and pass an instance into
+ * {@link MbmsDownloadSession#download(DownloadRequest)}
+ *
+ * This is optionally specified when requesting a download and will only be called while the app
+ * is running.
+ */
+public class DownloadProgressListener {
+ /**
+ * Called when the middleware wants to report progress for a file in a {@link DownloadRequest}.
+ *
+ * @param request a {@link DownloadRequest}, indicating which download is being referenced.
+ * @param fileInfo a {@link FileInfo} specifying the file to report progress on. Note that
+ * the request may result in many files being downloaded and the client
+ * may not have been able to get a list of them in advance.
+ * @param currentDownloadSize is the current amount downloaded.
+ * @param fullDownloadSize is the total number of bytes that make up the downloaded content.
+ * This may be different from the decoded final size, but is useful in gauging download
+ * progress.
+ * @param currentDecodedSize is the number of bytes that have been decoded.
+ * @param fullDecodedSize is the total number of bytes that make up the final decoded content.
+ */
+ public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+ int currentDownloadSize, int fullDownloadSize,
+ int currentDecodedSize, int fullDecodedSize) {
+ }
+}
diff --git a/telephony/java/android/telephony/mbms/DownloadStateCallback.java b/telephony/java/android/telephony/mbms/DownloadStateCallback.java
deleted file mode 100644
index 9f60cc3..0000000
--- a/telephony/java/android/telephony/mbms/DownloadStateCallback.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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.telephony.mbms;
-
-import android.annotation.IntDef;
-import android.telephony.MbmsDownloadSession;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * A optional listener class used by download clients to track progress. Apps should extend this
- * class and pass an instance into
- * {@link MbmsDownloadSession#download(DownloadRequest)}
- *
- * This is optionally specified when requesting a download and will only be called while the app
- * is running.
- */
-public class DownloadStateCallback {
-
- /**
- * Bitmask flags used for filtering out callback methods. Used when constructing the
- * DownloadStateCallback as an optional parameter.
- * @hide
- */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true, value = {ALL_UPDATES, PROGRESS_UPDATES, STATE_UPDATES})
- public @interface FilterFlag {}
-
- /**
- * Receive all callbacks.
- * Default value.
- */
- public static final int ALL_UPDATES = 0x00;
- /**
- * Receive callbacks for {@link #onProgressUpdated}.
- */
- public static final int PROGRESS_UPDATES = 0x01;
- /**
- * Receive callbacks for {@link #onStateUpdated}.
- */
- public static final int STATE_UPDATES = 0x02;
-
- private final int mCallbackFilterFlags;
-
- /**
- * Creates a DownloadStateCallback that will receive all callbacks.
- */
- public DownloadStateCallback() {
- mCallbackFilterFlags = ALL_UPDATES;
- }
-
- /**
- * Creates a DownloadStateCallback that will only receive callbacks for the methods specified
- * via the filterFlags parameter.
- * @param filterFlags A bitmask of filter flags that will specify which callback this instance
- * is interested in.
- */
- public DownloadStateCallback(int filterFlags) {
- mCallbackFilterFlags = filterFlags;
- }
-
- /**
- * Return the currently set filter flags.
- * @return An integer containing the bitmask of flags that this instance is interested in.
- * @hide
- */
- public int getCallbackFilterFlags() {
- return mCallbackFilterFlags;
- }
-
- /**
- * Returns true if a filter flag is set for a particular callback method. If the flag is set,
- * the callback will be delivered to the listening process.
- * @param flag A filter flag specifying whether or not a callback method is registered to
- * receive callbacks.
- * @return true if registered to receive callbacks in the listening process, false if not.
- */
- public final boolean isFilterFlagSet(@FilterFlag int flag) {
- if (mCallbackFilterFlags == ALL_UPDATES) {
- return true;
- }
- return (mCallbackFilterFlags & flag) > 0;
- }
-
- /**
- * Called when the middleware wants to report progress for a file in a {@link DownloadRequest}.
- *
- * @param request a {@link DownloadRequest}, indicating which download is being referenced.
- * @param fileInfo a {@link FileInfo} specifying the file to report progress on. Note that
- * the request may result in many files being downloaded and the client
- * may not have been able to get a list of them in advance.
- * @param currentDownloadSize is the current amount downloaded.
- * @param fullDownloadSize is the total number of bytes that make up the downloaded content.
- * This may be different from the decoded final size, but is useful in gauging download
- * progress.
- * @param currentDecodedSize is the number of bytes that have been decoded.
- * @param fullDecodedSize is the total number of bytes that make up the final decoded content.
- */
- public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
- int currentDownloadSize, int fullDownloadSize,
- int currentDecodedSize, int fullDecodedSize) {
- }
-
- /**
- * Gives download state callbacks for a file in a {@link DownloadRequest}.
- *
- * @param request a {@link DownloadRequest}, indicating which download is being referenced.
- * @param fileInfo a {@link FileInfo} specifying the file to report progress on. Note that
- * the request may result in many files being downloaded and the client
- * may not have been able to get a list of them in advance.
- * @param state The current state of the download.
- */
- public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
- @MbmsDownloadSession.DownloadStatus int state) {
- }
-}
diff --git a/telephony/java/android/telephony/mbms/DownloadStatusListener.java b/telephony/java/android/telephony/mbms/DownloadStatusListener.java
new file mode 100644
index 0000000..ca77932
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/DownloadStatusListener.java
@@ -0,0 +1,46 @@
+/*
+ * 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.telephony.mbms;
+
+import android.annotation.IntDef;
+import android.telephony.MbmsDownloadSession;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * A optional listener class used by download clients to track progress. Apps should extend this
+ * class and pass an instance into
+ * {@link MbmsDownloadSession#download(DownloadRequest)}
+ *
+ * This is optionally specified when requesting a download and will only be called while the app
+ * is running.
+ */
+public class DownloadStatusListener {
+ /**
+ * Gives download status callbacks for a file in a {@link DownloadRequest}.
+ *
+ * @param request a {@link DownloadRequest}, indicating which download is being referenced.
+ * @param fileInfo a {@link FileInfo} specifying the file to report progress on. Note that
+ * the request may result in many files being downloaded and the client
+ * may not have been able to get a list of them in advance.
+ * @param status The current status of the download.
+ */
+ public void onStatusUpdated(DownloadRequest request, FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus int status) {
+ }
+}
diff --git a/telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl b/telephony/java/android/telephony/mbms/IDownloadProgressListener.aidl
similarity index 90%
rename from telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl
rename to telephony/java/android/telephony/mbms/IDownloadProgressListener.aidl
index cebc70d..d0adcb5 100755
--- a/telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl
+++ b/telephony/java/android/telephony/mbms/IDownloadProgressListener.aidl
@@ -23,7 +23,7 @@
* The optional interface used by download clients to track progress.
* @hide
*/
-interface IDownloadStateCallback
+interface IDownloadProgressListener
{
/**
* Gives progress callbacks for a given DownloadRequest. Includes a FileInfo
@@ -32,6 +32,4 @@
void onProgressUpdated(in DownloadRequest request, in FileInfo fileInfo,
int currentDownloadSize, int fullDownloadSize,
int currentDecodedSize, int fullDecodedSize);
-
- void onStateUpdated(in DownloadRequest request, in FileInfo fileInfo, int state);
}
diff --git a/telephony/java/android/telephony/mbms/IDownloadStatusListener.aidl b/telephony/java/android/telephony/mbms/IDownloadStatusListener.aidl
new file mode 100755
index 0000000..799290a
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/IDownloadStatusListener.aidl
@@ -0,0 +1,29 @@
+/*
+** Copyright 2017, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.telephony.mbms;
+
+import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.FileInfo;
+
+/**
+ * The optional interface used by download clients to track download status.
+ * @hide
+ */
+interface IDownloadStatusListener
+{
+ void onStatusUpdated(in DownloadRequest request, in FileInfo fileInfo, int status);
+}
diff --git a/telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java b/telephony/java/android/telephony/mbms/InternalDownloadProgressListener.java
similarity index 62%
rename from telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java
rename to telephony/java/android/telephony/mbms/InternalDownloadProgressListener.java
index f30ae27..403f758 100644
--- a/telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java
+++ b/telephony/java/android/telephony/mbms/InternalDownloadProgressListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,13 +24,14 @@
/**
* @hide
*/
-public class InternalDownloadStateCallback extends IDownloadStateCallback.Stub {
+public class InternalDownloadProgressListener extends IDownloadProgressListener.Stub {
private final Executor mExecutor;
- private final DownloadStateCallback mAppCallback;
+ private final DownloadProgressListener mAppListener;
private volatile boolean mIsStopped = false;
- public InternalDownloadStateCallback(DownloadStateCallback appCallback, Executor executor) {
- mAppCallback = appCallback;
+ public InternalDownloadProgressListener(DownloadProgressListener appListener,
+ Executor executor) {
+ mAppListener = appListener;
mExecutor = executor;
}
@@ -47,7 +48,7 @@
public void run() {
long token = Binder.clearCallingIdentity();
try {
- mAppCallback.onProgressUpdated(request, fileInfo, currentDownloadSize,
+ mAppListener.onProgressUpdated(request, fileInfo, currentDownloadSize,
fullDownloadSize, currentDecodedSize, fullDecodedSize);
} finally {
Binder.restoreCallingIdentity(token);
@@ -56,26 +57,6 @@
});
}
- @Override
- public void onStateUpdated(final DownloadRequest request, final FileInfo fileInfo,
- final int state) throws RemoteException {
- if (mIsStopped) {
- return;
- }
-
- mExecutor.execute(new Runnable() {
- @Override
- public void run() {
- long token = Binder.clearCallingIdentity();
- try {
- mAppCallback.onStateUpdated(request, fileInfo, state);
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
- });
- }
-
public void stop() {
mIsStopped = true;
}
diff --git a/telephony/java/android/telephony/mbms/InternalDownloadStatusListener.java b/telephony/java/android/telephony/mbms/InternalDownloadStatusListener.java
new file mode 100644
index 0000000..ad6bb54
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/InternalDownloadStatusListener.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms;
+
+import android.os.Binder;
+import android.os.RemoteException;
+import android.telephony.MbmsDownloadSession;
+
+import java.util.concurrent.Executor;
+
+/**
+ * @hide
+ */
+public class InternalDownloadStatusListener extends IDownloadStatusListener.Stub {
+ private final Executor mExecutor;
+ private final DownloadStatusListener mAppListener;
+ private volatile boolean mIsStopped = false;
+
+ public InternalDownloadStatusListener(DownloadStatusListener appCallback, Executor executor) {
+ mAppListener = appCallback;
+ mExecutor = executor;
+ }
+
+ @Override
+ public void onStatusUpdated(final DownloadRequest request, final FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus final int status) throws RemoteException {
+ if (mIsStopped) {
+ return;
+ }
+
+ mExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ long token = Binder.clearCallingIdentity();
+ try {
+ mAppListener.onStatusUpdated(request, fileInfo, status);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+ });
+ }
+
+ public void stop() {
+ mIsStopped = true;
+ }
+}
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
index 7d9845f..445087fb 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
@@ -20,8 +20,9 @@
import android.net.Uri;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.FileInfo;
+import android.telephony.mbms.IDownloadProgressListener;
+import android.telephony.mbms.IDownloadStatusListener;
import android.telephony.mbms.IMbmsDownloadSessionCallback;
-import android.telephony.mbms.IDownloadStateCallback;
/**
* @hide
@@ -36,11 +37,17 @@
int download(in DownloadRequest downloadRequest);
- int registerStateCallback(in DownloadRequest downloadRequest, IDownloadStateCallback listener,
- int flags);
+ int addStatusListener(in DownloadRequest downloadRequest,
+ IDownloadStatusListener listener);
- int unregisterStateCallback(in DownloadRequest downloadRequest,
- IDownloadStateCallback listener);
+ int removeStatusListener(in DownloadRequest downloadRequest,
+ IDownloadStatusListener listener);
+
+ int addProgressListener(in DownloadRequest downloadRequest,
+ IDownloadProgressListener listener);
+
+ int removeProgressListener(in DownloadRequest downloadRequest,
+ IDownloadProgressListener listener);
List<DownloadRequest> listPendingDownloads(int subscriptionId);
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
index 86b1b7a..f9d7161 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
@@ -24,11 +24,13 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.telephony.MbmsDownloadSession;
+import android.telephony.mbms.DownloadProgressListener;
import android.telephony.mbms.DownloadRequest;
-import android.telephony.mbms.DownloadStateCallback;
+import android.telephony.mbms.DownloadStatusListener;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.FileServiceInfo;
-import android.telephony.mbms.IDownloadStateCallback;
+import android.telephony.mbms.IDownloadProgressListener;
+import android.telephony.mbms.IDownloadStatusListener;
import android.telephony.mbms.IMbmsDownloadSessionCallback;
import android.telephony.mbms.MbmsDownloadSessionCallback;
import android.telephony.mbms.MbmsErrors;
@@ -45,47 +47,50 @@
@SystemApi
@TestApi
public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
- private final Map<IBinder, DownloadStateCallback> mDownloadCallbackBinderMap = new HashMap<>();
+ private final Map<IBinder, DownloadStatusListener> mDownloadStatusListenerBinderMap =
+ new HashMap<>();
+ private final Map<IBinder, DownloadProgressListener> mDownloadProgressListenerBinderMap =
+ new HashMap<>();
private final Map<IBinder, DeathRecipient> mDownloadCallbackDeathRecipients = new HashMap<>();
+ private abstract static class VendorDownloadStatusListener extends DownloadStatusListener {
+ private final IDownloadStatusListener mListener;
+ public VendorDownloadStatusListener(IDownloadStatusListener listener) {
+ mListener = listener;
+ }
- // Filters the DownloadStateCallbacks by its configuration from the app.
- private abstract static class FilteredDownloadStateCallback extends DownloadStateCallback {
+ @Override
+ public void onStatusUpdated(DownloadRequest request, FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus int state) {
+ try {
+ mListener.onStatusUpdated(request, fileInfo, state);
+ } catch (RemoteException e) {
+ onRemoteException(e);
+ }
+ }
- private final IDownloadStateCallback mCallback;
- public FilteredDownloadStateCallback(IDownloadStateCallback callback, int callbackFlags) {
- super(callbackFlags);
- mCallback = callback;
+ protected abstract void onRemoteException(RemoteException e);
+ }
+
+ private abstract static class VendorDownloadProgressListener extends DownloadProgressListener {
+ private final IDownloadProgressListener mListener;
+
+ public VendorDownloadProgressListener(IDownloadProgressListener listener) {
+ mListener = listener;
}
@Override
public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
int currentDownloadSize, int fullDownloadSize, int currentDecodedSize,
int fullDecodedSize) {
- if (!isFilterFlagSet(PROGRESS_UPDATES)) {
- return;
- }
try {
- mCallback.onProgressUpdated(request, fileInfo, currentDownloadSize,
+ mListener.onProgressUpdated(request, fileInfo, currentDownloadSize,
fullDownloadSize, currentDecodedSize, fullDecodedSize);
} catch (RemoteException e) {
onRemoteException(e);
}
}
- @Override
- public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
- @MbmsDownloadSession.DownloadStatus int state) {
- if (!isFilterFlagSet(STATE_UPDATES)) {
- return;
- }
- try {
- mCallback.onStateUpdated(request, fileInfo, state);
- } catch (RemoteException e) {
- onRemoteException(e);
- }
- }
-
protected abstract void onRemoteException(RemoteException e);
}
@@ -223,71 +228,70 @@
}
/**
- * Registers a download state callbacks for the provided {@link DownloadRequest}.
+ * Registers a download status listener for the provided {@link DownloadRequest}.
*
- * This method is called by the app when it wants to request updates on the progress or
- * status of the download.
+ * This method is called by the app when it wants to request updates on the status of
+ * the download.
*
* If the middleware is not aware of a download having been requested with the provided
- *
* {@link DownloadRequest} in the past,
* {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}
* must be returned.
*
* @param downloadRequest The {@link DownloadRequest} that was used to initiate the download
* for which progress updates are being requested.
- * @param callback The callback object to use.
+ * @param listener The listener object to use.
*/
- public int registerStateCallback(DownloadRequest downloadRequest,
- DownloadStateCallback callback) throws RemoteException {
+ public int addStatusListener(DownloadRequest downloadRequest,
+ DownloadStatusListener listener) throws RemoteException {
return 0;
}
/**
- * Actual AIDL implementation -- hides the callback AIDL from the API.
+ * Actual AIDL implementation -- hides the listener AIDL from the API.
* @hide
*/
@Override
- public final int registerStateCallback(final DownloadRequest downloadRequest,
- final IDownloadStateCallback callback, int flags) throws RemoteException {
+ public final int addStatusListener(final DownloadRequest downloadRequest,
+ final IDownloadStatusListener listener) throws RemoteException {
final int uid = Binder.getCallingUid();
if (downloadRequest == null) {
throw new NullPointerException("Download request must not be null");
}
- if (callback == null) {
+ if (listener == null) {
throw new NullPointerException("Callback must not be null");
}
- DownloadStateCallback exposedCallback = new FilteredDownloadStateCallback(callback, flags) {
+ DownloadStatusListener exposedCallback = new VendorDownloadStatusListener(listener) {
@Override
protected void onRemoteException(RemoteException e) {
onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
}
};
- int result = registerStateCallback(downloadRequest, exposedCallback);
+ int result = addStatusListener(downloadRequest, exposedCallback);
if (result == MbmsErrors.SUCCESS) {
DeathRecipient deathRecipient = new DeathRecipient() {
@Override
public void binderDied() {
onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
- mDownloadCallbackBinderMap.remove(callback.asBinder());
- mDownloadCallbackDeathRecipients.remove(callback.asBinder());
+ mDownloadStatusListenerBinderMap.remove(listener.asBinder());
+ mDownloadCallbackDeathRecipients.remove(listener.asBinder());
}
};
- mDownloadCallbackDeathRecipients.put(callback.asBinder(), deathRecipient);
- callback.asBinder().linkToDeath(deathRecipient, 0);
- mDownloadCallbackBinderMap.put(callback.asBinder(), exposedCallback);
+ mDownloadCallbackDeathRecipients.put(listener.asBinder(), deathRecipient);
+ listener.asBinder().linkToDeath(deathRecipient, 0);
+ mDownloadStatusListenerBinderMap.put(listener.asBinder(), exposedCallback);
}
return result;
}
/**
- * Un-registers a download state callbacks for the provided {@link DownloadRequest}.
+ * Un-registers a download status listener for the provided {@link DownloadRequest}.
*
- * This method is called by the app when it no longer wants to request updates on the
+ * This method is called by the app when it no longer wants to request status updates on the
* download.
*
* If the middleware is not aware of a download having been requested with the provided
@@ -296,45 +300,157 @@
* must be returned.
*
* @param downloadRequest The {@link DownloadRequest} that was used to register the callback
- * @param callback The callback object that
- * {@link #registerStateCallback(DownloadRequest, DownloadStateCallback)}
+ * @param listener The callback object that
+ * {@link #addStatusListener(DownloadRequest, DownloadStatusListener)}
* was called with.
*/
- public int unregisterStateCallback(DownloadRequest downloadRequest,
- DownloadStateCallback callback) throws RemoteException {
+ public int removeStatusListener(DownloadRequest downloadRequest,
+ DownloadStatusListener listener) throws RemoteException {
return 0;
}
/**
- * Actual AIDL implementation -- hides the callback AIDL from the API.
+ * Actual AIDL implementation -- hides the listener AIDL from the API.
* @hide
*/
- @Override
- public final int unregisterStateCallback(
- final DownloadRequest downloadRequest, final IDownloadStateCallback callback)
+ public final int removeStatusListener(
+ final DownloadRequest downloadRequest, final IDownloadStatusListener listener)
throws RemoteException {
if (downloadRequest == null) {
throw new NullPointerException("Download request must not be null");
}
- if (callback == null) {
+ if (listener == null) {
throw new NullPointerException("Callback must not be null");
}
DeathRecipient deathRecipient =
- mDownloadCallbackDeathRecipients.remove(callback.asBinder());
+ mDownloadCallbackDeathRecipients.remove(listener.asBinder());
if (deathRecipient == null) {
- throw new IllegalArgumentException("Unknown callback");
+ throw new IllegalArgumentException("Unknown listener");
}
- callback.asBinder().unlinkToDeath(deathRecipient, 0);
+ listener.asBinder().unlinkToDeath(deathRecipient, 0);
- DownloadStateCallback exposedCallback =
- mDownloadCallbackBinderMap.remove(callback.asBinder());
+ DownloadStatusListener exposedCallback =
+ mDownloadStatusListenerBinderMap.remove(listener.asBinder());
if (exposedCallback == null) {
- throw new IllegalArgumentException("Unknown callback");
+ throw new IllegalArgumentException("Unknown listener");
}
- return unregisterStateCallback(downloadRequest, exposedCallback);
+ return removeStatusListener(downloadRequest, exposedCallback);
+ }
+
+ /**
+ * Registers a download progress listener for the provided {@link DownloadRequest}.
+ *
+ * This method is called by the app when it wants to request updates on the progress of
+ * the download.
+ *
+ * If the middleware is not aware of a download having been requested with the provided
+ * {@link DownloadRequest} in the past,
+ * {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}
+ * must be returned.
+ *
+ * @param downloadRequest The {@link DownloadRequest} that was used to initiate the download
+ * for which progress updates are being requested.
+ * @param listener The listener object to use.
+ */
+ public int addProgressListener(DownloadRequest downloadRequest,
+ DownloadProgressListener listener) throws RemoteException {
+ return 0;
+ }
+
+ /**
+ * Actual AIDL implementation -- hides the listener AIDL from the API.
+ * @hide
+ */
+ @Override
+ public final int addProgressListener(final DownloadRequest downloadRequest,
+ final IDownloadProgressListener listener) throws RemoteException {
+ final int uid = Binder.getCallingUid();
+ if (downloadRequest == null) {
+ throw new NullPointerException("Download request must not be null");
+ }
+ if (listener == null) {
+ throw new NullPointerException("Callback must not be null");
+ }
+
+ DownloadProgressListener exposedCallback = new VendorDownloadProgressListener(listener) {
+ @Override
+ protected void onRemoteException(RemoteException e) {
+ onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
+ }
+ };
+
+ int result = addProgressListener(downloadRequest, exposedCallback);
+
+ if (result == MbmsErrors.SUCCESS) {
+ DeathRecipient deathRecipient = new DeathRecipient() {
+ @Override
+ public void binderDied() {
+ onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
+ mDownloadProgressListenerBinderMap.remove(listener.asBinder());
+ mDownloadCallbackDeathRecipients.remove(listener.asBinder());
+ }
+ };
+ mDownloadCallbackDeathRecipients.put(listener.asBinder(), deathRecipient);
+ listener.asBinder().linkToDeath(deathRecipient, 0);
+ mDownloadProgressListenerBinderMap.put(listener.asBinder(), exposedCallback);
+ }
+
+ return result;
+ }
+
+ /**
+ * Un-registers a download progress listener for the provided {@link DownloadRequest}.
+ *
+ * This method is called by the app when it no longer wants to request progress updates on the
+ * download.
+ *
+ * If the middleware is not aware of a download having been requested with the provided
+ * {@link DownloadRequest} in the past,
+ * {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}
+ * must be returned.
+ *
+ * @param downloadRequest The {@link DownloadRequest} that was used to register the callback
+ * @param listener The callback object that
+ * {@link #addProgressListener(DownloadRequest, DownloadProgressListener)}
+ * was called with.
+ */
+ public int removeProgressListener(DownloadRequest downloadRequest,
+ DownloadProgressListener listener) throws RemoteException {
+ return 0;
+ }
+
+ /**
+ * Actual AIDL implementation -- hides the listener AIDL from the API.
+ * @hide
+ */
+ public final int removeProgressListener(
+ final DownloadRequest downloadRequest, final IDownloadProgressListener listener)
+ throws RemoteException {
+ if (downloadRequest == null) {
+ throw new NullPointerException("Download request must not be null");
+ }
+ if (listener == null) {
+ throw new NullPointerException("Callback must not be null");
+ }
+
+ DeathRecipient deathRecipient =
+ mDownloadCallbackDeathRecipients.remove(listener.asBinder());
+ if (deathRecipient == null) {
+ throw new IllegalArgumentException("Unknown listener");
+ }
+
+ listener.asBinder().unlinkToDeath(deathRecipient, 0);
+
+ DownloadProgressListener exposedCallback =
+ mDownloadProgressListenerBinderMap.remove(listener.asBinder());
+ if (exposedCallback == null) {
+ throw new IllegalArgumentException("Unknown listener");
+ }
+
+ return removeProgressListener(downloadRequest, exposedCallback);
}
/**
diff --git a/tests/UsbTests/res/raw/usbdescriptors_massstorage.bin b/tests/UsbTests/res/raw/usbdescriptors_massstorage.bin
new file mode 100644
index 0000000..1790369
--- /dev/null
+++ b/tests/UsbTests/res/raw/usbdescriptors_massstorage.bin
Binary files differ
diff --git a/tests/UsbTests/src/com/android/server/usb/UsbDescriptorParserTests.java b/tests/UsbTests/src/com/android/server/usb/UsbDescriptorParserTests.java
index f323952..ea027d7 100644
--- a/tests/UsbTests/src/com/android/server/usb/UsbDescriptorParserTests.java
+++ b/tests/UsbTests/src/com/android/server/usb/UsbDescriptorParserTests.java
@@ -18,6 +18,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import android.content.Context;
@@ -28,6 +29,7 @@
import android.support.test.runner.AndroidJUnit4;
import com.android.server.usb.descriptors.UsbDescriptorParser;
+import com.android.server.usb.descriptors.UsbDeviceDescriptor;
import com.google.common.io.ByteStreams;
import java.io.InputStream;
@@ -61,14 +63,24 @@
}
// Testing same codepath as UsbHostManager.java:usbDeviceAdded
- UsbDescriptorParser parser = new UsbDescriptorParser("test-usb-addr");
- if (!parser.parseDescriptors(descriptors)) {
- fail("failed to parse descriptors.");
- }
+ UsbDescriptorParser parser = new UsbDescriptorParser("test-usb-addr", descriptors);
return parser;
}
- // A Headset has a microphone and a speaker and is a headset.
+ /** A Headset has a microphone and a speaker and is a headset.
+ * Descriptors for this example show up on lsusb -v with:
+ * bcdDevice 22.80
+ * and a UAC1 audio device with the following control interface:
+ * bInterfaceClass 1 Audio
+ * ...
+ * bDescriptorSubtype 2 (INPUT_TERMINAL)
+ * bTerminalID 1
+ * wTerminalType 0x0201 Microphone
+ * ...
+ * bDescriptorSubtype 3 (OUTPUT_TERMINAL)
+ * bTerminalID 15
+ * wTerminalType 0x0302 Headphones
+ */
@Test
@SmallTest
public void testHeadsetDescriptorParser() {
@@ -77,9 +89,24 @@
assertTrue(parser.hasOutput());
assertTrue(parser.isInputHeadset());
assertTrue(parser.isOutputHeadset());
+
+ assertTrue(parser.hasAudioInterface());
+ assertTrue(parser.hasHIDInterface());
+ assertFalse(parser.hasStorageInterface());
+
+ assertEquals(parser.getDeviceDescriptor().getDeviceReleaseString(), "22.80");
}
- // Headphones have no microphones but are considered a headset.
+ /** Headphones have no microphones but are considered a headset.
+ * Descriptors for this example show up on lsusb -v with:
+ * bcdDevice 22.80
+ * and a UAC1 audio device with the following control interface:
+ * bInterfaceClass 1 Audio
+ * ...
+ * bDescriptorSubtype 3 (OUTPUT_TERMINAL)
+ * bTerminalID 15
+ * wTerminalType 0x0302 Headphones
+ */
@Test
@SmallTest
public void testHeadphoneDescriptorParser() {
@@ -88,9 +115,24 @@
assertTrue(parser.hasOutput());
assertFalse(parser.isInputHeadset());
assertTrue(parser.isOutputHeadset());
+
+ assertTrue(parser.hasAudioInterface());
+ assertTrue(parser.hasHIDInterface());
+ assertFalse(parser.hasStorageInterface());
+
+ assertEquals(parser.getDeviceDescriptor().getDeviceReleaseString(), "22.80");
}
- // Line out has no microphones and aren't considered a headset.
+ /** Line out with no microphones aren't considered a headset.
+ * Descriptors for this example show up on lsusb -v with:
+ * bcdDevice 22.80
+ * and the following UAC1 audio control interface
+ * bInterfaceClass 1 Audio
+ * ...
+ * bDescriptorSubtype 3 (OUTPUT_TERMINAL)
+ * bTerminalID 15
+ * wTerminalType 0x0603 Line Connector
+ */
@Test
@SmallTest
public void testLineoutDescriptorParser() {
@@ -99,9 +141,20 @@
assertTrue(parser.hasOutput());
assertFalse(parser.isInputHeadset());
assertFalse(parser.isOutputHeadset());
+
+ assertTrue(parser.hasAudioInterface());
+ assertTrue(parser.hasHIDInterface());
+ assertFalse(parser.hasStorageInterface());
+
+ assertEquals(parser.getDeviceDescriptor().getDeviceReleaseString(), "22.80");
}
- // An HID-only device shouldn't be considered anything at all.
+ /** An HID-only device shouldn't be considered anything at all.
+ /* Descriptors show up on lsusb -v with:
+ * bcdDevice 22.80
+ * and a single HID interface,
+ * bInterfaceClass 3 Human Interface Device
+ */
@Test
@SmallTest
public void testNothingDescriptorParser() {
@@ -110,6 +163,34 @@
assertFalse(parser.hasOutput());
assertFalse(parser.isInputHeadset());
assertFalse(parser.isOutputHeadset());
+
+ assertFalse(parser.hasAudioInterface());
+ assertTrue(parser.hasHIDInterface());
+ assertFalse(parser.hasStorageInterface());
+
+ assertEquals(parser.getDeviceDescriptor().getDeviceReleaseString(), "22.80");
+ }
+
+ /** A USB mass-storage device.
+ * Shows up on lsusb -v with:
+ * bcdDevice 2.08
+ * and a single interface descriptor,
+ * bInterfaceClass 8 Mass Storage
+ */
+ @Test
+ @SmallTest
+ public void testMassStorageDescriptorParser() {
+ UsbDescriptorParser parser = loadParser(R.raw.usbdescriptors_massstorage);
+ assertFalse(parser.hasInput());
+ assertFalse(parser.hasOutput());
+ assertFalse(parser.isInputHeadset());
+ assertFalse(parser.isOutputHeadset());
+
+ assertFalse(parser.hasAudioInterface());
+ assertFalse(parser.hasHIDInterface());
+ assertTrue(parser.hasStorageInterface());
+
+ assertEquals(parser.getDeviceDescriptor().getDeviceReleaseString(), "2.08");
}
}
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index 207e24a..163dd2a 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -63,6 +63,7 @@
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
@@ -133,6 +134,7 @@
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.server.connectivity.ConnectivityConstants;
import com.android.server.connectivity.DefaultNetworkMetrics;
+import com.android.server.connectivity.DnsManager;
import com.android.server.connectivity.IpConnectivityMetrics;
import com.android.server.connectivity.MockableSystemProperties;
import com.android.server.connectivity.NetworkAgentInfo;
@@ -749,6 +751,7 @@
// NetworkMonitor implementation allowing overriding of Internet connectivity probe result.
private class WrappedNetworkMonitor extends NetworkMonitor {
+ public Handler connectivityHandler;
// HTTP response code fed back to NetworkMonitor for Internet connectivity probe.
public int gen204ProbeResult = 500;
public String gen204ProbeRedirectUrl = null;
@@ -758,6 +761,7 @@
IpConnectivityLog log) {
super(context, handler, networkAgentInfo, defaultRequest, log,
NetworkMonitor.NetworkMonitorSettings.DEFAULT);
+ connectivityHandler = handler;
}
@Override
@@ -3668,18 +3672,29 @@
@Test
public void testBasicDnsConfigurationPushed() throws Exception {
+ final String IFNAME = "test_rmnet_data0";
+ final String[] EMPTY_TLS_SERVERS = new String[0];
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
waitForIdle();
verify(mNetworkManagementService, never()).setDnsConfigurationForNetwork(
- anyInt(), any(), any(), any(), anyBoolean(), anyString());
+ anyInt(), any(), any(), any(), anyString(), eq(EMPTY_TLS_SERVERS));
final LinkProperties cellLp = new LinkProperties();
- cellLp.setInterfaceName("test_rmnet_data0");
+ cellLp.setInterfaceName(IFNAME);
+ // Add IPv4 and IPv6 default routes, because DNS-over-TLS code does
+ // "is-reachable" testing in order to not program netd with unreachable
+ // nameservers that it might try repeated to validate.
+ cellLp.addLinkAddress(new LinkAddress("192.0.2.4/24"));
+ cellLp.addRoute(new RouteInfo((IpPrefix) null, InetAddress.getByName("192.0.2.4"), IFNAME));
+ cellLp.addLinkAddress(new LinkAddress("2001:db8:1::1/64"));
+ cellLp.addRoute(
+ new RouteInfo((IpPrefix) null, InetAddress.getByName("2001:db8:1::1"), IFNAME));
mCellNetworkAgent.sendLinkProperties(cellLp);
mCellNetworkAgent.connect(false);
waitForIdle();
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
- anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
+ anyInt(), mStringArrayCaptor.capture(), any(), any(),
+ anyString(), eq(EMPTY_TLS_SERVERS));
// CS tells netd about the empty DNS config for this network.
assertEmpty(mStringArrayCaptor.getValue());
reset(mNetworkManagementService);
@@ -3688,7 +3703,8 @@
mCellNetworkAgent.sendLinkProperties(cellLp);
waitForIdle();
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
- anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
+ anyInt(), mStringArrayCaptor.capture(), any(), any(),
+ anyString(), eq(EMPTY_TLS_SERVERS));
assertEquals(1, mStringArrayCaptor.getValue().length);
assertTrue(ArrayUtils.contains(mStringArrayCaptor.getValue(), "2001:db8::1"));
reset(mNetworkManagementService);
@@ -3697,7 +3713,26 @@
mCellNetworkAgent.sendLinkProperties(cellLp);
waitForIdle();
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
- anyInt(), mStringArrayCaptor.capture(), any(), any(), anyBoolean(), anyString());
+ anyInt(), mStringArrayCaptor.capture(), any(), any(),
+ anyString(), eq(EMPTY_TLS_SERVERS));
+ assertEquals(2, mStringArrayCaptor.getValue().length);
+ assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
+ new String[]{"2001:db8::1", "192.0.2.1"}));
+ reset(mNetworkManagementService);
+
+ final String TLS_SPECIFIER = "tls.example.com";
+ final String TLS_SERVER6 = "2001:db8:53::53";
+ final InetAddress[] TLS_IPS = new InetAddress[]{ InetAddress.getByName(TLS_SERVER6) };
+ final String[] TLS_SERVERS = new String[]{ TLS_SERVER6 };
+ final Handler h = mCellNetworkAgent.getWrappedNetworkMonitor().connectivityHandler;
+ h.sendMessage(h.obtainMessage(
+ NetworkMonitor.EVENT_PRIVATE_DNS_CONFIG_RESOLVED, 0,
+ mCellNetworkAgent.getNetwork().netId,
+ new DnsManager.PrivateDnsConfig(TLS_SPECIFIER, TLS_IPS)));
+ waitForIdle();
+ verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
+ anyInt(), mStringArrayCaptor.capture(), any(), any(),
+ eq(TLS_SPECIFIER), eq(TLS_SERVERS));
assertEquals(2, mStringArrayCaptor.getValue().length);
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
new String[]{"2001:db8::1", "192.0.2.1"}));
diff --git a/tools/stringslint/stringslint.py b/tools/stringslint/stringslint.py
new file mode 100644
index 0000000..d637ff3
--- /dev/null
+++ b/tools/stringslint/stringslint.py
@@ -0,0 +1,162 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+Enforces common Android string best-practices. It ignores lint messages from
+a previous strings file, if provided.
+
+Usage: stringslint.py strings.xml
+Usage: stringslint.py strings.xml old_strings.xml
+"""
+
+import re, sys
+import lxml.etree as ET
+
+BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
+
+def format(fg=None, bg=None, bright=False, bold=False, dim=False, reset=False):
+ # manually derived from http://en.wikipedia.org/wiki/ANSI_escape_code#Codes
+ codes = []
+ if reset: codes.append("0")
+ else:
+ if not fg is None: codes.append("3%d" % (fg))
+ if not bg is None:
+ if not bright: codes.append("4%d" % (bg))
+ else: codes.append("10%d" % (bg))
+ if bold: codes.append("1")
+ elif dim: codes.append("2")
+ else: codes.append("22")
+ return "\033[%sm" % (";".join(codes))
+
+warnings = None
+
+def warn(tag, msg, actual, expected):
+ global warnings
+ key = "%s:%d" % (tag.attrib["name"], hash(msg))
+ value = "%sLine %d: '%s':%s %s" % (format(fg=YELLOW, bold=True),
+ tag.sourceline,
+ tag.attrib["name"],
+ format(reset=True),
+ msg)
+ if not actual is None: value += "\n\tActual: %s%s%s" % (format(dim=True),
+ actual,
+ format(reset=True))
+ if not expected is None: value += "\n\tExample: %s%s%s" % (format(dim=True),
+ expected,
+ format(reset=True))
+ warnings[key] = value
+
+def lint(path):
+ global warnings
+ warnings = {}
+
+ with open(path) as f:
+ raw = f.read()
+ if len(raw.strip()) == 0:
+ return warnings
+ tree = ET.fromstring(raw)
+ root = tree #tree.getroot()
+
+ last_comment = None
+ for child in root:
+ # TODO: handle plurals
+ if isinstance(child, ET._Comment):
+ last_comment = child
+ elif child.tag == "string":
+ # We always consume comment
+ comment = last_comment
+ last_comment = None
+
+ # Validate comment
+ if comment is None:
+ warn(child, "Missing string comment to aid translation",
+ None, None)
+ continue
+ if "do not translate" in comment.text.lower():
+ continue
+ if "translatable" in child.attrib and child.attrib["translatable"].lower() == "false":
+ continue
+ if re.search("CHAR[ _-]LIMIT=(\d+|NONE|none)", comment.text) is None:
+ warn(child, "Missing CHAR LIMIT to aid translation",
+ repr(comment), "<!-- Description of string [CHAR LIMIT=32] -->")
+
+ # Look for common mistakes/substitutions
+ text = "".join(child.itertext()).strip()
+ if "'" in text:
+ warn(child, "Turned quotation mark glyphs are more polished",
+ text, "This doesn\u2019t need to \u2018happen\u2019 today")
+ if '"' in text and not text.startswith('"') and text.endswith('"'):
+ warn(child, "Turned quotation mark glyphs are more polished",
+ text, "This needs to \u201chappen\u201d today")
+ if "..." in text:
+ warn(child, "Ellipsis glyph is more polished",
+ text, "Loading\u2026")
+ if "wi-fi" in text.lower():
+ warn(child, "Non-breaking glyph is more polished",
+ text, "Wi\u2011Fi")
+ if "wifi" in text.lower():
+ warn(child, "Using non-standard spelling",
+ text, "Wi\u2011Fi")
+ if re.search("\d-\d", text):
+ warn(child, "Ranges should use en dash glyph",
+ text, "You will find this material in chapters 8\u201312")
+ if "--" in text:
+ warn(child, "Phrases should use em dash glyph",
+ text, "Upon discovering errors\u2014all 124 of them\u2014they recalled.")
+ if ". " in text:
+ warn(child, "Only use single space between sentences",
+ text, "First idea. Second idea.")
+
+ # When more than one substitution, require indexes
+ if len(re.findall("%[^%]", text)) > 1:
+ if len(re.findall("%[^\d]", text)) > 0:
+ warn(child, "Substitutions must be indexed",
+ text, "Add %1$s to %2$s")
+
+ # Require xliff substitutions
+ for gc in child.iter():
+ badsub = False
+ if gc.tail and re.search("%[^%]", gc.tail): badsub = True
+ if re.match("{.*xliff.*}g", gc.tag):
+ if "id" not in gc.attrib:
+ warn(child, "Substitutions must define id attribute",
+ None, "<xliff:g id=\"domain\" example=\"example.com\">%1$s</xliff:g>")
+ if "example" not in gc.attrib:
+ warn(child, "Substitutions must define example attribute",
+ None, "<xliff:g id=\"domain\" example=\"example.com\">%1$s</xliff:g>")
+ else:
+ if gc.text and re.search("%[^%]", gc.text): badsub = True
+ if badsub:
+ warn(child, "Substitutions must be inside xliff tags",
+ text, "<xliff:g id=\"domain\" example=\"example.com\">%1$s</xliff:g>")
+
+ return warnings
+
+if len(sys.argv) > 2:
+ before = lint(sys.argv[2])
+else:
+ before = {}
+after = lint(sys.argv[1])
+
+for b in before:
+ if b in after:
+ del after[b]
+
+if len(after) > 0:
+ for a in sorted(after.keys()):
+ print after[a]
+ print
+ sys.exit(1)
diff --git a/tools/stringslint/stringslint_sha.sh b/tools/stringslint/stringslint_sha.sh
new file mode 100755
index 0000000..c79ba04
--- /dev/null
+++ b/tools/stringslint/stringslint_sha.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+git show --name-only --pretty=format: $1 | grep values/strings.xml | while read file; do
+ python $ANDROID_BUILD_TOP/frameworks/base/tools/stringslint/stringslint.py <(git show $1:$file) <(git show $1^:$file)
+done