Merge "DPMS organisation API - Add a missing checkNotNull"
diff --git a/Android.mk b/Android.mk
index e94bebb..53e892f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -206,6 +206,7 @@
core/java/android/nfc/INfcAdapterExtras.aidl \
core/java/android/nfc/INfcTag.aidl \
core/java/android/nfc/INfcCardEmulation.aidl \
+ core/java/android/nfc/INfcFCardEmulation.aidl \
core/java/android/nfc/INfcUnlockHandler.aidl \
core/java/android/os/IBatteryPropertiesListener.aidl \
core/java/android/os/IBatteryPropertiesRegistrar.aidl \
@@ -441,6 +442,7 @@
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt okhttp core-junit bouncycastle ext
+LOCAL_STATIC_JAVA_LIBRARIES := framework-protos
LOCAL_MODULE := framework
diff --git a/api/current.txt b/api/current.txt
index e50eba1..f71aa84 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1183,6 +1183,7 @@
field public static final int summaryOn = 16843247; // 0x10101ef
field public static final int supportsAssist = 16844016; // 0x10104f0
field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
+ field public static final int supportsLocalInteraction = 16844048; // 0x1010510
field public static final int supportsPictureInPicture = 16844024; // 0x10104f8
field public static final int supportsRtl = 16843695; // 0x10103af
field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
@@ -3436,6 +3437,7 @@
method public boolean isDestroyed();
method public boolean isFinishing();
method public boolean isImmersive();
+ method public boolean isLocalVoiceInteractionSupported();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3477,6 +3479,8 @@
method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
method public boolean onKeyShortcut(int, android.view.KeyEvent);
method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public void onLocalVoiceInteractionStarted();
+ method public void onLocalVoiceInteractionStopped();
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
@@ -3591,12 +3595,14 @@
method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startLocalVoiceInteraction(android.os.Bundle);
method public void startLockTask();
method public deprecated void startManagingCursor(android.database.Cursor);
method public boolean startNextMatchingActivity(android.content.Intent);
method public boolean startNextMatchingActivity(android.content.Intent, android.os.Bundle);
method public void startPostponedEnterTransition();
method public void startSearch(java.lang.String, boolean, android.os.Bundle, boolean);
+ method public void stopLocalVoiceInteraction();
method public void stopLockTask();
method public deprecated void stopManagingCursor(android.database.Cursor);
method public void takeKeyEvents(boolean);
@@ -3670,9 +3676,6 @@
method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
}
- public static abstract class ActivityManager.BugreportMode implements java.lang.annotation.Annotation {
- }
-
public static class ActivityManager.MemoryInfo implements android.os.Parcelable {
ctor public ActivityManager.MemoryInfo();
method public int describeContents();
@@ -5686,10 +5689,13 @@
method public android.graphics.drawable.Drawable peekFastDrawable();
method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle);
method public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
- method public void setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public void setResource(int) throws java.io.IOException;
+ method public int setResource(int, int) throws java.io.IOException;
method public void setStream(java.io.InputStream) throws java.io.IOException;
- method public void setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public void setWallpaperOffsetSteps(float, float);
method public void setWallpaperOffsets(android.os.IBinder, float, float);
method public void suggestDesiredDimensions(int, int);
@@ -5700,6 +5706,8 @@
field public static final java.lang.String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap";
field public static final java.lang.String COMMAND_TAP = "android.wallpaper.tap";
field public static final java.lang.String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT";
+ field public static final int FLAG_SET_LOCK = 2; // 0x2
+ field public static final int FLAG_SET_SYSTEM = 1; // 0x1
field public static final java.lang.String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview";
}
@@ -5772,9 +5780,6 @@
field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
}
- public static abstract class DeviceAdminReceiver.BugreportFailureCode implements java.lang.annotation.Annotation {
- }
-
public class DevicePolicyManager {
method public void addCrossProfileIntentFilter(android.content.ComponentName, android.content.IntentFilter, int);
method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -8368,7 +8373,6 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
- field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8429,6 +8433,7 @@
field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+ field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY";
field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED";
field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";
field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
@@ -8451,6 +8456,7 @@
field public static final java.lang.String ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT";
field public static final java.lang.String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
+ field public static final java.lang.String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT";
field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN";
field public static final java.lang.String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
@@ -8544,6 +8550,7 @@
field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL";
field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final java.lang.String EXTRA_INDEX = "android.intent.extra.INDEX";
field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT";
@@ -9640,6 +9647,7 @@
field public static final java.lang.String FEATURE_MIDI = "android.software.midi";
field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
+ field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
@@ -13574,6 +13582,7 @@
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+ field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
@@ -13653,9 +13662,11 @@
method public abstract void close();
method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
method public abstract void createCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createCaptureSessionByOutputConfiguration(java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract void createConstrainedHighSpeedCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createReprocessableCaptureSessionWithConfigurations(android.hardware.camera2.params.InputConfiguration, java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract java.lang.String getId();
field public static final int TEMPLATE_MANUAL = 6; // 0x6
field public static final int TEMPLATE_PREVIEW = 1; // 0x1
@@ -13933,6 +13944,7 @@
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
@@ -14011,6 +14023,7 @@
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
@@ -14152,6 +14165,17 @@
field public static final int METERING_WEIGHT_MIN = 0; // 0x0
}
+ public final class OutputConfiguration implements android.os.Parcelable {
+ ctor public OutputConfiguration(android.view.Surface);
+ method public int describeContents();
+ method public android.view.Surface getSurface();
+ method public int getSurfaceSetId();
+ method public void setSurfaceSetId(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+ field public static final int SURFACE_SET_ID_INVALID = -1; // 0xffffffff
+ }
+
public final class RggbChannelVector {
ctor public RggbChannelVector(float, float, float, float);
method public void copyTo(float[], int);
@@ -22654,6 +22678,7 @@
}
public class MtpDeviceInfo {
+ method public final int[] getEventsSupported();
method public final java.lang.String getManufacturer();
method public final java.lang.String getModel();
method public final int[] getOperationsSupported();
@@ -22760,6 +22785,7 @@
method public android.net.NetworkInfo getNetworkInfo(android.net.Network);
method public deprecated int getNetworkPreference();
method public static deprecated android.net.Network getProcessDefaultNetwork();
+ method public int getRestrictBackgroundStatus();
method public boolean isActiveNetworkMetered();
method public boolean isDefaultNetworkActive();
method public static deprecated boolean isNetworkTypeValid(int);
@@ -22794,6 +22820,9 @@
field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity";
field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
field public static final java.lang.String EXTRA_REASON = "reason";
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
field public static final int TYPE_BLUETOOTH = 7; // 0x7
field public static final int TYPE_DUMMY = 8; // 0x8
field public static final int TYPE_ETHERNET = 9; // 0x9
@@ -22820,6 +22849,9 @@
method public abstract void onNetworkActive();
}
+ public static abstract class ConnectivityManager.RestrictBackgroundStatus implements java.lang.annotation.Annotation {
+ }
+
public class Credentials {
ctor public Credentials(int, int, int);
method public int getGid();
@@ -24374,6 +24406,28 @@
field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service";
}
+ public abstract class HostNfcFService extends android.app.Service {
+ ctor public HostNfcFService();
+ method public final android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onDeactivated(int);
+ method public abstract byte[] processNfcFPacket(byte[], android.os.Bundle);
+ method public final void sendResponsePacket(byte[]);
+ field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+ field public static final java.lang.String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+ field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_nfcf_service";
+ }
+
+ public final class NfcFCardEmulation {
+ method public boolean disableNfcFForegroundService(android.app.Activity);
+ method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+ method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
+ method public java.lang.String getNfcid2ForService(android.content.ComponentName);
+ method public java.lang.String getSystemCodeForService(android.content.ComponentName);
+ method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
+ method public boolean removeSystemCodeForService(android.content.ComponentName);
+ method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+ }
+
public abstract class OffHostApduService extends android.app.Service {
ctor public OffHostApduService();
method public abstract android.os.IBinder onBind(android.content.Intent);
@@ -33989,6 +34043,7 @@
method public void setTheme(int);
method public void show(android.os.Bundle, int);
method public void startVoiceActivity(android.content.Intent);
+ field public static final int SHOW_SOURCE_ACTIVITY = 16; // 0x10
field public static final int SHOW_SOURCE_APPLICATION = 8; // 0x8
field public static final int SHOW_SOURCE_ASSIST_GESTURE = 4; // 0x4
field public static final int SHOW_WITH_ASSIST = 1; // 0x1
@@ -34350,6 +34405,8 @@
public abstract class UtteranceProgressListener {
ctor public UtteranceProgressListener();
+ method public void onAudioAvailable(java.lang.String, byte[]);
+ method public void onBeginSynthesis(java.lang.String, int, int, int);
method public abstract void onDone(java.lang.String);
method public abstract deprecated void onError(java.lang.String);
method public void onError(java.lang.String, int);
@@ -35616,6 +35673,7 @@
field public static final java.lang.String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL";
field public static final java.lang.String ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS = "android.telecom.action.SHOW_CALL_ACCESSIBILITY_SETTINGS";
field public static final java.lang.String ACTION_SHOW_CALL_SETTINGS = "android.telecom.action.SHOW_CALL_SETTINGS";
+ field public static final java.lang.String ACTION_SHOW_MISSED_CALLS_NOTIFICATION = "android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
field public static final java.lang.String ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS = "android.telecom.action.SHOW_RESPOND_VIA_SMS_SETTINGS";
field public static final char DTMF_CHARACTER_PAUSE = 44; // 0x002c ','
field public static final char DTMF_CHARACTER_WAIT = 59; // 0x003b ';'
@@ -35626,6 +35684,8 @@
field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+ field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
+ field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telecom.extra.PHONE_ACCOUNT_HANDLE";
field public static final java.lang.String EXTRA_START_CALL_WITH_SPEAKERPHONE = "android.telecom.extra.START_CALL_WITH_SPEAKERPHONE";
@@ -44092,6 +44152,30 @@
method public abstract android.view.View getFullScreenView(int, android.content.Context);
}
+ public class ServiceWorkerClient {
+ ctor public ServiceWorkerClient();
+ method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+ }
+
+ public abstract class ServiceWorkerController {
+ ctor public ServiceWorkerController();
+ method public static android.webkit.ServiceWorkerController getInstance();
+ method public abstract android.webkit.ServiceWorkerWebSettings getServiceWorkerWebSettings();
+ method public abstract void setServiceWorkerClient(android.webkit.ServiceWorkerClient);
+ }
+
+ public abstract class ServiceWorkerWebSettings {
+ ctor public ServiceWorkerWebSettings();
+ method public abstract boolean getAllowContentAccess();
+ method public abstract boolean getAllowFileAccess();
+ method public abstract boolean getBlockNetworkLoads();
+ method public abstract int getCacheMode();
+ method public abstract void setAllowContentAccess(boolean);
+ method public abstract void setAllowFileAccess(boolean);
+ method public abstract void setBlockNetworkLoads(boolean);
+ method public abstract void setCacheMode(int);
+ }
+
public class SslErrorHandler extends android.os.Handler {
method public void cancel();
method public void proceed();
diff --git a/api/system-current.txt b/api/system-current.txt
index 2d358bf..0b31525 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -1282,6 +1282,7 @@
field public static final int summaryOn = 16843247; // 0x10101ef
field public static final int supportsAssist = 16844016; // 0x10104f0
field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
+ field public static final int supportsLocalInteraction = 16844048; // 0x1010510
field public static final int supportsPictureInPicture = 16844024; // 0x10104f8
field public static final int supportsRtl = 16843695; // 0x10103af
field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
@@ -3551,6 +3552,7 @@
method public boolean isDestroyed();
method public boolean isFinishing();
method public boolean isImmersive();
+ method public boolean isLocalVoiceInteractionSupported();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3593,6 +3595,8 @@
method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
method public boolean onKeyShortcut(int, android.view.KeyEvent);
method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public void onLocalVoiceInteractionStarted();
+ method public void onLocalVoiceInteractionStopped();
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
@@ -3707,12 +3711,14 @@
method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startLocalVoiceInteraction(android.os.Bundle);
method public void startLockTask();
method public deprecated void startManagingCursor(android.database.Cursor);
method public boolean startNextMatchingActivity(android.content.Intent);
method public boolean startNextMatchingActivity(android.content.Intent, android.os.Bundle);
method public void startPostponedEnterTransition();
method public void startSearch(java.lang.String, boolean, android.os.Bundle, boolean);
+ method public void stopLocalVoiceInteraction();
method public void stopLockTask();
method public deprecated void stopManagingCursor(android.database.Cursor);
method public void takeKeyEvents(boolean);
@@ -3792,9 +3798,6 @@
method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
}
- public static abstract class ActivityManager.BugreportMode implements java.lang.annotation.Annotation {
- }
-
public static class ActivityManager.MemoryInfo implements android.os.Parcelable {
ctor public ActivityManager.MemoryInfo();
method public int describeContents();
@@ -5818,12 +5821,15 @@
method public android.graphics.drawable.Drawable peekFastDrawable();
method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle);
method public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
- method public void setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public void setDisplayOffset(android.os.IBinder, int, int);
method public void setDisplayPadding(android.graphics.Rect);
method public void setResource(int) throws java.io.IOException;
+ method public int setResource(int, int) throws java.io.IOException;
method public void setStream(java.io.InputStream) throws java.io.IOException;
- method public void setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public boolean setWallpaperComponent(android.content.ComponentName);
method public void setWallpaperOffsetSteps(float, float);
method public void setWallpaperOffsets(android.os.IBinder, float, float);
@@ -5835,6 +5841,8 @@
field public static final java.lang.String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap";
field public static final java.lang.String COMMAND_TAP = "android.wallpaper.tap";
field public static final java.lang.String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT";
+ field public static final int FLAG_SET_LOCK = 2; // 0x2
+ field public static final int FLAG_SET_SYSTEM = 1; // 0x1
field public static final java.lang.String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview";
}
@@ -5907,9 +5915,6 @@
field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
}
- public static abstract class DeviceAdminReceiver.BugreportFailureCode implements java.lang.annotation.Annotation {
- }
-
public class DevicePolicyManager {
method public void addCrossProfileIntentFilter(android.content.ComponentName, android.content.IntentFilter, int);
method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -8667,7 +8672,6 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
- field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8730,6 +8734,7 @@
field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+ field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY";
field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED";
field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";
field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
@@ -8753,6 +8758,7 @@
field public static final java.lang.String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
field public static final java.lang.String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART";
field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
+ field public static final java.lang.String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT";
field public static final java.lang.String ACTION_RESOLVE_EPHEMERAL_PACKAGE = "android.intent.action.RESOLVE_EPHEMERAL_PACKAGE";
field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN";
@@ -8850,6 +8856,7 @@
field public static final java.lang.String EXTRA_EPHEMERAL_FAILURE = "android.intent.extra.EPHEMERAL_FAILURE";
field public static final java.lang.String EXTRA_EPHEMERAL_SUCCESS = "android.intent.extra.EPHEMERAL_SUCCESS";
field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final java.lang.String EXTRA_INDEX = "android.intent.extra.INDEX";
field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT";
@@ -9991,6 +9998,7 @@
field public static final java.lang.String FEATURE_MIDI = "android.software.midi";
field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
+ field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
@@ -13974,6 +13982,7 @@
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+ field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
@@ -14053,9 +14062,11 @@
method public abstract void close();
method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
method public abstract void createCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createCaptureSessionByOutputConfiguration(java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract void createConstrainedHighSpeedCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createReprocessableCaptureSessionWithConfigurations(android.hardware.camera2.params.InputConfiguration, java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract java.lang.String getId();
field public static final int TEMPLATE_MANUAL = 6; // 0x6
field public static final int TEMPLATE_PREVIEW = 1; // 0x1
@@ -14333,6 +14344,7 @@
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
@@ -14411,6 +14423,7 @@
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
@@ -14552,6 +14565,24 @@
field public static final int METERING_WEIGHT_MIN = 0; // 0x0
}
+ public final class OutputConfiguration implements android.os.Parcelable {
+ ctor public OutputConfiguration(android.view.Surface);
+ ctor public OutputConfiguration(android.view.Surface, int);
+ ctor public OutputConfiguration(android.hardware.camera2.params.OutputConfiguration);
+ method public int describeContents();
+ method public int getRotation();
+ method public android.view.Surface getSurface();
+ method public int getSurfaceSetId();
+ method public void setSurfaceSetId(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+ field public static final int ROTATION_0 = 0; // 0x0
+ field public static final int ROTATION_180 = 2; // 0x2
+ field public static final int ROTATION_270 = 3; // 0x3
+ field public static final int ROTATION_90 = 1; // 0x1
+ field public static final int SURFACE_SET_ID_INVALID = -1; // 0xffffffff
+ }
+
public final class RggbChannelVector {
ctor public RggbChannelVector(float, float, float, float);
method public void copyTo(float[], int);
@@ -24241,6 +24272,7 @@
}
public class MtpDeviceInfo {
+ method public final int[] getEventsSupported();
method public final java.lang.String getManufacturer();
method public final java.lang.String getModel();
method public final int[] getOperationsSupported();
@@ -24348,6 +24380,7 @@
method public android.net.NetworkInfo getNetworkInfo(android.net.Network);
method public deprecated int getNetworkPreference();
method public static deprecated android.net.Network getProcessDefaultNetwork();
+ method public int getRestrictBackgroundStatus();
method public boolean isActiveNetworkMetered();
method public boolean isDefaultNetworkActive();
method public static deprecated boolean isNetworkTypeValid(int);
@@ -24382,6 +24415,9 @@
field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity";
field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
field public static final java.lang.String EXTRA_REASON = "reason";
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
field public static final int TYPE_BLUETOOTH = 7; // 0x7
field public static final int TYPE_DUMMY = 8; // 0x8
field public static final int TYPE_ETHERNET = 9; // 0x9
@@ -24408,6 +24444,9 @@
method public abstract void onNetworkActive();
}
+ public static abstract class ConnectivityManager.RestrictBackgroundStatus implements java.lang.annotation.Annotation {
+ }
+
public class Credentials {
ctor public Credentials(int, int, int);
method public int getGid();
@@ -26412,6 +26451,28 @@
field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service";
}
+ public abstract class HostNfcFService extends android.app.Service {
+ ctor public HostNfcFService();
+ method public final android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onDeactivated(int);
+ method public abstract byte[] processNfcFPacket(byte[], android.os.Bundle);
+ method public final void sendResponsePacket(byte[]);
+ field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+ field public static final java.lang.String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+ field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_nfcf_service";
+ }
+
+ public final class NfcFCardEmulation {
+ method public boolean disableNfcFForegroundService(android.app.Activity);
+ method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+ method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
+ method public java.lang.String getNfcid2ForService(android.content.ComponentName);
+ method public java.lang.String getSystemCodeForService(android.content.ComponentName);
+ method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
+ method public boolean removeSystemCodeForService(android.content.ComponentName);
+ method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+ }
+
public abstract class OffHostApduService extends android.app.Service {
ctor public OffHostApduService();
method public abstract android.os.IBinder onBind(android.content.Intent);
@@ -36232,6 +36293,7 @@
method public void setTheme(int);
method public void show(android.os.Bundle, int);
method public void startVoiceActivity(android.content.Intent);
+ field public static final int SHOW_SOURCE_ACTIVITY = 16; // 0x10
field public static final int SHOW_SOURCE_APPLICATION = 8; // 0x8
field public static final int SHOW_SOURCE_ASSIST_GESTURE = 4; // 0x4
field public static final int SHOW_WITH_ASSIST = 1; // 0x1
@@ -36593,6 +36655,8 @@
public abstract class UtteranceProgressListener {
ctor public UtteranceProgressListener();
+ method public void onAudioAvailable(java.lang.String, byte[]);
+ method public void onBeginSynthesis(java.lang.String, int, int, int);
method public abstract void onDone(java.lang.String);
method public abstract deprecated void onError(java.lang.String);
method public void onError(java.lang.String, int);
@@ -46576,6 +46640,30 @@
method public abstract android.view.View getFullScreenView(int, android.content.Context);
}
+ public class ServiceWorkerClient {
+ ctor public ServiceWorkerClient();
+ method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+ }
+
+ public abstract class ServiceWorkerController {
+ ctor public ServiceWorkerController();
+ method public static android.webkit.ServiceWorkerController getInstance();
+ method public abstract android.webkit.ServiceWorkerWebSettings getServiceWorkerWebSettings();
+ method public abstract void setServiceWorkerClient(android.webkit.ServiceWorkerClient);
+ }
+
+ public abstract class ServiceWorkerWebSettings {
+ ctor public ServiceWorkerWebSettings();
+ method public abstract boolean getAllowContentAccess();
+ method public abstract boolean getAllowFileAccess();
+ method public abstract boolean getBlockNetworkLoads();
+ method public abstract int getCacheMode();
+ method public abstract void setAllowContentAccess(boolean);
+ method public abstract void setAllowFileAccess(boolean);
+ method public abstract void setBlockNetworkLoads(boolean);
+ method public abstract void setCacheMode(int);
+ }
+
public class SslErrorHandler extends android.os.Handler {
ctor public SslErrorHandler();
method public void cancel();
@@ -46588,12 +46676,18 @@
method public abstract void deleteKey(android.net.Uri, android.webkit.ValueCallback<java.lang.Boolean>);
method public abstract void enableTokenBinding();
method public static android.webkit.TokenBindingService getInstance();
- method public abstract void getKey(android.net.Uri, java.lang.String, android.webkit.ValueCallback<java.security.KeyPair>);
+ method public abstract void getKey(android.net.Uri, java.lang.String[], android.webkit.ValueCallback<android.webkit.TokenBindingService.TokenBindingKey>);
field public static final java.lang.String KEY_ALGORITHM_ECDSAP256 = "ECDSAP256";
field public static final java.lang.String KEY_ALGORITHM_RSA2048_PKCS_1_5 = "RSA2048_PKCS_1.5";
field public static final java.lang.String KEY_ALGORITHM_RSA2048_PSS = "RSA2048PSS";
}
+ public static abstract class TokenBindingService.TokenBindingKey {
+ ctor public TokenBindingService.TokenBindingKey();
+ method public abstract java.lang.String getAlgorithm();
+ method public abstract java.security.KeyPair getKeyPair();
+ }
+
public final class URLUtil {
ctor public URLUtil();
method public static java.lang.String composeSearchUrl(java.lang.String, java.lang.String, java.lang.String);
@@ -47215,6 +47309,7 @@
method public abstract android.webkit.WebViewProvider createWebView(android.webkit.WebView, android.webkit.WebView.PrivateAccess);
method public abstract android.webkit.CookieManager getCookieManager();
method public abstract android.webkit.GeolocationPermissions getGeolocationPermissions();
+ method public abstract android.webkit.ServiceWorkerController getServiceWorkerController();
method public abstract android.webkit.WebViewFactoryProvider.Statics getStatics();
method public abstract android.webkit.TokenBindingService getTokenBindingService();
method public abstract android.webkit.WebIconDatabase getWebIconDatabase();
diff --git a/api/test-current.txt b/api/test-current.txt
index bcdf5c1..786a7c7 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1183,6 +1183,7 @@
field public static final int summaryOn = 16843247; // 0x10101ef
field public static final int supportsAssist = 16844016; // 0x10104f0
field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
+ field public static final int supportsLocalInteraction = 16844048; // 0x1010510
field public static final int supportsPictureInPicture = 16844024; // 0x10104f8
field public static final int supportsRtl = 16843695; // 0x10103af
field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
@@ -3436,6 +3437,7 @@
method public boolean isDestroyed();
method public boolean isFinishing();
method public boolean isImmersive();
+ method public boolean isLocalVoiceInteractionSupported();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3477,6 +3479,8 @@
method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
method public boolean onKeyShortcut(int, android.view.KeyEvent);
method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public void onLocalVoiceInteractionStarted();
+ method public void onLocalVoiceInteractionStopped();
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
@@ -3591,12 +3595,14 @@
method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+ method public void startLocalVoiceInteraction(android.os.Bundle);
method public void startLockTask();
method public deprecated void startManagingCursor(android.database.Cursor);
method public boolean startNextMatchingActivity(android.content.Intent);
method public boolean startNextMatchingActivity(android.content.Intent, android.os.Bundle);
method public void startPostponedEnterTransition();
method public void startSearch(java.lang.String, boolean, android.os.Bundle, boolean);
+ method public void stopLocalVoiceInteraction();
method public void stopLockTask();
method public deprecated void stopManagingCursor(android.database.Cursor);
method public void takeKeyEvents(boolean);
@@ -3670,9 +3676,6 @@
method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
}
- public static abstract class ActivityManager.BugreportMode implements java.lang.annotation.Annotation {
- }
-
public static class ActivityManager.MemoryInfo implements android.os.Parcelable {
ctor public ActivityManager.MemoryInfo();
method public int describeContents();
@@ -5688,10 +5691,13 @@
method public android.graphics.drawable.Drawable peekFastDrawable();
method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle);
method public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
- method public void setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public void setResource(int) throws java.io.IOException;
+ method public int setResource(int, int) throws java.io.IOException;
method public void setStream(java.io.InputStream) throws java.io.IOException;
- method public void setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+ method public int setStream(java.io.InputStream, android.graphics.Rect, boolean, int) throws java.io.IOException;
method public void setWallpaperOffsetSteps(float, float);
method public void setWallpaperOffsets(android.os.IBinder, float, float);
method public void suggestDesiredDimensions(int, int);
@@ -5702,6 +5708,8 @@
field public static final java.lang.String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap";
field public static final java.lang.String COMMAND_TAP = "android.wallpaper.tap";
field public static final java.lang.String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT";
+ field public static final int FLAG_SET_LOCK = 2; // 0x2
+ field public static final int FLAG_SET_SYSTEM = 1; // 0x1
field public static final java.lang.String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview";
}
@@ -5774,9 +5782,6 @@
field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
}
- public static abstract class DeviceAdminReceiver.BugreportFailureCode implements java.lang.annotation.Annotation {
- }
-
public class DevicePolicyManager {
method public void addCrossProfileIntentFilter(android.content.ComponentName, android.content.IntentFilter, int);
method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -8373,7 +8378,6 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
- field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8434,6 +8438,7 @@
field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+ field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY";
field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED";
field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";
field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
@@ -8456,6 +8461,7 @@
field public static final java.lang.String ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT";
field public static final java.lang.String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
+ field public static final java.lang.String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT";
field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN";
field public static final java.lang.String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
@@ -8549,6 +8555,7 @@
field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL";
field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+ field public static final java.lang.String EXTRA_INDEX = "android.intent.extra.INDEX";
field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT";
@@ -9648,6 +9655,7 @@
field public static final java.lang.String FEATURE_MIDI = "android.software.midi";
field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
+ field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
@@ -13582,6 +13590,7 @@
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+ field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
@@ -13661,9 +13670,11 @@
method public abstract void close();
method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
method public abstract void createCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createCaptureSessionByOutputConfiguration(java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract void createConstrainedHighSpeedCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public abstract void createReprocessableCaptureSessionWithConfigurations(android.hardware.camera2.params.InputConfiguration, java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract java.lang.String getId();
field public static final int TEMPLATE_MANUAL = 6; // 0x6
field public static final int TEMPLATE_PREVIEW = 1; // 0x1
@@ -13941,6 +13952,7 @@
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
@@ -14019,6 +14031,7 @@
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+ field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
@@ -14160,6 +14173,17 @@
field public static final int METERING_WEIGHT_MIN = 0; // 0x0
}
+ public final class OutputConfiguration implements android.os.Parcelable {
+ ctor public OutputConfiguration(android.view.Surface);
+ method public int describeContents();
+ method public android.view.Surface getSurface();
+ method public int getSurfaceSetId();
+ method public void setSurfaceSetId(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+ field public static final int SURFACE_SET_ID_INVALID = -1; // 0xffffffff
+ }
+
public final class RggbChannelVector {
ctor public RggbChannelVector(float, float, float, float);
method public void copyTo(float[], int);
@@ -22662,6 +22686,7 @@
}
public class MtpDeviceInfo {
+ method public final int[] getEventsSupported();
method public final java.lang.String getManufacturer();
method public final java.lang.String getModel();
method public final int[] getOperationsSupported();
@@ -22768,6 +22793,7 @@
method public android.net.NetworkInfo getNetworkInfo(android.net.Network);
method public deprecated int getNetworkPreference();
method public static deprecated android.net.Network getProcessDefaultNetwork();
+ method public int getRestrictBackgroundStatus();
method public boolean isActiveNetworkMetered();
method public boolean isDefaultNetworkActive();
method public static deprecated boolean isNetworkTypeValid(int);
@@ -22802,6 +22828,9 @@
field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity";
field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
field public static final java.lang.String EXTRA_REASON = "reason";
+ field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+ field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+ field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
field public static final int TYPE_BLUETOOTH = 7; // 0x7
field public static final int TYPE_DUMMY = 8; // 0x8
field public static final int TYPE_ETHERNET = 9; // 0x9
@@ -22828,6 +22857,9 @@
method public abstract void onNetworkActive();
}
+ public static abstract class ConnectivityManager.RestrictBackgroundStatus implements java.lang.annotation.Annotation {
+ }
+
public class Credentials {
ctor public Credentials(int, int, int);
method public int getGid();
@@ -24382,6 +24414,28 @@
field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service";
}
+ public abstract class HostNfcFService extends android.app.Service {
+ ctor public HostNfcFService();
+ method public final android.os.IBinder onBind(android.content.Intent);
+ method public abstract void onDeactivated(int);
+ method public abstract byte[] processNfcFPacket(byte[], android.os.Bundle);
+ method public final void sendResponsePacket(byte[]);
+ field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+ field public static final java.lang.String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+ field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_nfcf_service";
+ }
+
+ public final class NfcFCardEmulation {
+ method public boolean disableNfcFForegroundService(android.app.Activity);
+ method public boolean enableNfcFForegroundService(android.app.Activity, android.content.ComponentName);
+ method public static synchronized android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
+ method public java.lang.String getNfcid2ForService(android.content.ComponentName);
+ method public java.lang.String getSystemCodeForService(android.content.ComponentName);
+ method public boolean registerSystemCodeForService(android.content.ComponentName, java.lang.String);
+ method public boolean removeSystemCodeForService(android.content.ComponentName);
+ method public boolean setNfcid2ForService(android.content.ComponentName, java.lang.String);
+ }
+
public abstract class OffHostApduService extends android.app.Service {
ctor public OffHostApduService();
method public abstract android.os.IBinder onBind(android.content.Intent);
@@ -34003,6 +34057,7 @@
method public void setTheme(int);
method public void show(android.os.Bundle, int);
method public void startVoiceActivity(android.content.Intent);
+ field public static final int SHOW_SOURCE_ACTIVITY = 16; // 0x10
field public static final int SHOW_SOURCE_APPLICATION = 8; // 0x8
field public static final int SHOW_SOURCE_ASSIST_GESTURE = 4; // 0x4
field public static final int SHOW_WITH_ASSIST = 1; // 0x1
@@ -34364,6 +34419,8 @@
public abstract class UtteranceProgressListener {
ctor public UtteranceProgressListener();
+ method public void onAudioAvailable(java.lang.String, byte[]);
+ method public void onBeginSynthesis(java.lang.String, int, int, int);
method public abstract void onDone(java.lang.String);
method public abstract deprecated void onError(java.lang.String);
method public void onError(java.lang.String, int);
@@ -35630,6 +35687,7 @@
field public static final java.lang.String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL";
field public static final java.lang.String ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS = "android.telecom.action.SHOW_CALL_ACCESSIBILITY_SETTINGS";
field public static final java.lang.String ACTION_SHOW_CALL_SETTINGS = "android.telecom.action.SHOW_CALL_SETTINGS";
+ field public static final java.lang.String ACTION_SHOW_MISSED_CALLS_NOTIFICATION = "android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
field public static final java.lang.String ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS = "android.telecom.action.SHOW_RESPOND_VIA_SMS_SETTINGS";
field public static final char DTMF_CHARACTER_PAUSE = 44; // 0x002c ','
field public static final char DTMF_CHARACTER_WAIT = 59; // 0x003b ';'
@@ -35640,6 +35698,8 @@
field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+ field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
+ field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telecom.extra.PHONE_ACCOUNT_HANDLE";
field public static final java.lang.String EXTRA_START_CALL_WITH_SPEAKERPHONE = "android.telecom.extra.START_CALL_WITH_SPEAKERPHONE";
@@ -44108,6 +44168,30 @@
method public abstract android.view.View getFullScreenView(int, android.content.Context);
}
+ public class ServiceWorkerClient {
+ ctor public ServiceWorkerClient();
+ method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+ }
+
+ public abstract class ServiceWorkerController {
+ ctor public ServiceWorkerController();
+ method public static android.webkit.ServiceWorkerController getInstance();
+ method public abstract android.webkit.ServiceWorkerWebSettings getServiceWorkerWebSettings();
+ method public abstract void setServiceWorkerClient(android.webkit.ServiceWorkerClient);
+ }
+
+ public abstract class ServiceWorkerWebSettings {
+ ctor public ServiceWorkerWebSettings();
+ method public abstract boolean getAllowContentAccess();
+ method public abstract boolean getAllowFileAccess();
+ method public abstract boolean getBlockNetworkLoads();
+ method public abstract int getCacheMode();
+ method public abstract void setAllowContentAccess(boolean);
+ method public abstract void setAllowFileAccess(boolean);
+ method public abstract void setBlockNetworkLoads(boolean);
+ method public abstract void setCacheMode(int);
+ }
+
public class SslErrorHandler extends android.os.Handler {
method public void cancel();
method public void proceed();
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index e312596..e36a427 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1267,6 +1267,15 @@
mCalled = true;
}
+ void setVoiceInteractor(IVoiceInteractor voiceInteractor) {
+ if (voiceInteractor == null) {
+ mVoiceInteractor = null;
+ } else {
+ mVoiceInteractor = new VoiceInteractor(voiceInteractor, this, this,
+ Looper.myLooper());
+ }
+ }
+
/**
* Check whether this activity is running as part of a voice interaction with the user.
* If true, it should perform its interaction with the user through the
@@ -1301,6 +1310,62 @@
}
/**
+ * Queries whether the currently enabled voice interaction service supports returning
+ * a voice interactor for use by the activity. This is valid only for the duration of the
+ * activity.
+ *
+ * @return whether the current voice interaction service supports local voice interaction
+ */
+ public boolean isLocalVoiceInteractionSupported() {
+ try {
+ return ActivityManagerNative.getDefault().supportsLocalVoiceInteraction();
+ } catch (RemoteException re) {
+ }
+ return false;
+ }
+
+ /**
+ * Starts a local voice interaction session. When ready,
+ * {@link #onLocalVoiceInteractionStarted()} is called. You can pass a bundle of private options
+ * to the registered voice interaction service.
+ * @param privateOptions a Bundle of private arguments to the current voice interaction service
+ */
+ public void startLocalVoiceInteraction(Bundle privateOptions) {
+ try {
+ ActivityManagerNative.getDefault().startLocalVoiceInteraction(mToken, privateOptions);
+ } catch (RemoteException re) {
+ }
+ }
+
+ /**
+ * Callback to indicate that {@link #startLocalVoiceInteraction(Bundle)} has resulted in a
+ * voice interaction session being started. You can now retrieve a voice interactor using
+ * {@link #getVoiceInteractor()}.
+ */
+ public void onLocalVoiceInteractionStarted() {
+ Log.i(TAG, "onLocalVoiceInteractionStarted! " + getVoiceInteractor());
+ }
+
+ /**
+ * Callback to indicate that the local voice interaction has stopped for some
+ * reason.
+ */
+ public void onLocalVoiceInteractionStopped() {
+ Log.i(TAG, "onLocalVoiceInteractionStopped :( " + getVoiceInteractor());
+ }
+
+ /**
+ * Request to terminate the current voice interaction that was previously started
+ * using {@link #startLocalVoiceInteraction(Bundle)}.
+ */
+ public void stopLocalVoiceInteraction() {
+ try {
+ ActivityManagerNative.getDefault().stopLocalVoiceInteraction(mToken);
+ } catch (RemoteException re) {
+ }
+ }
+
+ /**
* This is called for activities that set launchMode to "singleTop" in
* their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP}
* flag when calling {@link #startActivity}. In either case, when the
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 2dc4fb9..6307477 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -85,16 +85,16 @@
private final Context mContext;
private final Handler mHandler;
+ /**
+ * Defines acceptable types of bugreports.
+ * @hide
+ */
@Retention(RetentionPolicy.SOURCE)
@IntDef({
BUGREPORT_OPTION_FULL,
BUGREPORT_OPTION_INTERACTIVE,
BUGREPORT_OPTION_REMOTE
})
- /**
- * Defines acceptable types of bugreports.
- * @hide
- */
public @interface BugreportMode {}
/**
* Takes a bugreport without user interference (and hence causing less
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 373a23f..4fa654f 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -18,6 +18,10 @@
import android.annotation.NonNull;
import android.content.ComponentName;
+import android.os.IBinder;
+import android.service.voice.IVoiceInteractionSession;
+
+import com.android.internal.app.IVoiceInteractor;
/**
* Activity manager local system service interface.
@@ -64,4 +68,8 @@
* @param userId The user being cleaned up.
*/
public abstract void onUserRemoved(int userId);
+
+ public abstract void onLocalVoiceInteractionStarted(IBinder callingActivity,
+ IVoiceInteractionSession mSession,
+ IVoiceInteractor mInteractor);
}
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 63b6825..42ff8e8 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -315,6 +315,34 @@
return true;
}
+ case START_LOCAL_VOICE_INTERACTION_TRANSACTION:
+ {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder token = data.readStrongBinder();
+ Bundle options = data.readBundle();
+ startLocalVoiceInteraction(token, options);
+ reply.writeNoException();
+ return true;
+ }
+
+ case STOP_LOCAL_VOICE_INTERACTION_TRANSACTION:
+ {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder token = data.readStrongBinder();
+ stopLocalVoiceInteraction(token);
+ reply.writeNoException();
+ return true;
+ }
+
+ case SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION:
+ {
+ data.enforceInterface(IActivityManager.descriptor);
+ boolean result = supportsLocalVoiceInteraction();
+ reply.writeNoException();
+ reply.writeInt(result? 1 : 0);
+ return true;
+ }
+
case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
{
data.enforceInterface(IActivityManager.descriptor);
@@ -3136,6 +3164,43 @@
data.recycle();
return result;
}
+
+ public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
+ throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(callingActivity);
+ data.writeBundle(options);
+ mRemote.transact(START_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
+ reply.readException();
+ reply.recycle();
+ data.recycle();
+ }
+
+ public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(callingActivity);
+ mRemote.transact(STOP_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
+ reply.readException();
+ reply.recycle();
+ data.recycle();
+ }
+
+ public boolean supportsLocalVoiceInteraction() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ mRemote.transact(SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
+ reply.readException();
+ int result = reply.readInt();
+ reply.recycle();
+ data.recycle();
+ return result != 0;
+ }
+
public boolean startNextMatchingActivity(IBinder callingActivity,
Intent intent, Bundle options) throws RemoteException {
Parcel data = Parcel.obtain();
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 93122dd..f3e1fc3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -83,6 +83,7 @@
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.EventLog;
+import android.util.LocaleList;
import android.util.Log;
import android.util.LogPrinter;
import android.util.Pair;
@@ -128,7 +129,6 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.TimeZone;
@@ -1254,6 +1254,15 @@
throws RemoteException {
sendMessage(H.PICTURE_IN_PICTURE_MODE_CHANGED, token, pipMode ? 1 : 0);
}
+
+ @Override
+ public void scheduleLocalVoiceInteractionStarted(IBinder token,
+ IVoiceInteractor voiceInteractor) throws RemoteException {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = token;
+ args.arg2 = voiceInteractor;
+ sendMessage(H.LOCAL_VOICE_INTERACTION_STARTED, args);
+ }
}
private int getLifecycleSeq() {
@@ -1317,6 +1326,7 @@
public static final int STOP_BINDER_TRACKING_AND_DUMP = 151;
public static final int MULTI_WINDOW_MODE_CHANGED = 152;
public static final int PICTURE_IN_PICTURE_MODE_CHANGED = 153;
+ public static final int LOCAL_VOICE_INTERACTION_STARTED = 154;
String codeToString(int code) {
if (DEBUG_MESSAGES) {
@@ -1372,6 +1382,7 @@
case ENTER_ANIMATION_COMPLETE: return "ENTER_ANIMATION_COMPLETE";
case MULTI_WINDOW_MODE_CHANGED: return "MULTI_WINDOW_MODE_CHANGED";
case PICTURE_IN_PICTURE_MODE_CHANGED: return "PICTURE_IN_PICTURE_MODE_CHANGED";
+ case LOCAL_VOICE_INTERACTION_STARTED: return "LOCAL_VOICE_INTERACTION_STARTED";
}
}
return Integer.toString(code);
@@ -1621,6 +1632,10 @@
case PICTURE_IN_PICTURE_MODE_CHANGED:
handlePictureInPictureModeChanged((IBinder) msg.obj, msg.arg1 == 1);
break;
+ case LOCAL_VOICE_INTERACTION_STARTED:
+ handleLocalVoiceInteractionStarted((IBinder) ((SomeArgs) msg.obj).arg1,
+ (IVoiceInteractor) ((SomeArgs) msg.obj).arg2);
+ break;
}
Object obj = msg.obj;
if (obj instanceof SomeArgs) {
@@ -2878,6 +2893,19 @@
}
}
+ private void handleLocalVoiceInteractionStarted(IBinder token, IVoiceInteractor interactor) {
+ final ActivityClientRecord r = mActivities.get(token);
+ if (r != null) {
+ r.voiceInteractor = interactor;
+ r.activity.setVoiceInteractor(interactor);
+ if (interactor == null) {
+ r.activity.onLocalVoiceInteractionStopped();
+ } else {
+ r.activity.onLocalVoiceInteractionStarted();
+ }
+ }
+ }
+
private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>();
/**
@@ -3300,6 +3328,17 @@
}
r.activity.performResume();
+ // If there is a pending relaunch that was requested when the activity was paused,
+ // it will put the activity into paused state when it finally happens. Since the
+ // activity resumed before being relaunched, we don't want that to happen, so we
+ // need to clear the request to relaunch paused.
+ for (int i = mRelaunchingActivities.size() - 1; i >= 0; i--) {
+ final ActivityClientRecord relaunching = mRelaunchingActivities.get(i);
+ if (relaunching.token == r.token && relaunching.startsNotResumed) {
+ relaunching.startsNotResumed = false;
+ }
+ }
+
EventLog.writeEvent(LOG_AM_ON_RESUME_CALLED,
UserHandle.myUserId(), r.activity.getComponentName().getClassName());
@@ -3528,6 +3567,7 @@
private void handlePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges, boolean dontReport, int seq) {
ActivityClientRecord r = mActivities.get(token);
+ if (DEBUG_ORDER) Slog.d(TAG, "handlePauseActivity " + r + ", seq: " + seq);
if (!checkAndUpdateLifecycleSeq(seq, r, "pauseActivity")) {
return;
}
@@ -4167,6 +4207,7 @@
synchronized (mResourcesManager) {
for (int i=0; i<mRelaunchingActivities.size(); i++) {
ActivityClientRecord r = mRelaunchingActivities.get(i);
+ if (DEBUG_ORDER) Slog.d(TAG, "requestRelaunchActivity: " + this + ", trying: " + r);
if (r.token == token) {
target = r;
if (pendingResults != null) {
@@ -4197,14 +4238,19 @@
}
if (target == null) {
+ if (DEBUG_ORDER) Slog.d(TAG, "requestRelaunchActivity: target is null, fromServer:"
+ + fromServer);
target = new ActivityClientRecord();
target.token = token;
target.pendingResults = pendingResults;
target.pendingIntents = pendingNewIntents;
target.mPreserveWindow = preserveWindow;
if (!fromServer) {
- ActivityClientRecord existing = mActivities.get(token);
+ final ActivityClientRecord existing = mActivities.get(token);
+ if (DEBUG_ORDER) Slog.d(TAG, "requestRelaunchActivity: " + existing);
if (existing != null) {
+ if (DEBUG_ORDER) Slog.d(TAG, "requestRelaunchActivity: paused= "
+ + existing.paused);;
target.startsNotResumed = existing.paused;
target.overrideConfig = existing.overrideConfig;
}
@@ -4227,8 +4273,8 @@
target.pendingConfigChanges |= configChanges;
target.relaunchSeq = getLifecycleSeq();
}
- if (DEBUG_ORDER) Slog.d(TAG, "relaunchActivity " + ActivityThread.this
- + " operation received seq: " + target.relaunchSeq);
+ if (DEBUG_ORDER) Slog.d(TAG, "relaunchActivity " + ActivityThread.this + ", target "
+ + target + " operation received seq: " + target.relaunchSeq);
}
private void handleRelaunchActivity(ActivityClientRecord tmp) {
@@ -4887,9 +4933,9 @@
TimeZone.setDefault(null);
/*
- * Initialize the default locale in this process for the reasons we set the time zone.
+ * Initialize the default locales in this process for the reasons we set the time zone.
*/
- Locale.setDefault(data.config.locale);
+ LocaleList.setDefault(data.config.getLocales());
/*
* Update the system configuration since its preloaded and might not
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index 5951c8d..9be7f23 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -425,6 +425,16 @@
return true;
}
+ case SCHEDULE_LOCAL_VOICE_INTERACTION_STARTED_TRANSACTION:
+ {
+ data.enforceInterface(IApplicationThread.descriptor);
+ IBinder token = data.readStrongBinder();
+ IVoiceInteractor voiceInteractor = IVoiceInteractor.Stub.asInterface(
+ data.readStrongBinder());
+ scheduleLocalVoiceInteractionStarted(token, voiceInteractor);
+ return true;
+ }
+
case PROFILER_CONTROL_TRANSACTION:
{
data.enforceInterface(IApplicationThread.descriptor);
@@ -1101,6 +1111,17 @@
data.recycle();
}
+ public final void scheduleLocalVoiceInteractionStarted(IBinder token,
+ IVoiceInteractor voiceInteractor) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ data.writeInterfaceToken(IApplicationThread.descriptor);
+ data.writeStrongBinder(token);
+ data.writeStrongBinder(voiceInteractor != null ? voiceInteractor.asBinder() : null);
+ mRemote.transact(SCHEDULE_LOCAL_VOICE_INTERACTION_STARTED_TRANSACTION, data, null,
+ IBinder.FLAG_ONEWAY);
+ data.recycle();
+ }
+
public void updateTimeZone() throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 5bb2cf5..22de2ff 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -591,6 +591,12 @@
public boolean isAppForeground(int uid) throws RemoteException;
+ public void startLocalVoiceInteraction(IBinder token, Bundle options) throws RemoteException;
+
+ public void stopLocalVoiceInteraction(IBinder token) throws RemoteException;
+
+ public boolean supportsLocalVoiceInteraction() throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -963,4 +969,7 @@
int GET_GRANTED_URI_PERMISSIONS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 360;
int CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 361;
int IS_APP_FOREGROUND_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 362;
+ int START_LOCAL_VOICE_INTERACTION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 363;
+ int STOP_LOCAL_VOICE_INTERACTION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 364;
+ int SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 365;
}
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index dc67026..6d64bd0 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -154,6 +154,7 @@
void stopBinderTrackingAndDump(FileDescriptor fd) throws RemoteException;
void scheduleMultiWindowModeChanged(IBinder token, boolean multiWindowMode) throws RemoteException;
void schedulePictureInPictureModeChanged(IBinder token, boolean multiWindowMode) throws RemoteException;
+ void scheduleLocalVoiceInteractionStarted(IBinder token, IVoiceInteractor voiceInteractor) throws RemoteException;
String descriptor = "android.app.IApplicationThread";
@@ -216,4 +217,5 @@
int STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+57;
int SCHEDULE_MULTI_WINDOW_MODE_CHANGED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+58;
int SCHEDULE_PICTURE_IN_PICTURE_MODE_CHANGED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+59;
+ int SCHEDULE_LOCAL_VOICE_INTERACTION_STARTED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+60;
}
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index ccba250..7a0e7f6 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -28,37 +28,47 @@
/**
* Set the wallpaper.
+ *
+ * If 'extras' is non-null, on successful return it will contain:
+ * EXTRA_SET_WALLPAPER_ID : integer ID that the new wallpaper will have
+ *
+ * 'which' is some combination of:
+ * FLAG_SET_SYSTEM
+ * FLAG_SET_LOCK
*/
- ParcelFileDescriptor setWallpaper(String name, in String callingPackage);
+ ParcelFileDescriptor setWallpaper(String name, in String callingPackage,
+ out Bundle extras, int which);
/**
- * Set the live wallpaper.
+ * Set the live wallpaper. This only affects the system wallpaper.
*/
void setWallpaperComponentChecked(in ComponentName name, in String callingPackage);
/**
- * Set the live wallpaper.
+ * Set the live wallpaper. This only affects the system wallpaper.
*/
void setWallpaperComponent(in ComponentName name);
/**
- * Get the wallpaper.
+ * Get the system wallpaper.
*/
ParcelFileDescriptor getWallpaper(IWallpaperManagerCallback cb,
out Bundle outParams);
/**
- * Get information about a live wallpaper.
+ * If the current system wallpaper is a live wallpaper component, return the
+ * information about that wallpaper. Otherwise, if it is a static image,
+ * simply return null.
*/
WallpaperInfo getWallpaperInfo();
/**
- * Clear the wallpaper.
+ * Clear the system wallpaper.
*/
void clearWallpaper(in String callingPackage);
/**
- * Return whether there is a wallpaper set with the given name.
+ * Return whether the current system wallpaper has the given name.
*/
boolean hasNamedWallpaper(String name);
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 7184337..24a3470 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -545,7 +545,7 @@
* returning the resulting activity or till the timeOut period expires.
* If the timeOut expires before the activity is started, return null.
*
- * @param timeOut Time to wait before the activity is created.
+ * @param timeOut Time to wait in milliseconds before the activity is created.
*
* @return Activity
*/
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 3187984..260216c 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -27,6 +27,7 @@
import android.hardware.display.DisplayManagerGlobal;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
+import android.util.LocaleList;
import android.util.Log;
import android.util.Pair;
import android.util.Slog;
@@ -34,7 +35,6 @@
import android.view.DisplayAdjustments;
import java.lang.ref.WeakReference;
-import java.util.Locale;
/** @hide */
public class ResourcesManager {
@@ -284,8 +284,9 @@
}
// set it for java, this also affects newly created Resources
- if (config.locale != null) {
- Locale.setDefault(config.locale);
+ final LocaleList localeList = config.getLocales();
+ if (!localeList.isEmpty()) {
+ LocaleList.setDefault(localeList);
}
Resources.updateSystemConfiguration(config, defaultDisplayMetrics, compat);
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 5b5bba4..f103576 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -16,6 +16,7 @@
package android.app;
+import android.annotation.IntDef;
import android.annotation.RawRes;
import android.annotation.SystemApi;
import android.content.ComponentName;
@@ -60,6 +61,8 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.List;
/**
@@ -144,7 +147,33 @@
* and y arguments are the location of the drop.
*/
public static final String COMMAND_DROP = "android.home.drop";
-
+
+ /**
+ * Extra passed back from setWallpaper() giving the new wallpaper's assigned ID.
+ * @hide
+ */
+ public static final String EXTRA_NEW_WALLPAPER_ID = "android.service.wallpaper.extra.ID";
+
+ // flags for which kind of wallpaper to set
+
+ /** @hide */
+ @IntDef(flag = true, value = {
+ FLAG_SET_SYSTEM,
+ FLAG_SET_LOCK
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SetWallpaperFlags {}
+
+ /**
+ * Flag: use the supplied imagery as the general system wallpaper.
+ */
+ public static final int FLAG_SET_SYSTEM = 1 << 0;
+
+ /**
+ * Flag: use the supplied imagery as the lock-screen wallpaper.
+ */
+ public static final int FLAG_SET_LOCK = 1 << 1;
+
private final Context mContext;
/**
@@ -717,20 +746,41 @@
* wallpaper.
*/
public void setResource(@RawRes int resid) throws IOException {
+ setResource(resid, FLAG_SET_SYSTEM);
+ }
+
+ /**
+ * Version of {@link #setResource(int)} that takes an optional Bundle for returning
+ * metadata about the operation to the caller.
+ *
+ * @param resid
+ * @param which Flags indicating which wallpaper(s) to configure with the new imagery.
+ *
+ * @see #FLAG_SET_LOCK
+ * @see #FLAG_SET_SYSTEM
+ *
+ * @return An integer ID assigned to the newly active wallpaper; or zero on failure.
+ *
+ * @throws IOException
+ */
+ public int setResource(@RawRes int resid, @SetWallpaperFlags int which)
+ throws IOException {
if (sGlobals.mService == null) {
Log.w(TAG, "WallpaperService not running");
- return;
+ return 0;
}
+ final Bundle result = new Bundle();
try {
Resources resources = mContext.getResources();
/* Set the wallpaper to the default values */
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(
- "res:" + resources.getResourceName(resid), mContext.getOpPackageName());
+ "res:" + resources.getResourceName(resid),
+ mContext.getOpPackageName(), result, which);
if (fd != null) {
FileOutputStream fos = null;
try {
fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
- setWallpaper(resources.openRawResource(resid), fos);
+ copyStreamToWallpaperFile(resources.openRawResource(resid), fos);
} finally {
IoUtils.closeQuietly(fos);
}
@@ -738,6 +788,7 @@
} catch (RemoteException e) {
// Ignore
}
+ return result.getInt(EXTRA_NEW_WALLPAPER_ID, 0);
}
/**
@@ -753,7 +804,7 @@
* <p>This method requires the caller to hold the permission
* {@link android.Manifest.permission#SET_WALLPAPER}.
*
- * @param bitmap The bitmap to save.
+ * @param bitmap The bitmap to be used as the new system wallpaper.
*
* @throws IOException If an error occurs when attempting to set the wallpaper
* to the provided image.
@@ -775,42 +826,72 @@
* <p>This method requires the caller to hold the permission
* {@link android.Manifest.permission#SET_WALLPAPER}.
*
- * @param fullImage A bitmap that will supply the wallpaper imagery.
+ * @param fullImage A bitmap that will supply the wallpaper imagery.
* @param visibleCropHint The rectangular subregion of {@code fullImage} that should be
* displayed as wallpaper. Passing {@code null} for this parameter means that
* the full image should be displayed if possible given the image's and device's
- * aspect ratios, etc.
+ * aspect ratios, etc.
* @param allowBackup {@code true} if the OS is permitted to back up this wallpaper
* image for restore to a future device; {@code false} otherwise.
*
+ * @return An integer ID assigned to the newly active wallpaper; or zero on failure.
+ *
* @throws IOException If an error occurs when attempting to set the wallpaper
* to the provided image.
* @throws IllegalArgumentException If the {@code visibleCropHint} rectangle is
* empty or invalid.
*/
- public void setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup)
+ public int setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup)
+ throws IOException {
+ return setBitmap(fullImage, visibleCropHint, allowBackup, FLAG_SET_SYSTEM);
+ }
+
+ /**
+ /**
+ * Version of {@link #setBitmap(Bitmap, Rect, boolean)} that allows the caller
+ * to specify which of the supported wallpaper categories to set.
+ *
+ * @param fullImage A bitmap that will supply the wallpaper imagery.
+ * @param visibleCropHint The rectangular subregion of {@code fullImage} that should be
+ * displayed as wallpaper. Passing {@code null} for this parameter means that
+ * the full image should be displayed if possible given the image's and device's
+ * aspect ratios, etc.
+ * @param allowBackup {@code true} if the OS is permitted to back up this wallpaper
+ * image for restore to a future device; {@code false} otherwise.
+ * @param which Flags indicating which wallpaper(s) to configure with the new imagery.
+ *
+ * @see #FLAG_SET_LOCK_WALLPAPER
+ * @see #FLAG_SET_SYSTEM_WALLPAPER
+ *
+ * @return An integer ID assigned to the newly active wallpaper; or zero on failure.
+ *
+ * @throws IOException
+ */
+ public int setBitmap(Bitmap fullImage, Rect visibleCropHint,
+ boolean allowBackup, @SetWallpaperFlags int which)
throws IOException {
validateRect(visibleCropHint);
if (sGlobals.mService == null) {
Log.w(TAG, "WallpaperService not running");
- return;
+ return 0;
}
+ final Bundle result = new Bundle();
try {
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null,
- mContext.getOpPackageName());
- if (fd == null) {
- return;
- }
- FileOutputStream fos = null;
- try {
- fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
- fullImage.compress(Bitmap.CompressFormat.PNG, 90, fos);
- } finally {
- IoUtils.closeQuietly(fos);
+ mContext.getOpPackageName(), result, which);
+ if (fd != null) {
+ FileOutputStream fos = null;
+ try {
+ fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
+ fullImage.compress(Bitmap.CompressFormat.PNG, 90, fos);
+ } finally {
+ IoUtils.closeQuietly(fos);
+ }
}
} catch (RemoteException e) {
// Ignore
}
+ return result.getInt(EXTRA_NEW_WALLPAPER_ID, 0);
}
private final void validateRect(Rect rect) {
@@ -843,7 +924,7 @@
setStream(bitmapData, null, true);
}
- private void setWallpaper(InputStream data, FileOutputStream fos)
+ private void copyStreamToWallpaperFile(InputStream data, FileOutputStream fos)
throws IOException {
byte[] buffer = new byte[32768];
int amt;
@@ -877,29 +958,55 @@
* @throws IllegalArgumentException If the {@code visibleCropHint} rectangle is
* empty or invalid.
*/
- public void setStream(InputStream bitmapData, Rect visibleCropHint, boolean allowBackup)
+ public int setStream(InputStream bitmapData, Rect visibleCropHint, boolean allowBackup)
throws IOException {
+ return setStream(bitmapData, visibleCropHint, allowBackup, FLAG_SET_SYSTEM);
+ }
+
+ /**
+ * Version of {@link #setStream(InputStream, Rect, boolean)} that allows the caller
+ * to specify which of the supported wallpaper categories to set.
+ *
+ * @param bitmapData A stream containing the raw data to install as a wallpaper.
+ * @param visibleCropHint The rectangular subregion of the streamed image that should be
+ * displayed as wallpaper. Passing {@code null} for this parameter means that
+ * the full image should be displayed if possible given the image's and device's
+ * aspect ratios, etc.
+ * @param allowBackup {@code true} if the OS is permitted to back up this wallpaper
+ * image for restore to a future device; {@code false} otherwise.
+ * @param which Flags indicating which wallpaper(s) to configure with the new imagery.
+ *
+ * @see #FLAG_SET_LOCK_WALLPAPER
+ * @see #FLAG_SET_SYSTEM_WALLPAPER
+ *
+ * @throws IOException
+ */
+ public int setStream(InputStream bitmapData, Rect visibleCropHint,
+ boolean allowBackup, @SetWallpaperFlags int which)
+ throws IOException {
validateRect(visibleCropHint);
if (sGlobals.mService == null) {
Log.w(TAG, "WallpaperService not running");
- return;
+ return 0;
}
+ final Bundle result = new Bundle();
try {
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null,
- mContext.getOpPackageName());
- if (fd == null) {
- return;
- }
- FileOutputStream fos = null;
- try {
- fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
- setWallpaper(bitmapData, fos);
- } finally {
- IoUtils.closeQuietly(fos);
+ mContext.getOpPackageName(), result, which);
+ if (fd != null) {
+ FileOutputStream fos = null;
+ try {
+ fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
+ copyStreamToWallpaperFile(bitmapData, fos);
+ } finally {
+ IoUtils.closeQuietly(fos);
+ }
}
} catch (RemoteException e) {
// Ignore
}
+
+ return result.getInt(EXTRA_NEW_WALLPAPER_ID, 0);
}
/**
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index cfd5ca8..3c1ecc7 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -283,17 +283,17 @@
public static final String EXTRA_BUGREPORT_FAILURE_REASON =
"android.app.extra.BUGREPORT_FAILURE_REASON";
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- BUGREPORT_FAILURE_FAILED_COMPLETING,
- BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE
- })
/**
* An interface representing reason of bugreport failure.
*
* @see #EXTRA_BUGREPORT_FAILURE_REASON
* @hide
*/
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ BUGREPORT_FAILURE_FAILED_COMPLETING,
+ BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE
+ })
public @interface BugreportFailureCode {}
/** Bugreport completion process failed. */
public static final int BUGREPORT_FAILURE_FAILED_COMPLETING = 0;
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index a655bfd..c78174f 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -67,6 +67,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
/**
* Public interface for managing policies enforced on a device. Most clients of this class must be
@@ -88,22 +89,25 @@
private final Context mContext;
private final IDevicePolicyManager mService;
- private boolean mParentInstance;
+ private final boolean mParentInstance;
private static final String REMOTE_EXCEPTION_MESSAGE =
"Failed to talk with device policy manager service";
private DevicePolicyManager(Context context, boolean parentInstance) {
- this(context, IDevicePolicyManager.Stub.asInterface(
- ServiceManager.getService(Context.DEVICE_POLICY_SERVICE)));
- mParentInstance = parentInstance;
+ this(context,
+ IDevicePolicyManager.Stub.asInterface(
+ ServiceManager.getService(Context.DEVICE_POLICY_SERVICE)),
+ parentInstance);
}
/** @hide */
@VisibleForTesting
- protected DevicePolicyManager(Context context, IDevicePolicyManager service) {
+ protected DevicePolicyManager(
+ Context context, IDevicePolicyManager service, boolean parentInstance) {
mContext = context;
mService = service;
+ mParentInstance = parentInstance;
}
/** @hide */
@@ -1145,7 +1149,7 @@
public void setPasswordMinimumLength(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumLength(admin, length);
+ mService.setPasswordMinimumLength(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1166,7 +1170,7 @@
public int getPasswordMinimumLength(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumLength(admin, userHandle);
+ return mService.getPasswordMinimumLength(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1199,7 +1203,7 @@
public void setPasswordMinimumUpperCase(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumUpperCase(admin, length);
+ mService.setPasswordMinimumUpperCase(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1227,7 +1231,7 @@
public int getPasswordMinimumUpperCase(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumUpperCase(admin, userHandle);
+ return mService.getPasswordMinimumUpperCase(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1260,7 +1264,7 @@
public void setPasswordMinimumLowerCase(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumLowerCase(admin, length);
+ mService.setPasswordMinimumLowerCase(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1288,7 +1292,7 @@
public int getPasswordMinimumLowerCase(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumLowerCase(admin, userHandle);
+ return mService.getPasswordMinimumLowerCase(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1320,7 +1324,7 @@
public void setPasswordMinimumLetters(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumLetters(admin, length);
+ mService.setPasswordMinimumLetters(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1346,7 +1350,7 @@
public int getPasswordMinimumLetters(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumLetters(admin, userHandle);
+ return mService.getPasswordMinimumLetters(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1378,7 +1382,7 @@
public void setPasswordMinimumNumeric(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumNumeric(admin, length);
+ mService.setPasswordMinimumNumeric(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1405,7 +1409,7 @@
public int getPasswordMinimumNumeric(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumNumeric(admin, userHandle);
+ return mService.getPasswordMinimumNumeric(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1437,7 +1441,7 @@
public void setPasswordMinimumSymbols(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumSymbols(admin, length);
+ mService.setPasswordMinimumSymbols(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1463,7 +1467,7 @@
public int getPasswordMinimumSymbols(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumSymbols(admin, userHandle);
+ return mService.getPasswordMinimumSymbols(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1495,7 +1499,7 @@
public void setPasswordMinimumNonLetter(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordMinimumNonLetter(admin, length);
+ mService.setPasswordMinimumNonLetter(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1522,7 +1526,7 @@
public int getPasswordMinimumNonLetter(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordMinimumNonLetter(admin, userHandle);
+ return mService.getPasswordMinimumNonLetter(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1555,7 +1559,7 @@
public void setPasswordHistoryLength(@NonNull ComponentName admin, int length) {
if (mService != null) {
try {
- mService.setPasswordHistoryLength(admin, length);
+ mService.setPasswordHistoryLength(admin, length, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1587,7 +1591,7 @@
public void setPasswordExpirationTimeout(@NonNull ComponentName admin, long timeout) {
if (mService != null) {
try {
- mService.setPasswordExpirationTimeout(admin, timeout);
+ mService.setPasswordExpirationTimeout(admin, timeout, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1606,7 +1610,7 @@
public long getPasswordExpirationTimeout(@Nullable ComponentName admin) {
if (mService != null) {
try {
- return mService.getPasswordExpirationTimeout(admin, myUserId());
+ return mService.getPasswordExpirationTimeout(admin, myUserId(), mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1627,7 +1631,7 @@
public long getPasswordExpiration(@Nullable ComponentName admin) {
if (mService != null) {
try {
- return mService.getPasswordExpiration(admin, myUserId());
+ return mService.getPasswordExpiration(admin, myUserId(), mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1650,7 +1654,7 @@
public int getPasswordHistoryLength(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getPasswordHistoryLength(admin, userHandle);
+ return mService.getPasswordHistoryLength(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1702,7 +1706,7 @@
public int getCurrentFailedPasswordAttempts() {
if (mService != null) {
try {
- return mService.getCurrentFailedPasswordAttempts(myUserId());
+ return mService.getCurrentFailedPasswordAttempts(myUserId(), mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1749,7 +1753,7 @@
public void setMaximumFailedPasswordsForWipe(@NonNull ComponentName admin, int num) {
if (mService != null) {
try {
- mService.setMaximumFailedPasswordsForWipe(admin, num);
+ mService.setMaximumFailedPasswordsForWipe(admin, num, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1771,7 +1775,8 @@
public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getMaximumFailedPasswordsForWipe(admin, userHandle);
+ return mService.getMaximumFailedPasswordsForWipe(
+ admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1789,7 +1794,8 @@
public int getProfileWithMinimumFailedPasswordsForWipe(int userHandle) {
if (mService != null) {
try {
- return mService.getProfileWithMinimumFailedPasswordsForWipe(userHandle);
+ return mService.getProfileWithMinimumFailedPasswordsForWipe(
+ userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1881,7 +1887,7 @@
public void setMaximumTimeToLock(@NonNull ComponentName admin, long timeMs) {
if (mService != null) {
try {
- mService.setMaximumTimeToLock(admin, timeMs);
+ mService.setMaximumTimeToLock(admin, timeMs, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1904,7 +1910,7 @@
public long getMaximumTimeToLock(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getMaximumTimeToLock(admin, userHandle);
+ return mService.getMaximumTimeToLock(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -1923,7 +1929,7 @@
public void lockNow() {
if (mService != null) {
try {
- mService.lockNow();
+ mService.lockNow(mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -2720,7 +2726,7 @@
public void setKeyguardDisabledFeatures(@NonNull ComponentName admin, int which) {
if (mService != null) {
try {
- mService.setKeyguardDisabledFeatures(admin, which);
+ mService.setKeyguardDisabledFeatures(admin, which, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -2730,8 +2736,8 @@
/**
* Determine whether or not features have been disabled in keyguard either by the calling
* admin, if specified, or all admins.
- * @param admin The name of the admin component to check, or {@code null} to check whether any admins
- * have disabled features in keyguard.
+ * @param admin The name of the admin component to check, or {@code null} to check whether any
+ * admins have disabled features in keyguard.
* @return bitfield of flags. See {@link #setKeyguardDisabledFeatures(ComponentName, int)}
* for a list.
*/
@@ -2743,7 +2749,7 @@
public int getKeyguardDisabledFeatures(@Nullable ComponentName admin, int userHandle) {
if (mService != null) {
try {
- return mService.getKeyguardDisabledFeatures(admin, userHandle);
+ return mService.getKeyguardDisabledFeatures(admin, userHandle, mParentInstance);
} catch (RemoteException e) {
Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e);
}
@@ -4119,6 +4125,47 @@
}
/**
+ * Flag used by {@link createAndManageUser} to skip setup wizard after creating a new user.
+ * @hide
+ */
+ public static final int SKIP_SETUP_WIZARD = 0x0001;
+
+ /**
+ * Called by a device owner to create a user with the specified name and the caller as profile
+ * owner. The UserHandle returned by this method should not be persisted as user handles are
+ * recycled as users are removed and created. If you need to persist an identifier for this
+ * user, use {@link UserManager#getSerialNumberForUser}. The new user will not be started in the
+ * background.
+ *
+ * <p> admin is the {@link DeviceAdminReceiver} which is the device owner, and will become the
+ * profile owner and will be registered as an active admin on the new user. The profile owner
+ * package will be installed on the new user.
+ *
+ * <p>If the adminExtras are not null, they will be stored on the device until the user is
+ * started for the first time. Then the extras will be passed to the admin when
+ * onEnable is called.
+ *
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+ * @param name The user's name.
+ * @param adminExtras Extras that will be passed to onEnable of the admin receiver on the new
+ * user.
+ * @param flags {@link SKIP_SETUP_WIZARD} is supported.
+ * @see UserHandle
+ * @return the {@link android.os.UserHandle} object for the created user, or {@code null} if the
+ * user could not be created.
+ * @hide
+ */
+ public UserHandle createAndManageUser(@NonNull ComponentName admin, @NonNull String name,
+ @Nullable PersistableBundle adminExtras, int flags) {
+ try {
+ return mService.createAndManageUser(admin, name, adminExtras, flags);
+ } catch (RemoteException re) {
+ Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, re);
+ }
+ return null;
+ }
+
+ /**
* Called by a device owner to remove a user and all associated data. The primary user can
* not be removed.
*
@@ -4666,7 +4713,8 @@
* @see #addCrossProfileWidgetProvider(android.content.ComponentName, String)
* @see #getCrossProfileWidgetProviders(android.content.ComponentName)
*/
- public boolean removeCrossProfileWidgetProvider(@NonNull ComponentName admin, String packageName) {
+ public boolean removeCrossProfileWidgetProvider(
+ @NonNull ComponentName admin, String packageName) {
if (mService != null) {
try {
return mService.removeCrossProfileWidgetProvider(admin, packageName);
@@ -5125,7 +5173,8 @@
}
/**
- * Obtains a {@link DevicePolicyManager} whose calls act on the parent profile.
+ * Called by the profile owner of a managed profile to obtain a {@link DevicePolicyManager}
+ * whose calls act on the parent profile.
*
* <p> Note only some methods will work on the parent Manager.
*
@@ -5193,4 +5242,46 @@
return 0;
}
}
+
+ /**
+ * @hide
+ * Indicates the entity that controls the device or profile owner. A user/profile is considered
+ * affiliated if it is managed by the same entity as the device.
+ *
+ * <p> By definition, the user that the device owner runs on is always affiliated. Any other
+ * user/profile is considered affiliated if the following conditions are both met:
+ * <ul>
+ * <li>The device owner and the user's/profile's profile owner have called this method,
+ * specifying a set of opaque affiliation ids each. If the sets specified by the device owner
+ * and a profile owner intersect, they must have come from the same source, which means that
+ * the device owner and profile owner are controlled by the same entity.</li>
+ * <li>The device owner's and profile owner's package names are the same.</li>
+ * </ul>
+ *
+ * @param admin Which profile or device owner this request is associated with.
+ * @param ids A set of opaque affiliation ids.
+ */
+ public void setAffiliationIds(@NonNull ComponentName admin, Set<String> ids) {
+ try {
+ mService.setAffiliationIds(admin, new ArrayList<String>(ids));
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with device policy service", e);
+ }
+ }
+
+ /**
+ * @hide
+ * Returns whether this user/profile is affiliated with the device. See
+ * {@link #setAffiliationIds} for the definition of affiliation.
+ *
+ * @return whether this user/profile is affiliated with the device.
+ */
+ public boolean isAffiliatedUser() {
+ try {
+ return mService != null && mService.isAffiliatedUser();
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with device policy service", e);
+ return false;
+ }
+ }
}
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 82115a2..e08b80b 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -38,48 +38,48 @@
void setPasswordQuality(in ComponentName who, int quality, boolean parent);
int getPasswordQuality(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumLength(in ComponentName who, int length);
- int getPasswordMinimumLength(in ComponentName who, int userHandle);
+ void setPasswordMinimumLength(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumLength(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumUpperCase(in ComponentName who, int length);
- int getPasswordMinimumUpperCase(in ComponentName who, int userHandle);
+ void setPasswordMinimumUpperCase(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumUpperCase(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumLowerCase(in ComponentName who, int length);
- int getPasswordMinimumLowerCase(in ComponentName who, int userHandle);
+ void setPasswordMinimumLowerCase(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumLowerCase(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumLetters(in ComponentName who, int length);
- int getPasswordMinimumLetters(in ComponentName who, int userHandle);
+ void setPasswordMinimumLetters(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumLetters(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumNumeric(in ComponentName who, int length);
- int getPasswordMinimumNumeric(in ComponentName who, int userHandle);
+ void setPasswordMinimumNumeric(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumNumeric(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumSymbols(in ComponentName who, int length);
- int getPasswordMinimumSymbols(in ComponentName who, int userHandle);
+ void setPasswordMinimumSymbols(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumSymbols(in ComponentName who, int userHandle, boolean parent);
- void setPasswordMinimumNonLetter(in ComponentName who, int length);
- int getPasswordMinimumNonLetter(in ComponentName who, int userHandle);
+ void setPasswordMinimumNonLetter(in ComponentName who, int length, boolean parent);
+ int getPasswordMinimumNonLetter(in ComponentName who, int userHandle, boolean parent);
- void setPasswordHistoryLength(in ComponentName who, int length);
- int getPasswordHistoryLength(in ComponentName who, int userHandle);
+ void setPasswordHistoryLength(in ComponentName who, int length, boolean parent);
+ int getPasswordHistoryLength(in ComponentName who, int userHandle, boolean parent);
- void setPasswordExpirationTimeout(in ComponentName who, long expiration);
- long getPasswordExpirationTimeout(in ComponentName who, int userHandle);
+ void setPasswordExpirationTimeout(in ComponentName who, long expiration, boolean parent);
+ long getPasswordExpirationTimeout(in ComponentName who, int userHandle, boolean parent);
- long getPasswordExpiration(in ComponentName who, int userHandle);
+ long getPasswordExpiration(in ComponentName who, int userHandle, boolean parent);
boolean isActivePasswordSufficient(int userHandle, boolean parent);
- int getCurrentFailedPasswordAttempts(int userHandle);
- int getProfileWithMinimumFailedPasswordsForWipe(int userHandle);
+ int getCurrentFailedPasswordAttempts(int userHandle, boolean parent);
+ int getProfileWithMinimumFailedPasswordsForWipe(int userHandle, boolean parent);
- void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num);
- int getMaximumFailedPasswordsForWipe(in ComponentName admin, int userHandle);
+ void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num, boolean parent);
+ int getMaximumFailedPasswordsForWipe(in ComponentName admin, int userHandle, boolean parent);
boolean resetPassword(String password, int flags);
- void setMaximumTimeToLock(in ComponentName who, long timeMs);
- long getMaximumTimeToLock(in ComponentName who, int userHandle);
+ void setMaximumTimeToLock(in ComponentName who, long timeMs, boolean parent);
+ long getMaximumTimeToLock(in ComponentName who, int userHandle, boolean parent);
- void lockNow();
+ void lockNow(boolean parent);
void wipeData(int flags);
@@ -99,8 +99,8 @@
void setScreenCaptureDisabled(in ComponentName who, boolean disabled);
boolean getScreenCaptureDisabled(in ComponentName who, int userHandle);
- void setKeyguardDisabledFeatures(in ComponentName who, int which);
- int getKeyguardDisabledFeatures(in ComponentName who, int userHandle);
+ void setKeyguardDisabledFeatures(in ComponentName who, int which, boolean parent);
+ int getKeyguardDisabledFeatures(in ComponentName who, int userHandle, boolean parent);
void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing, int userHandle);
boolean isAdminActive(in ComponentName policyReceiver, int userHandle);
@@ -179,6 +179,7 @@
UserHandle createUser(in ComponentName who, in String name);
UserHandle createAndInitializeUser(in ComponentName who, in String name, in String profileOwnerName, in ComponentName profileOwnerComponent, in Bundle adminExtras);
+ UserHandle createAndManageUser(in ComponentName who, in String name, in PersistableBundle adminExtras, in int flags);
boolean removeUser(in ComponentName who, in UserHandle userHandle);
boolean switchUser(in ComponentName who, in UserHandle userHandle);
@@ -267,4 +268,7 @@
void setOrganizationColor(in ComponentName admin, in int color);
int getOrganizationColor(in ComponentName admin);
int getOrganizationColorForUser(int userHandle);
+
+ void setAffiliationIds(in ComponentName admin, in List<String> ids);
+ boolean isAffiliatedUser();
}
diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl
index a3fe6ab..d3d02e5 100644
--- a/core/java/android/app/trust/ITrustManager.aidl
+++ b/core/java/android/app/trust/ITrustManager.aidl
@@ -32,4 +32,5 @@
void setDeviceLockedForUser(int userId, boolean locked);
boolean isDeviceLocked(int userId);
boolean isDeviceSecure(int userId);
+ boolean isTrustUsuallyManaged(int userId);
}
diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java
index 88ba874..2bbc54f 100644
--- a/core/java/android/app/trust/TrustManager.java
+++ b/core/java/android/app/trust/TrustManager.java
@@ -16,21 +16,17 @@
package android.app.trust;
+import com.android.internal.widget.LockPatternUtils;
+
import android.Manifest;
-import android.annotation.IntDef;
import android.annotation.RequiresPermission;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
-import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Log;
-import android.util.SparseIntArray;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
/**
* See {@link com.android.server.trust.TrustManagerService}
@@ -158,6 +154,21 @@
}
}
+ /**
+ * @return whether {@userId} has enabled and configured trust agents. Ignores short-term
+ * unavailability of trust due to {@link LockPatternUtils.StrongAuthTracker}.
+ */
+ @RequiresPermission(android.Manifest.permission.TRUST_LISTENER)
+ public boolean isTrustUsuallyManaged(int userId) {
+ try {
+ return mService.isTrustUsuallyManaged(userId);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+
+
private void onError(Exception e) {
Log.e(TAG, "Error while calling TrustManagerService", e);
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 1e7512d..06da4955 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -41,6 +41,7 @@
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
@@ -663,10 +664,13 @@
public static final String ACTION_DEFAULT = ACTION_VIEW;
/**
- * Activity Action: Quick view the data.
- * <p>Input: {@link #getData} is URI from which to retrieve data.
+ * Activity Action: Quick view the data. Launches a quick viewer for
+ * a URI or a list of URIs.
+ * <p>Input: {@link #getData} is a mandatory content URI of the item to
+ * preview. {@link #getClipData} contains an optional list of content URIs
+ * if there is more than one item to preview. {@link #EXTRA_INDEX} is an
+ * optional index of the URI in the clip data to show first.
* <p>Output: nothing.
- * @hide
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
@@ -3028,27 +3032,15 @@
/**
* Broadcast sent to the primary user when an associated managed profile's availability has
- * changed. This includes when the user toggles the profile's quiet mode, or when the profile
- * owner suspends the profile. Carries an extra {@link #EXTRA_USER} that specifies the
- * UserHandle of the profile. When quiet mode is changed, this broadcast will carry a boolean
- * extra {@link #EXTRA_QUIET_MODE} indicating the new state of quiet mode. This is only sent to
- * registered receivers, not manifest receivers.
+ * changed. This includes when the user toggles the profile's quiet mode. Carries an extra
+ * {@link #EXTRA_USER} that specifies the UserHandle of the profile. When quiet mode is changed,
+ * this broadcast will carry a boolean extra {@link #EXTRA_QUIET_MODE} indicating the new state
+ * of quiet mode. This is only sent to registered receivers, not manifest receivers.
*/
public static final String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED =
"android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED";
/**
- * Broadcast sent to the managed profile when its availability has changed. This includes when
- * the user toggles the profile's quiet mode, or when the profile owner suspends the profile.
- * When quiet mode is changed, this broadcast will carry a boolean extra
- * {@link #EXTRA_QUIET_MODE} indicating the new state of quiet mode. This is only sent to
- * registered receivers, not manifest receivers. See also
- * {@link #ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED}
- */
- public static final String ACTION_AVAILABILITY_CHANGED =
- "android.intent.action.AVAILABILITY_CHANGED";
-
- /**
* Sent when the user taps on the clock widget in the system's "quick settings" area.
*/
public static final String ACTION_QUICK_CLOCK =
@@ -3186,6 +3178,38 @@
public static final String
ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+ /**
+ * Activity Action: Give access to a standard storage directory after obtaining the user's
+ * approval.
+ * <p>
+ * When invoked, the system will ask the user to grant access to the requested directory (and
+ * its descendants).
+ * <p>
+ * To gain access to descendant (child, grandchild, etc) documents, use
+ * {@link DocumentsContract#buildDocumentUriUsingTree(Uri, String)} and
+ * {@link DocumentsContract#buildChildDocumentsUriUsingTree(Uri, String)} with the returned URI.
+ * <p>
+ * Input: full path to a standard directory, in the form of
+ * {@code STORAGE_ROOT + STANDARD_DIRECTORY}, where {@code STORAGE_ROOT} is the physical path of
+ * a storage container, and {@code STANDARD_DIRECTORY} is one of
+ * {@link Environment#DIRECTORY_MUSIC}, {@link Environment#DIRECTORY_PODCASTS},
+ * {@link Environment#DIRECTORY_RINGTONES}, {@link Environment#DIRECTORY_ALARMS},
+ * {@link Environment#DIRECTORY_NOTIFICATIONS}, {@link Environment#DIRECTORY_PICTURES},
+ * {@link Environment#DIRECTORY_MOVIES}, {@link Environment#DIRECTORY_DOWNLOADS},
+ * {@link Environment#DIRECTORY_DCIM}, or {@link Environment#DIRECTORY_DOCUMENTS}
+ * <p>
+ * For example, to open the "Pictures" folder in the default external storage, the intent's data
+ * would be: {@code Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
+ * Environment.DIRECTORY_PICTURES))}.
+ * <p>
+ * Output: The URI representing the requested directory tree.
+ *
+ * @see DocumentsContract
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String
+ ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY";
+
/** {@hide} */
public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
@@ -4126,7 +4150,10 @@
public static final String EXTRA_SIM_ACTIVATION_RESPONSE =
"android.intent.extra.SIM_ACTIVATION_RESPONSE";
- /** {@hide} */
+ /**
+ * Optional index with semantics depending on the intent action.
+ * @see #ACTION_QUICK_VIEW
+ */
public static final String EXTRA_INDEX = "android.intent.extra.INDEX";
/**
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 89f6870..476dc46 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1545,6 +1545,14 @@
/**
* Feature for {@link #getSystemAvailableFeatures} and
+ * {@link #hasSystemFeature}: The device supports host-
+ * based NFC-F card emulation.
+ */
+ @SdkConstant(SdkConstantType.FEATURE)
+ public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
+
+ /**
+ * Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports the OpenGL ES
* <a href="http://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
* Android Extension Pack</a>.
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index bb0a04f..2695dfd 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -743,6 +743,26 @@
new Key<int[]>("android.control.availableModes", int[].class);
/**
+ * <p>Range of boosts for {@link CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST android.control.postRawSensitivityBoost} supported
+ * by this camera device.</p>
+ * <p>Devices support post RAW sensitivity boost will advertise
+ * {@link CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST android.control.postRawSensitivityBoost} key for controling
+ * post RAW sensitivity boost.</p>
+ * <p>This key will be <code>null</code> for devices that do not support any RAW format
+ * outputs. For devices that do support RAW format outputs, this key will always
+ * present, and if a device does not support post RAW sensitivity boost, it will
+ * list <code>(100, 100)</code> in this key.</p>
+ * <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
+ * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ *
+ * @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
+ * @see CaptureRequest#SENSOR_SENSITIVITY
+ */
+ @PublicKey
+ public static final Key<android.util.Range<Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE =
+ new Key<android.util.Range<Integer>>("android.control.postRawSensitivityBoostRange", new TypeReference<android.util.Range<Integer>>() {{ }});
+
+ /**
* <p>List of edge enhancement modes for {@link CaptureRequest#EDGE_MODE android.edge.mode} that are supported by this camera
* device.</p>
* <p>Full-capability camera devices must always support OFF; camera devices that support
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index 852a4d9..63bcb31 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -421,8 +421,6 @@
*
* @see #createCaptureSession
* @see OutputConfiguration
- *
- * @hide
*/
public abstract void createCaptureSessionByOutputConfiguration(
List<OutputConfiguration> outputConfigurations,
@@ -587,6 +585,22 @@
throws CameraAccessException;
/**
+ * Create a new reprocessable camera capture session by providing the desired reprocessing
+ * input configuration and output {@link OutputConfiguration}
+ * to the camera device.
+ *
+ * @see #createReprocessableCaptureSession
+ * @see OutputConfiguration
+ *
+ */
+ public abstract void createReprocessableCaptureSessionWithConfigurations(
+ @NonNull InputConfiguration inputConfig,
+ @NonNull List<OutputConfiguration> outputs,
+ @NonNull CameraCaptureSession.StateCallback callback,
+ @Nullable Handler handler)
+ throws CameraAccessException;
+
+ /**
* <p>Create a new constrained high speed capture session.</p>
*
* <p>The application can use normal capture session (created via {@link #createCaptureSession})
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 67835a0..c3cae65 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -1590,6 +1590,41 @@
new Key<Integer>("android.control.videoStabilizationMode", int.class);
/**
+ * <p>The amount of additional sesnsitivity boost applied to output images
+ * after RAW sensor data is captured.</p>
+ * <p>Some camera devices support additional digital sensitivity boosting in the
+ * camera processing pipeline after sensor RAW image is captured.
+ * Such a boost will be applied to YUV/JPEG format output images but will not
+ * have effect on RAW output formats like RAW_SENSOR, RAW10, RAW12 or RAW_OPAQUE.</p>
+ * <p>This key is optional. Applications can assume there is no boost applied
+ * after RAW is captured if this key is not available.
+ * When this key is available, the sensitivity boost value must be within
+ * {@link CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST android.control.postRawSensitivityBoost}.</p>
+ * <p>If the camera device cannot apply the exact boost requested, it will reduce the
+ * boost to the nearest supported value.
+ * The final boost value used will be available in the output capture result.</p>
+ * <p>For devices that support post RAW sensitivity boost, the YUV/JPEG output images
+ * of such device will have the total sensitivity of
+ * <code>{@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} * android.control.ispSensitivity / 100</code>
+ * The sensitivity of RAW format images will always be <code>{@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</code></p>
+ * <p>This control is only effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} is set to
+ * OFF; otherwise the auto-exposure algorithm will override this value.</p>
+ * <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
+ * <p><b>Range of valid values:</b><br>
+ * {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
+ * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ *
+ * @see CaptureRequest#CONTROL_AE_MODE
+ * @see CaptureRequest#CONTROL_MODE
+ * @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
+ * @see CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
+ * @see CaptureRequest#SENSOR_SENSITIVITY
+ */
+ @PublicKey
+ public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
+ new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
+
+ /**
* <p>Operation mode for edge
* enhancement.</p>
* <p>Edge enhancement improves sharpness and details in the captured image. OFF means
@@ -2244,6 +2279,8 @@
* requested, it will reduce the gain to the nearest supported
* value. The final sensitivity used will be available in the
* output capture result.</p>
+ * <p>This control is only effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} is set to
+ * OFF; otherwise the auto-exposure algorithm will override this value.</p>
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
@@ -2252,6 +2289,8 @@
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
*
+ * @see CaptureRequest#CONTROL_AE_MODE
+ * @see CaptureRequest#CONTROL_MODE
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @see CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 3c2d503..7b9d1a3 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -2097,6 +2097,41 @@
new Key<Integer>("android.control.videoStabilizationMode", int.class);
/**
+ * <p>The amount of additional sesnsitivity boost applied to output images
+ * after RAW sensor data is captured.</p>
+ * <p>Some camera devices support additional digital sensitivity boosting in the
+ * camera processing pipeline after sensor RAW image is captured.
+ * Such a boost will be applied to YUV/JPEG format output images but will not
+ * have effect on RAW output formats like RAW_SENSOR, RAW10, RAW12 or RAW_OPAQUE.</p>
+ * <p>This key is optional. Applications can assume there is no boost applied
+ * after RAW is captured if this key is not available.
+ * When this key is available, the sensitivity boost value must be within
+ * {@link CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST android.control.postRawSensitivityBoost}.</p>
+ * <p>If the camera device cannot apply the exact boost requested, it will reduce the
+ * boost to the nearest supported value.
+ * The final boost value used will be available in the output capture result.</p>
+ * <p>For devices that support post RAW sensitivity boost, the YUV/JPEG output images
+ * of such device will have the total sensitivity of
+ * <code>{@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} * android.control.ispSensitivity / 100</code>
+ * The sensitivity of RAW format images will always be <code>{@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</code></p>
+ * <p>This control is only effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} is set to
+ * OFF; otherwise the auto-exposure algorithm will override this value.</p>
+ * <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
+ * <p><b>Range of valid values:</b><br>
+ * {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
+ * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ *
+ * @see CaptureRequest#CONTROL_AE_MODE
+ * @see CaptureRequest#CONTROL_MODE
+ * @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
+ * @see CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
+ * @see CaptureRequest#SENSOR_SENSITIVITY
+ */
+ @PublicKey
+ public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
+ new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
+
+ /**
* <p>Operation mode for edge
* enhancement.</p>
* <p>Edge enhancement improves sharpness and details in the captured image. OFF means
@@ -3086,6 +3121,8 @@
* requested, it will reduce the gain to the nearest supported
* value. The final sensitivity used will be available in the
* output capture result.</p>
+ * <p>This control is only effective if {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} is set to
+ * OFF; otherwise the auto-exposure algorithm will override this value.</p>
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
@@ -3094,6 +3131,8 @@
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
*
+ * @see CaptureRequest#CONTROL_AE_MODE
+ * @see CaptureRequest#CONTROL_MODE
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
* @see CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index c3a4954..3aba0d1 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -485,7 +485,13 @@
Log.d(TAG, "createCaptureSessionByOutputConfiguration");
}
- createCaptureSessionInternal(null, outputConfigurations, callback, handler,
+ // OutputConfiguration objects aren't immutable, make a copy before using.
+ List<OutputConfiguration> currentOutputs = new ArrayList<OutputConfiguration>();
+ for (OutputConfiguration output : outputConfigurations) {
+ currentOutputs.add(new OutputConfiguration(output));
+ }
+
+ createCaptureSessionInternal(null, currentOutputs, callback, handler,
/*isConstrainedHighSpeed*/false);
}
@@ -510,6 +516,34 @@
}
@Override
+ public void createReprocessableCaptureSessionWithConfigurations(InputConfiguration inputConfig,
+ List<OutputConfiguration> outputs,
+ android.hardware.camera2.CameraCaptureSession.StateCallback callback, Handler handler)
+ throws CameraAccessException {
+ if (DEBUG) {
+ Log.d(TAG, "createReprocessableCaptureSessionWithConfigurations");
+ }
+
+ if (inputConfig == null) {
+ throw new IllegalArgumentException("inputConfig cannot be null when creating a " +
+ "reprocessable capture session");
+ }
+
+ if (outputs == null) {
+ throw new IllegalArgumentException("Output configurations cannot be null when " +
+ "creating a reprocessable capture session");
+ }
+
+ // OutputConfiguration objects aren't immutable, make a copy before using.
+ List<OutputConfiguration> currentOutputs = new ArrayList<OutputConfiguration>();
+ for (OutputConfiguration output : outputs) {
+ currentOutputs.add(new OutputConfiguration(output));
+ }
+ createCaptureSessionInternal(inputConfig, currentOutputs,
+ callback, handler, /*isConstrainedHighSpeed*/false);
+ }
+
+ @Override
public void createConstrainedHighSpeedCaptureSession(List<Surface> outputs,
android.hardware.camera2.CameraCaptureSession.StateCallback callback, Handler handler)
throws CameraAccessException {
diff --git a/core/java/android/hardware/camera2/params/OutputConfiguration.java b/core/java/android/hardware/camera2/params/OutputConfiguration.java
index a04cdce..4407e55 100644
--- a/core/java/android/hardware/camera2/params/OutputConfiguration.java
+++ b/core/java/android/hardware/camera2/params/OutputConfiguration.java
@@ -17,6 +17,7 @@
package android.hardware.camera2.params;
+import android.annotation.SystemApi;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.utils.HashCodeHelpers;
import android.hardware.camera2.utils.SurfaceUtils;
@@ -32,39 +33,58 @@
* A class for describing camera output, which contains a {@link Surface} and its specific
* configuration for creating capture session.
*
- * @see CameraDevice#createCaptureSession
+ * @see CameraDevice#createCaptureSessionByOutputConfiguration
*
- * @hide
*/
public final class OutputConfiguration implements Parcelable {
/**
* Rotation constant: 0 degree rotation (no rotation)
+ *
+ * @hide
*/
+ @SystemApi
public static final int ROTATION_0 = 0;
/**
* Rotation constant: 90 degree counterclockwise rotation.
+ *
+ * @hide
*/
+ @SystemApi
public static final int ROTATION_90 = 1;
/**
* Rotation constant: 180 degree counterclockwise rotation.
+ *
+ * @hide
*/
+ @SystemApi
public static final int ROTATION_180 = 2;
/**
* Rotation constant: 270 degree counterclockwise rotation.
+ *
+ * @hide
*/
+ @SystemApi
public static final int ROTATION_270 = 3;
/**
- * Create a new immutable SurfaceConfiguration instance.
+ * Invalid surface set ID.
+ *
+ *<p>An {@link OutputConfiguration} with this value indicates that the included surface
+ *doesn't belong to any surface set.</p>
+ */
+ public static final int SURFACE_SET_ID_INVALID = -1;
+
+ /**
+ * Create a new {@link OutputConfiguration} instance with a {@link Surface}.
*
* @param surface
* A Surface for camera to output to.
*
- * <p>This constructor creates a default configuration</p>
+ * <p>This constructor creates a default configuration.</p>
*
*/
public OutputConfiguration(Surface surface) {
@@ -72,7 +92,7 @@
}
/**
- * Create a new immutable SurfaceConfiguration instance.
+ * Create a new {@link OutputConfiguration} instance.
*
* <p>This constructor takes an argument for desired camera rotation</p>
*
@@ -87,11 +107,13 @@
* application should set rotation to {@code ROTATION_90} and make sure the
* corresponding Surface size is 720x1280. Note that {@link CameraDevice} might
* throw {@code IllegalArgumentException} if device cannot perform such rotation.
- *
+ * @hide
*/
+ @SystemApi
public OutputConfiguration(Surface surface, int rotation) {
checkNotNull(surface, "Surface must not be null");
checkArgumentInRange(rotation, ROTATION_0, ROTATION_270, "Rotation constant");
+ mSurfaceSetId = SURFACE_SET_ID_INVALID;
mSurface = surface;
mRotation = rotation;
mConfiguredSize = SurfaceUtils.getSurfaceSize(surface);
@@ -100,13 +122,37 @@
}
/**
+ * Create a new {@link OutputConfiguration} instance with another {@link OutputConfiguration}
+ * instance.
+ *
+ * @param other Another {@link OutputConfiguration} instance to be copied.
+ *
+ * @hide
+ */
+ @SystemApi
+ public OutputConfiguration(OutputConfiguration other) {
+ if (other == null) {
+ throw new IllegalArgumentException("OutputConfiguration shouldn't be null");
+ }
+
+ this.mSurface = other.mSurface;
+ this.mRotation = other.mRotation;
+ this.mSurfaceSetId = other.mSurfaceSetId;
+ this.mConfiguredDataspace = other.mConfiguredDataspace;
+ this.mConfiguredFormat = other.mConfiguredFormat;
+ this.mConfiguredSize = other.mConfiguredSize;
+ }
+
+ /**
* Create an OutputConfiguration from Parcel.
*/
private OutputConfiguration(Parcel source) {
int rotation = source.readInt();
+ int surfaceSetId = source.readInt();
Surface surface = Surface.CREATOR.createFromParcel(source);
checkNotNull(surface, "Surface must not be null");
checkArgumentInRange(rotation, ROTATION_0, ROTATION_270, "Rotation constant");
+ mSurfaceSetId = surfaceSetId;
mSurface = surface;
mRotation = rotation;
mConfiguredSize = SurfaceUtils.getSurfaceSize(mSurface);
@@ -128,11 +174,46 @@
*
* @return the rotation associated with this {@link OutputConfiguration}.
* Value will be one of ROTATION_[0, 90, 180, 270]
+ *
+ * @hide
*/
+ @SystemApi
public int getRotation() {
return mRotation;
}
+ /**
+ * Set the surface set ID to this {@link OutputConfiguration}.
+ *
+ * <p>
+ * A surface set ID is used to identify which surface set this output surface belongs to. A
+ * surface set is a group of output surfaces that are not intended to receive camera output
+ * buffer streams simultaneously. The {@link CameraDevice} may be able to share the buffers used
+ * by all the surfaces from the same surface set, therefore may save the overall memory
+ * footprint. The application should only set the same set ID for the streams that are not
+ * simultaneously streaming. A negative ID indicates that this surface doesn't belong to any
+ * surface set. The default value will be {@value #SURFACE_SET_ID_INVALID}.
+ * </p>
+ *
+ * @param setId
+ */
+ public void setSurfaceSetId(int setId) {
+ if (setId < 0) {
+ setId = SURFACE_SET_ID_INVALID;
+ }
+ mSurfaceSetId = setId;
+ }
+
+ /**
+ * Get the surface set Id associated with this {@link OutputConfiguration}.
+ *
+ * @return the surface set Id associated with this {@link OutputConfiguration}.
+ * Value will be one of ROTATION_[0, 90, 180, 270]
+ */
+ public int getSurfaceSetId() {
+ return mSurfaceSetId;
+ }
+
public static final Parcelable.Creator<OutputConfiguration> CREATOR =
new Parcelable.Creator<OutputConfiguration>() {
@Override
@@ -163,6 +244,7 @@
throw new IllegalArgumentException("dest must not be null");
}
dest.writeInt(mRotation);
+ dest.writeInt(mSurfaceSetId);
mSurface.writeToParcel(dest, flags);
}
@@ -187,7 +269,8 @@
mRotation == other.mRotation &&
mConfiguredSize.equals(other.mConfiguredSize) &&
mConfiguredFormat == other.mConfiguredFormat &&
- mConfiguredDataspace == other.mConfiguredDataspace;
+ mConfiguredDataspace == other.mConfiguredDataspace &&
+ mSurfaceSetId == other.mSurfaceSetId;
}
return false;
}
@@ -203,6 +286,7 @@
private static final String TAG = "OutputConfiguration";
private final Surface mSurface;
private final int mRotation;
+ private int mSurfaceSetId;
// The size, format, and dataspace of the surface when OutputConfiguration is created.
private final Size mConfiguredSize;
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index 5d969b1..c4ee347 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -25,6 +25,8 @@
import android.view.InputDevice;
import android.view.InputEvent;
import android.view.PointerIcon;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
/** @hide */
interface IInputManager {
@@ -59,6 +61,11 @@
String keyboardLayoutDescriptor);
void removeKeyboardLayoutForInputDevice(in InputDeviceIdentifier identifier,
String keyboardLayoutDescriptor);
+ KeyboardLayout getKeyboardLayoutForInputDevice(in InputDeviceIdentifier identifier,
+ in InputMethodInfo imeInfo, in InputMethodSubtype imeSubtype);
+ void setKeyboardLayoutForInputDevice(in InputDeviceIdentifier identifier,
+ in InputMethodInfo imeInfo, in InputMethodSubtype imeSubtype,
+ String keyboardLayoutDescriptor);
// Registers an input devices changed listener.
void registerInputDevicesChangedListener(IInputDevicesChangedListener listener);
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 9972f49..cbe3412 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -16,7 +16,7 @@
package android.hardware.input;
-import android.view.PointerIcon;
+import com.android.internal.inputmethod.InputMethodSubtypeHandle;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.ArrayUtils;
@@ -40,6 +40,9 @@
import android.util.SparseArray;
import android.view.InputDevice;
import android.view.InputEvent;
+import android.view.PointerIcon;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -643,6 +646,51 @@
}
}
+
+ /**
+ * Gets the keyboard layout for the specified input device and IME subtype.
+ *
+ * @param identifier The identifier for the input device.
+ * @param inputMethodInfo The input method.
+ * @param inputMethodSubtype The input method subtype.
+ *
+ * @return The associated {@link KeyboardLayout}, or null if one has not been set.
+ *
+ * @hide
+ */
+ public KeyboardLayout getKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,
+ InputMethodInfo inputMethodInfo, InputMethodSubtype inputMethodSubtype) {
+ try {
+ return mIm.getKeyboardLayoutForInputDevice(
+ identifier, inputMethodInfo, inputMethodSubtype);
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not set keyboard layout.", ex);
+ return null;
+ }
+ }
+
+ /**
+ * Sets the keyboard layout for the specified input device and IME subtype pair.
+ *
+ * @param identifier The identifier for the input device.
+ * @param inputMethodInfo The input method with which to associate the keyboard layout.
+ * @param inputMethodSubtype The input method subtype which which to associate the keyboard
+ * layout.
+ * @param keyboardLayoutDescriptor The descriptor of the keyboard layout to set
+ *
+ * @hide
+ */
+ public void setKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,
+ InputMethodInfo inputMethodInfo, InputMethodSubtype inputMethodSubtype,
+ String keyboardLayoutDescriptor) {
+ try {
+ mIm.setKeyboardLayoutForInputDevice(identifier, inputMethodInfo,
+ inputMethodSubtype, keyboardLayoutDescriptor);
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not set keyboard layout.", ex);
+ }
+ }
+
/**
* Gets the TouchCalibration applied to the specified input device's coordinates.
*
diff --git a/core/java/android/hardware/input/TouchCalibration.java b/core/java/android/hardware/input/TouchCalibration.java
index 025fad0..15503ed 100644
--- a/core/java/android/hardware/input/TouchCalibration.java
+++ b/core/java/android/hardware/input/TouchCalibration.java
@@ -123,4 +123,10 @@
Float.floatToIntBits(mYScale) ^
Float.floatToIntBits(mYOffset);
}
+
+ @Override
+ public String toString() {
+ return String.format("[%f, %f, %f, %f, %f, %f]",
+ mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset);
+ }
}
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index c4f0847..5584cde 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -16,7 +16,7 @@
package android.net;
import static com.android.internal.util.Preconditions.checkNotNull;
-
+import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -49,6 +49,8 @@
import libcore.net.event.NetworkEventDispatcher;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
@@ -512,6 +514,7 @@
private final Context mContext;
private INetworkManagementService mNMService;
+ private INetworkPolicyManager mNPManager;
/**
* Tests if a given integer represents a valid network type.
@@ -3025,4 +3028,58 @@
return NetworkUtils.bindProcessToNetworkForHostResolution(
network == null ? NETID_UNSET : network.netId);
}
+
+ /**
+ * Device is not restricting metered network activity while application is running on
+ * background.
+ */
+ public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1;
+
+ /**
+ * Device is restricting metered network activity while application is running on background,
+ * but application is allowed to bypass it.
+ * <p>
+ * In this state, application should take action to mitigate metered network access.
+ * For example, a music streaming application should switch to a low-bandwidth bitrate.
+ */
+ public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2;
+
+ /**
+ * Device is restricting metered network activity while application is running on background.
+ * In this state, application should not try to use the network while running on background,
+ * because it would be denied.
+ */
+ public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3;
+
+ @IntDef(flag = false, value = {
+ RESTRICT_BACKGROUND_STATUS_DISABLED,
+ RESTRICT_BACKGROUND_STATUS_WHITELISTED,
+ RESTRICT_BACKGROUND_STATUS_ENABLED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RestrictBackgroundStatus {
+ }
+
+ private INetworkPolicyManager getNetworkPolicyManager() {
+ synchronized (this) {
+ if (mNPManager != null) {
+ return mNPManager;
+ }
+ mNPManager = INetworkPolicyManager.Stub.asInterface(ServiceManager
+ .getService(Context.NETWORK_POLICY_SERVICE));
+ return mNPManager;
+ }
+ }
+
+ /**
+ * Determines if the calling application is subject to metered network restrictions while
+ * running on background.
+ */
+ public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
+ try {
+ return getNetworkPolicyManager().getRestrictBackgroundByCaller();
+ } catch (RemoteException e) {
+ return RESTRICT_BACKGROUND_STATUS_DISABLED;
+ }
+ }
}
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index 06aa616..a57fac3 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -56,6 +56,12 @@
void addRestrictBackgroundWhitelistedUid(int uid);
void removeRestrictBackgroundWhitelistedUid(int uid);
int[] getRestrictBackgroundWhitelistedUids();
+ /** Gets the restrict background status based on the caller's UID:
+ 1 - disabled
+ 2 - whitelisted
+ 3 - enabled
+ */
+ int getRestrictBackgroundByCaller();
void setDeviceIdleMode(boolean enabled);
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index 961a3f4..940565f 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -26,6 +26,7 @@
import android.nfc.INfcAdapterExtras;
import android.nfc.INfcTag;
import android.nfc.INfcCardEmulation;
+import android.nfc.INfcFCardEmulation;
import android.nfc.INfcUnlockHandler;
import android.os.Bundle;
@@ -36,6 +37,7 @@
{
INfcTag getNfcTagInterface();
INfcCardEmulation getNfcCardEmulationInterface();
+ INfcFCardEmulation getNfcFCardEmulationInterface();
INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg);
int getState();
diff --git a/core/java/android/nfc/INfcFCardEmulation.aidl b/core/java/android/nfc/INfcFCardEmulation.aidl
new file mode 100644
index 0000000..124bfac
--- /dev/null
+++ b/core/java/android/nfc/INfcFCardEmulation.aidl
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc;
+
+import android.content.ComponentName;
+import android.nfc.cardemulation.NfcFServiceInfo;
+
+/**
+ * @hide
+ */
+interface INfcFCardEmulation
+{
+ String getSystemCodeForService(int userHandle, in ComponentName service);
+ boolean registerSystemCodeForService(int userHandle, in ComponentName service, String systemCode);
+ boolean removeSystemCodeForService(int userHandle, in ComponentName service);
+ String getNfcid2ForService(int userHandle, in ComponentName service);
+ boolean setNfcid2ForService(int userHandle, in ComponentName service, String nfcid2);
+ boolean enableNfcFForegroundService(in ComponentName service);
+ boolean disableNfcFForegroundService();
+ List<NfcFServiceInfo> getNfcFServices(int userHandle);
+ int getMaxNumOfRegisterableSystemCodes();
+}
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index ff6eb40..acd780d 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -294,6 +294,7 @@
static INfcAdapter sService;
static INfcTag sTagService;
static INfcCardEmulation sCardEmulationService;
+ static INfcFCardEmulation sNfcFCardEmulationService;
/**
* The NfcAdapter object for each application context.
@@ -452,6 +453,13 @@
throw new UnsupportedOperationException();
}
+ try {
+ sNfcFCardEmulationService = sService.getNfcFCardEmulationInterface();
+ } catch (RemoteException e) {
+ Log.e(TAG, "could not retrieve NFC-F card emulation service");
+ throw new UnsupportedOperationException();
+ }
+
sIsInitialized = true;
}
if (context == null) {
@@ -571,6 +579,15 @@
}
/**
+ * Returns the binder interface to the NFC-F card emulation service.
+ * @hide
+ */
+ public INfcFCardEmulation getNfcFCardEmulationService() {
+ isEnabled();
+ return sNfcFCardEmulationService;
+ }
+
+ /**
* NFC service dead - attempt best effort recovery
* @hide
*/
@@ -601,6 +618,12 @@
Log.e(TAG, "could not retrieve NFC card emulation service during service recovery");
}
+ try {
+ sNfcFCardEmulationService = service.getNfcFCardEmulationInterface();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "could not retrieve NFC-F card emulation service during service recovery");
+ }
+
return;
}
diff --git a/core/java/android/nfc/cardemulation/HostNfcFService.java b/core/java/android/nfc/cardemulation/HostNfcFService.java
new file mode 100644
index 0000000..273ddeb
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/HostNfcFService.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc.cardemulation;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.app.Service;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.util.Log;
+
+/**
+ * <p>HostNfcFService is a convenience {@link Service} class that can be
+ * extended to emulate an NFC-F card inside an Android service component.
+ */
+public abstract class HostNfcFService extends Service {
+ /**
+ * The {@link Intent} action that must be declared as handled by the service.
+ */
+ @SdkConstant(SdkConstantType.SERVICE_ACTION)
+ public static final String SERVICE_INTERFACE =
+ "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+
+ /**
+ * The name of the meta-data element that contains
+ * more information about this service.
+ */
+ public static final String SERVICE_META_DATA =
+ "android.nfc.cardemulation.host_nfcf_service";
+
+ /**
+ * Reason for {@link #onDeactivated(int)}.
+ * Indicates deactivation was due to the NFC link
+ * being lost.
+ */
+ public static final int DEACTIVATION_LINK_LOSS = 0;
+
+ static final String TAG = "NfcFService";
+
+ /**
+ * MSG_COMMAND_PACKET is sent by NfcService when
+ * a NFC-F command packet has been received.
+ *
+ * @hide
+ */
+ public static final int MSG_COMMAND_PACKET = 0;
+
+ /**
+ * MSG_RESPONSE_PACKET is sent to NfcService to send
+ * a response packet back to the remote device.
+ *
+ * @hide
+ */
+ public static final int MSG_RESPONSE_PACKET = 1;
+
+ /**
+ * MSG_DEACTIVATED is sent by NfcService when
+ * the current session is finished; because
+ * the NFC link was deactivated.
+ *
+ * @hide
+ */
+ public static final int MSG_DEACTIVATED = 2;
+
+ /**
+ * @hide
+ */
+ public static final String KEY_DATA = "data";
+
+ /**
+ * @hide
+ */
+ public static final String KEY_MESSENGER = "messenger";
+
+ /**
+ * Messenger interface to NfcService for sending responses.
+ * Only accessed on main thread by the message handler.
+ *
+ * @hide
+ */
+ Messenger mNfcService = null;
+
+ final Messenger mMessenger = new Messenger(new MsgHandler());
+
+ final class MsgHandler extends Handler {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_COMMAND_PACKET:
+ Bundle dataBundle = msg.getData();
+ if (dataBundle == null) {
+ return;
+ }
+ if (mNfcService == null) mNfcService = msg.replyTo;
+
+ byte[] packet = dataBundle.getByteArray(KEY_DATA);
+ if (packet != null) {
+ byte[] responsePacket = processNfcFPacket(packet, null);
+ if (responsePacket != null) {
+ if (mNfcService == null) {
+ Log.e(TAG, "Response not sent; service was deactivated.");
+ return;
+ }
+ Message responseMsg = Message.obtain(null, MSG_RESPONSE_PACKET);
+ Bundle responseBundle = new Bundle();
+ responseBundle.putByteArray(KEY_DATA, responsePacket);
+ responseMsg.setData(responseBundle);
+ responseMsg.replyTo = mMessenger;
+ try {
+ mNfcService.send(responseMsg);
+ } catch (RemoteException e) {
+ Log.e("TAG", "Response not sent; RemoteException calling into " +
+ "NfcService.");
+ }
+ }
+ } else {
+ Log.e(TAG, "Received MSG_COMMAND_PACKET without data.");
+ }
+ break;
+ case MSG_RESPONSE_PACKET:
+ if (mNfcService == null) {
+ Log.e(TAG, "Response not sent; service was deactivated.");
+ return;
+ }
+ try {
+ msg.replyTo = mMessenger;
+ mNfcService.send(msg);
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException calling into NfcService.");
+ }
+ break;
+ case MSG_DEACTIVATED:
+ // Make sure we won't call into NfcService again
+ mNfcService = null;
+ onDeactivated(msg.arg1);
+ break;
+ default:
+ super.handleMessage(msg);
+ }
+ }
+ }
+
+ @Override
+ public final IBinder onBind(Intent intent) {
+ return mMessenger.getBinder();
+ }
+
+ /**
+ * Sends a response packet back to the remote device.
+ *
+ * <p>Note: this method may be called from any thread and will not block.
+ * @param responsePacket A byte-array containing the response packet.
+ */
+ public final void sendResponsePacket(byte[] responsePacket) {
+ Message responseMsg = Message.obtain(null, MSG_RESPONSE_PACKET);
+ Bundle dataBundle = new Bundle();
+ dataBundle.putByteArray(KEY_DATA, responsePacket);
+ responseMsg.setData(dataBundle);
+ try {
+ mMessenger.send(responseMsg);
+ } catch (RemoteException e) {
+ Log.e("TAG", "Local messenger has died.");
+ }
+ }
+
+ /**
+ * <p>This method will be called when a NFC-F packet has been received
+ * from a remote device. A response packet can be provided directly
+ * by returning a byte-array in this method. Note that in general
+ * response packets must be sent as quickly as possible, given the fact
+ * that the user is likely holding his device over an NFC reader
+ * when this method is called.
+ *
+ * <p class="note">This method is running on the main thread of your application.
+ * If you cannot return a response packet immediately, return null
+ * and use the {@link #sendResponsePacket(byte[])} method later.
+ *
+ * @param commandPacket The NFC-F packet that was received from the remote device
+ * @param extras A bundle containing extra data. May be null.
+ * @return a byte-array containing the response packet, or null if no
+ * response packet can be sent at this point.
+ */
+ public abstract byte[] processNfcFPacket(byte[] commandPacket, Bundle extras);
+
+ /**
+ * This method will be called in following possible scenarios:
+ * <li>The NFC link has been lost
+ * @param reason {@link #DEACTIVATION_LINK_LOSS}
+ */
+ public abstract void onDeactivated(int reason);
+}
diff --git a/core/java/android/nfc/cardemulation/NfcFCardEmulation.java b/core/java/android/nfc/cardemulation/NfcFCardEmulation.java
new file mode 100644
index 0000000..d61ac02
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/NfcFCardEmulation.java
@@ -0,0 +1,470 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc.cardemulation;
+
+import android.app.Activity;
+import android.app.ActivityThread;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.nfc.INfcFCardEmulation;
+import android.nfc.NfcAdapter;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * This class can be used to query the state of
+ * NFC-F card emulation services.
+ *
+ * For a general introduction into NFC card emulation,
+ * please read the <a href="{@docRoot}guide/topics/connectivity/nfc/hce.html">
+ * NFC card emulation developer guide</a>.</p>
+ *
+ * <p class="note">Use of this class requires the
+ * {@link PackageManager#FEATURE_NFC_HOST_CARD_EMULATION_NFCF}
+ * to be present on the device.
+ */
+public final class NfcFCardEmulation {
+ static final String TAG = "NfcFCardEmulation";
+
+ static boolean sIsInitialized = false;
+ static HashMap<Context, NfcFCardEmulation> sCardEmus = new HashMap<Context, NfcFCardEmulation>();
+ static INfcFCardEmulation sService;
+
+ final Context mContext;
+
+ private NfcFCardEmulation(Context context, INfcFCardEmulation service) {
+ mContext = context.getApplicationContext();
+ sService = service;
+ }
+
+ /**
+ * Helper to get an instance of this class.
+ *
+ * @param adapter A reference to an NfcAdapter object.
+ * @return
+ */
+ public static synchronized NfcFCardEmulation getInstance(NfcAdapter adapter) {
+ if (adapter == null) throw new NullPointerException("NfcAdapter is null");
+ Context context = adapter.getContext();
+ if (context == null) {
+ Log.e(TAG, "NfcAdapter context is null.");
+ throw new UnsupportedOperationException();
+ }
+ if (!sIsInitialized) {
+ IPackageManager pm = ActivityThread.getPackageManager();
+ if (pm == null) {
+ Log.e(TAG, "Cannot get PackageManager");
+ throw new UnsupportedOperationException();
+ }
+ try {
+ if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF)) {
+ Log.e(TAG, "This device does not support NFC-F card emulation");
+ throw new UnsupportedOperationException();
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "PackageManager query failed.");
+ throw new UnsupportedOperationException();
+ }
+ sIsInitialized = true;
+ }
+ NfcFCardEmulation manager = sCardEmus.get(context);
+ if (manager == null) {
+ // Get card emu service
+ INfcFCardEmulation service = adapter.getNfcFCardEmulationService();
+ if (service == null) {
+ Log.e(TAG, "This device does not implement the INfcFCardEmulation interface.");
+ throw new UnsupportedOperationException();
+ }
+ manager = new NfcFCardEmulation(context, service);
+ sCardEmus.put(context, manager);
+ }
+ return manager;
+ }
+
+ /**
+ * Retrieves the current System Code for the specified service.
+ *
+ * <p>Before calling {@link #registerSystemCodeForService(ComponentName, String)},
+ * the System Code contained in the Manifest file is returned. After calling
+ * {@link #registerSystemCodeForService(ComponentName, String)}, the System Code
+ * registered there is returned. After calling
+ * {@link #removeSystemCodeForService(ComponentName)}, "null" is returned.
+ *
+ * @param service The component name of the service
+ * @return the current System Code
+ */
+ public String getSystemCodeForService(ComponentName service) {
+ if (service == null) {
+ throw new NullPointerException("service is null");
+ }
+ try {
+ return sService.getSystemCodeForService(UserHandle.myUserId(), service);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return null;
+ }
+ try {
+ return sService.getSystemCodeForService(UserHandle.myUserId(), service);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Registers a System Code for the specified service.
+ *
+ * <p>The System Code must be in range from "4000" to "4FFF" (excluding "4*FF").
+ *
+ * <p>If a System Code was previously registered for this service
+ * (either statically through the manifest, or dynamically by using this API),
+ * it will be replaced with this one.
+ *
+ * <p>Even if the same System Code is already registered for another service,
+ * this method succeeds in registering the System Code.
+ *
+ * <p>Note that you can only register a System Code for a service that
+ * is running under the same UID as the caller of this API. Typically
+ * this means you need to call this from the same
+ * package as the service itself, though UIDs can also
+ * be shared between packages using shared UIDs.
+ *
+ * @param service The component name of the service
+ * @param systemCode The System Code to be registered
+ * @return whether the registration was successful.
+ */
+ public boolean registerSystemCodeForService(ComponentName service, String systemCode) {
+ if (service == null || systemCode == null) {
+ throw new NullPointerException("service or systemCode is null");
+ }
+ try {
+ return sService.registerSystemCodeForService(UserHandle.myUserId(),
+ service, systemCode);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.registerSystemCodeForService(UserHandle.myUserId(),
+ service, systemCode);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Removes a registered System Code for the specified service.
+ *
+ * @param service The component name of the service
+ * @return whether the System Code was successfully removed.
+ */
+ public boolean removeSystemCodeForService(ComponentName service) {
+ if (service == null) {
+ throw new NullPointerException("service is null");
+ }
+ try {
+ return sService.removeSystemCodeForService(UserHandle.myUserId(), service);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.removeSystemCodeForService(UserHandle.myUserId(), service);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Retrieves the current NFCID2 for the specified service.
+ *
+ * <p>Before calling {@link #setNfcid2ForService(ComponentName, String)},
+ * the NFCID2 contained in the Manifest file is returned. If "random" is specified
+ * in the Manifest file, a random number assigned by the system at installation time
+ * is returned. After setting an NFCID2
+ * with {@link #setNfcid2ForService(ComponentName, String)}, this NFCID2 is returned.
+ *
+ * @param service The component name of the service
+ * @return the current NFCID2
+ */
+ public String getNfcid2ForService(ComponentName service) {
+ if (service == null) {
+ throw new NullPointerException("service is null");
+ }
+ try {
+ return sService.getNfcid2ForService(UserHandle.myUserId(), service);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return null;
+ }
+ try {
+ return sService.getNfcid2ForService(UserHandle.myUserId(), service);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Set a NFCID2 for the specified service.
+ *
+ * <p>The NFCID2 must be in range from "02FE000000000000" to "02FEFFFFFFFFFFFF".
+ *
+ * <p>If a NFCID2 was previously set for this service
+ * (either statically through the manifest, or dynamically by using this API),
+ * it will be replaced.
+ *
+ * <p>Note that you can only set the NFCID2 for a service that
+ * is running under the same UID as the caller of this API. Typically
+ * this means you need to call this from the same
+ * package as the service itself, though UIDs can also
+ * be shared between packages using shared UIDs.
+ *
+ * @param service The component name of the service
+ * @param nfcid2 The NFCID2 to be registered
+ * @return whether the setting was successful.
+ */
+ public boolean setNfcid2ForService(ComponentName service, String nfcid2) {
+ if (service == null || nfcid2 == null) {
+ throw new NullPointerException("service or nfcid2 is null");
+ }
+ try {
+ return sService.setNfcid2ForService(UserHandle.myUserId(),
+ service, nfcid2);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.setNfcid2ForService(UserHandle.myUserId(),
+ service, nfcid2);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Allows a foreground application to specify which card emulation service
+ * should be enabled while a specific Activity is in the foreground.
+ *
+ * <p>The specified HCE-F service is only enabled when the corresponding application is
+ * in the foreground and this method has been called. When the application is moved to
+ * the background, {@link #disableNfcFForegroundService(Activity)} is called, or
+ * NFCID2 or System Code is replaced, the HCE-F service is disabled.
+ *
+ * <p>The specified Activity must currently be in resumed state. A good
+ * paradigm is to call this method in your {@link Activity#onResume}, and to call
+ * {@link #disableNfcFForegroundService(Activity)} in your {@link Activity#onPause}.
+ *
+ * <p>Note that this preference is not persisted by the OS, and hence must be
+ * called every time the Activity is resumed.
+ *
+ * @param activity The activity which prefers this service to be invoked
+ * @param service The service to be preferred while this activity is in the foreground
+ * @return whether the registration was successful
+ */
+ public boolean enableNfcFForegroundService(Activity activity, ComponentName service) {
+ if (activity == null || service == null) {
+ throw new NullPointerException("activity or service is null");
+ }
+ // Verify the activity is in the foreground before calling into NfcService
+ if (!activity.isResumed()) {
+ throw new IllegalArgumentException("Activity must be resumed.");
+ }
+ try {
+ return sService.enableNfcFForegroundService(service);
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.enableNfcFForegroundService(service);
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Disables the service for the specified Activity.
+ *
+ * <p>Note that the specified Activity must still be in resumed
+ * state at the time of this call. A good place to call this method
+ * is in your {@link Activity#onPause} implementation.
+ *
+ * @param activity The activity which the service was registered for
+ * @return true when successful
+ */
+ public boolean disableNfcFForegroundService(Activity activity) {
+ if (activity == null) {
+ throw new NullPointerException("activity is null");
+ }
+ if (!activity.isResumed()) {
+ throw new IllegalArgumentException("Activity must be resumed.");
+ }
+ try {
+ return sService.disableNfcFForegroundService();
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.disableNfcFForegroundService();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public List<NfcFServiceInfo> getNfcFServices() {
+ try {
+ return sService.getNfcFServices(UserHandle.myUserId());
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return null;
+ }
+ try {
+ return sService.getNfcFServices(UserHandle.myUserId());
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return null;
+ }
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public int getMaxNumOfRegisterableSystemCodes() {
+ try {
+ return sService.getMaxNumOfRegisterableSystemCodes();
+ } catch (RemoteException e) {
+ // Try one more time
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return -1;
+ }
+ try {
+ return sService.getMaxNumOfRegisterableSystemCodes();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return -1;
+ }
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public static boolean isValidSystemCode(String systemCode) {
+ if (systemCode == null) {
+ return false;
+ }
+ if (systemCode.length() != 4) {
+ Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
+ return false;
+ }
+ // check if the value is between "4000" and "4FFF" (excluding "4*FF")
+ if (!systemCode.startsWith("4") || systemCode.toUpperCase().endsWith("FF")) {
+ Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
+ return false;
+ }
+ try {
+ Integer.valueOf(systemCode, 16);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "System Code " + systemCode + " is not a valid System Code.");
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @hide
+ */
+ public static boolean isValidNfcid2(String nfcid2) {
+ if (nfcid2 == null) {
+ return false;
+ }
+ if (nfcid2.length() != 16) {
+ Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
+ return false;
+ }
+ // check if the the value starts with "02FE"
+ if (!nfcid2.toUpperCase().startsWith("02FE")) {
+ Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
+ return false;
+ }
+ try {
+ Long.valueOf(nfcid2, 16);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "NFCID2 " + nfcid2 + " is not a valid NFCID2.");
+ return false;
+ }
+ return true;
+ }
+
+ void recoverService() {
+ NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext);
+ sService = adapter.getNfcFCardEmulationService();
+ }
+
+}
+
diff --git a/core/java/android/nfc/cardemulation/NfcFServiceInfo.aidl b/core/java/android/nfc/cardemulation/NfcFServiceInfo.aidl
new file mode 100644
index 0000000..56b98eb
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/NfcFServiceInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc.cardemulation;
+
+parcelable NfcFServiceInfo;
diff --git a/core/java/android/nfc/cardemulation/NfcFServiceInfo.java b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
new file mode 100644
index 0000000..b93eec1
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.nfc.cardemulation;
+
+import android.content.ComponentName;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.FileDescriptor;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @hide
+ */
+public final class NfcFServiceInfo implements Parcelable {
+ static final String TAG = "NfcFServiceInfo";
+
+ /**
+ * The service that implements this
+ */
+ final ResolveInfo mService;
+
+ /**
+ * Description of the service
+ */
+ final String mDescription;
+
+ /**
+ * System Code of the service
+ */
+ final String mSystemCode;
+
+ /**
+ * System Code of the service registered by API
+ */
+ String mDynamicSystemCode;
+
+ /**
+ * NFCID2 of the service
+ */
+ final String mNfcid2;
+
+ /**
+ * NFCID2 of the service registered by API
+ */
+ String mDynamicNfcid2;
+
+ /**
+ * The uid of the package the service belongs to
+ */
+ final int mUid;
+
+ /**
+ * @hide
+ */
+ public NfcFServiceInfo(ResolveInfo info, String description,
+ String systemCode, String dynamicSystemCode, String nfcid2, String dynamicNfcid2,
+ int uid) {
+ this.mService = info;
+ this.mDescription = description;
+ this.mSystemCode = systemCode;
+ this.mDynamicSystemCode = dynamicSystemCode;
+ this.mNfcid2 = nfcid2;
+ this.mDynamicNfcid2 = dynamicNfcid2;
+ this.mUid = uid;
+ }
+
+ public NfcFServiceInfo(PackageManager pm, ResolveInfo info)
+ throws XmlPullParserException, IOException {
+ ServiceInfo si = info.serviceInfo;
+ XmlResourceParser parser = null;
+ try {
+ parser = si.loadXmlMetaData(pm, HostNfcFService.SERVICE_META_DATA);
+ if (parser == null) {
+ throw new XmlPullParserException("No " + HostNfcFService.SERVICE_META_DATA +
+ " meta-data");
+ }
+
+ int eventType = parser.getEventType();
+ while (eventType != XmlPullParser.START_TAG &&
+ eventType != XmlPullParser.END_DOCUMENT) {
+ eventType = parser.next();
+ }
+
+ String tagName = parser.getName();
+ if (!"host-nfcf-service".equals(tagName)) {
+ throw new XmlPullParserException(
+ "Meta-data does not start with <host-nfcf-service> tag");
+ }
+
+ Resources res = pm.getResourcesForApplication(si.applicationInfo);
+ AttributeSet attrs = Xml.asAttributeSet(parser);
+ TypedArray sa = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.HostNfcFService);
+ mService = info;
+ mDescription = sa.getString(
+ com.android.internal.R.styleable.HostNfcFService_description);
+ mDynamicSystemCode = null;
+ mDynamicNfcid2 = null;
+ sa.recycle();
+
+ String systemCode = null;
+ String nfcid2 = null;
+ final int depth = parser.getDepth();
+
+ while (((eventType = parser.next()) != XmlPullParser.END_TAG ||
+ parser.getDepth() > depth) && eventType != XmlPullParser.END_DOCUMENT) {
+ tagName = parser.getName();
+ if (eventType == XmlPullParser.START_TAG &&
+ "system-code-filter".equals(tagName) && systemCode == null) {
+ final TypedArray a = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.SystemCodeFilter);
+ systemCode = a.getString(
+ com.android.internal.R.styleable.SystemCodeFilter_name).toUpperCase();
+ if (!NfcFCardEmulation.isValidSystemCode(systemCode) &&
+ !systemCode.equalsIgnoreCase("NULL")) {
+ Log.e(TAG, "Invalid System Code: " + systemCode);
+ systemCode = null;
+ }
+ a.recycle();
+ } else if (eventType == XmlPullParser.START_TAG &&
+ "nfcid2-filter".equals(tagName) && nfcid2 == null) {
+ final TypedArray a = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.Nfcid2Filter);
+ nfcid2 = a.getString(
+ com.android.internal.R.styleable.Nfcid2Filter_name).toUpperCase();
+ if (!nfcid2.equalsIgnoreCase("RANDOM") &&
+ !nfcid2.equalsIgnoreCase("NULL") &&
+ !NfcFCardEmulation.isValidNfcid2(nfcid2)) {
+ Log.e(TAG, "Invalid NFCID2: " + nfcid2);
+ nfcid2 = null;
+ }
+ a.recycle();
+ }
+ }
+ mSystemCode = (systemCode == null ? "NULL" : systemCode);
+ mNfcid2 = (nfcid2 == null ? "NULL" : nfcid2);
+ } catch (NameNotFoundException e) {
+ throw new XmlPullParserException("Unable to create context for: " + si.packageName);
+ } finally {
+ if (parser != null) parser.close();
+ }
+ // Set uid
+ mUid = si.applicationInfo.uid;
+ }
+
+ public ComponentName getComponent() {
+ return new ComponentName(mService.serviceInfo.packageName,
+ mService.serviceInfo.name);
+ }
+
+ public String getSystemCode() {
+ return (mDynamicSystemCode == null ? mSystemCode : mDynamicSystemCode);
+ }
+
+ public void setOrReplaceDynamicSystemCode(String systemCode) {
+ mDynamicSystemCode = systemCode;
+ }
+
+ public String getNfcid2() {
+ return (mDynamicNfcid2 == null ? mNfcid2 : mDynamicNfcid2);
+ }
+
+ public void setOrReplaceDynamicNfcid2(String nfcid2) {
+ mDynamicNfcid2 = nfcid2;
+ }
+
+ public String getDescription() {
+ return mDescription;
+ }
+
+ public int getUid() {
+ return mUid;
+ }
+
+ public CharSequence loadLabel(PackageManager pm) {
+ return mService.loadLabel(pm);
+ }
+
+ public Drawable loadIcon(PackageManager pm) {
+ return mService.loadIcon(pm);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder out = new StringBuilder("NfcFService: ");
+ out.append(getComponent());
+ out.append(", description: " + mDescription);
+ out.append(", System Code: " + mSystemCode);
+ if (mDynamicSystemCode != null) {
+ out.append(", dynamic System Code: " + mDynamicSystemCode);
+ }
+ out.append(", NFCID2: " + mNfcid2);
+ if (mDynamicNfcid2 != null) {
+ out.append(", dynamic NFCID2: " + mDynamicNfcid2);
+ }
+ return out.toString();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof NfcFServiceInfo)) return false;
+ NfcFServiceInfo thatService = (NfcFServiceInfo) o;
+
+ if (!thatService.getComponent().equals(this.getComponent())) return false;
+ if (!thatService.mSystemCode.equalsIgnoreCase(this.mSystemCode)) return false;
+ if (!thatService.mNfcid2.equalsIgnoreCase(this.mNfcid2)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return getComponent().hashCode();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ mService.writeToParcel(dest, flags);
+ dest.writeString(mDescription);
+ dest.writeString(mSystemCode);
+ dest.writeInt(mDynamicSystemCode != null ? 1 : 0);
+ if (mDynamicSystemCode != null) {
+ dest.writeString(mDynamicSystemCode);
+ }
+ dest.writeString(mNfcid2);
+ dest.writeInt(mDynamicNfcid2 != null ? 1 : 0);
+ if (mDynamicNfcid2 != null) {
+ dest.writeString(mDynamicNfcid2);
+ }
+ dest.writeInt(mUid);
+ };
+
+ public static final Parcelable.Creator<NfcFServiceInfo> CREATOR =
+ new Parcelable.Creator<NfcFServiceInfo>() {
+ @Override
+ public NfcFServiceInfo createFromParcel(Parcel source) {
+ ResolveInfo info = ResolveInfo.CREATOR.createFromParcel(source);
+ String description = source.readString();
+ String systemCode = source.readString();
+ String dynamicSystemCode = null;
+ if (source.readInt() != 0) {
+ dynamicSystemCode = source.readString();
+ }
+ String nfcid2 = source.readString();
+ String dynamicNfcid2 = null;
+ if (source.readInt() != 0) {
+ dynamicNfcid2 = source.readString();
+ }
+ int uid = source.readInt();
+ NfcFServiceInfo service = new NfcFServiceInfo(info, description,
+ systemCode, dynamicSystemCode, nfcid2, dynamicNfcid2, uid);
+ return service;
+ }
+
+ @Override
+ public NfcFServiceInfo[] newArray(int size) {
+ return new NfcFServiceInfo[size];
+ }
+ };
+
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ pw.println(" " + getComponent() +
+ " (Description: " + getDescription() + ")");
+ pw.println(" System Code: " + getSystemCode());
+ pw.println(" NFCID2: " + getNfcid2());
+ }
+}
+
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 2ca9ab8a..ba215bb 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -390,7 +390,7 @@
* type.
*/
public static String DIRECTORY_MUSIC = "Music";
-
+
/**
* Standard directory in which to place any audio files that should be
* in the list of podcasts that the user can select (not as regular
@@ -479,6 +479,37 @@
public static String DIRECTORY_DOCUMENTS = "Documents";
/**
+ * List of standard storage directories.
+ * <p>
+ * Each of its values have its own constant:
+ * <ul>
+ * <li>{@link #DIRECTORY_MUSIC}
+ * <li>{@link #DIRECTORY_PODCASTS}
+ * <li>{@link #DIRECTORY_ALARMS}
+ * <li>{@link #DIRECTORY_RINGTONES}
+ * <li>{@link #DIRECTORY_NOTIFICATIONS}
+ * <li>{@link #DIRECTORY_PICTURES}
+ * <li>{@link #DIRECTORY_MOVIES}
+ * <li>{@link #DIRECTORY_DOWNLOADS}
+ * <li>{@link #DIRECTORY_DCIM}
+ * <li>{@link #DIRECTORY_DOCUMENTS}
+ * </ul>
+ * @hide
+ */
+ public static final String[] STANDARD_DIRECTORIES = {
+ DIRECTORY_MUSIC,
+ DIRECTORY_PODCASTS,
+ DIRECTORY_RINGTONES,
+ DIRECTORY_ALARMS,
+ DIRECTORY_NOTIFICATIONS,
+ DIRECTORY_PICTURES,
+ DIRECTORY_MOVIES,
+ DIRECTORY_DOWNLOADS,
+ DIRECTORY_DCIM,
+ DIRECTORY_DOCUMENTS
+ };
+
+ /**
* Get a top-level shared/external storage directory for placing files of a
* particular type. This is where the user will typically place and manage
* their own files, so you should be careful about what you put here to
@@ -495,13 +526,13 @@
* </p>
* {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
* public_picture}
- *
+ *
* @param type The type of storage directory to return. Should be one of
* {@link #DIRECTORY_MUSIC}, {@link #DIRECTORY_PODCASTS},
* {@link #DIRECTORY_RINGTONES}, {@link #DIRECTORY_ALARMS},
* {@link #DIRECTORY_NOTIFICATIONS}, {@link #DIRECTORY_PICTURES},
- * {@link #DIRECTORY_MOVIES}, {@link #DIRECTORY_DOWNLOADS}, or
- * {@link #DIRECTORY_DCIM}. May not be null.
+ * {@link #DIRECTORY_MOVIES}, {@link #DIRECTORY_DOWNLOADS},
+ * {@link #DIRECTORY_DCIM}, or {@link #DIRECTORY_DOCUMENTS}. May not be null.
* @return Returns the File path for the directory. Note that this directory
* may not yet exist, so you must make sure it exists before using
* it such as with {@link File#mkdirs File.mkdirs()}.
@@ -657,7 +688,7 @@
/**
* Returns the current state of the primary shared/external storage media.
- *
+ *
* @see #getExternalStorageDirectory()
* @return one of {@link #MEDIA_UNKNOWN}, {@link #MEDIA_REMOVED},
* {@link #MEDIA_UNMOUNTED}, {@link #MEDIA_CHECKING},
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index a401ac2..88cc8a2 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -62,7 +62,7 @@
* All client apps must hold a valid URI permission grant to access documents,
* typically issued when a user makes a selection through
* {@link Intent#ACTION_OPEN_DOCUMENT}, {@link Intent#ACTION_CREATE_DOCUMENT},
- * or {@link Intent#ACTION_OPEN_DOCUMENT_TREE}.
+ * {@link Intent#ACTION_OPEN_DOCUMENT_TREE}, or {@link Intent#ACTION_OPEN_EXTERNAL_DIRECTORY}.
*
* @see DocumentsProvider
*/
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3042aa9..80cf4bb 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3278,6 +3278,7 @@
WIFI_STATIC_DNS2,
BLUETOOTH_DISCOVERABILITY,
BLUETOOTH_DISCOVERABILITY_TIMEOUT,
+ FONT_SCALE,
DIM_SCREEN,
SCREEN_OFF_TIMEOUT,
SCREEN_BRIGHTNESS,
diff --git a/core/java/android/service/voice/VoiceInteractionManagerInternal.java b/core/java/android/service/voice/VoiceInteractionManagerInternal.java
new file mode 100644
index 0000000..b38067b
--- /dev/null
+++ b/core/java/android/service/voice/VoiceInteractionManagerInternal.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.service.voice;
+
+import android.os.Bundle;
+import android.os.IBinder;
+
+
+/**
+ * @hide
+ * Private interface to the VoiceInteractionManagerService for use by ActivityManagerService.
+ */
+public abstract class VoiceInteractionManagerInternal {
+
+ /**
+ * Start a new voice interaction session when requested from within an activity
+ * by Activity.startLocalVoiceInteraction()
+ * @param callingActivity The binder token representing the calling activity.
+ * @param options
+ */
+ public abstract void startLocalVoiceInteraction(IBinder callingActivity, Bundle options);
+
+ /**
+ * Returns whether the currently selected voice interaction service supports local voice
+ * interaction for launching from an Activity.
+ */
+ public abstract boolean supportsLocalVoiceInteraction();
+
+ public abstract void stopLocalVoiceInteraction(IBinder callingActivity);
+}
\ No newline at end of file
diff --git a/core/java/android/service/voice/VoiceInteractionServiceInfo.java b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
index ebe3f47..a9db32b 100644
--- a/core/java/android/service/voice/VoiceInteractionServiceInfo.java
+++ b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
@@ -45,6 +45,7 @@
private String mSettingsActivity;
private boolean mSupportsAssist;
private boolean mSupportsLaunchFromKeyguard;
+ private boolean mSupportsLocalInteraction;
public VoiceInteractionServiceInfo(PackageManager pm, ComponentName comp)
throws PackageManager.NameNotFoundException {
@@ -70,6 +71,10 @@
}
public VoiceInteractionServiceInfo(PackageManager pm, ServiceInfo si) {
+ if (si == null) {
+ mParseError = "Service not available";
+ return;
+ }
if (!Manifest.permission.BIND_VOICE_INTERACTION.equals(si.permission)) {
mParseError = "Service does not require permission "
+ Manifest.permission.BIND_VOICE_INTERACTION;
@@ -114,6 +119,8 @@
mSupportsLaunchFromKeyguard = array.getBoolean(com.android.internal.
R.styleable.VoiceInteractionService_supportsLaunchVoiceAssistFromKeyguard,
false);
+ mSupportsLocalInteraction = array.getBoolean(com.android.internal.
+ R.styleable.VoiceInteractionService_supportsLocalInteraction, false);
array.recycle();
if (mSessionService == null) {
mParseError = "No sessionService specified";
@@ -168,4 +175,8 @@
public boolean getSupportsLaunchFromKeyguard() {
return mSupportsLaunchFromKeyguard;
}
+
+ public boolean getSupportsLocalInteraction() {
+ return mSupportsLocalInteraction;
+ }
}
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
index ec14740..0c6a0c6 100644
--- a/core/java/android/service/voice/VoiceInteractionSession.java
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -17,6 +17,7 @@
package android.service.voice;
import android.annotation.Nullable;
+import android.app.Activity;
import android.app.Dialog;
import android.app.Instrumentation;
import android.app.VoiceInteractor;
@@ -49,6 +50,7 @@
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.FrameLayout;
+
import com.android.internal.app.IVoiceInteractionManagerService;
import com.android.internal.app.IVoiceInteractionSessionShowCallback;
import com.android.internal.app.IVoiceInteractor;
@@ -75,7 +77,7 @@
*/
public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCallbacks2 {
static final String TAG = "VoiceInteractionSession";
- static final boolean DEBUG = false;
+ static final boolean DEBUG = true;
/**
* Flag received in {@link #onShow}: originator requested that the session be started with
@@ -101,6 +103,13 @@
*/
public static final int SHOW_SOURCE_APPLICATION = 1<<3;
+ /**
+ * Flag for use with {@link #onShow}: indicates that an Activity has invoked the voice
+ * interaction service for a local interaction using
+ * {@link Activity#startLocalVoiceInteraction(Bundle)}.
+ */
+ public static final int SHOW_SOURCE_ACTIVITY = 1<<4;
+
final Context mContext;
final HandlerCaller mHandlerCaller;
diff --git a/core/java/android/speech/tts/FileSynthesisCallback.java b/core/java/android/speech/tts/FileSynthesisCallback.java
index dea766b..ca9931a 100644
--- a/core/java/android/speech/tts/FileSynthesisCallback.java
+++ b/core/java/android/speech/tts/FileSynthesisCallback.java
@@ -111,6 +111,7 @@
"of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
"AudioFormat.ENCODING_PCM_FLOAT");
}
+ mDispatcher.dispatchOnBeginSynthesis(sampleRateInHz, audioFormat, channelCount);
FileChannel fileChannel = null;
synchronized (mStateLock) {
@@ -176,6 +177,10 @@
fileChannel = mFileChannel;
}
+ final byte[] bufferCopy = new byte[length];
+ System.arraycopy(buffer, offset, bufferCopy, 0, length);
+ mDispatcher.dispatchOnAudioAvailable(bufferCopy);
+
try {
fileChannel.write(ByteBuffer.wrap(buffer, offset, length));
return TextToSpeech.SUCCESS;
diff --git a/core/java/android/speech/tts/ITextToSpeechCallback.aidl b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
index d785c3f..4e3acf6 100644
--- a/core/java/android/speech/tts/ITextToSpeechCallback.aidl
+++ b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
@@ -22,33 +22,65 @@
*/
oneway interface ITextToSpeechCallback {
/**
- * Tells the client that the synthesis has started.
+ * Tells the client that the synthesis has started playing.
*
- * @param utteranceId Unique id identifying synthesis request.
+ * @param utteranceId Unique id identifying the synthesis request.
*/
void onStart(String utteranceId);
/**
- * Tells the client that the synthesis has finished.
+ * Tells the client that the synthesis has finished playing.
*
- * @param utteranceId Unique id identifying synthesis request.
+ * @param utteranceId Unique id identifying the synthesis request.
*/
void onSuccess(String utteranceId);
/**
* Tells the client that the synthesis was stopped.
*
- * @param utteranceId Unique id identifying synthesis request.
+ * @param utteranceId Unique id identifying the synthesis request.
*/
void onStop(String utteranceId, boolean isStarted);
/**
* Tells the client that the synthesis has failed.
*
- * @param utteranceId Unique id identifying synthesis request.
+ * @param utteranceId Unique id identifying the synthesis request.
* @param errorCode One of the values from
* {@link android.speech.tts.v2.TextToSpeech}.
*/
void onError(String utteranceId, int errorCode);
+ /**
+ * Tells the client that the TTS engine has started synthesizing the audio for a request.
+ *
+ * <p>
+ * This doesn't mean the synthesis request has already started playing (for example when there
+ * are synthesis requests ahead of it in the queue), but after receiving this callback you can
+ * expect onAudioAvailable to be called.
+ * </p>
+ *
+ * @param utteranceId Unique id identifying the synthesis request.
+ * @param sampleRateInHz Sample rate in HZ of the generated audio.
+ * @param audioFormat The audio format of the generated audio in the {@link #onAudioAvailable}
+ * call. Should be one of {@link android.media.AudioFormat.ENCODING_PCM_8BIT},
+ * {@link android.media.AudioFormat.ENCODING_PCM_16BIT} or
+ * {@link android.media.AudioFormat.ENCODING_PCM_FLOAT}.
+ * @param channelCount The number of channels.
+ */
+ void onBeginSynthesis(String utteranceId, int sampleRateInHz, int audioFormat, int channelCount);
+
+ /**
+ * Tells the client about a chunk of the synthesized audio.
+ *
+ * <p>
+ * Called when a chunk of the synthesized audio is ready. This may be called more than once for
+ * every synthesis request, thereby streaming the audio to the client.
+ * </p>
+ *
+ * @param utteranceId Unique id identifying the synthesis request.
+ * @param audio The raw audio bytes. Its format is specified by the {@link #onStartAudio}
+ * callback.
+ */
+ void onAudioAvailable(String utteranceId, in byte[] audio);
}
diff --git a/core/java/android/speech/tts/PlaybackSynthesisCallback.java b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
index dcc0095..778aa86 100644
--- a/core/java/android/speech/tts/PlaybackSynthesisCallback.java
+++ b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
@@ -15,6 +15,7 @@
*/
package android.speech.tts;
+import android.annotation.NonNull;
import android.media.AudioFormat;
import android.speech.tts.TextToSpeechService.AudioOutputParams;
import android.speech.tts.TextToSpeechService.UtteranceProgressDispatcher;
@@ -51,9 +52,10 @@
private final Object mCallerIdentity;
private final AbstractEventLogger mLogger;
- PlaybackSynthesisCallback(AudioOutputParams audioParams, AudioPlaybackHandler audioTrackHandler,
- UtteranceProgressDispatcher dispatcher, Object callerIdentity,
- AbstractEventLogger logger, boolean clientIsUsingV2) {
+ PlaybackSynthesisCallback(@NonNull AudioOutputParams audioParams,
+ @NonNull AudioPlaybackHandler audioTrackHandler,
+ @NonNull UtteranceProgressDispatcher dispatcher, @NonNull Object callerIdentity,
+ @NonNull AbstractEventLogger logger, boolean clientIsUsingV2) {
super(clientIsUsingV2);
mAudioParams = audioParams;
mAudioTrackHandler = audioTrackHandler;
@@ -130,6 +132,7 @@
"of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
"AudioFormat.ENCODING_PCM_FLOAT");
}
+ mDispatcher.dispatchOnBeginSynthesis(sampleRateInHz, audioFormat, channelCount);
int channelConfig = BlockingAudioTrack.getChannelConfig(channelCount);
@@ -190,6 +193,7 @@
// Sigh, another copy.
final byte[] bufferCopy = new byte[length];
System.arraycopy(buffer, offset, bufferCopy, 0, length);
+ mDispatcher.dispatchOnAudioAvailable(bufferCopy);
// Might block on mItem.this, if there are too many buffers waiting to
// be consumed.
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 61c33ff..d55c7bd 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -16,6 +16,7 @@
package android.speech.tts;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.annotation.RawRes;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -665,7 +666,7 @@
private OnInitListener mInitListener;
// Written from an unspecified application thread, read from
// a binder thread.
- private volatile UtteranceProgressListener mUtteranceProgressListener;
+ @Nullable private volatile UtteranceProgressListener mUtteranceProgressListener;
private final Object mStartLock = new Object();
private String mRequestedEngine;
@@ -2133,6 +2134,23 @@
listener.onStart(utteranceId);
}
}
+
+ @Override
+ public void onBeginSynthesis(String utteranceId, int sampleRateInHz, int audioFormat,
+ int channelCount) {
+ UtteranceProgressListener listener = mUtteranceProgressListener;
+ if (listener != null) {
+ listener.onBeginSynthesis(utteranceId, sampleRateInHz, audioFormat, channelCount);
+ }
+ }
+
+ @Override
+ public void onAudioAvailable(String utteranceId, byte[] audio) {
+ UtteranceProgressListener listener = mUtteranceProgressListener;
+ if (listener != null) {
+ listener.onAudioAvailable(utteranceId, audio);
+ }
+ }
};
private class SetupConnectionAsyncTask extends AsyncTask<Void, Void, Integer> {
diff --git a/core/java/android/speech/tts/TextToSpeechService.java b/core/java/android/speech/tts/TextToSpeechService.java
index 8c355d8..fc075de 100644
--- a/core/java/android/speech/tts/TextToSpeechService.java
+++ b/core/java/android/speech/tts/TextToSpeechService.java
@@ -15,6 +15,7 @@
*/
package android.speech.tts;
+import android.annotation.NonNull;
import android.app.Service;
import android.content.Intent;
import android.media.AudioAttributes;
@@ -111,7 +112,7 @@
// A thread and it's associated handler for playing back any audio
// associated with this TTS engine. Will handle all requests except synthesis
// to file requests, which occur on the synthesis thread.
- private AudioPlaybackHandler mAudioPlaybackHandler;
+ @NonNull private AudioPlaybackHandler mAudioPlaybackHandler;
private TtsEngines mEngineHelper;
private CallbackMap mCallbacks;
@@ -649,6 +650,8 @@
public void dispatchOnSuccess();
public void dispatchOnStart();
public void dispatchOnError(int errorCode);
+ public void dispatchOnBeginSynthesis(int sampleRateInHz, int audioFormat, int channelCount);
+ public void dispatchOnAudioAvailable(byte[] audio);
}
/** Set of parameters affecting audio output. */
@@ -853,6 +856,22 @@
}
}
+ @Override
+ public void dispatchOnBeginSynthesis(int sampleRateInHz, int audioFormat, int channelCount) {
+ final String utteranceId = getUtteranceId();
+ if (utteranceId != null) {
+ mCallbacks.dispatchOnBeginSynthesis(getCallerIdentity(), utteranceId, sampleRateInHz, audioFormat, channelCount);
+ }
+ }
+
+ @Override
+ public void dispatchOnAudioAvailable(byte[] audio) {
+ final String utteranceId = getUtteranceId();
+ if (utteranceId != null) {
+ mCallbacks.dispatchOnAudioAvailable(getCallerIdentity(), utteranceId, audio);
+ }
+ }
+
abstract public String getUtteranceId();
String getStringParam(Bundle params, String key, String defaultValue) {
@@ -1430,7 +1449,6 @@
} catch (RemoteException e) {
Log.e(TAG, "Callback onStart failed: " + e);
}
-
}
public void dispatchOnError(Object callerIdentity, String utteranceId,
@@ -1444,6 +1462,26 @@
}
}
+ public void dispatchOnBeginSynthesis(Object callerIdentity, String utteranceId, int sampleRateInHz, int audioFormat, int channelCount) {
+ ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
+ if (cb == null) return;
+ try {
+ cb.onBeginSynthesis(utteranceId, sampleRateInHz, audioFormat, channelCount);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Callback dispatchOnBeginSynthesis(String, int, int, int) failed: " + e);
+ }
+ }
+
+ public void dispatchOnAudioAvailable(Object callerIdentity, String utteranceId, byte[] buffer) {
+ ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
+ if (cb == null) return;
+ try {
+ cb.onAudioAvailable(utteranceId, buffer);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Callback dispatchOnAudioAvailable(String, byte[]) failed: " + e);
+ }
+ }
+
@Override
public void onCallbackDied(ITextToSpeechCallback callback, Object cookie) {
IBinder caller = (IBinder) cookie;
diff --git a/core/java/android/speech/tts/UtteranceProgressListener.java b/core/java/android/speech/tts/UtteranceProgressListener.java
index 890ea3d..72a5228 100644
--- a/core/java/android/speech/tts/UtteranceProgressListener.java
+++ b/core/java/android/speech/tts/UtteranceProgressListener.java
@@ -2,6 +2,8 @@
package android.speech.tts;
+import android.media.AudioFormat;
+
/**
* Listener for events relating to the progress of an utterance through
* the synthesis queue. Each utterance is associated with a call to
@@ -14,10 +16,10 @@
/**
* Called when an utterance "starts" as perceived by the caller. This will
* be soon before audio is played back in the case of a {@link TextToSpeech#speak}
- * or before the first bytes of a file are written to storage in the case
+ * or before the first bytes of a file are written to the file system in the case
* of {@link TextToSpeech#synthesizeToFile}.
*
- * @param utteranceId the utterance ID of the utterance.
+ * @param utteranceId The utterance ID of the utterance.
*/
public abstract void onStart(String utteranceId);
@@ -28,7 +30,7 @@
*
* This request is guaranteed to be called after {@link #onStart(String)}.
*
- * @param utteranceId the utterance ID of the utterance.
+ * @param utteranceId The utterance ID of the utterance.
*/
public abstract void onDone(String utteranceId);
@@ -39,7 +41,7 @@
* be a call to both {@link #onDone(String)} and {@link #onError(String)} for
* the same utterance.
*
- * @param utteranceId the utterance ID of the utterance.
+ * @param utteranceId The utterance ID of the utterance.
* @deprecated Use {@link #onError(String,int)} instead
*/
@Deprecated
@@ -52,7 +54,7 @@
* be a call to both {@link #onDone(String)} and {@link #onError(String,int)} for
* the same utterance. The default implementation calls {@link #onError(String)}.
*
- * @param utteranceId the utterance ID of the utterance.
+ * @param utteranceId The utterance ID of the utterance.
* @param errorCode one of the ERROR_* codes from {@link TextToSpeech}
*/
public void onError(String utteranceId, int errorCode) {
@@ -65,7 +67,7 @@
* or uses {@link TextToSpeech#QUEUE_FLUSH} as an argument with the
* {@link TextToSpeech#speak} or {@link TextToSpeech#synthesizeToFile} methods.
*
- * @param utteranceId the utterance ID of the utterance.
+ * @param utteranceId The utterance ID of the utterance.
* @param interrupted If true, then the utterance was interrupted while being synthesized
* and its output is incomplete. If false, then the utterance was flushed
* before the synthesis started.
@@ -74,6 +76,52 @@
}
/**
+ * Called when the TTS engine begins to synthesize the audio for a request.
+ *
+ * <p>
+ * It provides information about the format of the byte array for subsequent
+ * {@link #onAudioAvailable} calls.
+ * </p>
+ *
+ * <p>
+ * This is called when the TTS engine starts synthesizing audio for the request. If an
+ * application wishes to know when the audio is about to start playing, {#onStart(String)}
+ * should be used instead.
+ * </p>
+ *
+ * @param utteranceId The utterance ID of the utterance.
+ * @param sampleRateInHz Sample rate in hertz of the generated audio.
+ * @param audioFormat Audio format of the generated audio. Should be one of
+ * {@link AudioFormat#ENCODING_PCM_8BIT}, {@link AudioFormat#ENCODING_PCM_16BIT} or
+ * {@link AudioFormat#ENCODING_PCM_FLOAT}.
+ * @param channelCount The number of channels.
+ */
+ public void onBeginSynthesis(String utteranceId, int sampleRateInHz, int audioFormat, int channelCount) {
+ }
+
+ /**
+ * This is called when a chunk of audio is ready for consumption.
+ *
+ * <p>
+ * The audio parameter is a copy of what will be synthesized to the speakers (when synthesis was
+ * initiated with a {@link TextToSpeech#speak} call) or written to the file system (for
+ * {@link TextToSpeech#synthesizeToFile}). The audio bytes are delivered in one or more chunks;
+ * if {@link #onDone} or {@link #onError} is called all chunks have been received.
+ * </p>
+ *
+ * <p>
+ * The audio received here may not be played for some time depending on buffer sizes and the
+ * amount of items on the synthesis queue.
+ * </p>
+ *
+ * @param utteranceId The utterance ID of the utterance.
+ * @param audio A chunk of audio; the format can be known by listening to
+ * {@link #onBeginSynthesis(String, int, int, int)}.
+ */
+ public void onAudioAvailable(String utteranceId, byte[] audio) {
+ }
+
+ /**
* Wraps an old deprecated OnUtteranceCompletedListener with a shiny new
* progress listener.
*
diff --git a/core/java/android/view/FrameStatsObserver.java b/core/java/android/view/FrameStatsObserver.java
new file mode 100644
index 0000000..0add607
--- /dev/null
+++ b/core/java/android/view/FrameStatsObserver.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.NonNull;
+import android.util.Log;
+import android.os.Looper;
+import android.os.MessageQueue;
+
+import com.android.internal.util.VirtualRefBasePtr;
+
+import java.lang.NullPointerException;
+import java.lang.ref.WeakReference;
+import java.lang.SuppressWarnings;
+
+/**
+ * Provides streaming access to frame stats information from the rendering
+ * subsystem to apps.
+ *
+ * @hide
+ */
+public abstract class FrameStatsObserver {
+ private static final String TAG = "FrameStatsObserver";
+
+ private MessageQueue mMessageQueue;
+ private long[] mBuffer;
+
+ private FrameStats mFrameStats;
+
+ /* package */ ThreadedRenderer mRenderer;
+ /* package */ VirtualRefBasePtr mNative;
+
+ /**
+ * Containing class for frame statistics reported
+ * by the rendering subsystem.
+ */
+ public static class FrameStats {
+ /**
+ * Precise timing data for various milestones in a frame
+ * lifecycle.
+ *
+ * This data is exactly the same as what is returned by
+ * `adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats`
+ *
+ * The fields reported may change from release to release.
+ *
+ * @see {@link http://developer.android.com/training/testing/performance.html}
+ * for a description of the fields present.
+ */
+ public long[] mTimingData;
+ }
+
+ /**
+ * Creates a FrameStatsObserver
+ *
+ * @param looper the looper to use when invoking callbacks
+ */
+ public FrameStatsObserver(@NonNull Looper looper) {
+ if (looper == null) {
+ throw new NullPointerException("looper cannot be null");
+ }
+
+ mMessageQueue = looper.getQueue();
+ if (mMessageQueue == null) {
+ throw new IllegalStateException("invalid looper, null message queue\n");
+ }
+
+ mFrameStats = new FrameStats();
+ }
+
+ /**
+ * Called on provided looper when frame stats data is available
+ * for the previous frame.
+ *
+ * Clients of this class must do as little work as possible within
+ * this callback, as the buffer is shared between the producer and consumer.
+ *
+ * If the consumer is still executing within this method when there is new
+ * data available that data will be dropped. The producer cannot
+ * wait on the consumer.
+ *
+ * @param data the newly available data
+ */
+ public abstract void onDataAvailable(FrameStats data);
+
+ /**
+ * Returns the number of reports dropped as a result of a slow
+ * consumer.
+ */
+ public long getDroppedReportCount() {
+ if (mRenderer == null) {
+ return 0;
+ }
+
+ return mRenderer.getDroppedFrameReportCount();
+ }
+
+ public boolean isRegistered() {
+ return mRenderer != null && mNative != null;
+ }
+
+ // === called by native === //
+ @SuppressWarnings("unused")
+ private void notifyDataAvailable() {
+ mFrameStats.mTimingData = mBuffer;
+ onDataAvailable(mFrameStats);
+ }
+}
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 1a5de7e..1703ed1 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -186,8 +186,8 @@
/**
* Initiate the drag operation itself
*/
- boolean performDrag(IWindow window, IBinder dragToken, float touchX, float touchY,
- float thumbCenterX, float thumbCenterY, in ClipData data);
+ boolean performDrag(IWindow window, IBinder dragToken, int touchSource,
+ float touchX, float touchY, float thumbCenterX, float thumbCenterY, in ClipData data);
/**
* Report the result of a drop action targeted to the given window.
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 0e4bc84..78a63a6 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -24,7 +24,9 @@
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Binder;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -34,12 +36,14 @@
import android.view.View.AttachInfo;
import com.android.internal.R;
+import com.android.internal.util.VirtualRefBasePtr;
import java.io.File;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.HashSet;
/**
* Hardware renderer that proxies the rendering to a render thread. Most calls
@@ -339,6 +343,8 @@
private boolean mEnabled;
private boolean mRequested = true;
+ private HashSet<FrameStatsObserver> mFrameStatsObservers;
+
ThreadedRenderer(Context context, boolean translucent) {
final TypedArray a = context.obtainStyledAttributes(null, R.styleable.Lighting, 0, 0);
mLightY = a.getDimension(R.styleable.Lighting_lightY, 0);
@@ -947,6 +953,31 @@
}
}
+ void addFrameStatsObserver(FrameStatsObserver fso) {
+ if (mFrameStatsObservers == null) {
+ mFrameStatsObservers = new HashSet<>();
+ }
+
+ long nativeFso = nAddFrameStatsObserver(mNativeProxy, fso);
+ fso.mRenderer = this;
+ fso.mNative = new VirtualRefBasePtr(nativeFso);
+ mFrameStatsObservers.add(fso);
+ }
+
+ void removeFrameStatsObserver(FrameStatsObserver fso) {
+ if (!mFrameStatsObservers.remove(fso)) {
+ throw new IllegalArgumentException("attempt to remove FrameStatsObserver that was never added");
+ }
+
+ nRemoveFrameStatsObserver(mNativeProxy, fso.mNative.get());
+ fso.mRenderer = null;
+ fso.mNative = null;
+ }
+
+ long getDroppedFrameReportCount() {
+ return nGetDroppedFrameReportCount(mNativeProxy);
+ }
+
static native void setupShadersDiskCache(String cacheFile);
private static native void nSetAtlas(long nativeProxy, GraphicBuffer buffer, long[] map);
@@ -1000,4 +1031,8 @@
private static native void nDrawRenderNode(long nativeProxy, long rootRenderNode);
private static native void nSetContentDrawBounds(long nativeProxy, int left,
int top, int right, int bottom);
+
+ private static native long nAddFrameStatsObserver(long nativeProxy, FrameStatsObserver fso);
+ private static native void nRemoveFrameStatsObserver(long nativeProxy, long nativeFso);
+ private static native long nGetDroppedFrameReportCount(long nativeProxy);
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index b5b0baa..6c3f308 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -24,6 +24,7 @@
import android.annotation.FloatRange;
import android.annotation.IdRes;
import android.annotation.IntDef;
+import android.annotation.IntRange;
import android.annotation.LayoutRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -109,6 +110,7 @@
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
+import java.lang.NullPointerException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
@@ -3701,6 +3703,11 @@
private ViewPropertyAnimator mAnimator = null;
/**
+ * List of FrameStatsObservers pending registration when mAttachInfo is null.
+ */
+ private ArrayList<FrameStatsObserver> mPendingFrameStatsObservers;
+
+ /**
* Flag indicating that a drag can cross window boundaries. When
* {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)} is called
* with this flag set, all visible applications will be able to participate
@@ -5380,6 +5387,58 @@
}
/**
+ * Set an observer to collect stats for each frame rendered for this view.
+ *
+ * @hide
+ */
+ public void addFrameStatsObserver(FrameStatsObserver fso) {
+ if (mAttachInfo != null) {
+ if (mAttachInfo.mHardwareRenderer != null) {
+ mAttachInfo.mHardwareRenderer.addFrameStatsObserver(fso);
+ } else {
+ Log.w(VIEW_LOG_TAG, "View not hardware-accelerated. Unable to observe frame stats");
+ }
+ } else {
+ if (mPendingFrameStatsObservers == null) {
+ mPendingFrameStatsObservers = new ArrayList<>();
+ }
+
+ mPendingFrameStatsObservers.add(fso);
+ }
+ }
+
+ /**
+ * Remove observer configured to collect frame stats for this view.
+ *
+ * @hide
+ */
+ public void removeFrameStatsObserver(FrameStatsObserver fso) {
+ ThreadedRenderer renderer = getHardwareRenderer();
+
+ if (mPendingFrameStatsObservers != null) {
+ mPendingFrameStatsObservers.remove(fso);
+ }
+
+ if (renderer != null) {
+ renderer.removeFrameStatsObserver(fso);
+ }
+ }
+
+ private void registerPendingFrameStatsObservers() {
+ if (mPendingFrameStatsObservers != null) {
+ ThreadedRenderer renderer = getHardwareRenderer();
+ if (renderer != null) {
+ for (FrameStatsObserver fso : mPendingFrameStatsObservers) {
+ renderer.addFrameStatsObserver(fso);
+ }
+ } else {
+ Log.w(VIEW_LOG_TAG, "View not hardware-accelerated. Unable to observe frame stats");
+ }
+ mPendingFrameStatsObservers = null;
+ }
+ }
+
+ /**
* Call this view's OnClickListener, if it is defined. Performs all normal
* actions associated with clicking: reporting accessibility event, playing
* a sound, etc.
@@ -14902,6 +14961,9 @@
info.mTreeObserver.merge(mFloatingTreeObserver);
mFloatingTreeObserver = null;
}
+
+ registerPendingFrameStatsObservers();
+
if ((mPrivateFlags&PFLAG_SCROLL_CONTAINER) != 0) {
mAttachInfo.mScrollContainers.add(this);
mPrivateFlags |= PFLAG_SCROLL_CONTAINER_ADDED;
@@ -20058,7 +20120,7 @@
root.getLastTouchPoint(shadowSize);
okay = mAttachInfo.mSession.performDrag(mAttachInfo.mWindow, mAttachInfo.mDragToken,
- shadowSize.x, shadowSize.y,
+ root.getLastTouchSource(), shadowSize.x, shadowSize.y,
shadowTouchPoint.x, shadowTouchPoint.y, data);
if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "performDrag returned " + okay);
}
@@ -21563,6 +21625,11 @@
private static final int MODE_SHIFT = 30;
private static final int MODE_MASK = 0x3 << MODE_SHIFT;
+ /** @hide */
+ @IntDef({UNSPECIFIED, EXACTLY, AT_MOST})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface MeasureSpecMode {}
+
/**
* Measure specification mode: The parent has not imposed any constraint
* on the child. It can be whatever size it wants.
@@ -21603,7 +21670,8 @@
* @param mode the mode of the measure specification
* @return the measure specification based on size and mode
*/
- public static int makeMeasureSpec(int size, int mode) {
+ public static int makeMeasureSpec(@IntRange(from = 0, to = (1 << MeasureSpec.MODE_SHIFT) - 1) int size,
+ @MeasureSpecMode int mode) {
if (sUseBrokenMakeMeasureSpec) {
return size + mode;
} else {
@@ -21632,7 +21700,9 @@
* {@link android.view.View.MeasureSpec#AT_MOST} or
* {@link android.view.View.MeasureSpec#EXACTLY}
*/
+ @MeasureSpecMode
public static int getMode(int measureSpec) {
+ //noinspection ResourceType
return (measureSpec & MODE_MASK);
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 7b53697..27e2ea3 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -1659,10 +1659,9 @@
&& isChildrenDrawingOrderEnabled();
final View[] children = mChildren;
for (int i = childrenCount - 1; i >= 0; i--) {
- final int childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i;
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
- PointF point = getLocalPoint();
+ final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex);
+ final PointF point = getLocalPoint();
if (isTransformedTouchPointInView(x, y, child, point)) {
final PointerIcon pointerIcon = child.getPointerIcon(event, point.x, point.y);
if (pointerIcon != null) {
@@ -1678,6 +1677,22 @@
return super.getPointerIcon(event, x, y);
}
+ private int getAndVerifyPreorderedIndex(int childrenCount, int i, boolean customOrder) {
+ final int childIndex;
+ if (customOrder) {
+ final int childIndex1 = getChildDrawingOrder(childrenCount, i);
+ if (childIndex1 >= childrenCount) {
+ throw new IndexOutOfBoundsException("getChildDrawingOrder() "
+ + "returned invalid index " + childIndex1
+ + " (child count is " + childrenCount + ")");
+ }
+ childIndex = childIndex1;
+ } else {
+ childIndex = i;
+ }
+ return childIndex;
+ }
+
@SuppressWarnings({"ConstantConditions"})
@Override
protected boolean dispatchHoverEvent(MotionEvent event) {
@@ -1705,9 +1720,10 @@
final View[] children = mChildren;
HoverTarget lastHoverTarget = null;
for (int i = childrenCount - 1; i >= 0; i--) {
- int childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i;
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
+ final int childIndex = getAndVerifyPreorderedIndex(
+ childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(
+ preorderedList, children, childIndex);
if (!canViewReceivePointerEvents(child)
|| !isTransformedTouchPointInView(x, y, child, null)) {
continue;
@@ -1989,9 +2005,8 @@
&& isChildrenDrawingOrderEnabled();
final View[] children = mChildren;
for (int i = childrenCount - 1; i >= 0; i--) {
- int childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i;
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
+ final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex);
if (!canViewReceivePointerEvents(child)
|| !isTransformedTouchPointInView(x, y, child, null)) {
continue;
@@ -2138,10 +2153,10 @@
&& isChildrenDrawingOrderEnabled();
final View[] children = mChildren;
for (int i = childrenCount - 1; i >= 0; i--) {
- final int childIndex = customOrder
- ? getChildDrawingOrder(childrenCount, i) : i;
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
+ final int childIndex = getAndVerifyPreorderedIndex(
+ childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(
+ preorderedList, children, childIndex);
// If there is a view that has accessibility focus we want it
// to get the event first and if not handled we will perform a
@@ -2319,7 +2334,7 @@
* Resets the cancel next up flag.
* Returns true if the flag was previously set.
*/
- private static boolean resetCancelNextUpFlag(View view) {
+ private static boolean resetCancelNextUpFlag(@NonNull View view) {
if ((view.mPrivateFlags & PFLAG_CANCEL_NEXT_UP_EVENT) != 0) {
view.mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
return true;
@@ -2372,7 +2387,7 @@
* Gets the touch target for specified child view.
* Returns null if not found.
*/
- private TouchTarget getTouchTarget(View child) {
+ private TouchTarget getTouchTarget(@NonNull View child) {
for (TouchTarget target = mFirstTouchTarget; target != null; target = target.next) {
if (target.child == child) {
return target;
@@ -2385,8 +2400,8 @@
* Adds a touch target for specified child to the beginning of the list.
* Assumes the target child is not already present.
*/
- private TouchTarget addTouchTarget(View child, int pointerIdBits) {
- TouchTarget target = TouchTarget.obtain(child, pointerIdBits);
+ private TouchTarget addTouchTarget(@NonNull View child, int pointerIdBits) {
+ final TouchTarget target = TouchTarget.obtain(child, pointerIdBits);
target.next = mFirstTouchTarget;
mFirstTouchTarget = target;
return target;
@@ -2448,7 +2463,7 @@
* Returns true if a child view can receive pointer events.
* @hide
*/
- private static boolean canViewReceivePointerEvents(View child) {
+ private static boolean canViewReceivePointerEvents(@NonNull View child) {
return (child.mViewFlags & VISIBILITY_MASK) == VISIBLE
|| child.getAnimation() != null;
}
@@ -2894,7 +2909,7 @@
for (int i=0; i<childrenCount; i++) {
int childIndex;
try {
- childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i;
+ childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
} catch (IndexOutOfBoundsException e) {
childIndex = i;
if (mContext.getApplicationInfo().targetSdkVersion
@@ -2939,9 +2954,10 @@
throw e;
}
}
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
- ViewStructure cstructure = structure.newChild(i);
+
+ final View child = getAndVerifyPreorderedView(
+ preorderedList, children, childIndex);
+ final ViewStructure cstructure = structure.newChild(i);
child.dispatchProvideStructure(cstructure);
}
}
@@ -2949,6 +2965,21 @@
}
}
+ private static View getAndVerifyPreorderedView(ArrayList<View> preorderedList, View[] children,
+ int childIndex) {
+ final View child;
+ if (preorderedList != null) {
+ child = preorderedList.get(childIndex);
+ if (child == null) {
+ throw new RuntimeException("Invalid preorderedList contained null child at index "
+ + childIndex);
+ }
+ } else {
+ child = children[childIndex];
+ }
+ return child;
+ }
+
/** @hide */
@Override
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
@@ -3386,9 +3417,9 @@
transientIndex = -1;
}
}
- int childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i;
- final View child = (preorderedList == null)
- ? children[childIndex] : preorderedList.get(childIndex);
+
+ final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex);
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) {
more |= drawChild(canvas, child, drawingTime);
}
@@ -3508,21 +3539,21 @@
* children.
*/
ArrayList<View> buildOrderedChildList() {
- final int count = mChildrenCount;
- if (count <= 1 || !hasChildWithZ()) return null;
+ final int childrenCount = mChildrenCount;
+ if (childrenCount <= 1 || !hasChildWithZ()) return null;
if (mPreSortedChildren == null) {
- mPreSortedChildren = new ArrayList<View>(count);
+ mPreSortedChildren = new ArrayList<>(childrenCount);
} else {
- mPreSortedChildren.ensureCapacity(count);
+ mPreSortedChildren.ensureCapacity(childrenCount);
}
- final boolean useCustomOrder = isChildrenDrawingOrderEnabled();
- for (int i = 0; i < mChildrenCount; i++) {
+ final boolean customOrder = isChildrenDrawingOrderEnabled();
+ for (int i = 0; i < childrenCount; i++) {
// add next child (in child order) to end of list
- int childIndex = useCustomOrder ? getChildDrawingOrder(mChildrenCount, i) : i;
- View nextChild = mChildren[childIndex];
- float currentZ = nextChild.getZ();
+ final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
+ final View nextChild = mChildren[childIndex];
+ final float currentZ = nextChild.getZ();
// insert ahead of any Views with greater Z
int insertIndex = i;
@@ -6059,6 +6090,7 @@
}
break;
}
+ //noinspection ResourceType
return MeasureSpec.makeMeasureSpec(resultSize, resultMode);
}
@@ -7481,7 +7513,11 @@
private TouchTarget() {
}
- public static TouchTarget obtain(View child, int pointerIdBits) {
+ public static TouchTarget obtain(@NonNull View child, int pointerIdBits) {
+ if (child == null) {
+ throw new IllegalArgumentException("child must be non-null");
+ }
+
final TouchTarget target;
synchronized (sRecycleLock) {
if (sRecycleBin == null) {
@@ -7499,6 +7535,10 @@
}
public void recycle() {
+ if (child == null) {
+ throw new IllegalStateException("already recycled once");
+ }
+
synchronized (sRecycleLock) {
if (sRecycledCount < MAX_RECYCLED) {
next = sRecycleBin;
@@ -7528,7 +7568,11 @@
private HoverTarget() {
}
- public static HoverTarget obtain(View child) {
+ public static HoverTarget obtain(@NonNull View child) {
+ if (child == null) {
+ throw new IllegalArgumentException("child must be non-null");
+ }
+
final HoverTarget target;
synchronized (sRecycleLock) {
if (sRecycleBin == null) {
@@ -7536,7 +7580,7 @@
} else {
target = sRecycleBin;
sRecycleBin = target.next;
- sRecycledCount--;
+ sRecycledCount--;
target.next = null;
}
}
@@ -7545,6 +7589,10 @@
}
public void recycle() {
+ if (child == null) {
+ throw new IllegalStateException("already recycled once");
+ }
+
synchronized (sRecycleLock) {
if (sRecycledCount < MAX_RECYCLED) {
next = sRecycleBin;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 1bb0311..131ad4c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -339,6 +339,7 @@
volatile Object mLocalDragState;
final PointF mDragPoint = new PointF();
final PointF mLastTouchPoint = new PointF();
+ int mLastTouchSource;
private boolean mProfileRendering;
private Choreographer.FrameCallback mRenderProfiler;
@@ -4122,6 +4123,7 @@
if (event.isTouchEvent()) {
mLastTouchPoint.x = event.getRawX();
mLastTouchPoint.y = event.getRawY();
+ mLastTouchSource = event.getSource();
}
return FORWARD;
}
@@ -5475,6 +5477,10 @@
outLocation.y = (int) mLastTouchPoint.y;
}
+ public int getLastTouchSource() {
+ return mLastTouchSource;
+ }
+
public void setDragFocus(View newDragTarget) {
if (mCurrentDragView != newDragTarget) {
mCurrentDragView = newDragTarget;
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index dfe0cc7..ee70891 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -34,6 +34,7 @@
import android.media.session.MediaController;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.SystemProperties;
@@ -794,6 +795,40 @@
return mCallback;
}
+ /**
+ * Set an observer to collect frame stats for each frame rendererd in this window.
+ *
+ * Must be in hardware rendering mode.
+ * @hide
+ */
+ public final void addFrameStatsObserver(@NonNull FrameStatsObserver fso) {
+ final View decorView = getDecorView();
+ if (decorView == null) {
+ throw new IllegalStateException("can't observe a Window without an attached view");
+ }
+
+ if (fso == null) {
+ throw new NullPointerException("FrameStatsObserver cannot be null");
+ }
+
+ if (fso.isRegistered()) {
+ throw new IllegalStateException("FrameStatsObserver already registered on a Window.");
+ }
+
+ decorView.addFrameStatsObserver(fso);
+ }
+
+ /**
+ * Remove observer and stop listening to frame stats for this window.
+ * @hide
+ */
+ public final void removeFrameStatsObserver(FrameStatsObserver fso) {
+ final View decorView = getDecorView();
+ if (decorView != null) {
+ getDecorView().removeFrameStatsObserver(fso);
+ }
+ }
+
/** @hide */
public final void setOnWindowDismissedCallback(OnWindowDismissedCallback dcb) {
mOnWindowDismissedCallback = dcb;
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 4a1142f..6e38b32 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -441,12 +441,6 @@
public int getCameraLensCoverState();
/**
- * Switch the keyboard layout for the given device.
- * Direction should be +1 or -1 to go to the next or previous keyboard layout.
- */
- public void switchKeyboardLayout(int deviceId, int direction);
-
- /**
* Switch the input method, to be precise, input method subtype.
*
* @param forwardDirection {@code true} to rotate in a forward direction.
diff --git a/core/java/android/webkit/ServiceWorkerClient.java b/core/java/android/webkit/ServiceWorkerClient.java
new file mode 100644
index 0000000..85de698
--- /dev/null
+++ b/core/java/android/webkit/ServiceWorkerClient.java
@@ -0,0 +1,41 @@
+/*
+ * 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.webkit;
+
+
+public class ServiceWorkerClient {
+
+ /**
+ * Notify the host application of a resource request and allow the
+ * application to return the data. If the return value is null, the
+ * Service Worker will continue to load the resource as usual.
+ * Otherwise, the return response and data will be used.
+ * NOTE: This method is called on a thread other than the UI thread
+ * so clients should exercise caution when accessing private data
+ * or the view system.
+ *
+ * @param request Object containing the details of the request.
+ * @return A {@link android.webkit.WebResourceResponse} containing the
+ * response information or null if the WebView should load the
+ * resource itself.
+ * @see {@link WebViewClient#shouldInterceptRequest()}
+ */
+ public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
+ return null;
+ }
+}
+
diff --git a/core/java/android/webkit/ServiceWorkerController.java b/core/java/android/webkit/ServiceWorkerController.java
new file mode 100644
index 0000000..9115558
--- /dev/null
+++ b/core/java/android/webkit/ServiceWorkerController.java
@@ -0,0 +1,52 @@
+/*
+ * 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.webkit;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+/**
+ * Manages Service Workers used by WebView.
+ */
+public abstract class ServiceWorkerController {
+
+ /**
+ * Returns the default ServiceWorkerController instance. At present there is
+ * only one ServiceWorkerController instance for all WebView instances,
+ * however this restriction may be relaxed in the future.
+ *
+ * @return The default ServiceWorkerController instance.
+ */
+ @NonNull
+ public static ServiceWorkerController getInstance() {
+ return WebViewFactory.getProvider().getServiceWorkerController();
+ }
+
+ /**
+ * Gets the settings for all service workers.
+ *
+ * @return The current ServiceWorkerWebSettings
+ */
+ @NonNull
+ public abstract ServiceWorkerWebSettings getServiceWorkerWebSettings();
+
+ /**
+ * Sets the client to capture service worker related callbacks.
+ */
+ public abstract void setServiceWorkerClient(@Nullable ServiceWorkerClient client);
+}
+
diff --git a/core/java/android/webkit/ServiceWorkerWebSettings.java b/core/java/android/webkit/ServiceWorkerWebSettings.java
new file mode 100644
index 0000000..8b104d1c
--- /dev/null
+++ b/core/java/android/webkit/ServiceWorkerWebSettings.java
@@ -0,0 +1,88 @@
+/*
+ * 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.webkit;
+
+/**
+ * Manages settings state for all Service Workers. These settings are not tied to
+ * the lifetime of any WebView because service workers can outlive WebView instances.
+ * The settings are similar to {@link WebSettings} but only settings relevant to
+ * Service Workers are supported.
+ */
+// This is an abstract base class: concrete ServiceWorkerControllers must
+// create a class derived from this, and return an instance of it in the
+// ServiceWorkerController.getServiceWorkerWebSettings() method implementation.
+public abstract class ServiceWorkerWebSettings {
+
+ /**
+ * Overrides the way the cache is used, see {@link WebSettings#setCacheMode}.
+ *
+ * @param mode the mode to use
+ */
+ public abstract void setCacheMode(int mode);
+
+ /**
+ * Gets the current setting for overriding the cache mode.
+ *
+ * @return the current setting for overriding the cache mode
+ * @see #setCacheMode
+ */
+ public abstract int getCacheMode();
+
+ /**
+ * Enables or disables content URL access from Service Workers, see
+ * {@link WebSettings#setAllowContentAccess}.
+ */
+ public abstract void setAllowContentAccess(boolean allow);
+
+ /**
+ * Gets whether Service Workers support content URL access.
+ *
+ * @see #setAllowContentAccess
+ */
+ public abstract boolean getAllowContentAccess();
+
+ /**
+ * Enables or disables file access within Service Workers, see
+ * {@link WebSettings#setAllowFileAccess}.
+ */
+ public abstract void setAllowFileAccess(boolean allow);
+
+ /**
+ * Gets whether Service Workers support file access.
+ *
+ * @see #setAllowFileAccess
+ */
+ public abstract boolean getAllowFileAccess();
+
+ /**
+ * Sets whether the Service Workers should not load resources from the network,
+ * see {@link WebSettings#setBlockNetworkLoads}.
+ *
+ * @param flag whether the Service Workers should not load any resources from the
+ * network
+ */
+ public abstract void setBlockNetworkLoads(boolean flag);
+
+ /**
+ * Gets whether Service Workers are prohibited from loading any resources from the network.
+ *
+ * @return true if the Service Workers are not allowed to load any resources from the network
+ * @see #setBlockNetworkLoads
+ */
+ public abstract boolean getBlockNetworkLoads();
+}
+
diff --git a/core/java/android/webkit/TokenBindingService.java b/core/java/android/webkit/TokenBindingService.java
index f11ce51..f7caac7 100644
--- a/core/java/android/webkit/TokenBindingService.java
+++ b/core/java/android/webkit/TokenBindingService.java
@@ -38,6 +38,21 @@
public static final String KEY_ALGORITHM_ECDSAP256 = "ECDSAP256";
/**
+ * Provides the KeyPair information.
+ */
+ public static abstract class TokenBindingKey {
+ /**
+ * The public, private key pair.
+ */
+ public abstract KeyPair getKeyPair();
+
+ /**
+ * The algorithm that is used to generate the key pair.
+ */
+ public abstract String getAlgorithm();
+ }
+
+ /**
* Returns the default TokenBinding service instance. At present there is
* only one token binding service instance for all WebView instances,
* however this restriction may be relaxed in the future.
@@ -59,16 +74,25 @@
/**
* Retrieves the key pair for a given origin from the internal
* TokenBinding key store asynchronously.
- * Will create a key pair if one does not exist.
+ *
+ * The user can provide a list of acceptable algorithms for the retrieved
+ * key pair. If a key pair exists and it is in the list of algorithms, then
+ * the key is returned. If it is not in the list, no key is returned.
+ *
+ * If no key pair exists, WebView chooses an algorithm from the list, in
+ * the order given, to generate a key.
+ *
+ * The user can pass a null if any algorithm is acceptable.
*
* @param origin The origin for the server.
- * @param algorithm The algorithm for generating the token binding key.
+ * @param algorithm The list of algorithms. Can be null. An
+ * IllegalArgumentException is thrown if array is empty.
* @param callback The callback that will be called when key is available.
* Cannot be null.
*/
public abstract void getKey(Uri origin,
- String algorithm,
- ValueCallback<KeyPair> callback);
+ String[] algorithm,
+ ValueCallback<TokenBindingKey> callback);
/**
* Deletes specified key (for use when associated cookie is cleared).
*
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 054eafc..b04b4c0 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -295,15 +295,27 @@
Application initialApplication = AppGlobals.getInitialApplication();
Context webViewContext = null;
- Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "initialApplication.createPackageContext()");
+ Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "PackageManager.getApplicationInfo()");
try {
// Construct a package context to load the Java code into the current app.
// This is done as early as possible since by constructing a package context we
// register the WebView package as a dependency for the current application so that
// when the WebView package is updated this application will be killed.
- webViewContext = initialApplication.createPackageContext(
- sPackageInfo.packageName,
- Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
+ ApplicationInfo applicationInfo =
+ initialApplication.getPackageManager().getApplicationInfo(
+ sPackageInfo.packageName, PackageManager.GET_SHARED_LIBRARY_FILES
+ | PackageManager.MATCH_DEBUG_TRIAGED_MISSING
+ // make sure that we fetch the current provider even if its not installed
+ // for the current user
+ | PackageManager.MATCH_UNINSTALLED_PACKAGES);
+ Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW,
+ "initialApplication.createApplicationContext");
+ try {
+ webViewContext = initialApplication.createApplicationContext(applicationInfo,
+ Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW);
+ }
} catch (PackageManager.NameNotFoundException e) {
throw new MissingWebViewPackageException(e);
} finally {
diff --git a/core/java/android/webkit/WebViewFactoryProvider.java b/core/java/android/webkit/WebViewFactoryProvider.java
index 2b66a83..8359a10 100644
--- a/core/java/android/webkit/WebViewFactoryProvider.java
+++ b/core/java/android/webkit/WebViewFactoryProvider.java
@@ -111,6 +111,14 @@
TokenBindingService getTokenBindingService();
/**
+ * Gets the ServiceWorkerController instance for this WebView implementation. The
+ * implementation must return the same instance on subsequent calls.
+ *
+ * @return the ServiceWorkerController instance
+ */
+ ServiceWorkerController getServiceWorkerController();
+
+ /**
* Gets the singleton WebIconDatabase instance for this WebView implementation. The
* implementation must return the same instance on subsequent calls.
*
diff --git a/core/java/com/android/internal/app/UnlaunchableAppActivity.java b/core/java/com/android/internal/app/UnlaunchableAppActivity.java
new file mode 100644
index 0000000..aada6e3
--- /dev/null
+++ b/core/java/com/android/internal/app/UnlaunchableAppActivity.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.app;
+
+import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.internal.R;
+
+/**
+ * A dialog shown to the user when they try to launch an app from a quiet profile
+ * ({@link UserManager#isQuietModeEnabled(UserHandle)}, or when the app is suspended by the
+ * profile owner or device owner.
+ */
+public class UnlaunchableAppActivity extends Activity
+ implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
+ private static final String TAG = "UnlaunchableAppActivity";
+
+ private static final int UNLAUNCHABLE_REASON_QUIET_MODE = 1;
+ private static final int UNLAUNCHABLE_REASON_SUSPENDED_PACKAGE = 2;
+ private static final String EXTRA_UNLAUNCHABLE_REASON = "unlaunchable_reason";
+
+ private int mUserId;
+ private int mReason;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Intent intent = getIntent();
+ mReason = intent.getIntExtra(EXTRA_UNLAUNCHABLE_REASON, -1);
+ mUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+
+ if (mUserId == UserHandle.USER_NULL) {
+ Log.wtf(TAG, "Invalid user id: " + mUserId + ". Stopping.");
+ finish();
+ return;
+ }
+
+ String dialogTitle;
+ String dialogMessage;
+ if (mReason == UNLAUNCHABLE_REASON_QUIET_MODE) {
+ dialogTitle = getResources().getString(R.string.work_mode_off_title);
+ dialogMessage = getResources().getString(R.string.work_mode_off_message);
+ } else if (mReason == UNLAUNCHABLE_REASON_SUSPENDED_PACKAGE) {
+ PackageManager pm = getPackageManager();
+ DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(
+ Context.DEVICE_POLICY_SERVICE);
+ String packageName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+ String packageLabel = packageName;
+ try {
+ Context userContext = createPackageContextAsUser(packageName, 0,
+ UserHandle.of(mUserId));
+ ApplicationInfo appInfo = userContext.getApplicationInfo();
+ if (appInfo != null) {
+ packageLabel = userContext.getPackageManager().getApplicationLabel(appInfo)
+ .toString();
+ }
+ } catch (NameNotFoundException e) {
+ }
+ dialogTitle = String.format(getResources().getString(R.string.suspended_package_title),
+ packageLabel);
+ dialogMessage = dpm.getShortSupportMessageForUser(dpm.getProfileOwnerAsUser(mUserId),
+ mUserId);
+ if (dialogMessage == null) {
+ dialogMessage = String.format(
+ getResources().getString(R.string.suspended_package_message),
+ dpm.getProfileOwnerNameAsUser(mUserId));
+ }
+ } else {
+ Log.wtf(TAG, "Invalid unlaunchable type: " + mReason);
+ finish();
+ return;
+ }
+
+ View rootView = LayoutInflater.from(this).inflate(R.layout.unlaunchable_app_activity, null);
+ TextView titleView = (TextView)rootView.findViewById(R.id.unlaunchable_app_title);
+ TextView messageView = (TextView)rootView.findViewById(R.id.unlaunchable_app_message);
+ titleView.setText(dialogTitle);
+ messageView.setText(dialogMessage);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setView(rootView)
+ .setOnDismissListener(this);
+ if (mReason == UNLAUNCHABLE_REASON_QUIET_MODE) {
+ builder.setPositiveButton(R.string.work_mode_turn_on, this)
+ .setNegativeButton(R.string.cancel, null);
+ } else {
+ builder.setPositiveButton(R.string.ok, null);
+ }
+ builder.show();
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ finish();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (mReason == UNLAUNCHABLE_REASON_QUIET_MODE && which == DialogInterface.BUTTON_POSITIVE) {
+ UserManager.get(this).setQuietModeEnabled(mUserId, false);
+ }
+ }
+
+ private static final Intent createBaseIntent() {
+ Intent intent = new Intent();
+ intent.setComponent(new ComponentName("android", UnlaunchableAppActivity.class.getName()));
+ intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ return intent;
+ }
+
+ public static Intent createInQuietModeDialogIntent(int userId) {
+ Intent intent = createBaseIntent();
+ intent.putExtra(EXTRA_UNLAUNCHABLE_REASON, UNLAUNCHABLE_REASON_QUIET_MODE);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ return intent;
+ }
+
+ public static Intent createPackageSuspendedDialogIntent(String packageName, int userId) {
+ Intent intent = createBaseIntent();
+ intent.putExtra(EXTRA_UNLAUNCHABLE_REASON, UNLAUNCHABLE_REASON_SUSPENDED_PACKAGE);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName);
+ return intent;
+ }
+}
diff --git a/core/java/com/android/internal/inputmethod/InputMethodSubtypeHandle.java b/core/java/com/android/internal/inputmethod/InputMethodSubtypeHandle.java
new file mode 100644
index 0000000..975021e8
--- /dev/null
+++ b/core/java/com/android/internal/inputmethod/InputMethodSubtypeHandle.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.inputmethod;
+
+import android.text.TextUtils;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import java.util.Objects;
+
+public class InputMethodSubtypeHandle {
+ private final String mInputMethodId;
+ private final int mSubtypeId;
+
+ public InputMethodSubtypeHandle(InputMethodInfo info, InputMethodSubtype subtype) {
+ mInputMethodId = info.getId();
+ if (subtype != null) {
+ mSubtypeId = subtype.hashCode();
+ } else {
+ mSubtypeId = 0;
+ }
+ }
+
+ public InputMethodSubtypeHandle(String inputMethodId, int subtypeId) {
+ mInputMethodId = inputMethodId;
+ mSubtypeId = subtypeId;
+ }
+
+ public String getInputMethodId() {
+ return mInputMethodId;
+ }
+
+ public int getSubtypeId() {
+ return mSubtypeId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || !(o instanceof InputMethodSubtypeHandle)) {
+ return false;
+ }
+ InputMethodSubtypeHandle other = (InputMethodSubtypeHandle) o;
+ return TextUtils.equals(mInputMethodId, other.getInputMethodId())
+ && mSubtypeId == other.getSubtypeId();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(mInputMethodId) * 31 + mSubtypeId;
+ }
+
+ @Override
+ public String toString() {
+ return "InputMethodSubtypeHandle{mInputMethodId=" + mInputMethodId
+ + ", mSubtypeId=" + mSubtypeId + "}";
+ }
+}
diff --git a/core/java/com/android/internal/logging/MetricsConstants.java b/core/java/com/android/internal/logging/MetricsConstants.java
index 37bf71c..522732d 100644
--- a/core/java/com/android/internal/logging/MetricsConstants.java
+++ b/core/java/com/android/internal/logging/MetricsConstants.java
@@ -22,8 +22,7 @@
*/
public interface MetricsConstants {
// These constants must match those in the analytic pipeline, do not edit.
- // Add temporary values to the top of MetricsLogger instead.
- public static final int VIEW_UNKNOWN = 0;
+ // define metric categories in frameworks/base/core/proto/src/metrics_constants.proto.
public static final int MAIN_SETTINGS = 1;
public static final int ACCESSIBILITY = 2;
public static final int ACCESSIBILITY_CAPTION_PROPERTIES = 3;
@@ -65,7 +64,7 @@
public static final int DEVELOPMENT = 39;
public static final int DEVICEINFO = 40;
public static final int DEVICEINFO_IMEI_INFORMATION = 41;
- public static final int DEVICEINFO_MEMORY = 42;
+ public static final int DEVICEINFO_STORAGE = 42;
public static final int DEVICEINFO_SIM_STATUS = 43;
public static final int DEVICEINFO_STATUS = 44;
public static final int DEVICEINFO_USB = 45;
@@ -134,7 +133,6 @@
public static final int WIFI_INFO = 108;
public static final int WIFI_P2P = 109;
public static final int WIRELESS = 110;
- public static final int QS_PANEL = 111;
public static final int QS_AIRPLANEMODE = 112;
public static final int QS_BLUETOOTH = 113;
public static final int QS_CAST = 114;
@@ -282,10 +280,73 @@
public static final int ACTION_WIGGLE_CAMERA_GESTURE = 256;
public static final int QS_WORKMODE = 257;
public static final int BACKGROUND_CHECK_SUMMARY = 258;
+ public static final int QS_LOCK_TILE = 259;
+ public static final int QS_USER_TILE = 260;
+ public static final int QS_BATTERY_TILE = 261;
+ public static final int NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 262;
+ public static final int ACTION_ZEN_ALLOW_PEEK = 263;
+ public static final int ACTION_ZEN_ALLOW_LIGHTS = 264;
+ public static final int NOTIFICATION_TOPIC_NOTIFICATION = 265;
+ public static final int ACTION_DEFAULT_SMS_APP_CHANGED = 266;
+ public static final int QS_COLOR_MATRIX = 267;
+ public static final int QS_CUSTOM = 268;
+ public static final int ACTION_ZEN_ALLOW_SCREEN_ON = 269;
- // These constants must match those in the analytic pipeline, do not edit.
- // Add temporary values to the top of MetricsLogger instead.
+ /**
+ * Logged when the user docks a window from recents by longpressing a task and dragging it to
+ * the dock area.
+ */
+ public static final int ACTION_WINDOW_DOCK_DRAG_DROP = 270;
- //aliases
- public static final int DEVICEINFO_STORAGE = DEVICEINFO_MEMORY;
+ /**
+ * Logged when the user docks a fullscreen window by long pressing recents which also opens
+ * recents on the lower/right side.
+ */
+ public static final int ACTION_WINDOW_DOCK_LONGPRESS = 271;
+
+ /**
+ * Logged when the user docks a window by dragging from the navbar which also opens recents on
+ * the lower/right side.
+ */
+ public static final int ACTION_WINDOW_DOCK_SWIPE = 272;
+
+ /**
+ * Logged when the user launches a profile-specific app and we intercept it with the confirm
+ * credentials UI.
+ */
+ public static final int PROFILE_CHALLENGE = 273;
+ public static final int QS_BATTERY_DETAIL = 274;
+
+ /**
+ * Logged when the user goes into the overview history.
+ */
+ public static final int OVERVIEW_HISTORY = 275;
+
+ /**
+ * Logged when the user pages through overview.
+ */
+ public static final int ACTION_OVERVIEW_PAGE = 276;
+
+ /**
+ * Logged when the user launches a task from overview.
+ */
+ public static final int ACTION_OVERVIEW_SELECT = 277;
+
+ /** Logged when the user views the emergency info. */
+ public static final int ACTION_VIEW_EMERGENCY_INFO = 278;
+
+ /** Logged when the user views the edit emergency info activity. */
+ public static final int ACTION_EDIT_EMERGENCY_INFO = 279;
+
+ /** Logged when the user edits an emergency info field. */
+ public static final int ACTION_EDIT_EMERGENCY_INFO_FIELD = 280;
+
+ /** Logged when the user adds a new emergency contact. */
+ public static final int ACTION_ADD_EMERGENCY_CONTACT = 281;
+
+ /** Logged when the user deletes an emergency contact. */
+ public static final int ACTION_DELETE_EMERGENCY_CONTACT = 282;
+
+ /** Logged when the user calls an emergency contact. */
+ public static final int ACTION_CALL_EMERGENCY_CONTACT = 283;
}
diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index b0b25d3..183d8d7 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -15,69 +15,21 @@
*/
package com.android.internal.logging;
-
import android.content.Context;
import android.os.Build;
import android.view.View;
+import com.android.internal.logging.MetricsProto.MetricsEvent;
+
/**
* Log all the things.
*
* @hide
*/
-public class MetricsLogger implements MetricsConstants {
- // Temporary constants go here, to await migration to MetricsConstants.
- public static final int QS_USER_TILE = 258;
- public static final int QS_BATTERY_TILE = 259;
- public static final int NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 260;
- public static final int ACTION_ZEN_ALLOW_PEEK = 261;
- public static final int ACTION_ZEN_ALLOW_LIGHTS = 262;
- public static final int NOTIFICATION_TOPIC_NOTIFICATION = 263;
- public static final int ACTION_DEFAULT_SMS_APP_CHANGED = 264;
- public static final int QS_COLOR_MATRIX = 265;
- public static final int QS_CUSTOM = 266;
- public static final int ACTION_ZEN_ALLOW_SCREEN_ON = 267;
+public class MetricsLogger implements com.android.internal.logging.MetricsConstants {
+ // define metric categories in frameworks/base/core/proto/src/metrics_constants.proto.
- /**
- * Logged when the user docks a window from recents by longpressing a task and dragging it to
- * the dock area.
- */
- public static final int ACTION_WINDOW_DOCK_DRAG_DROP = 268;
-
- /**
- * Logged when the user docks a fullscreen window by long pressing recents which also opens
- * recents on the lower/right side.
- */
- public static final int ACTION_WINDOW_DOCK_LONGPRESS = 269;
-
- /**
- * Logged when the user docks a window by dragging from the navbar which also opens recents on
- * the lower/right side.
- */
- public static final int ACTION_WINDOW_DOCK_SWIPE = 270;
-
- /**
- * Logged when the user launches a profile-specific app and we intercept it with the confirm
- * credentials UI.
- */
- public static final int PROFILE_CHALLENGE = 271;
- public static final int QS_BATTERY_DETAIL = 272;
-
- /**
- * Logged when the user goes into the overview history.
- */
- public static final int OVERVIEW_HISTORY = 273;
-
- /**
- * Logged when the user pages through overview.
- */
- public static final int ACTION_OVERVIEW_PAGE = 274;
-
- /**
- * Logged when the user launches a task from overview.
- */
- public static final int ACTION_OVERVIEW_SELECT = 275;
-
+ public static final int VIEW_UNKNOWN = MetricsEvent.VIEW_UNKNOWN;
public static void visible(Context context, int category) throws IllegalArgumentException {
if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) {
diff --git a/core/java/com/android/internal/os/KernelCpuSpeedReader.java b/core/java/com/android/internal/os/KernelCpuSpeedReader.java
index 5b776ac..3f6ebb9 100644
--- a/core/java/com/android/internal/os/KernelCpuSpeedReader.java
+++ b/core/java/com/android/internal/os/KernelCpuSpeedReader.java
@@ -16,8 +16,11 @@
package com.android.internal.os;
import android.text.TextUtils;
+import android.system.OsConstants;
import android.util.Slog;
+import libcore.io.Libcore;
+
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
@@ -29,7 +32,7 @@
*
* freq time
*
- * where time is measured in 1/100 seconds.
+ * where time is measured in jiffies.
*/
public class KernelCpuSpeedReader {
private static final String TAG = "KernelCpuSpeedReader";
@@ -38,6 +41,9 @@
private final long[] mLastSpeedTimes;
private final long[] mDeltaSpeedTimes;
+ // How long a CPU jiffy is in milliseconds.
+ private final long mJiffyMillis;
+
/**
* @param cpuNumber The cpu (cpu0, cpu1, etc) whose state to read.
*/
@@ -46,6 +52,8 @@
cpuNumber);
mLastSpeedTimes = new long[numSpeedSteps];
mDeltaSpeedTimes = new long[numSpeedSteps];
+ long jiffyHz = Libcore.os.sysconf(OsConstants._SC_CLK_TCK);
+ mJiffyMillis = 1000/jiffyHz;
}
/**
@@ -62,8 +70,7 @@
splitter.setString(line);
Long.parseLong(splitter.next());
- // The proc file reports time in 1/100 sec, so convert to milliseconds.
- long time = Long.parseLong(splitter.next()) * 10;
+ long time = Long.parseLong(splitter.next()) * mJiffyMillis;
if (time < mLastSpeedTimes[speedIndex]) {
// The stats reset when the cpu hotplugged. That means that the time
// we read is offset from 0, so the time is the delta.
diff --git a/core/java/com/android/internal/os/ProcessCpuTracker.java b/core/java/com/android/internal/os/ProcessCpuTracker.java
index bf97f1f..d831902 100644
--- a/core/java/com/android/internal/os/ProcessCpuTracker.java
+++ b/core/java/com/android/internal/os/ProcessCpuTracker.java
@@ -67,10 +67,10 @@
static final int PROCESS_STAT_UTIME = 2;
static final int PROCESS_STAT_STIME = 3;
- /** Stores user time and system time in 100ths of a second. */
+ /** Stores user time and system time in jiffies. */
private final long[] mProcessStatsData = new long[4];
- /** Stores user time and system time in 100ths of a second. Used for
+ /** Stores user time and system time in jiffies. Used for
* public API to retrieve CPU use for a process. Must lock while in use. */
private final long[] mSinglePidStatsData = new long[4];
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4e8f19c..a1b18fe 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -136,6 +136,7 @@
private static final String LOCK_SCREEN_DEVICE_OWNER_INFO = "lockscreen.device_owner_info";
private static final String ENABLED_TRUST_AGENTS = "lockscreen.enabledtrustagents";
+ private static final String IS_TRUST_USUALLY_MANAGED = "lockscreen.istrustusuallymanaged";
private static final String SEPARATE_PROFILE_CHALLENGE_KEY = "lockscreen.profilechallenge";
@@ -149,6 +150,30 @@
private ILockSettings mLockSettingsService;
private UserManager mUserManager;
+ /**
+ * Use {@link TrustManager#isTrustUsuallyManaged(int)}.
+ *
+ * This returns the lazily-peristed value and should only be used by TrustManagerService.
+ */
+ public boolean isTrustUsuallyManaged(int userId) {
+ if (!(mLockSettingsService instanceof ILockSettings.Stub)) {
+ throw new IllegalStateException("May only be called by TrustManagerService. "
+ + "Use TrustManager.isTrustUsuallyManaged()");
+ }
+ try {
+ return getLockSettings().getBoolean(IS_TRUST_USUALLY_MANAGED, false, userId);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ public void setTrustUsuallyManaged(boolean managed, int userId) {
+ try {
+ getLockSettings().setBoolean(IS_TRUST_USUALLY_MANAGED, managed, userId);
+ } catch (RemoteException e) {
+ // System dead.
+ }
+ }
public static final class RequestThrottledException extends Exception {
private int mTimeoutMs;
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 5aa6a73..edced56 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -28,14 +28,18 @@
#include <EGL/eglext.h>
#include <EGL/egl_cache.h>
+#include <utils/Looper.h>
+#include <utils/RefBase.h>
#include <utils/StrongPointer.h>
#include <android_runtime/android_view_Surface.h>
#include <system/window.h>
#include "android_view_GraphicBuffer.h"
+#include "android_os_MessageQueue.h"
#include <Animator.h>
#include <AnimationContext.h>
+#include <FrameInfo.h>
#include <IContextFactory.h>
#include <JankTracker.h>
#include <RenderNode.h>
@@ -50,6 +54,12 @@
using namespace android::uirenderer;
using namespace android::uirenderer::renderthread;
+struct {
+ jfieldID buffer;
+ jfieldID messageQueue;
+ jmethodID notifyData;
+} gFrameStatsObserverClassInfo;
+
static JNIEnv* getenv(JavaVM* vm) {
JNIEnv* env;
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
@@ -207,6 +217,99 @@
RootRenderNode* mRootNode;
};
+class ObserverProxy;
+
+class NotifyHandler : public MessageHandler {
+public:
+ NotifyHandler(JavaVM* vm) : mVm(vm) {}
+
+ void setObserver(ObserverProxy* observer) {
+ mObserver = observer;
+ }
+
+ void setBuffer(BufferPool::Buffer* buffer) {
+ mBuffer = buffer;
+ }
+
+ virtual void handleMessage(const Message& message);
+
+private:
+ JavaVM* mVm;
+
+ sp<ObserverProxy> mObserver;
+ BufferPool::Buffer* mBuffer;
+};
+
+class ObserverProxy : public FrameStatsObserver {
+public:
+ ObserverProxy(JavaVM *vm, jobject fso) : mVm(vm) {
+ JNIEnv* env = getenv(mVm);
+
+ jlongArray longArrayLocal = env->NewLongArray(kBufferSize);
+ LOG_ALWAYS_FATAL_IF(longArrayLocal == nullptr,
+ "OOM: can't allocate frame stats buffer");
+ env->SetObjectField(fso, gFrameStatsObserverClassInfo.buffer, longArrayLocal);
+
+ mFsoWeak = env->NewWeakGlobalRef(fso);
+ LOG_ALWAYS_FATAL_IF(mFsoWeak == nullptr,
+ "unable to create frame stats observer reference");
+
+ jobject messageQueueLocal =
+ env->GetObjectField(fso, gFrameStatsObserverClassInfo.messageQueue);
+ mMessageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueLocal);
+ LOG_ALWAYS_FATAL_IF(mMessageQueue == nullptr, "message queue not available");
+
+ mMessageHandler = new NotifyHandler(mVm);
+ LOG_ALWAYS_FATAL_IF(mMessageHandler == nullptr,
+ "OOM: unable to allocate NotifyHandler");
+ }
+
+ ~ObserverProxy() {
+ JNIEnv* env = getenv(mVm);
+ env->DeleteWeakGlobalRef(mFsoWeak);
+ }
+
+ jweak getJavaObjectRef() {
+ return mFsoWeak;
+ }
+
+ virtual void notify(BufferPool::Buffer* buffer) {
+ buffer->incRef();
+ mMessageHandler->setBuffer(buffer);
+ mMessageHandler->setObserver(this);
+ mMessageQueue->getLooper()->sendMessage(mMessageHandler, mMessage);
+ }
+
+private:
+ static const int kBufferSize = static_cast<int>(FrameInfoIndex::NumIndexes);
+
+ JavaVM* mVm;
+ jweak mFsoWeak;
+
+ sp<MessageQueue> mMessageQueue;
+ sp<NotifyHandler> mMessageHandler;
+ Message mMessage;
+};
+
+void NotifyHandler::handleMessage(const Message& message) {
+ JNIEnv* env = getenv(mVm);
+
+ jobject target = env->NewLocalRef(mObserver->getJavaObjectRef());
+
+ if (target != nullptr) {
+ jobject javaBuffer = env->GetObjectField(target, gFrameStatsObserverClassInfo.buffer);
+ if (javaBuffer != nullptr) {
+ env->SetLongArrayRegion(reinterpret_cast<jlongArray>(javaBuffer),
+ 0, mBuffer->getSize(), mBuffer->getBuffer());
+ env->CallVoidMethod(target, gFrameStatsObserverClassInfo.notifyData);
+ env->DeleteLocalRef(target);
+ }
+ }
+
+ mBuffer->release();
+ mObserver.clear();
+}
+
static void android_view_ThreadedRenderer_setAtlas(JNIEnv* env, jobject clazz,
jlong proxyPtr, jobject graphicBuffer, jlongArray atlasMapArray) {
sp<GraphicBuffer> buffer = graphicBufferForJavaObject(env, graphicBuffer);
@@ -468,6 +571,42 @@
}
// ----------------------------------------------------------------------------
+// FrameStatsObserver
+// ----------------------------------------------------------------------------
+
+static jlong android_view_ThreadedRenderer_addFrameStatsObserver(JNIEnv* env,
+ jclass clazz, jlong proxyPtr, jobject fso) {
+ JavaVM* vm = nullptr;
+ if (env->GetJavaVM(&vm) != JNI_OK) {
+ LOG_ALWAYS_FATAL("Unable to get Java VM");
+ return 0;
+ }
+
+ renderthread::RenderProxy* renderProxy =
+ reinterpret_cast<renderthread::RenderProxy*>(proxyPtr);
+
+ FrameStatsObserver* observer = new ObserverProxy(vm, fso);
+ renderProxy->addFrameStatsObserver(observer);
+ return reinterpret_cast<jlong>(observer);
+}
+
+static void android_view_ThreadedRenderer_removeFrameStatsObserver(JNIEnv* env, jclass clazz,
+ jlong proxyPtr, jlong observerPtr) {
+ FrameStatsObserver* observer = reinterpret_cast<FrameStatsObserver*>(observerPtr);
+ renderthread::RenderProxy* renderProxy =
+ reinterpret_cast<renderthread::RenderProxy*>(proxyPtr);
+
+ renderProxy->removeFrameStatsObserver(observer);
+}
+
+static jint android_view_ThreadedRenderer_getDroppedFrameReportCount(JNIEnv* env, jclass clazz,
+ jlong proxyPtr) {
+ renderthread::RenderProxy* renderProxy =
+ reinterpret_cast<renderthread::RenderProxy*>(proxyPtr);
+ return renderProxy->getDroppedFrameReportCount();
+}
+
+// ----------------------------------------------------------------------------
// Shaders
// ----------------------------------------------------------------------------
@@ -523,9 +662,26 @@
{ "nRemoveRenderNode", "(JJ)V", (void*) android_view_ThreadedRenderer_removeRenderNode},
{ "nDrawRenderNode", "(JJ)V", (void*) android_view_ThreadedRendererd_drawRenderNode},
{ "nSetContentDrawBounds", "(JIIII)V", (void*)android_view_ThreadedRenderer_setContentDrawBounds},
+ { "nAddFrameStatsObserver",
+ "(JLandroid/view/FrameStatsObserver;)J",
+ (void*)android_view_ThreadedRenderer_addFrameStatsObserver },
+ { "nRemoveFrameStatsObserver",
+ "(JJ)V",
+ (void*)android_view_ThreadedRenderer_removeFrameStatsObserver },
+ { "nGetDroppedFrameReportCount",
+ "(J)J",
+ (void*)android_view_ThreadedRenderer_getDroppedFrameReportCount },
};
int register_android_view_ThreadedRenderer(JNIEnv* env) {
+ jclass clazz = FindClassOrDie(env, "android/view/FrameStatsObserver");
+ gFrameStatsObserverClassInfo.messageQueue =
+ GetFieldIDOrDie(env, clazz, "mMessageQueue", "Landroid/os/MessageQueue;");
+ gFrameStatsObserverClassInfo.buffer =
+ GetFieldIDOrDie(env, clazz, "mBuffer", "[J");
+ gFrameStatsObserverClassInfo.notifyData =
+ GetMethodIDOrDie(env, clazz, "notifyDataAvailable", "()V");
+
return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index a82bfbe..3d4b8b4 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -339,7 +339,6 @@
<protected-broadcast android:name="android.app.action.DEVICE_OWNER_CHANGED" />
<protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED" />
- <protected-broadcast android:name="android.intent.action.AVAILABILITY_CHANGED" />
<!-- Added in N -->
<protected-broadcast android:name="android.intent.action.ANR" />
@@ -3020,6 +3019,12 @@
</intent-filter>
</activity>
+ <activity android:name="com.android.internal.app.UnlaunchableAppActivity"
+ android:theme="@style/Theme.Material.DayNight.Dialog.Alert"
+ android:excludeFromRecents="true"
+ android:process=":ui">
+ </activity>
+
<receiver android:name="com.android.server.BootReceiver"
android:systemUserOnly="true">
<intent-filter android:priority="1000">
diff --git a/core/res/res/drawable/ic_notification_alert.xml b/core/res/res/drawable/ic_notification_alert.xml
index d17dfc1..c8514ac 100644
--- a/core/res/res/drawable/ic_notification_alert.xml
+++ b/core/res/res/drawable/ic_notification_alert.xml
@@ -20,14 +20,14 @@
android:viewportHeight="24.0">
<path
android:pathData="M18.4,2.2L17.0,3.6c2.0,1.4 3.3,3.7 3.5,6.4l2.0,0.0C22.3,6.8 20.8,4.0 18.4,2.2z"
- android:fillColor="#231F20"/>
+ android:fillColor="#FFFFFFFF"/>
<path
android:pathData="M7.1,3.6L5.7,2.2C3.3,4.0 1.7,6.8 1.5,10.0l2.0,0.0C3.7,7.3 5.0,5.0 7.1,3.6z"
- android:fillColor="#231F20"/>
+ android:fillColor="#FFFFFFFF"/>
<path
android:pathData="M18.5,10.5c0.0,-3.1 -2.1,-5.6 -5.0,-6.3L13.5,3.5C13.5,2.7 12.8,2.0 12.0,2.0s-1.5,0.7 -1.5,1.5l0.0,0.7c-2.9,0.7 -5.0,3.2 -5.0,6.3L5.5,16.0l-2.0,2.0l0.0,1.0l17.0,0.0l0.0,-1.0l-2.0,-2.0L18.5,10.5zM13.0,16.5l-2.0,0.0l0.0,-2.0l2.0,0.0L13.0,16.5zM13.0,12.5l-2.0,0.0l0.0,-6.0l2.0,0.0L13.0,12.5z"
- android:fillColor="#231F20"/>
+ android:fillColor="#FFFFFFFF"/>
<path
android:pathData="M12.0,22.0c1.1,0.0 2.0,-0.9 2.0,-2.0L10.0,20.0C10.0,21.1 10.9,22.0 12.0,22.0z"
- android:fillColor="#231F20"/>
+ android:fillColor="#FFFFFFFF"/>
</vector>
diff --git a/core/res/res/drawable/ic_notification_block.xml b/core/res/res/drawable/ic_notification_block.xml
index 27690740..572e97b 100644
--- a/core/res/res/drawable/ic_notification_block.xml
+++ b/core/res/res/drawable/ic_notification_block.xml
@@ -20,6 +20,6 @@
android:viewportHeight="24.0">
<path
- android:fillColor="#FF000000"
+ android:fillColor="#FFFFFFFF"
android:pathData="M12.0,2.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0zM4.0,12.0c0.0,-4.42 3.58,-8.0 8.0,-8.0 1.85,0.0 3.5,0.63 4.9,1.69L5.69,16.9C4.63,15.55 4.0,13.85 4.0,12.0zm8.0,8.0c-1.85,0.0 -3.55,-0.63 -4.9,-1.69L18.31,7.1C19.37,8.45 20.0,10.15 20.0,12.0c0.0,4.42 -3.58,8.0 -8.0,8.0z"/>
</vector>
diff --git a/core/res/res/layout/unlaunchable_app_activity.xml b/core/res/res/layout/unlaunchable_app_activity.xml
new file mode 100644
index 0000000..429d5ed
--- /dev/null
+++ b/core/res/res/layout/unlaunchable_app_activity.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/dialog_padding"
+ android:orientation="vertical">
+ <TextView android:id="@+id/unlaunchable_app_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingStart="@dimen/dialog_padding"
+ android:paddingBottom="@dimen/dialog_padding"
+ android:textAppearance="@android:style/TextAppearance.Material.Title" />
+
+ <TextView android:id="@+id/unlaunchable_app_message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingStart="@dimen/dialog_padding"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="?android:attr/textColorSecondary" />
+</LinearLayout>
+
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 463ee0a..eae2c44 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Foutverslag"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Neem foutverslag"</string>
<string name="bugreport_message" msgid="398447048750350456">"Dit sal inligting oor die huidige toestand van jou toestel insamel om as \'n e-posboodskap te stuur. Dit sal \'n tydjie neem vandat die foutverslag begin is totdat dit reg is om gestuur te word; wees asseblief geduldig."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiewe verslag"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Gebruik dit in die meeste omstandighede. Maak dit vir jou moontlik om die vordering van die verslag na te spoor en meer besonderhede oor die probleem in te voer. Dit sal dalk sommige afdelings weglaat wat minder gebruik word en waarvoor verslagdoening lank duur."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Volle verslag"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Neem skermkiekie vir foutverslag oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes.</item>
+ <item quantity="one">Neem skermkiekie vir foutverslag oor <xliff:g id="NUMBER_0">%d</xliff:g> sekonde.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stilmodus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Klank is AF"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Klank is AAN"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Raak om te kanselleer"</string>
<string name="select_input_method" msgid="8547250819326693584">"Verander sleutelbord"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Kies sleutelborde"</string>
- <string name="show_ime" msgid="9157568568695230830">"Wys invoermetode"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardeware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Hou dit op die skerm terwyl fisieke sleutelbord aktief is"</string>
+ <string name="hardware" msgid="194658061510127999">"Wys virtuele sleutelbord"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Kies sleutelborduitleg"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Raak om \'n sleutelborduitleg te kies."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeer tans om \'n nuwe gebruiker by te voeg, maar die gebruikerlimiet is bereik."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeer tans om \'n nuwe gebruiker by te voeg, maar die rekening "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" bestaan reeds op hierdie toestel. Gaan in elk geval voort?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeer tans om \'n nuwe gebruiker vir die rekening "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" by te voeg. Gaan voort?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Taalvoorkeur"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Streekvoorkeur"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Voer taalnaam in"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Voorgestel"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alle tale"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Soek"</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index a4b502c..85ef3c5 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"የሳንካ ሪፖርት"</string>
<string name="bugreport_title" msgid="2667494803742548533">"የሳንካ ሪፖርት ውሰድ"</string>
<string name="bugreport_message" msgid="398447048750350456">"ይሄ እንደ የኢሜይል መልዕክት አድርጎ የሚልከውን ስለመሣሪያዎ የአሁኑ ሁኔታ መረጃ ይሰበስባል። የሳንካ ሪፖርቱን ከመጀመር ጀምሮ እስኪላክ ድረስ ትንሽ ጊዜ ይወስዳል፤ እባክዎ ይታገሱ።"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"መስተጋብራዊ ሪፖርት"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"በአብዛኛዎቹ ሁኔታዎች ይህን ይጠቀሙ። የሪፖርቱን ሂደት እንዲከታተሉ እና ስለችግሩ ተጨማሪ ዝርዝሮችን እንዲያስገቡ ያስችልዎታል። ሪፖርት ለማድረግ በጣም ረዥም ጊዜ የሚወስዱ አንዳንድ ብዙም ጥቅም ላይ የማይውሉ ክፍሎችን ሊያልፋቸው ይችላል።"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"ሙሉ ሪፖርት"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገጽ ዕይታን በማንሳት ላይ።</item>
+ <item quantity="other">በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገጽ ዕይታን በማንሳት ላይ።</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"የፀጥታ ሁነታ"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ድምፅ ጠፍቷል"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ድምፅ በርቷል"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ለመሰረዝ ይንኩ"</string>
<string name="select_input_method" msgid="8547250819326693584">"ቁልፍ ሰሌዳ ይቀይሩ"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ቁልፍ ሰሌዳዎችን ምረጥ"</string>
- <string name="show_ime" msgid="9157568568695230830">"የግቤት ስልት አሳይ"</string>
- <string name="hardware" msgid="7517821086888990278">"ሃርድዌር"</string>
+ <string name="show_ime" msgid="2506087537466597099">"አካላዊ የቁልፍ ሰሌዳ ገቢር ሆኖ ሳለ በማያ ገጽ ላይ አቆየው"</string>
+ <string name="hardware" msgid="194658061510127999">"ምናባዊ የቁልፍ ሰሌዳን አሳይ"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"የቁልፍ ሰሌዳ አቀማመጥ ምረጥ"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"የቁልፍ ሰሌዳ አቀማመጥ ለመምረጥ ንካ።"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" አዲስ ተጠቃሚ ለማከል እየሞከረ ነው፣ ሆኖም ግን የተጠቃሚ ብዛት ገደብ ላይ ተደርሷል።"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" አዲስ ተጠቃሚ ለማከል እየሞከረ ነው፣ ነገር ግን መለያ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" አስቀድሞ በዚህ መሣሪያ ላይ አለ። የሆነው ሆኖ ይቀጥል?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ለ"<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" መለያ አዲስ ተጠቃሚ ለማከል እየሞከረ ነው። ይቀጥል?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"የቋንቋ ምርጫ"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"የክልል ምርጫ"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"የቋንቋ ስም ይተይቡ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"የተጠቆሙ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ሁሉም ቋንቋዎች"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ፈልግ"</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index ae22ede..bcab357 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -215,15 +215,19 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"تقرير الأخطاء"</string>
<string name="bugreport_title" msgid="2667494803742548533">"إعداد تقرير بالأخطاء"</string>
<string name="bugreport_message" msgid="398447048750350456">"سيجمع هذا معلومات حول حالة جهازك الحالي لإرسالها كرسالة إلكترونية، ولكنه سيستغرق وقتًا قليلاً من بدء عرض تقرير بالأخطاء. وحتى يكون جاهزًا للإرسال، الرجاء الانتظار."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"تقرير تفاعلي"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"يمكنك استخدام هذا الخيار في معظم الأحيان، حيث يتيح لك إمكانية تتبع مستوى تقدم التقرير والحصول على مزيد من المعلومات حول المشكلة. وقد يتم إسقاط بعض الأقسام الأقل استخدامًا والتي تستغرق وقتًا طويلاً أثناء إعداد التقرير."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"تقرير كامل"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="zero">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية.</item>
+ <item quantity="two">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال ثانيتين (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
+ <item quantity="few">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثوانٍ.</item>
+ <item quantity="many">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية.</item>
+ <item quantity="other">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية.</item>
+ <item quantity="one">سيتم التقاط لقطة شاشة لتقرير الخطأ خلال <xliff:g id="NUMBER_0">%d</xliff:g> ثانية.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"وضع صامت"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"الصوت متوقف"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"الصوت قيد التشغيل"</string>
@@ -1077,8 +1081,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"المس للإلغاء"</string>
<string name="select_input_method" msgid="8547250819326693584">"تغيير لوحة المفاتيح"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"اختيار لوحات المفاتيح"</string>
- <string name="show_ime" msgid="9157568568695230830">"إظهار طريقة الإدخال"</string>
- <string name="hardware" msgid="7517821086888990278">"أجهزة"</string>
+ <string name="show_ime" msgid="2506087537466597099">"استمرار عرضها على الشاشة أثناء نشاط لوحة المفاتيح الفعلية"</string>
+ <string name="hardware" msgid="194658061510127999">"إظهار لوحة المفاتيح الظاهرية"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"تحديد تخطيط لوحة مفاتيح"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"المس لتحديد تخطيط لوحة مفاتيح."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
@@ -1603,4 +1607,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"هناك محاولة من "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" لإضافة مستخدم جديد إلا أنه قد تم الوصول إلى الحد الأقصى للمستخدمين."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"هناك محاولة من "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" لإضافة مستخدم جديد إلا أن الحساب "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" موجود مسبقًا على هذا الجهاز، فهل تريد المتابعة على أي حال؟"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"هناك محاولة من "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" لإضافة مستخدم جديد إلى الحساب "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"، فهل تريد المتابعة؟"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"تفضيل اللغة"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"تفضيل المنطقة"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"اكتب اسم اللغة"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"المقترحة"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"جميع اللغات"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"البحث"</string>
</resources>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index b38d303..05ce1c0 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Baq hesabatı"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Baqı xəbər verin"</string>
<string name="bugreport_message" msgid="398447048750350456">"Bu, sizin hazırkı cihaz durumu haqqında məlumat toplayacaq ki, elektron məktub şəklində göndərsin. Baq raportuna başlamaq üçün bir az vaxt lazım ola bilər, bir az səbr edin."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"İnteraktiv hesabat"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Bir çox hallarda bundan istifadə edin. Bu hesabatın gedişatını izləməyə və problem haqqında daha ətraflı məlumat daxil etməyə imkan verir. Bu, çox vaxt tələb edən bəzi az istifadə olunan bölmələri ixtisar edə bilər."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Tam hesabat"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Baq hesabatı üçün <xliff:g id="NUMBER_1">%d</xliff:g> saniyədə sktinşot çəkilir.</item>
+ <item quantity="one">Baq hesabatı üçün <xliff:g id="NUMBER_0">%d</xliff:g> saniyədə skrinşot çəkilir.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Səssiz rejim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Səs qapalıdır"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Səs Aktivdir"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Ləğv etmək üçün toxunun"</string>
<string name="select_input_method" msgid="8547250819326693584">"Klaviaturanı dəyişin"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Klaviaturaları seçin"</string>
- <string name="show_ime" msgid="9157568568695230830">"Daxiletmə metodunu göstərin"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Fiziki klaviatura aktiv olduğu halda ekranda saxlayın"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtual klaviaturanı göstərin"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatura sxemi seçin"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Klaviatura tərtibatı seçmək üçün toxunun."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCÇDEƏFGĞHXIİJKQLMNOÖPRSŞTUÜVYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" yeni istifadəçi əlavə etməyə çalışır, lakin istifadəçi limitinə çatılıb."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" yeni istifadəçi əlavə etməyə çalışır, lakin "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hesabı bu cihazda artıq mövcuddur. Hər bir halda davam edilsin?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hesabı üçün yeni istifadəçi əlavə etməyə çalışır. Davam edilsin?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Dil seçimi"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Region seçimi"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Dil adını daxil edin"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Təklif edilmiş"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Bütün dillər"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Axtarın"</string>
</resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index e69dd9a..7e5106a 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -212,15 +212,16 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Izveštaj o grešci"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Napravi izveštaj o grešci"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ovim će se prikupiti informacije o trenutnom stanju uređaja kako bi bile poslate u poruci e-pošte. Od započinjanja izveštaja o grešci do trenutka za njegovo slanje proći će neko vreme; budite strpljivi."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv. izveštaj"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Koristite ovo u većini slučajeva. To vam omogućava da pratite napredak izveštaja i da unosite dodatne detalje o problemu. Verovatno će izostaviti neke manje korišćene odeljke za koje pravljenje izveštaja dugo traje."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Kompletan izveštaj"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Napravićemo snimak ekrana radi izveštaja o grešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekundu.</item>
+ <item quantity="few">Napravićemo snimak ekrana radi izveštaja o grešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekunde.</item>
+ <item quantity="other">Napravićemo snimak ekrana radi izveštaja o grešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekundi.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Nečujni režim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je ISKLJUČEN"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvuk je UKLJUČEN"</string>
@@ -1056,8 +1057,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Dodirnite da biste otkazali"</string>
<string name="select_input_method" msgid="8547250819326693584">"Promenite tastaturu"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Izaberite tastature"</string>
- <string name="show_ime" msgid="9157568568695230830">"Prikazivanje metoda unosa"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardver"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Zadrži ga na ekranu dok je fizička tastatura aktivna"</string>
+ <string name="hardware" msgid="194658061510127999">"Prikaži virtuelnu tastaturu"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Izbor rasporeda tastature"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dodirnite da biste izabrali raspored tastature."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1549,4 +1550,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava da doda novog korisnika, ali je ograničenje za broj korisnika dostignuto."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava da doda novog korisnika, ali nalog "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" već postoji na ovom uređaju. Želite li ipak da nastavite?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava da doda novog korisnika za nalog "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Želite li da nastavite?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Podešavanje jezika"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Podešavanje regiona"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Unesite naziv jezika"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Predloženi"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Svi jezici"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Pretraži"</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index d15a738..297d50b 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Сигнал за програмна грешка"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Сигнал за програмна грешка"</string>
<string name="bugreport_message" msgid="398447048750350456">"По този начин ще се събере информация за текущото състояние на устройството ви, която да се изпрати като имейл съобщение. След стартирането на процеса ще мине известно време, докато сигналът за програмна грешка бъде готов за подаване. Моля, имайте търпение."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактивен сигнал"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Използвайте тази опция в повечето случаи. Тя ви позволява да проследявате напредъка на сигнала и да въвеждате още данни за проблема. Възможно е някои по-малко използвани секции, за които подаването на сигнал отнема дълго време, да бъдат пропуснати."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Пълен сигнал"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Екранната снимка за сигнала за програмна грешка ще бъде направена след <xliff:g id="NUMBER_1">%d</xliff:g> секунди.</item>
+ <item quantity="one">Екранната снимка за сигнала за програмна грешка ще бъде направена след <xliff:g id="NUMBER_0">%d</xliff:g> секунда.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Тих режим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Звукът е ИЗКЛЮЧЕН"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Звукът е ВКЛЮЧЕН"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Докоснете, за да анулирате"</string>
<string name="select_input_method" msgid="8547250819326693584">"Промяна на клавиатурата"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Избиране на клавиатури"</string>
- <string name="show_ime" msgid="9157568568695230830">"Метод на въвежд.: Показв."</string>
- <string name="hardware" msgid="7517821086888990278">"Хардуер"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Показване на екрана, докато физическата клавиатура е активна"</string>
+ <string name="hardware" msgid="194658061510127999">"Показване на вирт. клавиатура"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Избиране на клавиатурна подредба"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Докоснете, за да изберете клавиатурна подредба."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" опитва да добави нов потребител, но ограничението за брой потребители е достигнато."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" опитва да добави нов потребител, но профилът "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" вече съществува на устройството. Да се продължи ли въпреки това?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" опитва да добави нов потребител за профила "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Да се продължи ли?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Езиково предпочитание"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Предпочитание за региона"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Въведете име на език"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Предложени"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Всички езици"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Търсене"</string>
</resources>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index bb267f3..b9a1cd8 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ত্রুটির প্রতিবেদন"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ত্রুটির প্রতিবেদন করুন"</string>
<string name="bugreport_message" msgid="398447048750350456">"এটি একটি ই-মেল বার্তা পাঠানোর জন্য আপনার ডিভাইসের বর্তমান অবস্থা সম্পর্কে তথ্য সংগ্রহ করবে৷ ত্রুটির প্রতিবেদন শুরুর সময় থেকে এটি পাঠানোর জন্য প্রস্তুত হতে কিছুটা সময় নেবে; দয়া করে ধৈর্য রাখুন৷"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ইন্টারেক্টিভ প্রতিবেদন"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"বেশিভাগ পরিস্থিতিতে এটিকে ব্যবহার করুন৷ এটি আপনাকে প্রতিবেদনের কাজ কতটা হয়েছে তার উপর নজর রাখতে দেয় এবং সমস্যাটির সম্পর্কে আরো অনেক কিছু লিখতে দেয়৷ এটি হয়ত প্রতিবেদন করতে খুব বেশি সময় নেয় এমন কম-ব্যবহৃত বিভাগগুলি সরিয়ে দিতে পারে৷"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"সম্পূর্ণ প্রতিবেদন"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one"><xliff:g id="NUMBER_1">%d</xliff:g> সেকেন্ডের মধ্যে ত্রুটির প্রতিবেদনের জন্য স্ক্রীনশট নেওয়া হচ্ছে৷</item>
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> সেকেন্ডের মধ্যে ত্রুটির প্রতিবেদনের জন্য স্ক্রীনশট নেওয়া হচ্ছে৷</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"নীরব মোড"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"শব্দ বন্ধ করা আছে"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"শব্দ চালু করা আছে"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"বাতিল করতে স্পর্শ করুন"</string>
<string name="select_input_method" msgid="8547250819326693584">"কীবোর্ড পরিবর্তন করুন"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"কীবোর্ড চয়ন করুন"</string>
- <string name="show_ime" msgid="9157568568695230830">"ইনপুট পদ্ধতি দেখান"</string>
- <string name="hardware" msgid="7517821086888990278">"হার্ডওয়্যার"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ফিজিক্যাল কীবোর্ড সক্রিয় থাকার সময় এটিকে স্ক্রীনে রাখুন"</string>
+ <string name="hardware" msgid="194658061510127999">"ভার্চুয়াল কীবোর্ড দেখান"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"কীবোর্ডের লেআউট নির্বাচন করুন"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"একটি কীবোর্ডের লেআউট নির্বাচন করতে স্পর্শ করুন৷"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" একজন নতুন ব্যবহারকারী যোগ করার চেষ্টা করছে, তবে ব্যবহারকারীর সীমা অতিক্রান্ত হয়েছে।"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" একজন নতুন ব্যবহারকারীকে যোগ করার চেষ্টা করছে, তবে "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" অ্যাকাউন্ট আগে থেকেই এই ডিভাইসটিতে বিদ্যমান আছে। তবুও এগোতে চান?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" অ্যাকাউন্টের জন্য একজন নতুন ব্যবহারকারীকে যোগ করার চেষ্টা করছে। এগোতে চান?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"পছন্দের ভাষা"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"পছন্দের অঞ্চল"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ভাষার নাম লিখুন"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"প্রস্তাবিত"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"সকল ভাষা"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"অনুসন্ধান করুন"</string>
</resources>
diff --git a/core/res/res/values-bs-rBA/strings.xml b/core/res/res/values-bs-rBA/strings.xml
new file mode 100644
index 0000000..6a5ef12
--- /dev/null
+++ b/core/res/res/values-bs-rBA/strings.xml
@@ -0,0 +1,2858 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT 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">
+ <!-- no translation found for byteShort (8340973892742019101) -->
+ <skip />
+ <!-- no translation found for kilobyteShort (5973789783504771878) -->
+ <skip />
+ <!-- no translation found for megabyteShort (6355851576770428922) -->
+ <skip />
+ <!-- no translation found for gigabyteShort (3259882455212193214) -->
+ <skip />
+ <!-- no translation found for terabyteShort (231613018159186962) -->
+ <skip />
+ <!-- no translation found for petabyteShort (5637816680144990219) -->
+ <skip />
+ <!-- no translation found for fileSizeSuffix (8897567456150907538) -->
+ <skip />
+ <!-- no translation found for durationDays (6652371460511178259) -->
+ <skip />
+ <!-- no translation found for durationDayHours (2713107458736744435) -->
+ <skip />
+ <!-- no translation found for durationDayHour (7293789639090958917) -->
+ <skip />
+ <!-- no translation found for durationHours (4266858287167358988) -->
+ <skip />
+ <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+ <skip />
+ <!-- no translation found for durationHourMinute (2741677355177402539) -->
+ <skip />
+ <!-- no translation found for durationMinutes (3134226679883579347) -->
+ <skip />
+ <!-- no translation found for durationMinute (7155301744174623818) -->
+ <skip />
+ <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+ <skip />
+ <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+ <skip />
+ <!-- no translation found for durationSeconds (8050088505238241405) -->
+ <skip />
+ <!-- no translation found for durationSecond (985669622276420331) -->
+ <skip />
+ <!-- no translation found for untitled (4638956954852782576) -->
+ <skip />
+ <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
+ <skip />
+ <!-- no translation found for unknownName (6867811765370350269) -->
+ <skip />
+ <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
+ <skip />
+ <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
+ <skip />
+ <!-- no translation found for mmiError (5154499457739052907) -->
+ <skip />
+ <!-- no translation found for mmiFdnError (5224398216385316471) -->
+ <skip />
+ <!-- no translation found for serviceEnabled (8147278346414714315) -->
+ <skip />
+ <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
+ <skip />
+ <!-- no translation found for serviceDisabled (1937553226592516411) -->
+ <skip />
+ <!-- no translation found for serviceRegistered (6275019082598102493) -->
+ <skip />
+ <!-- no translation found for serviceErased (1288584695297200972) -->
+ <skip />
+ <!-- no translation found for passwordIncorrect (7612208839450128715) -->
+ <skip />
+ <!-- no translation found for mmiComplete (8232527495411698359) -->
+ <skip />
+ <!-- no translation found for badPin (9015277645546710014) -->
+ <skip />
+ <!-- no translation found for badPuk (5487257647081132201) -->
+ <skip />
+ <!-- no translation found for mismatchPin (609379054496863419) -->
+ <skip />
+ <!-- no translation found for invalidPin (3850018445187475377) -->
+ <skip />
+ <!-- no translation found for invalidPuk (8761456210898036513) -->
+ <skip />
+ <!-- no translation found for needPuk (919668385956251611) -->
+ <skip />
+ <!-- no translation found for needPuk2 (4526033371987193070) -->
+ <skip />
+ <!-- no translation found for enablePin (209412020907207950) -->
+ <skip />
+ <!-- no translation found for pinpuk_attempts (1251012001539225582) -->
+ <!-- no translation found for imei (2625429890869005782) -->
+ <skip />
+ <!-- no translation found for meid (4841221237681254195) -->
+ <skip />
+ <!-- no translation found for ClipMmi (6952821216480289285) -->
+ <skip />
+ <!-- no translation found for ClirMmi (7784673673446833091) -->
+ <skip />
+ <!-- no translation found for ColpMmi (3065121483740183974) -->
+ <skip />
+ <!-- no translation found for ColrMmi (4996540314421889589) -->
+ <skip />
+ <!-- no translation found for CfMmi (5123218989141573515) -->
+ <skip />
+ <!-- no translation found for CwMmi (9129678056795016867) -->
+ <skip />
+ <!-- no translation found for BaMmi (455193067926770581) -->
+ <skip />
+ <!-- no translation found for PwdMmi (7043715687905254199) -->
+ <skip />
+ <!-- no translation found for PinMmi (3113117780361190304) -->
+ <skip />
+ <!-- no translation found for CnipMmi (3110534680557857162) -->
+ <skip />
+ <!-- no translation found for CnirMmi (3062102121430548731) -->
+ <skip />
+ <!-- no translation found for ThreeWCMmi (9051047170321190368) -->
+ <skip />
+ <!-- no translation found for RuacMmi (7827887459138308886) -->
+ <skip />
+ <!-- no translation found for CndMmi (3116446237081575808) -->
+ <skip />
+ <!-- no translation found for DndMmi (1265478932418334331) -->
+ <skip />
+ <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
+ <skip />
+ <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
+ <skip />
+ <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
+ <skip />
+ <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
+ <skip />
+ <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
+ <skip />
+ <!-- no translation found for CLIRPermanent (3377371145926835671) -->
+ <skip />
+ <!-- no translation found for RestrictedChangedTitle (5592189398956187498) -->
+ <skip />
+ <!-- no translation found for RestrictedOnData (8653794784690065540) -->
+ <skip />
+ <!-- no translation found for RestrictedOnEmergency (6581163779072833665) -->
+ <skip />
+ <!-- no translation found for RestrictedOnNormal (4953867011389750673) -->
+ <skip />
+ <!-- no translation found for RestrictedOnAllVoice (3396963652108151260) -->
+ <skip />
+ <!-- no translation found for RestrictedOnSms (8314352327461638897) -->
+ <skip />
+ <!-- no translation found for RestrictedOnVoiceData (996636487106171320) -->
+ <skip />
+ <!-- no translation found for RestrictedOnVoiceSms (1888588152792023873) -->
+ <skip />
+ <!-- no translation found for RestrictedOnAll (5643028264466092821) -->
+ <skip />
+ <!-- no translation found for peerTtyModeFull (6165351790010341421) -->
+ <skip />
+ <!-- no translation found for peerTtyModeHco (5728602160669216784) -->
+ <skip />
+ <!-- no translation found for peerTtyModeVco (1742404978686538049) -->
+ <skip />
+ <!-- no translation found for peerTtyModeOff (3280819717850602205) -->
+ <skip />
+ <!-- no translation found for serviceClassVoice (1258393812335258019) -->
+ <skip />
+ <!-- no translation found for serviceClassData (872456782077937893) -->
+ <skip />
+ <!-- no translation found for serviceClassFAX (5566624998840486475) -->
+ <skip />
+ <!-- no translation found for serviceClassSMS (2015460373701527489) -->
+ <skip />
+ <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
+ <skip />
+ <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
+ <skip />
+ <!-- no translation found for serviceClassPacket (6991006557993423453) -->
+ <skip />
+ <!-- no translation found for serviceClassPAD (3235259085648271037) -->
+ <skip />
+ <!-- no translation found for roamingText0 (7170335472198694945) -->
+ <skip />
+ <!-- no translation found for roamingText1 (5314861519752538922) -->
+ <skip />
+ <!-- no translation found for roamingText2 (8969929049081268115) -->
+ <skip />
+ <!-- no translation found for roamingText3 (5148255027043943317) -->
+ <skip />
+ <!-- no translation found for roamingText4 (8808456682550796530) -->
+ <skip />
+ <!-- no translation found for roamingText5 (7604063252850354350) -->
+ <skip />
+ <!-- no translation found for roamingText6 (2059440825782871513) -->
+ <skip />
+ <!-- no translation found for roamingText7 (7112078724097233605) -->
+ <skip />
+ <!-- no translation found for roamingText8 (5989569778604089291) -->
+ <skip />
+ <!-- no translation found for roamingText9 (7969296811355152491) -->
+ <skip />
+ <!-- no translation found for roamingText10 (3992906999815316417) -->
+ <skip />
+ <!-- no translation found for roamingText11 (4154476854426920970) -->
+ <skip />
+ <!-- no translation found for roamingText12 (1189071119992726320) -->
+ <skip />
+ <!-- no translation found for roamingTextSearching (8360141885972279963) -->
+ <skip />
+ <!-- no translation found for wfcRegErrorTitle (2301376280632110664) -->
+ <skip />
+ <string-array name="wfcOperatorErrorAlertMessages">
+ </string-array>
+ <string-array name="wfcOperatorErrorNotificationMessages">
+ </string-array>
+ <!-- no translation found for wfcSpnFormat (8211621332478306568) -->
+ <skip />
+ <!-- no translation found for wfcDataSpnFormat (1118052028767666883) -->
+ <skip />
+ <!-- no translation found for wifi_calling_off_summary (8720659586041656098) -->
+ <skip />
+ <!-- no translation found for wfc_mode_wifi_preferred_summary (1994113411286935263) -->
+ <skip />
+ <!-- no translation found for wfc_mode_cellular_preferred_summary (5920549484600758786) -->
+ <skip />
+ <!-- no translation found for wfc_mode_wifi_only_summary (2379919155237869320) -->
+ <skip />
+ <!-- no translation found for cfTemplateNotForwarded (1683685883841272560) -->
+ <skip />
+ <!-- no translation found for cfTemplateForwarded (1302922117498590521) -->
+ <skip />
+ <!-- no translation found for cfTemplateForwardedTime (9206251736527085256) -->
+ <skip />
+ <!-- no translation found for cfTemplateRegistered (5073237827620166285) -->
+ <skip />
+ <!-- no translation found for cfTemplateRegisteredTime (6781621964320635172) -->
+ <skip />
+ <!-- no translation found for fcComplete (3118848230966886575) -->
+ <skip />
+ <!-- no translation found for fcError (3327560126588500777) -->
+ <skip />
+ <!-- no translation found for httpErrorOk (1191919378083472204) -->
+ <skip />
+ <!-- no translation found for httpError (7956392511146698522) -->
+ <skip />
+ <!-- no translation found for httpErrorLookup (4711687456111963163) -->
+ <skip />
+ <!-- no translation found for httpErrorUnsupportedAuthScheme (6299980280442076799) -->
+ <skip />
+ <!-- no translation found for httpErrorAuth (1435065629438044534) -->
+ <skip />
+ <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
+ <skip />
+ <!-- no translation found for httpErrorConnect (8714273236364640549) -->
+ <skip />
+ <!-- no translation found for httpErrorIO (2340558197489302188) -->
+ <skip />
+ <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
+ <skip />
+ <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
+ <skip />
+ <!-- no translation found for httpErrorUnsupportedScheme (5015730812906192208) -->
+ <skip />
+ <!-- no translation found for httpErrorFailedSslHandshake (96549606000658641) -->
+ <skip />
+ <!-- no translation found for httpErrorBadUrl (3636929722728881972) -->
+ <skip />
+ <!-- no translation found for httpErrorFile (2170788515052558676) -->
+ <skip />
+ <!-- no translation found for httpErrorFileNotFound (6203856612042655084) -->
+ <skip />
+ <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
+ <skip />
+ <!-- no translation found for notification_title (8967710025036163822) -->
+ <skip />
+ <!-- no translation found for contentServiceSync (8353523060269335667) -->
+ <skip />
+ <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
+ <skip />
+ <!-- no translation found for contentServiceTooManyDeletesNotificationDesc (8100981435080696431) -->
+ <skip />
+ <!-- no translation found for low_memory (6494019234102154896) -->
+ <skip />
+ <!-- no translation found for low_memory (4415914910770005166) -->
+ <skip />
+ <!-- no translation found for low_memory (516619861191025923) -->
+ <skip />
+ <!-- no translation found for low_memory (3475999286680000541) -->
+ <skip />
+ <!-- no translation found for ssl_ca_cert_warning (5848402127455021714) -->
+ <skip />
+ <!-- no translation found for ssl_ca_cert_noti_by_unknown (4475437862189850602) -->
+ <skip />
+ <!-- no translation found for ssl_ca_cert_noti_by_administrator (550758088185764312) -->
+ <skip />
+ <!-- no translation found for ssl_ca_cert_noti_managed (4030263497686867141) -->
+ <skip />
+ <!-- no translation found for work_profile_deleted (5005572078641980632) -->
+ <skip />
+ <!-- no translation found for work_profile_deleted_description (6305147513054341102) -->
+ <skip />
+ <!-- no translation found for work_profile_deleted_details (226615743462361248) -->
+ <skip />
+ <!-- no translation found for work_profile_deleted_description_dpm_wipe (6019770344820507579) -->
+ <skip />
+ <!-- no translation found for factory_reset_warning (5423253125642394387) -->
+ <skip />
+ <!-- no translation found for factory_reset_message (4905025204141900666) -->
+ <skip />
+ <!-- no translation found for me (6545696007631404292) -->
+ <skip />
+ <!-- no translation found for power_dialog (8545351420865202853) -->
+ <skip />
+ <!-- no translation found for power_dialog (6153888706430556356) -->
+ <skip />
+ <!-- no translation found for power_dialog (1319919075463988638) -->
+ <skip />
+ <!-- no translation found for silent_mode (7167703389802618663) -->
+ <skip />
+ <!-- no translation found for turn_on_radio (3912793092339962371) -->
+ <skip />
+ <!-- no translation found for turn_off_radio (8198784949987062346) -->
+ <skip />
+ <!-- no translation found for screen_lock (799094655496098153) -->
+ <skip />
+ <!-- no translation found for power_off (4266614107412865048) -->
+ <skip />
+ <!-- no translation found for silent_mode_silent (319298163018473078) -->
+ <skip />
+ <!-- no translation found for silent_mode_vibrate (7072043388581551395) -->
+ <skip />
+ <!-- no translation found for silent_mode_ring (8592241816194074353) -->
+ <skip />
+ <!-- no translation found for reboot_to_update_title (6212636802536823850) -->
+ <skip />
+ <!-- no translation found for reboot_to_update_prepare (6305853831955310890) -->
+ <skip />
+ <!-- no translation found for reboot_to_update_package (3871302324500927291) -->
+ <skip />
+ <!-- no translation found for reboot_to_update_reboot (6428441000951565185) -->
+ <skip />
+ <!-- no translation found for reboot_to_reset_title (4142355915340627490) -->
+ <skip />
+ <!-- no translation found for reboot_to_reset_message (2432077491101416345) -->
+ <skip />
+ <!-- no translation found for shutdown_progress (2281079257329981203) -->
+ <skip />
+ <!-- no translation found for shutdown_confirm (3385745179555731470) -->
+ <skip />
+ <!-- no translation found for shutdown_confirm (476672373995075359) -->
+ <skip />
+ <!-- no translation found for shutdown_confirm (3490275567476369184) -->
+ <skip />
+ <!-- no translation found for shutdown_confirm (649792175242821353) -->
+ <skip />
+ <!-- no translation found for shutdown_confirm_question (2906544768881136183) -->
+ <skip />
+ <!-- no translation found for reboot_safemode_title (7054509914500140361) -->
+ <skip />
+ <!-- no translation found for reboot_safemode_confirm (55293944502784668) -->
+ <skip />
+ <!-- no translation found for recent_tasks_title (3691764623638127888) -->
+ <skip />
+ <!-- no translation found for no_recent_tasks (8794906658732193473) -->
+ <skip />
+ <!-- no translation found for global_actions (408477140088053665) -->
+ <skip />
+ <!-- no translation found for global_actions (7240386462508182976) -->
+ <skip />
+ <!-- no translation found for global_actions (2406416831541615258) -->
+ <skip />
+ <!-- no translation found for global_action_lock (2844945191792119712) -->
+ <skip />
+ <!-- no translation found for global_action_power_off (4471879440839879722) -->
+ <skip />
+ <!-- no translation found for global_action_bug_report (7934010578922304799) -->
+ <skip />
+ <!-- no translation found for bugreport_title (2667494803742548533) -->
+ <skip />
+ <!-- no translation found for bugreport_message (398447048750350456) -->
+ <skip />
+ <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <skip />
+ <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
+ <skip />
+ <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
+ <skip />
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
+ <skip />
+ <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
+ <skip />
+ <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
+ <skip />
+ <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
+ <skip />
+ <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
+ <skip />
+ <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
+ <skip />
+ <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
+ <skip />
+ <!-- no translation found for global_action_settings (1756531602592545966) -->
+ <skip />
+ <!-- no translation found for global_action_assist (3892832961594295030) -->
+ <skip />
+ <!-- no translation found for global_action_voice_assist (7751191495200504480) -->
+ <skip />
+ <!-- no translation found for global_action_lockdown (8751542514724332873) -->
+ <skip />
+ <!-- no translation found for status_bar_notification_info_overflow (5301981741705354993) -->
+ <skip />
+ <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
+ <skip />
+ <!-- no translation found for notification_hidden_text (1135169301897151909) -->
+ <skip />
+ <!-- no translation found for safeMode (2788228061547930246) -->
+ <skip />
+ <!-- no translation found for android_system_label (6577375335728551336) -->
+ <skip />
+ <!-- no translation found for user_owner_label (2804351898001038951) -->
+ <skip />
+ <!-- no translation found for managed_profile_label (6260850669674791528) -->
+ <skip />
+ <!-- no translation found for permgrouplab_contacts (3657758145679177612) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_contacts (6951499528303668046) -->
+ <skip />
+ <!-- no translation found for permgrouplab_location (7275582855722310164) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_location (1346617465127855033) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (3889615280211184106) -->
+ <skip />
+ <!-- no translation found for permgrouplab_sms (228308803364967808) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_sms (4656988620100940350) -->
+ <skip />
+ <!-- no translation found for permgrouplab_storage (1971118770546336966) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_storage (637758554581589203) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (4988812113943554584) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (3250611594678347720) -->
+ <skip />
+ <!-- no translation found for permgrouplab_phone (5229115638567440675) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_phone (6234224354060641055) -->
+ <skip />
+ <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_sensors (7147968539346634043) -->
+ <skip />
+ <!-- no translation found for capability_title_canRetrieveWindowContent (3901717936930170320) -->
+ <skip />
+ <!-- no translation found for capability_desc_canRetrieveWindowContent (3772225008605310672) -->
+ <skip />
+ <!-- no translation found for capability_title_canRequestTouchExploration (3108723364676667320) -->
+ <skip />
+ <!-- no translation found for capability_desc_canRequestTouchExploration (5800552516779249356) -->
+ <skip />
+ <!-- no translation found for capability_title_canRequestEnhancedWebAccessibility (1739881766522594073) -->
+ <skip />
+ <!-- no translation found for capability_desc_canRequestEnhancedWebAccessibility (7881063961507511765) -->
+ <skip />
+ <!-- no translation found for capability_title_canRequestFilterKeyEvents (2103440391902412174) -->
+ <skip />
+ <!-- no translation found for capability_desc_canRequestFilterKeyEvents (7463135292204152818) -->
+ <skip />
+ <!-- no translation found for capability_title_canControlMagnification (3593493281059424855) -->
+ <skip />
+ <!-- no translation found for capability_desc_canControlMagnification (4791858203568383773) -->
+ <skip />
+ <!-- no translation found for capability_title_canPerformGestures (7418984730362576862) -->
+ <skip />
+ <!-- no translation found for capability_desc_canPerformGestures (8296373021636981249) -->
+ <skip />
+ <!-- no translation found for permlab_statusBar (7417192629601890791) -->
+ <skip />
+ <!-- no translation found for permdesc_statusBar (8434669549504290975) -->
+ <skip />
+ <!-- no translation found for permlab_statusBarService (4826835508226139688) -->
+ <skip />
+ <!-- no translation found for permdesc_statusBarService (716113660795976060) -->
+ <skip />
+ <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
+ <skip />
+ <!-- no translation found for permdesc_expandStatusBar (6917549437129401132) -->
+ <skip />
+ <!-- no translation found for permlab_install_shortcut (4279070216371564234) -->
+ <skip />
+ <!-- no translation found for permdesc_install_shortcut (8341295916286736996) -->
+ <skip />
+ <!-- no translation found for permlab_uninstall_shortcut (4729634524044003699) -->
+ <skip />
+ <!-- no translation found for permdesc_uninstall_shortcut (6745743474265057975) -->
+ <skip />
+ <!-- no translation found for permlab_processOutgoingCalls (3906007831192990946) -->
+ <skip />
+ <!-- no translation found for permdesc_processOutgoingCalls (5156385005547315876) -->
+ <skip />
+ <!-- no translation found for permlab_receiveSms (8673471768947895082) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveSms (6424387754228766939) -->
+ <skip />
+ <!-- no translation found for permlab_receiveMms (1821317344668257098) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveMms (533019437263212260) -->
+ <skip />
+ <!-- no translation found for permlab_readCellBroadcasts (1598328843619646166) -->
+ <skip />
+ <!-- no translation found for permdesc_readCellBroadcasts (6361972776080458979) -->
+ <skip />
+ <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
+ <skip />
+ <!-- no translation found for permdesc_subscribedFeedsRead (5557058907906144505) -->
+ <skip />
+ <!-- no translation found for permlab_sendSms (7544599214260982981) -->
+ <skip />
+ <!-- no translation found for permdesc_sendSms (7094729298204937667) -->
+ <skip />
+ <!-- no translation found for permlab_readSms (8745086572213270480) -->
+ <skip />
+ <!-- no translation found for permdesc_readSms (2467981548684735522) -->
+ <skip />
+ <!-- no translation found for permdesc_readSms (5102425513647038535) -->
+ <skip />
+ <!-- no translation found for permdesc_readSms (3695967533457240550) -->
+ <skip />
+ <!-- no translation found for permlab_receiveWapPush (5991398711936590410) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveWapPush (748232190220583385) -->
+ <skip />
+ <!-- no translation found for permlab_getTasks (6466095396623933906) -->
+ <skip />
+ <!-- no translation found for permdesc_getTasks (7454215995847658102) -->
+ <skip />
+ <!-- no translation found for permlab_manageProfileAndDeviceOwners (7918181259098220004) -->
+ <skip />
+ <!-- no translation found for permdesc_manageProfileAndDeviceOwners (106894851498657169) -->
+ <skip />
+ <!-- no translation found for permlab_reorderTasks (2018575526934422779) -->
+ <skip />
+ <!-- no translation found for permdesc_reorderTasks (7734217754877439351) -->
+ <skip />
+ <!-- no translation found for permlab_enableCarMode (5684504058192921098) -->
+ <skip />
+ <!-- no translation found for permdesc_enableCarMode (4853187425751419467) -->
+ <skip />
+ <!-- no translation found for permlab_killBackgroundProcesses (3914026687420177202) -->
+ <skip />
+ <!-- no translation found for permdesc_killBackgroundProcesses (4593353235959733119) -->
+ <skip />
+ <!-- no translation found for permlab_systemAlertWindow (3543347980839518613) -->
+ <skip />
+ <!-- no translation found for permdesc_systemAlertWindow (8584678381972820118) -->
+ <skip />
+ <!-- no translation found for permlab_persistentActivity (8841113627955563938) -->
+ <skip />
+ <!-- no translation found for permdesc_persistentActivity (8525189272329086137) -->
+ <skip />
+ <!-- no translation found for permdesc_persistentActivity (5086862529499103587) -->
+ <skip />
+ <!-- no translation found for permdesc_persistentActivity (4384760047508278272) -->
+ <skip />
+ <!-- no translation found for permlab_getPackageSize (7472921768357981986) -->
+ <skip />
+ <!-- no translation found for permdesc_getPackageSize (3921068154420738296) -->
+ <skip />
+ <!-- no translation found for permlab_writeSettings (2226195290955224730) -->
+ <skip />
+ <!-- no translation found for permdesc_writeSettings (7775723441558907181) -->
+ <skip />
+ <!-- no translation found for permlab_receiveBootCompleted (5312965565987800025) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveBootCompleted (7390304664116880704) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveBootCompleted (4525890122209673621) -->
+ <skip />
+ <!-- no translation found for permdesc_receiveBootCompleted (513950589102617504) -->
+ <skip />
+ <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
+ <skip />
+ <!-- no translation found for permdesc_broadcastSticky (7749760494399915651) -->
+ <skip />
+ <!-- no translation found for permdesc_broadcastSticky (6839285697565389467) -->
+ <skip />
+ <!-- no translation found for permdesc_broadcastSticky (2825803764232445091) -->
+ <skip />
+ <!-- no translation found for permlab_readContacts (8348481131899886131) -->
+ <skip />
+ <!-- no translation found for permdesc_readContacts (5294866856941149639) -->
+ <skip />
+ <!-- no translation found for permdesc_readContacts (1839238344654834087) -->
+ <skip />
+ <!-- no translation found for permdesc_readContacts (8440654152457300662) -->
+ <skip />
+ <!-- no translation found for permlab_writeContacts (5107492086416793544) -->
+ <skip />
+ <!-- no translation found for permdesc_writeContacts (897243932521953602) -->
+ <skip />
+ <!-- no translation found for permdesc_writeContacts (5438230957000018959) -->
+ <skip />
+ <!-- no translation found for permdesc_writeContacts (589869224625163558) -->
+ <skip />
+ <!-- no translation found for permlab_readCallLog (3478133184624102739) -->
+ <skip />
+ <!-- no translation found for permdesc_readCallLog (3700645184870760285) -->
+ <skip />
+ <!-- no translation found for permdesc_readCallLog (5611770887047387926) -->
+ <skip />
+ <!-- no translation found for permdesc_readCallLog (5777725796813217244) -->
+ <skip />
+ <!-- no translation found for permlab_writeCallLog (8552045664743499354) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCallLog (6661806062274119245) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCallLog (4225034892248398019) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCallLog (683941736352787842) -->
+ <skip />
+ <!-- no translation found for permlab_bodySensors (4683341291818520277) -->
+ <skip />
+ <!-- no translation found for permdesc_bodySensors (4380015021754180431) -->
+ <skip />
+ <!-- no translation found for permlab_readCalendar (5972727560257612398) -->
+ <skip />
+ <!-- no translation found for permdesc_readCalendar (4216462049057658723) -->
+ <skip />
+ <!-- no translation found for permdesc_readCalendar (3191352452242394196) -->
+ <skip />
+ <!-- no translation found for permdesc_readCalendar (7434548682470851583) -->
+ <skip />
+ <!-- no translation found for permlab_writeCalendar (8438874755193825647) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCalendar (6679035520113668528) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCalendar (1273290605500902507) -->
+ <skip />
+ <!-- no translation found for permdesc_writeCalendar (2324469496327249376) -->
+ <skip />
+ <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
+ <skip />
+ <!-- no translation found for permdesc_accessLocationExtraCommands (6078307221056649927) -->
+ <skip />
+ <!-- no translation found for permlab_accessFineLocation (251034415460950944) -->
+ <skip />
+ <!-- no translation found for permdesc_accessFineLocation (5295047563564981250) -->
+ <skip />
+ <!-- no translation found for permlab_accessCoarseLocation (7715277613928539434) -->
+ <skip />
+ <!-- no translation found for permdesc_accessCoarseLocation (2538200184373302295) -->
+ <skip />
+ <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
+ <skip />
+ <!-- no translation found for permdesc_modifyAudioSettings (3522565366806248517) -->
+ <skip />
+ <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
+ <skip />
+ <!-- no translation found for permdesc_recordAudio (4906839301087980680) -->
+ <skip />
+ <!-- no translation found for permlab_sim_communication (2935852302216852065) -->
+ <skip />
+ <!-- no translation found for permdesc_sim_communication (5725159654279639498) -->
+ <skip />
+ <!-- no translation found for permlab_camera (3616391919559751192) -->
+ <skip />
+ <!-- no translation found for permdesc_camera (8497216524735535009) -->
+ <skip />
+ <!-- no translation found for permlab_vibrate (7696427026057705834) -->
+ <skip />
+ <!-- no translation found for permdesc_vibrate (6284989245902300945) -->
+ <skip />
+ <!-- no translation found for permlab_callPhone (3925836347681847954) -->
+ <skip />
+ <!-- no translation found for permdesc_callPhone (3740797576113760827) -->
+ <skip />
+ <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+ <skip />
+ <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+ <skip />
+ <!-- no translation found for permlab_readPhoneState (9178228524507610486) -->
+ <skip />
+ <!-- no translation found for permdesc_readPhoneState (1639212771826125528) -->
+ <skip />
+ <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
+ <skip />
+ <!-- no translation found for permlab_wakeLock (2601193288949154131) -->
+ <skip />
+ <!-- no translation found for permlab_wakeLock (573480187941496130) -->
+ <skip />
+ <!-- no translation found for permdesc_wakeLock (7311319824400447868) -->
+ <skip />
+ <!-- no translation found for permdesc_wakeLock (3208534859208996974) -->
+ <skip />
+ <!-- no translation found for permdesc_wakeLock (8559100677372928754) -->
+ <skip />
+ <!-- no translation found for permlab_transmitIr (7545858504238530105) -->
+ <skip />
+ <!-- no translation found for permdesc_transmitIr (5358308854306529170) -->
+ <skip />
+ <!-- no translation found for permdesc_transmitIr (3926790828514867101) -->
+ <skip />
+ <!-- no translation found for permdesc_transmitIr (7957763745020300725) -->
+ <skip />
+ <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
+ <skip />
+ <!-- no translation found for permdesc_setWallpaper (7373447920977624745) -->
+ <skip />
+ <!-- no translation found for permlab_setWallpaperHints (3278608165977736538) -->
+ <skip />
+ <!-- no translation found for permdesc_setWallpaperHints (8235784384223730091) -->
+ <skip />
+ <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
+ <skip />
+ <!-- no translation found for permdesc_setTimeZone (1676983712315827645) -->
+ <skip />
+ <!-- no translation found for permdesc_setTimeZone (888864653946175955) -->
+ <skip />
+ <!-- no translation found for permdesc_setTimeZone (4499943488436633398) -->
+ <skip />
+ <!-- no translation found for permlab_getAccounts (1086795467760122114) -->
+ <skip />
+ <!-- no translation found for permdesc_getAccounts (2741496534769660027) -->
+ <skip />
+ <!-- no translation found for permdesc_getAccounts (4190633395633907543) -->
+ <skip />
+ <!-- no translation found for permdesc_getAccounts (3448316822451807382) -->
+ <skip />
+ <!-- no translation found for permlab_accessNetworkState (4951027964348974773) -->
+ <skip />
+ <!-- no translation found for permdesc_accessNetworkState (8318964424675960975) -->
+ <skip />
+ <!-- no translation found for permlab_createNetworkSockets (7934516631384168107) -->
+ <skip />
+ <!-- no translation found for permdesc_createNetworkSockets (3403062187779724185) -->
+ <skip />
+ <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
+ <skip />
+ <!-- no translation found for permdesc_changeNetworkState (6789123912476416214) -->
+ <skip />
+ <!-- no translation found for permlab_changeTetherState (5952584964373017960) -->
+ <skip />
+ <!-- no translation found for permdesc_changeTetherState (1524441344412319780) -->
+ <skip />
+ <!-- no translation found for permlab_accessWifiState (5202012949247040011) -->
+ <skip />
+ <!-- no translation found for permdesc_accessWifiState (5002798077387803726) -->
+ <skip />
+ <!-- no translation found for permlab_changeWifiState (6550641188749128035) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWifiState (7137950297386127533) -->
+ <skip />
+ <!-- no translation found for permlab_changeWifiMulticastState (1368253871483254784) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWifiMulticastState (7969774021256336548) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWifiMulticastState (9031975661145014160) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWifiMulticastState (6851949706025349926) -->
+ <skip />
+ <!-- no translation found for permlab_bluetoothAdmin (6006967373935926659) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothAdmin (6921177471748882137) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothAdmin (3373125682645601429) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothAdmin (8931682159331542137) -->
+ <skip />
+ <!-- no translation found for permlab_accessWimaxState (4195907010610205703) -->
+ <skip />
+ <!-- no translation found for permdesc_accessWimaxState (6360102877261978887) -->
+ <skip />
+ <!-- no translation found for permlab_changeWimaxState (340465839241528618) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWimaxState (3156456504084201805) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWimaxState (6022307083934827718) -->
+ <skip />
+ <!-- no translation found for permdesc_changeWimaxState (697025043004923798) -->
+ <skip />
+ <!-- no translation found for permlab_bluetooth (6127769336339276828) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetooth (3480722181852438628) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetooth (3974124940101104206) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetooth (3207106324452312739) -->
+ <skip />
+ <!-- no translation found for permlab_nfc (4423351274757876953) -->
+ <skip />
+ <!-- no translation found for permdesc_nfc (7120611819401789907) -->
+ <skip />
+ <!-- no translation found for permlab_disableKeyguard (3598496301486439258) -->
+ <skip />
+ <!-- no translation found for permdesc_disableKeyguard (6034203065077122992) -->
+ <skip />
+ <!-- no translation found for permlab_manageFingerprint (5640858826254575638) -->
+ <skip />
+ <!-- no translation found for permdesc_manageFingerprint (178208705828055464) -->
+ <skip />
+ <!-- no translation found for permlab_useFingerprint (3150478619915124905) -->
+ <skip />
+ <!-- no translation found for permdesc_useFingerprint (9165097460730684114) -->
+ <skip />
+ <!-- no translation found for fingerprint_acquired_partial (735082772341716043) -->
+ <skip />
+ <!-- no translation found for fingerprint_acquired_insufficient (4596546021310923214) -->
+ <skip />
+ <!-- no translation found for fingerprint_acquired_imager_dirty (1087209702421076105) -->
+ <skip />
+ <!-- no translation found for fingerprint_acquired_too_fast (6470642383109155969) -->
+ <skip />
+ <!-- no translation found for fingerprint_acquired_too_slow (59250885689661653) -->
+ <skip />
+ <string-array name="fingerprint_acquired_vendor">
+ </string-array>
+ <!-- no translation found for fingerprint_error_hw_not_available (7955921658939936596) -->
+ <skip />
+ <!-- no translation found for fingerprint_error_no_space (1055819001126053318) -->
+ <skip />
+ <!-- no translation found for fingerprint_error_timeout (3927186043737732875) -->
+ <skip />
+ <!-- no translation found for fingerprint_error_canceled (4402024612660774395) -->
+ <skip />
+ <!-- no translation found for fingerprint_error_lockout (5536934748136933450) -->
+ <skip />
+ <!-- no translation found for fingerprint_error_unable_to_process (6107816084103552441) -->
+ <skip />
+ <!-- no translation found for fingerprint_name_template (5870957565512716938) -->
+ <skip />
+ <string-array name="fingerprint_error_vendor">
+ </string-array>
+ <!-- no translation found for fingerprint_icon_content_description (2340202869968465936) -->
+ <skip />
+ <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
+ <skip />
+ <!-- no translation found for permdesc_readSyncSettings (2706745674569678644) -->
+ <skip />
+ <!-- no translation found for permlab_writeSyncSettings (5408694875793945314) -->
+ <skip />
+ <!-- no translation found for permdesc_writeSyncSettings (8956262591306369868) -->
+ <skip />
+ <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
+ <skip />
+ <!-- no translation found for permdesc_readSyncStats (1510143761757606156) -->
+ <skip />
+ <!-- no translation found for permlab_sdcardRead (367275095159405468) -->
+ <skip />
+ <!-- no translation found for permlab_sdcardRead (2188156462934977940) -->
+ <skip />
+ <!-- no translation found for permdesc_sdcardRead (3446988712598386079) -->
+ <skip />
+ <!-- no translation found for permdesc_sdcardRead (2607362473654975411) -->
+ <skip />
+ <!-- no translation found for permlab_sdcardWrite (8485979062254666748) -->
+ <skip />
+ <!-- no translation found for permlab_sdcardWrite (8805693630050458763) -->
+ <skip />
+ <!-- no translation found for permdesc_sdcardWrite (6175406299445710888) -->
+ <skip />
+ <!-- no translation found for permdesc_sdcardWrite (4337417790936632090) -->
+ <skip />
+ <!-- no translation found for permlab_use_sip (2052499390128979920) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (2297804849860225257) -->
+ <skip />
+ <!-- no translation found for permlab_register_sim_subscription (3166535485877549177) -->
+ <skip />
+ <!-- no translation found for permdesc_register_sim_subscription (2138909035926222911) -->
+ <skip />
+ <!-- no translation found for permlab_register_call_provider (108102120289029841) -->
+ <skip />
+ <!-- no translation found for permdesc_register_call_provider (7034310263521081388) -->
+ <skip />
+ <!-- no translation found for permlab_connection_manager (1116193254522105375) -->
+ <skip />
+ <!-- no translation found for permdesc_connection_manager (5925480810356483565) -->
+ <skip />
+ <!-- no translation found for permlab_bind_incall_service (6773648341975287125) -->
+ <skip />
+ <!-- no translation found for permdesc_bind_incall_service (8343471381323215005) -->
+ <skip />
+ <!-- no translation found for permlab_bind_connection_service (3557341439297014940) -->
+ <skip />
+ <!-- no translation found for permdesc_bind_connection_service (4008754499822478114) -->
+ <skip />
+ <!-- no translation found for permlab_control_incall_experience (9061024437607777619) -->
+ <skip />
+ <!-- no translation found for permdesc_control_incall_experience (915159066039828124) -->
+ <skip />
+ <!-- no translation found for permlab_readNetworkUsageHistory (7862593283611493232) -->
+ <skip />
+ <!-- no translation found for permdesc_readNetworkUsageHistory (7689060749819126472) -->
+ <skip />
+ <!-- no translation found for permlab_manageNetworkPolicy (2562053592339859990) -->
+ <skip />
+ <!-- no translation found for permdesc_manageNetworkPolicy (7537586771559370668) -->
+ <skip />
+ <!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
+ <skip />
+ <!-- no translation found for permdesc_modifyNetworkAccounting (5443412866746198123) -->
+ <skip />
+ <!-- no translation found for permlab_accessNotifications (7673416487873432268) -->
+ <skip />
+ <!-- no translation found for permdesc_accessNotifications (458457742683431387) -->
+ <skip />
+ <!-- no translation found for permlab_bindNotificationListenerService (7057764742211656654) -->
+ <skip />
+ <!-- no translation found for permdesc_bindNotificationListenerService (985697918576902986) -->
+ <skip />
+ <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+ <skip />
+ <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+ <skip />
+ <!-- no translation found for permlab_bindDreamService (4153646965978563462) -->
+ <skip />
+ <!-- no translation found for permdesc_bindDreamService (7325825272223347863) -->
+ <skip />
+ <!-- no translation found for permlab_invokeCarrierSetup (3699600833975117478) -->
+ <skip />
+ <!-- no translation found for permdesc_invokeCarrierSetup (4159549152529111920) -->
+ <skip />
+ <!-- no translation found for permlab_accessNetworkConditions (8206077447838909516) -->
+ <skip />
+ <!-- no translation found for permdesc_accessNetworkConditions (6899102075825272211) -->
+ <skip />
+ <!-- no translation found for permlab_setInputCalibration (4902620118878467615) -->
+ <skip />
+ <!-- no translation found for permdesc_setInputCalibration (4527511047549456929) -->
+ <skip />
+ <!-- no translation found for permlab_accessDrmCertificates (7436886640723203615) -->
+ <skip />
+ <!-- no translation found for permdesc_accessDrmCertificates (8073288354426159089) -->
+ <skip />
+ <!-- no translation found for permlab_handoverStatus (7820353257219300883) -->
+ <skip />
+ <!-- no translation found for permdesc_handoverStatus (4788144087245714948) -->
+ <skip />
+ <!-- no translation found for permlab_removeDrmCertificates (7044888287209892751) -->
+ <skip />
+ <!-- no translation found for permdesc_removeDrmCertificates (7272999075113400993) -->
+ <skip />
+ <!-- no translation found for permlab_bindCarrierMessagingService (1490229371796969158) -->
+ <skip />
+ <!-- no translation found for permdesc_bindCarrierMessagingService (2762882888502113944) -->
+ <skip />
+ <!-- no translation found for permlab_bindCarrierServices (3233108656245526783) -->
+ <skip />
+ <!-- no translation found for permdesc_bindCarrierServices (1391552602551084192) -->
+ <skip />
+ <!-- no translation found for permlab_access_notification_policy (4247510821662059671) -->
+ <skip />
+ <!-- no translation found for permdesc_access_notification_policy (3296832375218749580) -->
+ <skip />
+ <!-- no translation found for policylab_limitPassword (4497420728857585791) -->
+ <skip />
+ <!-- no translation found for policydesc_limitPassword (2502021457917874968) -->
+ <skip />
+ <!-- no translation found for policylab_watchLogin (914130646942199503) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin (3215729294215070072) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin (2707817988309890256) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin (5712323091846761073) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin_secondaryUser (4280246270601044505) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin_secondaryUser (3484832653564483250) -->
+ <skip />
+ <!-- no translation found for policydesc_watchLogin_secondaryUser (2185480427217127147) -->
+ <skip />
+ <!-- no translation found for policylab_resetPassword (4934707632423915395) -->
+ <skip />
+ <!-- no translation found for policydesc_resetPassword (1278323891710619128) -->
+ <skip />
+ <!-- no translation found for policylab_forceLock (2274085384704248431) -->
+ <skip />
+ <!-- no translation found for policydesc_forceLock (1141797588403827138) -->
+ <skip />
+ <!-- no translation found for policylab_wipeData (3910545446758639713) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData (4306184096067756876) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData (5816221315214527028) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData (5096895604574188391) -->
+ <skip />
+ <!-- no translation found for policylab_wipeData_secondaryUser (8362863289455531813) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData_secondaryUser (6336255514635308054) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData_secondaryUser (2086473496848351810) -->
+ <skip />
+ <!-- no translation found for policydesc_wipeData_secondaryUser (6787904546711590238) -->
+ <skip />
+ <!-- no translation found for policylab_setGlobalProxy (2784828293747791446) -->
+ <skip />
+ <!-- no translation found for policydesc_setGlobalProxy (8459859731153370499) -->
+ <skip />
+ <!-- no translation found for policylab_expirePassword (5610055012328825874) -->
+ <skip />
+ <!-- no translation found for policydesc_expirePassword (5367525762204416046) -->
+ <skip />
+ <!-- no translation found for policylab_encryptedStorage (8901326199909132915) -->
+ <skip />
+ <!-- no translation found for policydesc_encryptedStorage (2637732115325316992) -->
+ <skip />
+ <!-- no translation found for policylab_disableCamera (6395301023152297826) -->
+ <skip />
+ <!-- no translation found for policydesc_disableCamera (2306349042834754597) -->
+ <skip />
+ <!-- no translation found for policylab_disableKeyguardFeatures (8552277871075367771) -->
+ <skip />
+ <!-- no translation found for policydesc_disableKeyguardFeatures (2044755691354158439) -->
+ <skip />
+ <!-- no translation found for phoneTypes:0 (8901098336658710359) -->
+ <!-- no translation found for phoneTypes:1 (869923650527136615) -->
+ <!-- no translation found for phoneTypes:2 (7897544654242874543) -->
+ <!-- no translation found for phoneTypes:3 (1103601433382158155) -->
+ <!-- no translation found for phoneTypes:4 (1735177144948329370) -->
+ <!-- no translation found for phoneTypes:5 (603878674477207394) -->
+ <!-- no translation found for phoneTypes:6 (1650824275177931637) -->
+ <!-- no translation found for phoneTypes:7 (9192514806975898961) -->
+ <!-- no translation found for emailAddressTypes:0 (8073994352956129127) -->
+ <!-- no translation found for emailAddressTypes:1 (7084237356602625604) -->
+ <!-- no translation found for emailAddressTypes:2 (1112044410659011023) -->
+ <!-- no translation found for emailAddressTypes:3 (2374913952870110618) -->
+ <!-- no translation found for postalAddressTypes:0 (6880257626740047286) -->
+ <!-- no translation found for postalAddressTypes:1 (5629153956045109251) -->
+ <!-- no translation found for postalAddressTypes:2 (4966604264500343469) -->
+ <!-- no translation found for postalAddressTypes:3 (4932682847595299369) -->
+ <!-- no translation found for imAddressTypes:0 (1738585194601476694) -->
+ <!-- no translation found for imAddressTypes:1 (1359644565647383708) -->
+ <!-- no translation found for imAddressTypes:2 (7868549401053615677) -->
+ <!-- no translation found for imAddressTypes:3 (3145118944639869809) -->
+ <!-- no translation found for organizationTypes:0 (7546335612189115615) -->
+ <!-- no translation found for organizationTypes:1 (4378074129049520373) -->
+ <!-- no translation found for organizationTypes:2 (3455047468583965104) -->
+ <!-- no translation found for imProtocols:0 (8595261363518459565) -->
+ <!-- no translation found for imProtocols:1 (7390473628275490700) -->
+ <!-- no translation found for imProtocols:2 (7882877134931458217) -->
+ <!-- no translation found for imProtocols:3 (5035376313200585242) -->
+ <!-- no translation found for imProtocols:4 (7532363178459444943) -->
+ <!-- no translation found for imProtocols:5 (3713441034299660749) -->
+ <!-- no translation found for imProtocols:6 (2506857312718630823) -->
+ <!-- no translation found for imProtocols:7 (1648797903785279353) -->
+ <!-- no translation found for phoneTypeCustom (1644738059053355820) -->
+ <skip />
+ <!-- no translation found for phoneTypeHome (2570923463033985887) -->
+ <skip />
+ <!-- no translation found for phoneTypeMobile (6501463557754751037) -->
+ <skip />
+ <!-- no translation found for phoneTypeWork (8863939667059911633) -->
+ <skip />
+ <!-- no translation found for phoneTypeFaxWork (3517792160008890912) -->
+ <skip />
+ <!-- no translation found for phoneTypeFaxHome (2067265972322971467) -->
+ <skip />
+ <!-- no translation found for phoneTypePager (7582359955394921732) -->
+ <skip />
+ <!-- no translation found for phoneTypeOther (1544425847868765990) -->
+ <skip />
+ <!-- no translation found for phoneTypeCallback (2712175203065678206) -->
+ <skip />
+ <!-- no translation found for phoneTypeCar (8738360689616716982) -->
+ <skip />
+ <!-- no translation found for phoneTypeCompanyMain (540434356461478916) -->
+ <skip />
+ <!-- no translation found for phoneTypeIsdn (8022453193171370337) -->
+ <skip />
+ <!-- no translation found for phoneTypeMain (6766137010628326916) -->
+ <skip />
+ <!-- no translation found for phoneTypeOtherFax (8587657145072446565) -->
+ <skip />
+ <!-- no translation found for phoneTypeRadio (4093738079908667513) -->
+ <skip />
+ <!-- no translation found for phoneTypeTelex (3367879952476250512) -->
+ <skip />
+ <!-- no translation found for phoneTypeTtyTdd (8606514378585000044) -->
+ <skip />
+ <!-- no translation found for phoneTypeWorkMobile (1311426989184065709) -->
+ <skip />
+ <!-- no translation found for phoneTypeWorkPager (649938731231157056) -->
+ <skip />
+ <!-- no translation found for phoneTypeAssistant (5596772636128562884) -->
+ <skip />
+ <!-- no translation found for phoneTypeMms (7254492275502768992) -->
+ <skip />
+ <!-- no translation found for eventTypeCustom (7837586198458073404) -->
+ <skip />
+ <!-- no translation found for eventTypeBirthday (2813379844211390740) -->
+ <skip />
+ <!-- no translation found for eventTypeAnniversary (3876779744518284000) -->
+ <skip />
+ <!-- no translation found for eventTypeOther (7388178939010143077) -->
+ <skip />
+ <!-- no translation found for emailTypeCustom (8525960257804213846) -->
+ <skip />
+ <!-- no translation found for emailTypeHome (449227236140433919) -->
+ <skip />
+ <!-- no translation found for emailTypeWork (3548058059601149973) -->
+ <skip />
+ <!-- no translation found for emailTypeOther (2923008695272639549) -->
+ <skip />
+ <!-- no translation found for emailTypeMobile (119919005321166205) -->
+ <skip />
+ <!-- no translation found for postalTypeCustom (8903206903060479902) -->
+ <skip />
+ <!-- no translation found for postalTypeHome (8165756977184483097) -->
+ <skip />
+ <!-- no translation found for postalTypeWork (5268172772387694495) -->
+ <skip />
+ <!-- no translation found for postalTypeOther (2726111966623584341) -->
+ <skip />
+ <!-- no translation found for imTypeCustom (2074028755527826046) -->
+ <skip />
+ <!-- no translation found for imTypeHome (6241181032954263892) -->
+ <skip />
+ <!-- no translation found for imTypeWork (1371489290242433090) -->
+ <skip />
+ <!-- no translation found for imTypeOther (5377007495735915478) -->
+ <skip />
+ <!-- no translation found for imProtocolCustom (6919453836618749992) -->
+ <skip />
+ <!-- no translation found for imProtocolAim (7050360612368383417) -->
+ <skip />
+ <!-- no translation found for imProtocolMsn (144556545420769442) -->
+ <skip />
+ <!-- no translation found for imProtocolYahoo (8271439408469021273) -->
+ <skip />
+ <!-- no translation found for imProtocolSkype (9019296744622832951) -->
+ <skip />
+ <!-- no translation found for imProtocolQq (8887484379494111884) -->
+ <skip />
+ <!-- no translation found for imProtocolGoogleTalk (493902321140277304) -->
+ <skip />
+ <!-- no translation found for imProtocolIcq (1574870433606517315) -->
+ <skip />
+ <!-- no translation found for imProtocolJabber (2279917630875771722) -->
+ <skip />
+ <!-- no translation found for imProtocolNetMeeting (8287625655986827971) -->
+ <skip />
+ <!-- no translation found for orgTypeWork (29268870505363872) -->
+ <skip />
+ <!-- no translation found for orgTypeOther (3951781131570124082) -->
+ <skip />
+ <!-- no translation found for orgTypeCustom (225523415372088322) -->
+ <skip />
+ <!-- no translation found for relationTypeCustom (3542403679827297300) -->
+ <skip />
+ <!-- no translation found for relationTypeAssistant (6274334825195379076) -->
+ <skip />
+ <!-- no translation found for relationTypeBrother (8757913506784067713) -->
+ <skip />
+ <!-- no translation found for relationTypeChild (1890746277276881626) -->
+ <skip />
+ <!-- no translation found for relationTypeDomesticPartner (6904807112121122133) -->
+ <skip />
+ <!-- no translation found for relationTypeFather (5228034687082050725) -->
+ <skip />
+ <!-- no translation found for relationTypeFriend (7313106762483391262) -->
+ <skip />
+ <!-- no translation found for relationTypeManager (6365677861610137895) -->
+ <skip />
+ <!-- no translation found for relationTypeMother (4578571352962758304) -->
+ <skip />
+ <!-- no translation found for relationTypeParent (4755635567562925226) -->
+ <skip />
+ <!-- no translation found for relationTypePartner (7266490285120262781) -->
+ <skip />
+ <!-- no translation found for relationTypeReferredBy (101573059844135524) -->
+ <skip />
+ <!-- no translation found for relationTypeRelative (1799819930085610271) -->
+ <skip />
+ <!-- no translation found for relationTypeSister (1735983554479076481) -->
+ <skip />
+ <!-- no translation found for relationTypeSpouse (394136939428698117) -->
+ <skip />
+ <!-- no translation found for sipAddressTypeCustom (2473580593111590945) -->
+ <skip />
+ <!-- no translation found for sipAddressTypeHome (6093598181069359295) -->
+ <skip />
+ <!-- no translation found for sipAddressTypeWork (6920725730797099047) -->
+ <skip />
+ <!-- no translation found for sipAddressTypeOther (4408436162950119849) -->
+ <skip />
+ <!-- no translation found for quick_contacts_not_available (746098007828579688) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_pin_code (3037685796058495017) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_puk_code (4800725266925845333) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_pin_prompt (8027680321614196258) -->
+ <skip />
+ <!-- no translation found for keyguard_password_entry_touch_hint (7858547464982981384) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_password_code (1054721668279049780) -->
+ <skip />
+ <!-- no translation found for keyguard_password_enter_pin_password_code (6391755146112503443) -->
+ <skip />
+ <!-- no translation found for keyguard_password_wrong_pin_code (2422225591006134936) -->
+ <skip />
+ <!-- no translation found for keyguard_label_text (861796461028298424) -->
+ <skip />
+ <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
+ <skip />
+ <!-- no translation found for lockscreen_carrier_default (6169005837238288522) -->
+ <skip />
+ <!-- no translation found for lockscreen_screen_locked (7288443074806832904) -->
+ <skip />
+ <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
+ <skip />
+ <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
+ <skip />
+ <!-- no translation found for lockscreen_pattern_instructions (7478703254964810302) -->
+ <skip />
+ <!-- no translation found for lockscreen_emergency_call (5298642613417801888) -->
+ <skip />
+ <!-- no translation found for lockscreen_return_to_call (5244259785500040021) -->
+ <skip />
+ <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
+ <skip />
+ <!-- no translation found for lockscreen_pattern_wrong (4317955014948108794) -->
+ <skip />
+ <!-- no translation found for lockscreen_password_wrong (5737815393253165301) -->
+ <skip />
+ <!-- no translation found for faceunlock_multiple_failures (754137583022792429) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_message_short (5099439277819215399) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_message (151659196095791474) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_message (1943633865476989599) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_message (2186920585695169078) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_instructions (5372787138023272615) -->
+ <skip />
+ <!-- no translation found for lockscreen_missing_sim_instructions_long (3526573099019319472) -->
+ <skip />
+ <!-- no translation found for lockscreen_permanent_disabled_sim_message_short (5096149665138916184) -->
+ <skip />
+ <!-- no translation found for lockscreen_permanent_disabled_sim_instructions (910904643433151371) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_prev_description (6300840251218161534) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (573285210424377338) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (3980308465056173363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (1901258823643886401) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (5907083260651210034) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_rew_description (6944412838651990410) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_ffw_description (42987149870928985) -->
+ <skip />
+ <!-- no translation found for emergency_calls_only (6733978304386365407) -->
+ <!-- no translation found for emergency_calls_only (2485604591272668370) -->
+ <skip />
+ <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
+ <skip />
+ <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
+ <skip />
+ <!-- no translation found for lockscreen_sim_puk_locked_instructions (8127916255245181063) -->
+ <skip />
+ <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
+ <skip />
+ <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
+ <skip />
+ <!-- no translation found for lockscreen_too_many_failed_attempts_dialog_message (6481623830344107222) -->
+ <skip />
+ <!-- no translation found for lockscreen_too_many_failed_password_attempts_dialog_message (2725973286239344555) -->
+ <skip />
+ <!-- no translation found for lockscreen_too_many_failed_pin_attempts_dialog_message (6216672706545696955) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_glogin (9191611984625460820) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_glogin (5316664559603394684) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_glogin (2590227559763762751) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (6128106399745755604) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (950408382418270260) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_almost_at_wipe (8603565142156826565) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (280873516493934365) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3195755534096192191) -->
+ <skip />
+ <!-- no translation found for lockscreen_failed_attempts_now_wiping (3025504721764922246) -->
+ <skip />
+ <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
+ <skip />
+ <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_forgot_pattern (2588521501166032747) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_too_many_attempts (2751368605287288808) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_instructions (3931816256100707784) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_account_recovery_hint (1696924763690379073) -->
+ <skip />
+ <!-- no translation found for lockscreen_glogin_checking_password (7114627351286933867) -->
+ <skip />
+ <!-- no translation found for lockscreen_unlock_label (737440483220667054) -->
+ <skip />
+ <!-- no translation found for lockscreen_sound_on_label (9068877576513425970) -->
+ <skip />
+ <!-- no translation found for lockscreen_sound_off_label (996822825154319026) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added_verbose (7264580781744026939) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_area (400813207572953209) -->
+ <!-- no translation found for lockscreen_access_pattern_area () -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_add_widget (8273277058724924654) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget_empty_slot (1281505703307930757) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_unlock_area_expanded (2278106022311170299) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_unlock_area_collapsed (6366992066936076396) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget (6527131039741808240) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_user_selector (1226798370913698896) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_status (8008264603935930611) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_camera (8904231194181114603) -->
+ <skip />
+ <!-- no translation found for keygaurd_accessibility_media_controls (262209654292161806) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget_reorder_start (8736853615588828197) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget_reorder_end (7170190950870468320) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_widget_deleted (4426204263929224434) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_expand_lock_area (519859720934178024) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_slide_unlock (2959928478764697254) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_pattern_unlock (1490840706075246612) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_face_unlock (4817282543351718535) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_pin_unlock (2469687111784035046) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_password_unlock (7675777623912155089) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_pattern_area (7679891324509597904) -->
+ <skip />
+ <!-- no translation found for keyguard_accessibility_slide_area (6736064494019979544) -->
+ <skip />
+ <!-- no translation found for password_keyboard_label_symbol_key (992280756256536042) -->
+ <skip />
+ <!-- no translation found for password_keyboard_label_alpha_key (8001096175167485649) -->
+ <skip />
+ <!-- no translation found for password_keyboard_label_alt_key (1284820942620288678) -->
+ <skip />
+ <!-- no translation found for granularity_label_character (7336470535385009523) -->
+ <skip />
+ <!-- no translation found for granularity_label_word (7075570328374918660) -->
+ <skip />
+ <!-- no translation found for granularity_label_link (5815508880782488267) -->
+ <skip />
+ <!-- no translation found for granularity_label_line (5764267235026120888) -->
+ <skip />
+ <!-- no translation found for factorytest_failed (5410270329114212041) -->
+ <skip />
+ <!-- no translation found for factorytest_not_system (4435201656767276723) -->
+ <skip />
+ <!-- no translation found for factorytest_no_action (872991874799998561) -->
+ <skip />
+ <!-- no translation found for factorytest_reboot (6320168203050791643) -->
+ <skip />
+ <!-- no translation found for js_dialog_title (1987483977834603872) -->
+ <skip />
+ <!-- no translation found for js_dialog_title_default (6961903213729667573) -->
+ <skip />
+ <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) -->
+ <skip />
+ <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) -->
+ <skip />
+ <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) -->
+ <skip />
+ <!-- no translation found for js_dialog_before_unload (3468816357095378590) -->
+ <skip />
+ <!-- no translation found for save_password_label (6860261758665825069) -->
+ <skip />
+ <!-- no translation found for double_tap_toast (4595046515400268881) -->
+ <skip />
+ <!-- no translation found for autofill_this_form (4616758841157816676) -->
+ <skip />
+ <!-- no translation found for setup_autofill (7103495070180590814) -->
+ <skip />
+ <!-- no translation found for autofill_address_name_separator (6350145154779706772) -->
+ <skip />
+ <!-- no translation found for autofill_address_summary_name_format (3268041054899214945) -->
+ <skip />
+ <!-- no translation found for autofill_address_summary_separator (7483307893170324129) -->
+ <skip />
+ <!-- no translation found for autofill_address_summary_format (4874459455786827344) -->
+ <skip />
+ <!-- no translation found for autofill_province (2231806553863422300) -->
+ <skip />
+ <!-- no translation found for autofill_postal_code (4696430407689377108) -->
+ <skip />
+ <!-- no translation found for autofill_state (6988894195520044613) -->
+ <skip />
+ <!-- no translation found for autofill_zip_code (8697544592627322946) -->
+ <skip />
+ <!-- no translation found for autofill_county (237073771020362891) -->
+ <skip />
+ <!-- no translation found for autofill_island (4020100875984667025) -->
+ <skip />
+ <!-- no translation found for autofill_district (8400735073392267672) -->
+ <skip />
+ <!-- no translation found for autofill_department (5343279462564453309) -->
+ <skip />
+ <!-- no translation found for autofill_prefecture (2028499485065800419) -->
+ <skip />
+ <!-- no translation found for autofill_parish (8202206105468820057) -->
+ <skip />
+ <!-- no translation found for autofill_area (3547409050889952423) -->
+ <skip />
+ <!-- no translation found for autofill_emirate (2893880978835698818) -->
+ <skip />
+ <!-- no translation found for permlab_readHistoryBookmarks (3775265775405106983) -->
+ <skip />
+ <!-- no translation found for permdesc_readHistoryBookmarks (8462378226600439658) -->
+ <skip />
+ <!-- no translation found for permlab_writeHistoryBookmarks (3714785165273314490) -->
+ <skip />
+ <!-- no translation found for permdesc_writeHistoryBookmarks (6825527469145760922) -->
+ <skip />
+ <!-- no translation found for permdesc_writeHistoryBookmarks (7007393823197766548) -->
+ <skip />
+ <!-- no translation found for permdesc_writeHistoryBookmarks (8497389531014185509) -->
+ <skip />
+ <!-- no translation found for permlab_setAlarm (1379294556362091814) -->
+ <skip />
+ <!-- no translation found for permdesc_setAlarm (316392039157473848) -->
+ <skip />
+ <!-- no translation found for permlab_addVoicemail (5525660026090959044) -->
+ <skip />
+ <!-- no translation found for permdesc_addVoicemail (6604508651428252437) -->
+ <skip />
+ <!-- no translation found for permlab_writeGeolocationPermissions (5962224158955273932) -->
+ <skip />
+ <!-- no translation found for permdesc_writeGeolocationPermissions (1083743234522638747) -->
+ <skip />
+ <!-- no translation found for save_password_message (767344687139195790) -->
+ <skip />
+ <!-- no translation found for save_password_notnow (6389675316706699758) -->
+ <skip />
+ <!-- no translation found for save_password_remember (6491879678996749466) -->
+ <skip />
+ <!-- no translation found for save_password_never (8274330296785855105) -->
+ <skip />
+ <!-- no translation found for open_permission_deny (7374036708316629800) -->
+ <skip />
+ <!-- no translation found for text_copied (4985729524670131385) -->
+ <skip />
+ <!-- no translation found for more_item_label (4650918923083320495) -->
+ <skip />
+ <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
+ <skip />
+ <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
+ <skip />
+ <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
+ <skip />
+ <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
+ <skip />
+ <!-- no translation found for search_go (8298016669822141719) -->
+ <skip />
+ <!-- no translation found for search_hint (1733947260773056054) -->
+ <skip />
+ <!-- no translation found for searchview_description_search (6749826639098512120) -->
+ <skip />
+ <!-- no translation found for searchview_description_query (5911778593125355124) -->
+ <skip />
+ <!-- no translation found for searchview_description_clear (1330281990951833033) -->
+ <skip />
+ <!-- no translation found for searchview_description_submit (2688450133297983542) -->
+ <skip />
+ <!-- no translation found for searchview_description_voice (2453203695674994440) -->
+ <skip />
+ <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) -->
+ <skip />
+ <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) -->
+ <skip />
+ <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) -->
+ <skip />
+ <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
+ <skip />
+ <!-- no translation found for beforeOneMonthDurationPast (909134546836499826) -->
+ <skip />
+ <!-- no translation found for last_num_days (5104533550723932025) -->
+ <!-- no translation found for last_month (3959346739979055432) -->
+ <skip />
+ <!-- no translation found for older (5211975022815554840) -->
+ <skip />
+ <!-- no translation found for preposition_for_date (9093949757757445117) -->
+ <skip />
+ <!-- no translation found for preposition_for_time (5506831244263083793) -->
+ <skip />
+ <!-- no translation found for preposition_for_year (5040395640711867177) -->
+ <skip />
+ <!-- no translation found for day (8144195776058119424) -->
+ <skip />
+ <!-- no translation found for days (4774547661021344602) -->
+ <skip />
+ <!-- no translation found for hour (2126771916426189481) -->
+ <skip />
+ <!-- no translation found for hours (894424005266852993) -->
+ <skip />
+ <!-- no translation found for minute (9148878657703769868) -->
+ <skip />
+ <!-- no translation found for minutes (5646001005827034509) -->
+ <skip />
+ <!-- no translation found for second (3184235808021478) -->
+ <skip />
+ <!-- no translation found for seconds (3161515347216589235) -->
+ <skip />
+ <!-- no translation found for week (5617961537173061583) -->
+ <skip />
+ <!-- no translation found for weeks (6509623834583944518) -->
+ <skip />
+ <!-- no translation found for year (4001118221013892076) -->
+ <skip />
+ <!-- no translation found for years (6881577717993213522) -->
+ <skip />
+ <!-- no translation found for duration_seconds (4527986939729687805) -->
+ <!-- no translation found for duration_minutes (643786953939956125) -->
+ <!-- no translation found for duration_hours (6826233369186668274) -->
+ <!-- no translation found for VideoView_error_title (3534509135438353077) -->
+ <skip />
+ <!-- no translation found for VideoView_error_text_invalid_progressive_playback (3186670335938670444) -->
+ <skip />
+ <!-- no translation found for VideoView_error_text_unknown (3450439155187810085) -->
+ <skip />
+ <!-- no translation found for VideoView_error_button (2822238215100679592) -->
+ <skip />
+ <!-- no translation found for relative_time (1818557177829411417) -->
+ <skip />
+ <!-- no translation found for noon (7245353528818587908) -->
+ <skip />
+ <!-- no translation found for Noon (3342127745230013127) -->
+ <skip />
+ <!-- no translation found for midnight (7166259508850457595) -->
+ <skip />
+ <!-- no translation found for Midnight (5630806906897892201) -->
+ <skip />
+ <!-- no translation found for elapsed_time_short_format_mm_ss (4431555943828711473) -->
+ <skip />
+ <!-- no translation found for elapsed_time_short_format_h_mm_ss (1846071997616654124) -->
+ <skip />
+ <!-- no translation found for selectAll (6876518925844129331) -->
+ <skip />
+ <!-- no translation found for cut (3092569408438626261) -->
+ <skip />
+ <!-- no translation found for copy (2681946229533511987) -->
+ <skip />
+ <!-- no translation found for paste (5629880836805036433) -->
+ <skip />
+ <!-- no translation found for paste_as_plain_text (5427792741908010675) -->
+ <skip />
+ <!-- no translation found for replace (5781686059063148930) -->
+ <skip />
+ <!-- no translation found for delete (6098684844021697789) -->
+ <skip />
+ <!-- no translation found for copyUrl (2538211579596067402) -->
+ <skip />
+ <!-- no translation found for selectTextMode (1018691815143165326) -->
+ <skip />
+ <!-- no translation found for undo (7905788502491742328) -->
+ <skip />
+ <!-- no translation found for redo (7759464876566803888) -->
+ <skip />
+ <!-- no translation found for textSelectionCABTitle (5236850394370820357) -->
+ <skip />
+ <!-- no translation found for addToDictionary (4352161534510057874) -->
+ <skip />
+ <!-- no translation found for deleteText (6979668428458199034) -->
+ <skip />
+ <!-- no translation found for inputMethod (1653630062304567879) -->
+ <skip />
+ <!-- no translation found for editTextMenuTitle (4909135564941815494) -->
+ <skip />
+ <!-- no translation found for low_internal_storage_view_title (5576272496365684834) -->
+ <skip />
+ <!-- no translation found for low_internal_storage_view_text (6640505817617414371) -->
+ <skip />
+ <!-- no translation found for low_internal_storage_view_text_no_boot (6935190099204693424) -->
+ <skip />
+ <!-- no translation found for app_running_notification_title (8718335121060787914) -->
+ <skip />
+ <!-- no translation found for app_running_notification_text (4653586947747330058) -->
+ <skip />
+ <!-- no translation found for ok (5970060430562524910) -->
+ <skip />
+ <!-- no translation found for cancel (6442560571259935130) -->
+ <skip />
+ <!-- no translation found for yes (5362982303337969312) -->
+ <skip />
+ <!-- no translation found for no (5141531044935541497) -->
+ <skip />
+ <!-- no translation found for dialog_alert_title (2049658708609043103) -->
+ <skip />
+ <!-- no translation found for loading (7933681260296021180) -->
+ <skip />
+ <!-- no translation found for capital_on (1544682755514494298) -->
+ <skip />
+ <!-- no translation found for capital_off (6815870386972805832) -->
+ <skip />
+ <!-- no translation found for whichApplication (4533185947064773386) -->
+ <skip />
+ <!-- no translation found for whichApplicationNamed (8260158865936942783) -->
+ <skip />
+ <!-- no translation found for whichViewApplication (3272778576700572102) -->
+ <skip />
+ <!-- no translation found for whichViewApplicationNamed (2286418824011249620) -->
+ <skip />
+ <!-- no translation found for whichEditApplication (144727838241402655) -->
+ <skip />
+ <!-- no translation found for whichEditApplicationNamed (1775815530156447790) -->
+ <skip />
+ <!-- no translation found for whichSendApplication (6902512414057341668) -->
+ <skip />
+ <!-- no translation found for whichSendApplicationNamed (2799370240005424391) -->
+ <skip />
+ <!-- no translation found for whichHomeApplication (4307587691506919691) -->
+ <skip />
+ <!-- no translation found for whichHomeApplicationNamed (4493438593214760979) -->
+ <skip />
+ <!-- no translation found for alwaysUse (4583018368000610438) -->
+ <skip />
+ <!-- no translation found for use_a_different_app (8134926230585710243) -->
+ <skip />
+ <!-- no translation found for clearDefaultHintMsg (3252584689512077257) -->
+ <skip />
+ <!-- no translation found for chooseActivity (7486876147751803333) -->
+ <skip />
+ <!-- no translation found for chooseUsbActivity (6894748416073583509) -->
+ <skip />
+ <!-- no translation found for noApplications (2991814273936504689) -->
+ <skip />
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <!-- no translation found for aerr_application (932628488013092776) -->
+ <skip />
+ <!-- no translation found for aerr_process (4507058997035697579) -->
+ <skip />
+ <!-- no translation found for aerr_process_silence (4226685530196000222) -->
+ <skip />
+ <string name="anr_title" msgid="4351948481459135709"></string>
+ <!-- no translation found for anr_activity_application (1904477189057199066) -->
+ <skip />
+ <!-- no translation found for anr_activity_process (5776209883299089767) -->
+ <skip />
+ <!-- no translation found for anr_application_process (8941757607340481057) -->
+ <skip />
+ <!-- no translation found for anr_process (6513209874880517125) -->
+ <skip />
+ <!-- no translation found for force_close (8346072094521265605) -->
+ <skip />
+ <!-- no translation found for report (4060218260984795706) -->
+ <skip />
+ <!-- no translation found for wait (7147118217226317732) -->
+ <skip />
+ <!-- no translation found for webpage_unresponsive (3272758351138122503) -->
+ <skip />
+ <!-- no translation found for launch_warning_title (1547997780506713581) -->
+ <skip />
+ <!-- no translation found for launch_warning_replace (6202498949970281412) -->
+ <skip />
+ <!-- no translation found for launch_warning_original (188102023021668683) -->
+ <skip />
+ <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
+ <skip />
+ <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
+ <skip />
+ <!-- no translation found for screen_compat_mode_hint (1064524084543304459) -->
+ <skip />
+ <!-- no translation found for smv_application (3307209192155442829) -->
+ <skip />
+ <!-- no translation found for smv_process (5120397012047462446) -->
+ <skip />
+ <!-- no translation found for android_upgrading_title (1584192285441405746) -->
+ <skip />
+ <!-- no translation found for android_start_title (8418054686415318207) -->
+ <skip />
+ <!-- no translation found for android_upgrading_fstrim (8036718871534640010) -->
+ <skip />
+ <!-- no translation found for android_upgrading_apk (7904042682111526169) -->
+ <skip />
+ <!-- no translation found for android_preparing_apk (8162599310274079154) -->
+ <skip />
+ <!-- no translation found for android_upgrading_starting_apps (451464516346926713) -->
+ <skip />
+ <!-- no translation found for android_upgrading_complete (1405954754112999229) -->
+ <skip />
+ <!-- no translation found for heavy_weight_notification (9087063985776626166) -->
+ <skip />
+ <!-- no translation found for heavy_weight_notification_detail (1721681741617898865) -->
+ <skip />
+ <!-- no translation found for heavy_weight_switcher_title (7153167085403298169) -->
+ <skip />
+ <!-- no translation found for heavy_weight_switcher_text (7022631924534406403) -->
+ <skip />
+ <!-- no translation found for old_app_action (493129172238566282) -->
+ <skip />
+ <!-- no translation found for old_app_description (2082094275580358049) -->
+ <skip />
+ <!-- no translation found for new_app_action (5472756926945440706) -->
+ <skip />
+ <!-- no translation found for new_app_description (1932143598371537340) -->
+ <skip />
+ <!-- no translation found for dump_heap_notification (2618183274836056542) -->
+ <skip />
+ <!-- no translation found for dump_heap_notification_detail (2075673362317481664) -->
+ <skip />
+ <!-- no translation found for dump_heap_title (5864292264307651673) -->
+ <skip />
+ <!-- no translation found for dump_heap_text (4809417337240334941) -->
+ <skip />
+ <!-- no translation found for sendText (5209874571959469142) -->
+ <skip />
+ <!-- no translation found for volume_ringtone (6885421406845734650) -->
+ <skip />
+ <!-- no translation found for volume_music (5421651157138628171) -->
+ <skip />
+ <!-- no translation found for volume_music_hint_playing_through_bluetooth (9165984379394601533) -->
+ <skip />
+ <!-- no translation found for volume_music_hint_silent_ringtone_selected (8310739960973156272) -->
+ <skip />
+ <!-- no translation found for volume_call (3941680041282788711) -->
+ <skip />
+ <!-- no translation found for volume_bluetooth_call (2002891926351151534) -->
+ <skip />
+ <!-- no translation found for volume_alarm (1985191616042689100) -->
+ <skip />
+ <!-- no translation found for volume_notification (2422265656744276715) -->
+ <skip />
+ <!-- no translation found for volume_unknown (1400219669770445902) -->
+ <skip />
+ <!-- no translation found for volume_icon_description_bluetooth (6538894177255964340) -->
+ <skip />
+ <!-- no translation found for volume_icon_description_ringer (3326003847006162496) -->
+ <skip />
+ <!-- no translation found for volume_icon_description_incall (8890073218154543397) -->
+ <skip />
+ <!-- no translation found for volume_icon_description_media (4217311719665194215) -->
+ <skip />
+ <!-- no translation found for volume_icon_description_notification (7044986546477282274) -->
+ <skip />
+ <!-- no translation found for ringtone_default (3789758980357696936) -->
+ <skip />
+ <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
+ <skip />
+ <!-- no translation found for ringtone_silent (7937634392408977062) -->
+ <skip />
+ <!-- no translation found for ringtone_picker_title (3515143939175119094) -->
+ <skip />
+ <!-- no translation found for ringtone_unknown (5477919988701784788) -->
+ <skip />
+ <!-- no translation found for wifi_available (7900333017752027322) -->
+ <!-- no translation found for wifi_available_detailed (1140699367193975606) -->
+ <!-- no translation found for wifi_available_sign_in (9157196203958866662) -->
+ <skip />
+ <!-- no translation found for network_available_sign_in (1848877297365446605) -->
+ <skip />
+ <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+ <skip />
+ <!-- no translation found for wifi_no_internet (8451173622563841546) -->
+ <skip />
+ <!-- no translation found for wifi_no_internet_detailed (7593858887662270131) -->
+ <skip />
+ <!-- no translation found for wifi_watchdog_network_disabled (7904214231651546347) -->
+ <skip />
+ <!-- no translation found for wifi_watchdog_network_disabled_detailed (5548780776418332675) -->
+ <skip />
+ <!-- no translation found for wifi_connect_alert_title (8455846016001810172) -->
+ <skip />
+ <!-- no translation found for wifi_connect_alert_message (6451273376815958922) -->
+ <skip />
+ <!-- no translation found for wifi_connect_default_application (7143109390475484319) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_turnon_message (2909250942299627244) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_failed_message (3763669677935623084) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
+ <skip />
+ <!-- no translation found for accept (1645267259272829559) -->
+ <skip />
+ <!-- no translation found for decline (2112225451706137894) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_invitation_sent_title (1318975185112070734) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_invitation_to_connect_title (4958803948658533637) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_from_message (570389174731951769) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_to_message (248968974522044099) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_enter_pin_message (5920929550367828970) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_show_pin_message (8530563323880921094) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_frequency_conflict_message (8012981257742232475) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_frequency_conflict_message (3087858235069421128) -->
+ <skip />
+ <!-- no translation found for wifi_p2p_frequency_conflict_message (7363907213787469151) -->
+ <skip />
+ <!-- no translation found for select_character (3365550120617701745) -->
+ <skip />
+ <!-- no translation found for sms_control_title (7296612781128917719) -->
+ <skip />
+ <!-- no translation found for sms_control_message (3867899169651496433) -->
+ <skip />
+ <!-- no translation found for sms_control_yes (3663725993855816807) -->
+ <skip />
+ <!-- no translation found for sms_control_no (625438561395534982) -->
+ <skip />
+ <!-- no translation found for sms_short_code_confirm_message (1645436466285310855) -->
+ <skip />
+ <!-- no translation found for sms_short_code_details (5873295990846059400) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (7869234868023975) -->
+ <skip />
+ <!-- no translation found for sms_short_code_confirm_allow (4458878637111023413) -->
+ <skip />
+ <!-- no translation found for sms_short_code_confirm_deny (2927389840209170706) -->
+ <skip />
+ <!-- no translation found for sms_short_code_remember_choice (5289538592272218136) -->
+ <skip />
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
+ <!-- no translation found for sms_short_code_confirm_always_allow (3241181154869493368) -->
+ <skip />
+ <!-- no translation found for sms_short_code_confirm_never_allow (446992765774269673) -->
+ <skip />
+ <!-- no translation found for sim_removed_title (6227712319223226185) -->
+ <skip />
+ <!-- no translation found for sim_removed_message (5450336489923274918) -->
+ <skip />
+ <!-- no translation found for sim_done_button (827949989369963775) -->
+ <skip />
+ <!-- no translation found for sim_added_title (3719670512889674693) -->
+ <skip />
+ <!-- no translation found for sim_added_message (7797975656153714319) -->
+ <skip />
+ <!-- no translation found for sim_restart_button (4722407842815232347) -->
+ <skip />
+ <!-- no translation found for time_picker_dialog_title (8349362623068819295) -->
+ <skip />
+ <!-- no translation found for date_picker_dialog_title (5879450659453782278) -->
+ <skip />
+ <!-- no translation found for date_time_set (5777075614321087758) -->
+ <skip />
+ <!-- no translation found for date_time_done (2507683751759308828) -->
+ <skip />
+ <!-- no translation found for perms_new_perm_prefix (8257740710754301407) -->
+ <skip />
+ <!-- no translation found for perms_description_app (5139836143293299417) -->
+ <skip />
+ <!-- no translation found for no_permissions (7283357728219338112) -->
+ <skip />
+ <!-- no translation found for perm_costs_money (4902470324142151116) -->
+ <skip />
+ <!-- no translation found for dlg_ok (7376953167039865701) -->
+ <skip />
+ <!-- no translation found for usb_charging_notification_title (4004114449249406402) -->
+ <skip />
+ <!-- no translation found for usb_mtp_notification_title (8396264943589760855) -->
+ <skip />
+ <!-- no translation found for usb_ptp_notification_title (1347328437083192112) -->
+ <skip />
+ <!-- no translation found for usb_midi_notification_title (4850904915889144654) -->
+ <skip />
+ <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
+ <skip />
+ <!-- no translation found for usb_notification_message (7347368030849048437) -->
+ <skip />
+ <!-- no translation found for adb_active_notification_title (6729044778949189918) -->
+ <skip />
+ <!-- no translation found for adb_active_notification_message (1016654627626476142) -->
+ <skip />
+ <!-- no translation found for share_remote_bugreport_notification_title (3116061729914615290) -->
+ <skip />
+ <!-- no translation found for share_remote_bugreport_notification_message (1310517845557771773) -->
+ <skip />
+ <!-- no translation found for share_remote_bugreport_notification_accept (8203856129078669677) -->
+ <skip />
+ <!-- no translation found for share_remote_bugreport_notification_decline (6337969352057443969) -->
+ <skip />
+ <!-- no translation found for remote_bugreport_progress_notification_title (2785600634417078622) -->
+ <skip />
+ <!-- no translation found for remote_bugreport_progress_notification_message_can_cancel (5743435483005099451) -->
+ <skip />
+ <!-- no translation found for select_input_method (8547250819326693584) -->
+ <skip />
+ <!-- no translation found for configure_input_methods (4769971288371946846) -->
+ <skip />
+ <!-- no translation found for show_ime (2506087537466597099) -->
+ <skip />
+ <!-- no translation found for hardware (194658061510127999) -->
+ <skip />
+ <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) -->
+ <skip />
+ <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) -->
+ <skip />
+ <!-- no translation found for fast_scroll_alphabet (5433275485499039199) -->
+ <skip />
+ <!-- no translation found for fast_scroll_numeric_alphabet (4030170524595123610) -->
+ <skip />
+ <!-- no translation found for candidates_style (4333913089637062257) -->
+ <skip />
+ <!-- no translation found for ext_media_checking_notification_title (5734005953288045806) -->
+ <skip />
+ <!-- no translation found for ext_media_checking_notification_message (4747432538578886744) -->
+ <skip />
+ <!-- no translation found for ext_media_new_notification_message (7589986898808506239) -->
+ <skip />
+ <!-- no translation found for ext_media_ready_notification_message (4083398150380114462) -->
+ <skip />
+ <!-- no translation found for ext_media_unmountable_notification_title (8295123366236989588) -->
+ <skip />
+ <!-- no translation found for ext_media_unmountable_notification_message (1586311304430052169) -->
+ <skip />
+ <!-- no translation found for ext_media_unsupported_notification_title (3797642322958803257) -->
+ <skip />
+ <!-- no translation found for ext_media_unsupported_notification_message (8789610369456474891) -->
+ <skip />
+ <!-- no translation found for ext_media_badremoval_notification_title (3206248947375505416) -->
+ <skip />
+ <!-- no translation found for ext_media_badremoval_notification_message (380176703346946313) -->
+ <skip />
+ <!-- no translation found for ext_media_nomedia_notification_title (1704840188641749091) -->
+ <skip />
+ <!-- no translation found for ext_media_nomedia_notification_message (6471542972147056586) -->
+ <skip />
+ <!-- no translation found for ext_media_unmounting_notification_title (640674168454809372) -->
+ <skip />
+ <!-- no translation found for ext_media_unmounting_notification_message (4182843895023357756) -->
+ <skip />
+ <!-- no translation found for ext_media_init_action (7952885510091978278) -->
+ <skip />
+ <!-- no translation found for ext_media_unmount_action (1121883233103278199) -->
+ <skip />
+ <!-- no translation found for ext_media_browse_action (8322172381028546087) -->
+ <skip />
+ <!-- no translation found for ext_media_missing_title (620980315821543904) -->
+ <skip />
+ <!-- no translation found for ext_media_missing_message (5761133583368750174) -->
+ <skip />
+ <!-- no translation found for ext_media_move_specific_title (1471100343872375842) -->
+ <skip />
+ <!-- no translation found for ext_media_move_title (1022809140035962662) -->
+ <skip />
+ <!-- no translation found for ext_media_move_success_title (8575300932957954671) -->
+ <skip />
+ <!-- no translation found for ext_media_move_success_message (4199002148206265426) -->
+ <skip />
+ <!-- no translation found for ext_media_move_failure_title (7613189040358789908) -->
+ <skip />
+ <!-- no translation found for ext_media_move_failure_message (1978096440816403360) -->
+ <skip />
+ <!-- no translation found for ext_media_status_removed (6576172423185918739) -->
+ <skip />
+ <!-- no translation found for ext_media_status_unmounted (2551560878416417752) -->
+ <skip />
+ <!-- no translation found for ext_media_status_checking (6193921557423194949) -->
+ <skip />
+ <!-- no translation found for ext_media_status_mounted (7253821726503179202) -->
+ <skip />
+ <!-- no translation found for ext_media_status_mounted_ro (8020978752406021015) -->
+ <skip />
+ <!-- no translation found for ext_media_status_bad_removal (8395398567890329422) -->
+ <skip />
+ <!-- no translation found for ext_media_status_unmountable (805594039236667894) -->
+ <skip />
+ <!-- no translation found for ext_media_status_unsupported (4691436711745681828) -->
+ <skip />
+ <!-- no translation found for ext_media_status_ejecting (5463887263101234174) -->
+ <skip />
+ <!-- no translation found for ext_media_status_formatting (1085079556538644861) -->
+ <skip />
+ <!-- no translation found for ext_media_status_missing (5638633895221670766) -->
+ <skip />
+ <!-- no translation found for activity_list_empty (1675388330786841066) -->
+ <skip />
+ <!-- no translation found for permlab_route_media_output (6243022988998972085) -->
+ <skip />
+ <!-- no translation found for permdesc_route_media_output (4932818749547244346) -->
+ <skip />
+ <!-- no translation found for permlab_readInstallSessions (3713753067455750349) -->
+ <skip />
+ <!-- no translation found for permdesc_readInstallSessions (2049771699626019849) -->
+ <skip />
+ <!-- no translation found for permlab_requestInstallPackages (5782013576218172577) -->
+ <skip />
+ <!-- no translation found for permdesc_requestInstallPackages (5740101072486783082) -->
+ <skip />
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4070433208160063538) -->
+ <skip />
+ <!-- no translation found for gadget_host_error_inflating (4882004314906466162) -->
+ <skip />
+ <!-- no translation found for ime_action_go (8320845651737369027) -->
+ <skip />
+ <!-- no translation found for ime_action_search (658110271822807811) -->
+ <skip />
+ <!-- no translation found for ime_action_send (2316166556349314424) -->
+ <skip />
+ <!-- no translation found for ime_action_next (3138843904009813834) -->
+ <skip />
+ <!-- no translation found for ime_action_done (8971516117910934605) -->
+ <skip />
+ <!-- no translation found for ime_action_previous (1443550039250105948) -->
+ <skip />
+ <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <skip />
+ <!-- no translation found for dial_number_using (5789176425167573586) -->
+ <skip />
+ <!-- no translation found for create_contact_using (4947405226788104538) -->
+ <skip />
+ <!-- no translation found for grant_credentials_permission_message_header (2106103817937859662) -->
+ <skip />
+ <!-- no translation found for grant_credentials_permission_message_footer (3125211343379376561) -->
+ <skip />
+ <!-- no translation found for grant_permissions_header_text (6874497408201826708) -->
+ <skip />
+ <!-- no translation found for allow (7225948811296386551) -->
+ <skip />
+ <!-- no translation found for deny (2081879885755434506) -->
+ <skip />
+ <!-- no translation found for permission_request_notification_title (6486759795926237907) -->
+ <skip />
+ <!-- no translation found for permission_request_notification_with_subtitle (8530393139639560189) -->
+ <skip />
+ <!-- no translation found for forward_intent_to_owner (1207197447013960896) -->
+ <skip />
+ <!-- no translation found for forward_intent_to_work (621480743856004612) -->
+ <skip />
+ <!-- no translation found for input_method_binding_label (1283557179944992649) -->
+ <skip />
+ <!-- no translation found for sync_binding_label (3687969138375092423) -->
+ <skip />
+ <!-- no translation found for accessibility_binding_label (4148120742096474641) -->
+ <skip />
+ <!-- no translation found for wallpaper_binding_label (1240087844304687662) -->
+ <skip />
+ <!-- no translation found for chooser_wallpaper (7873476199295190279) -->
+ <skip />
+ <!-- no translation found for notification_listener_binding_label (2014162835481906429) -->
+ <skip />
+ <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+ <skip />
+ <!-- no translation found for notification_assistant_binding_label (909456055569102952) -->
+ <skip />
+ <!-- no translation found for vpn_title (19615213552042827) -->
+ <skip />
+ <!-- no translation found for vpn_title_long (6400714798049252294) -->
+ <skip />
+ <!-- no translation found for vpn_text (3011306607126450322) -->
+ <skip />
+ <!-- no translation found for vpn_text_long (6407351006249174473) -->
+ <skip />
+ <!-- no translation found for vpn_lockdown_connecting (6443438964440960745) -->
+ <skip />
+ <!-- no translation found for vpn_lockdown_connected (8202679674819213931) -->
+ <skip />
+ <!-- no translation found for vpn_lockdown_error (6009249814034708175) -->
+ <skip />
+ <!-- no translation found for vpn_lockdown_config (6415899150671537970) -->
+ <skip />
+ <!-- no translation found for upload_file (2897957172366730416) -->
+ <skip />
+ <!-- no translation found for no_file_chosen (6363648562170759465) -->
+ <skip />
+ <!-- no translation found for reset (2448168080964209908) -->
+ <skip />
+ <!-- no translation found for submit (1602335572089911941) -->
+ <skip />
+ <!-- no translation found for car_mode_disable_notification_title (3164768212003864316) -->
+ <skip />
+ <!-- no translation found for car_mode_disable_notification_message (8035230537563503262) -->
+ <skip />
+ <!-- no translation found for tethered_notification_title (3146694234398202601) -->
+ <skip />
+ <!-- no translation found for tethered_notification_message (6857031760103062982) -->
+ <skip />
+ <!-- no translation found for back_button_label (2300470004503343439) -->
+ <skip />
+ <!-- no translation found for next_button_label (1080555104677992408) -->
+ <skip />
+ <!-- no translation found for skip_button_label (1275362299471631819) -->
+ <skip />
+ <!-- no translation found for no_matches (8129421908915840737) -->
+ <skip />
+ <!-- no translation found for find_on_page (1946799233822820384) -->
+ <skip />
+ <!-- no translation found for matches_found (1210884353962081884) -->
+ <!-- no translation found for action_mode_done (7217581640461922289) -->
+ <skip />
+ <!-- no translation found for progress_erasing (4521573321524340058) -->
+ <skip />
+ <!-- no translation found for progress_erasing (6596988875507043042) -->
+ <skip />
+ <!-- no translation found for share (1778686618230011964) -->
+ <skip />
+ <!-- no translation found for find (4808270900322985960) -->
+ <skip />
+ <!-- no translation found for websearch (4337157977400211589) -->
+ <skip />
+ <!-- no translation found for find_next (5742124618942193978) -->
+ <skip />
+ <!-- no translation found for find_previous (2196723669388360506) -->
+ <skip />
+ <!-- no translation found for gpsNotifTicker (5622683912616496172) -->
+ <skip />
+ <!-- no translation found for gpsNotifTitle (5446858717157416839) -->
+ <skip />
+ <!-- no translation found for gpsNotifMessage (1374718023224000702) -->
+ <skip />
+ <!-- no translation found for gpsVerifYes (2346566072867213563) -->
+ <skip />
+ <!-- no translation found for gpsVerifNo (1146564937346454865) -->
+ <skip />
+ <!-- no translation found for sync_too_many_deletes (5296321850662746890) -->
+ <skip />
+ <!-- no translation found for sync_too_many_deletes_desc (496551671008694245) -->
+ <skip />
+ <!-- no translation found for sync_really_delete (2572600103122596243) -->
+ <skip />
+ <!-- no translation found for sync_undo_deletes (2941317360600338602) -->
+ <skip />
+ <!-- no translation found for sync_do_nothing (3743764740430821845) -->
+ <skip />
+ <!-- no translation found for choose_account_label (5655203089746423927) -->
+ <skip />
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
+ <!-- no translation found for number_picker_increment_button (2412072272832284313) -->
+ <skip />
+ <!-- no translation found for number_picker_decrement_button (476050778386779067) -->
+ <skip />
+ <!-- no translation found for number_picker_increment_scroll_mode (3073101067441638428) -->
+ <skip />
+ <!-- no translation found for number_picker_increment_scroll_action (9101473045891835490) -->
+ <skip />
+ <!-- no translation found for time_picker_increment_minute_button (8865885114028614321) -->
+ <skip />
+ <!-- no translation found for time_picker_decrement_minute_button (6246834937080684791) -->
+ <skip />
+ <!-- no translation found for time_picker_increment_hour_button (3652056055810223139) -->
+ <skip />
+ <!-- no translation found for time_picker_decrement_hour_button (1377479863429214792) -->
+ <skip />
+ <!-- no translation found for time_picker_increment_set_pm_button (4147590696151230863) -->
+ <skip />
+ <!-- no translation found for time_picker_decrement_set_am_button (8302140353539486752) -->
+ <skip />
+ <!-- no translation found for date_picker_increment_month_button (5369998479067934110) -->
+ <skip />
+ <!-- no translation found for date_picker_decrement_month_button (1832698995541726019) -->
+ <skip />
+ <!-- no translation found for date_picker_increment_day_button (7130465412308173903) -->
+ <skip />
+ <!-- no translation found for date_picker_decrement_day_button (4131881521818750031) -->
+ <skip />
+ <!-- no translation found for date_picker_increment_year_button (6318697384310808899) -->
+ <skip />
+ <!-- no translation found for date_picker_decrement_year_button (4482021813491121717) -->
+ <skip />
+ <!-- no translation found for date_picker_prev_month_button (2858244643992056505) -->
+ <skip />
+ <!-- no translation found for date_picker_next_month_button (5559507736887605055) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_alt (4856868820040051939) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_cancel (1203984017245783244) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_delete (3337914833206635744) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_done (1992571118466679775) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_mode_change (4547387741906537519) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_shift (2270748814315147690) -->
+ <skip />
+ <!-- no translation found for keyboardview_keycode_enter (2985864015076059467) -->
+ <skip />
+ <!-- no translation found for activitychooserview_choose_application (2125168057199941199) -->
+ <skip />
+ <!-- no translation found for activitychooserview_choose_application_error (8624618365481126668) -->
+ <skip />
+ <!-- no translation found for shareactionprovider_share_with (806688056141131819) -->
+ <skip />
+ <!-- no translation found for shareactionprovider_share_with_application (5627411384638389738) -->
+ <skip />
+ <!-- no translation found for content_description_sliding_handle (415975056159262248) -->
+ <skip />
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
+ <!-- no translation found for keyboard_headset_required_to_hear_password (7011927352267668657) -->
+ <skip />
+ <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
+ <skip />
+ <!-- no translation found for action_bar_home_description (5293600496601490216) -->
+ <skip />
+ <!-- no translation found for action_bar_up_description (2237496562952152589) -->
+ <skip />
+ <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+ <skip />
+ <!-- no translation found for action_bar_home_description_format (7965984360903693903) -->
+ <skip />
+ <!-- no translation found for action_bar_home_subtitle_description_format (6985546530471780727) -->
+ <skip />
+ <!-- no translation found for storage_internal (4891916833657929263) -->
+ <skip />
+ <!-- no translation found for storage_sd_card (3282948861378286745) -->
+ <skip />
+ <!-- no translation found for storage_sd_card_label (6347111320774379257) -->
+ <skip />
+ <!-- no translation found for storage_usb_drive (6261899683292244209) -->
+ <skip />
+ <!-- no translation found for storage_usb_drive_label (4501418548927759953) -->
+ <skip />
+ <!-- no translation found for storage_usb (3017954059538517278) -->
+ <skip />
+ <!-- no translation found for extract_edit_menu_button (8940478730496610137) -->
+ <skip />
+ <!-- no translation found for data_usage_warning_title (1955638862122232342) -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (2814673551471969954) -->
+ <skip />
+ <!-- no translation found for data_usage_3g_limit_title (4361523876818447683) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_title (4609566827219442376) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_title (557158376602636112) -->
+ <skip />
+ <!-- no translation found for data_usage_wifi_limit_title (5803363779034792676) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_body (291731708279614081) -->
+ <skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (4941346653729943789) -->
+ <skip />
+ <!-- no translation found for data_usage_wifi_limit_snoozed_title (8743856006384825974) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (7035490278298441767) -->
+ <skip />
+ <!-- no translation found for data_usage_restricted_title (5965157361036321914) -->
+ <skip />
+ <!-- no translation found for data_usage_restricted_body (6741521330997452990) -->
+ <skip />
+ <!-- no translation found for ssl_certificate (6510040486049237639) -->
+ <skip />
+ <!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
+ <skip />
+ <!-- no translation found for issued_to (454239480274921032) -->
+ <skip />
+ <!-- no translation found for common_name (2233209299434172646) -->
+ <skip />
+ <!-- no translation found for org_name (6973561190762085236) -->
+ <skip />
+ <!-- no translation found for org_unit (7265981890422070383) -->
+ <skip />
+ <!-- no translation found for issued_by (2647584988057481566) -->
+ <skip />
+ <!-- no translation found for validity_period (8818886137545983110) -->
+ <skip />
+ <!-- no translation found for issued_on (5895017404361397232) -->
+ <skip />
+ <!-- no translation found for expires_on (3676242949915959821) -->
+ <skip />
+ <!-- no translation found for serial_number (758814067660862493) -->
+ <skip />
+ <!-- no translation found for fingerprints (4516019619850763049) -->
+ <skip />
+ <!-- no translation found for sha256_fingerprint (4391271286477279263) -->
+ <skip />
+ <!-- no translation found for sha1_fingerprint (7930330235269404581) -->
+ <skip />
+ <!-- no translation found for activity_chooser_view_see_all (4292569383976636200) -->
+ <skip />
+ <!-- no translation found for activity_chooser_view_dialog_title_default (4710013864974040615) -->
+ <skip />
+ <!-- no translation found for share_action_provider_share_with (5247684435979149216) -->
+ <skip />
+ <!-- no translation found for sending (3245653681008218030) -->
+ <skip />
+ <!-- no translation found for launchBrowserDefault (2057951947297614725) -->
+ <skip />
+ <!-- no translation found for SetupCallDefault (5834948469253758575) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_always (8017770747801494933) -->
+ <skip />
+ <!-- no translation found for activity_resolver_use_once (2404644797149173758) -->
+ <skip />
+ <!-- no translation found for activity_resolver_work_profiles_support (185598180676883455) -->
+ <skip />
+ <!-- no translation found for default_audio_route_name (4617053898167127471) -->
+ <skip />
+ <!-- no translation found for default_audio_route_name (9158088547603019321) -->
+ <skip />
+ <!-- no translation found for default_audio_route_name (4239291273420140123) -->
+ <skip />
+ <!-- no translation found for default_audio_route_name_headphones (8119971843803439110) -->
+ <skip />
+ <!-- no translation found for default_audio_route_name_dock_speakers (6240602982276591864) -->
+ <skip />
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
+ <!-- no translation found for default_audio_route_category_name (3722811174003886946) -->
+ <skip />
+ <!-- no translation found for bluetooth_a2dp_audio_route_name (8575624030406771015) -->
+ <skip />
+ <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
+ <skip />
+ <!-- no translation found for media_route_button_content_description (591703006349356016) -->
+ <skip />
+ <!-- no translation found for media_route_chooser_title (1751618554539087622) -->
+ <skip />
+ <!-- no translation found for media_route_chooser_title_for_remote_display (3395541745872017583) -->
+ <skip />
+ <!-- no translation found for media_route_chooser_searching (4776236202610828706) -->
+ <skip />
+ <!-- no translation found for media_route_chooser_extended_settings (87015534236701604) -->
+ <skip />
+ <!-- no translation found for media_route_controller_disconnect (8966120286374158649) -->
+ <skip />
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
+ <!-- no translation found for media_route_status_in_use (4533786031090198063) -->
+ <skip />
+ <!-- no translation found for display_manager_built_in_display_name (2583134294292563941) -->
+ <skip />
+ <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
+ <skip />
+ <!-- no translation found for display_manager_overlay_display_name (5142365982271620716) -->
+ <skip />
+ <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
+ <skip />
+ <!-- no translation found for display_manager_overlay_display_secure_suffix (6022119702628572080) -->
+ <skip />
+ <!-- no translation found for kg_forgot_pattern_button_text (8852021467868220608) -->
+ <skip />
+ <!-- no translation found for kg_wrong_pattern (1850806070801358830) -->
+ <skip />
+ <!-- no translation found for kg_wrong_password (2333281762128113157) -->
+ <skip />
+ <!-- no translation found for kg_wrong_pin (1131306510833563801) -->
+ <skip />
+ <!-- no translation found for kg_too_many_failed_attempts_countdown (6358110221603297548) -->
+ <skip />
+ <!-- no translation found for kg_pattern_instructions (398978611683075868) -->
+ <skip />
+ <!-- no translation found for kg_sim_pin_instructions (2319508550934557331) -->
+ <skip />
+ <!-- no translation found for kg_pin_instructions (2377242233495111557) -->
+ <skip />
+ <!-- no translation found for kg_password_instructions (5753646556186936819) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
+ <!-- no translation found for kg_sim_unlock_progress_dialog_message (8950398016976865762) -->
+ <skip />
+ <!-- no translation found for kg_password_wrong_pin_code (1139324887413846912) -->
+ <skip />
+ <!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) -->
+ <skip />
+ <!-- no translation found for kg_invalid_sim_puk_hint (6025069204539532000) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
+ <!-- no translation found for kg_login_too_many_attempts (6486842094005698475) -->
+ <skip />
+ <!-- no translation found for kg_login_instructions (1100551261265506448) -->
+ <skip />
+ <!-- no translation found for kg_login_username_hint (5718534272070920364) -->
+ <skip />
+ <!-- no translation found for kg_login_password_hint (9057289103827298549) -->
+ <skip />
+ <!-- no translation found for kg_login_submit_button (5355904582674054702) -->
+ <skip />
+ <!-- no translation found for kg_login_invalid_input (5754664119319872197) -->
+ <skip />
+ <!-- no translation found for kg_login_account_recovery_hint (5690709132841752974) -->
+ <skip />
+ <!-- no translation found for kg_login_checking_password (1052685197710252395) -->
+ <skip />
+ <!-- no translation found for kg_too_many_failed_pin_attempts_dialog_message (8276745642049502550) -->
+ <skip />
+ <!-- no translation found for kg_too_many_failed_password_attempts_dialog_message (7813713389422226531) -->
+ <skip />
+ <!-- no translation found for kg_too_many_failed_pattern_attempts_dialog_message (74089475965050805) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_wipe (1575557200627128949) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_wipe (5621231220154419413) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_wipe (4051015943038199910) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_now_wiping (2072996269148483637) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_now_wiping (4987878286750741463) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_now_wiping (4817627474419471518) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_login (3253575572118914370) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_login (4224651132862313471) -->
+ <skip />
+ <!-- no translation found for kg_failed_attempts_almost_at_login (1437638152015574839) -->
+ <skip />
+ <!-- no translation found for kg_text_message_separator (4160700433287233771) -->
+ <skip />
+ <!-- no translation found for kg_reordering_delete_drop_target_text (7899202978204438708) -->
+ <skip />
+ <!-- no translation found for safe_media_volume_warning (2276318909314492312) -->
+ <skip />
+ <!-- no translation found for continue_to_enable_accessibility (1626427372316070258) -->
+ <skip />
+ <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <skip />
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
+ <skip />
+ <!-- no translation found for user_switched (3768006783166984410) -->
+ <skip />
+ <!-- no translation found for user_switching_message (2871009331809089783) -->
+ <skip />
+ <!-- no translation found for user_logging_out_message (8939524935808875155) -->
+ <skip />
+ <!-- no translation found for owner_name (2716755460376028154) -->
+ <!-- no translation found for owner_name (3879126011135546571) -->
+ <skip />
+ <!-- no translation found for error_message_title (4510373083082500195) -->
+ <skip />
+ <!-- no translation found for error_message_change_not_allowed (1347282344200417578) -->
+ <skip />
+ <!-- no translation found for app_not_found (3429141853498927379) -->
+ <skip />
+ <!-- no translation found for revoke (5404479185228271586) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a0 (1994474252931294172) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a1 (3333060421529791786) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a2 (3097535991925798280) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a3 (3023213259314236123) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a4 (231745325296873764) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a5 (3484327407340865411) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a6 (4861908487129577530) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a7 (5890208588072936130) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a8 (4319425041085816612) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a9 (4882220529506432008) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_a10 (2382866026365359391) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b0 (3651827147402009675) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b1 (6072859628278739957) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b2 (1348731852150380378) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b3 (2612510181259261379) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b4 (695151378838115434) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b5 (4863754285582212487) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b6 (5305816292139647241) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b7 (531673542602786624) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b8 (9164474595708850034) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b9 (282102976764774160) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_b10 (4517141714407898976) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c0 (3103521357901591100) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c1 (1231954105985048595) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c2 (927702816980087462) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c3 (835154173518304159) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c4 (5095951985108194011) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c5 (1985397450332305739) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c6 (8147421924174693013) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c7 (8993994925276122950) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c8 (6871178104139598957) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c9 (7983532635227561362) -->
+ <skip />
+ <!-- no translation found for mediasize_iso_c10 (5040764293406765584) -->
+ <skip />
+ <!-- no translation found for mediasize_na_letter (2841414839888344296) -->
+ <skip />
+ <!-- no translation found for mediasize_na_gvrnmt_letter (5295836838862962809) -->
+ <skip />
+ <!-- no translation found for mediasize_na_legal (8621364037680465666) -->
+ <skip />
+ <!-- no translation found for mediasize_na_junior_legal (3309324162155085904) -->
+ <skip />
+ <!-- no translation found for mediasize_na_ledger (5567030340509075333) -->
+ <skip />
+ <!-- no translation found for mediasize_na_tabloid (4571735038501661757) -->
+ <skip />
+ <!-- no translation found for mediasize_na_index_3x5 (5182901917818625126) -->
+ <skip />
+ <!-- no translation found for mediasize_na_index_4x6 (7687620625422312396) -->
+ <skip />
+ <!-- no translation found for mediasize_na_index_5x8 (8834215284646872800) -->
+ <skip />
+ <!-- no translation found for mediasize_na_monarch (213639906956550754) -->
+ <skip />
+ <!-- no translation found for mediasize_na_quarto (835778493593023223) -->
+ <skip />
+ <!-- no translation found for mediasize_na_foolscap (1573911237983677138) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_roc_8k (3626855847189438896) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_roc_16k (9182191577022943355) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_1 (4793232644980170500) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_2 (5404109730975720670) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_3 (1335092253339363526) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_4 (9167997800486569834) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_5 (845875168823541497) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_6 (3220325667692648789) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_7 (1776792138507038527) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_8 (1417176642687456692) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_9 (4785983473123798365) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_10 (7847982299391851899) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_prc_16k (262793383539980677) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_om_pa_kai (5256815579447959814) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_om_dai_pa_kai (7336412963441354407) -->
+ <skip />
+ <!-- no translation found for mediasize_chinese_om_jurro_ku_kai (6324465444100490742) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b10 (1787262845627694376) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b9 (3336035783663287470) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b8 (6195398299104345731) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b7 (1674621886902828884) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b6 (4170576286062657435) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b5 (4899297958100032533) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b4 (4213158129126666847) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b3 (8513715307410310696) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b2 (4777690211897131190) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b1 (4608142385457034603) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_b0 (7587108366572243991) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_jis_exec (5244075432263649068) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_chou4 (4941652015032631361) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_chou3 (6387319169263957010) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_chou2 (1299112025415343982) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_hagaki (8070115620644254565) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_oufuku (6049065587307896564) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_kahu (6872696027560065173) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_kaku2 (2359077233775455405) -->
+ <skip />
+ <!-- no translation found for mediasize_japanese_you4 (2091777168747058008) -->
+ <skip />
+ <!-- no translation found for mediasize_unknown_portrait (3088043641616409762) -->
+ <skip />
+ <!-- no translation found for mediasize_unknown_landscape (4876995327029361552) -->
+ <skip />
+ <!-- no translation found for write_fail_reason_cancelled (7091258378121627624) -->
+ <skip />
+ <!-- no translation found for write_fail_reason_cannot_write (8132505417935337724) -->
+ <skip />
+ <!-- no translation found for reason_unknown (6048913880184628119) -->
+ <skip />
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
+ <!-- no translation found for print_service_installed_title (2246317169444081628) -->
+ <skip />
+ <!-- no translation found for print_service_installed_message (5897362931070459152) -->
+ <skip />
+ <!-- no translation found for restr_pin_enter_admin_pin (783643731895143970) -->
+ <skip />
+ <!-- no translation found for restr_pin_enter_pin (3395953421368476103) -->
+ <skip />
+ <!-- no translation found for restr_pin_incorrect (8571512003955077924) -->
+ <skip />
+ <!-- no translation found for restr_pin_enter_old_pin (1462206225512910757) -->
+ <skip />
+ <!-- no translation found for restr_pin_enter_new_pin (5959606691619959184) -->
+ <skip />
+ <!-- no translation found for restr_pin_confirm_pin (8501523829633146239) -->
+ <skip />
+ <!-- no translation found for restr_pin_create_pin (8017600000263450337) -->
+ <skip />
+ <!-- no translation found for restr_pin_error_doesnt_match (2224214190906994548) -->
+ <skip />
+ <!-- no translation found for restr_pin_error_too_short (8173982756265777792) -->
+ <skip />
+ <!-- no translation found for restr_pin_countdown (9061246974881224688) -->
+ <!-- no translation found for restr_pin_try_later (973144472490532377) -->
+ <skip />
+ <!-- no translation found for immersive_cling_title (8394201622932303336) -->
+ <skip />
+ <!-- no translation found for immersive_cling_description (3482371193207536040) -->
+ <skip />
+ <!-- no translation found for immersive_cling_positive (5016839404568297683) -->
+ <skip />
+ <!-- no translation found for done_label (2093726099505892398) -->
+ <skip />
+ <!-- no translation found for hour_picker_description (6698199186859736512) -->
+ <skip />
+ <!-- no translation found for minute_picker_description (8606010966873791190) -->
+ <skip />
+ <!-- no translation found for select_hours (6043079511766008245) -->
+ <skip />
+ <!-- no translation found for select_minutes (3974345615920336087) -->
+ <skip />
+ <!-- no translation found for select_day (7774759604701773332) -->
+ <skip />
+ <!-- no translation found for select_year (7952052866994196170) -->
+ <skip />
+ <!-- no translation found for deleted_key (7659477886625566590) -->
+ <skip />
+ <!-- no translation found for managed_profile_label_badge (2355652472854327647) -->
+ <skip />
+ <!-- no translation found for lock_to_app_toast (7570091317001980053) -->
+ <skip />
+ <!-- no translation found for lock_to_app_toast_accessible (8239120109365070664) -->
+ <skip />
+ <!-- no translation found for lock_to_app_toast_locked (9125176335701699164) -->
+ <skip />
+ <!-- no translation found for lock_to_app_start (6643342070839862795) -->
+ <skip />
+ <!-- no translation found for lock_to_app_exit (8598219838213787430) -->
+ <skip />
+ <!-- no translation found for lock_to_app_unlock_pin (2552556656504331634) -->
+ <skip />
+ <!-- no translation found for lock_to_app_unlock_pattern (4182192144797225137) -->
+ <skip />
+ <!-- no translation found for lock_to_app_unlock_password (6380979775916974414) -->
+ <skip />
+ <!-- no translation found for dock_non_resizeble_text (9156251681042762723) -->
+ <skip />
+ <!-- no translation found for package_installed_device_owner (8420696545959087545) -->
+ <skip />
+ <!-- no translation found for package_updated_device_owner (8856631322440187071) -->
+ <skip />
+ <!-- no translation found for package_deleted_device_owner (7650577387493101353) -->
+ <skip />
+ <!-- no translation found for battery_saver_description (1960431123816253034) -->
+ <skip />
+ <!-- no translation found for zen_mode_duration_minutes_summary (4367877408072000848) -->
+ <!-- no translation found for zen_mode_duration_minutes_summary_short (6830154222366042597) -->
+ <!-- no translation found for zen_mode_duration_hours_summary (8152974162096743862) -->
+ <!-- no translation found for zen_mode_duration_hours_summary_short (4787552595253082371) -->
+ <!-- no translation found for zen_mode_duration_minutes (5127407202506485571) -->
+ <!-- no translation found for zen_mode_duration_minutes_short (2199350154433426128) -->
+ <!-- no translation found for zen_mode_duration_hours (3938821308277433854) -->
+ <!-- no translation found for zen_mode_duration_hours_short (6748277774662434217) -->
+ <!-- no translation found for zen_mode_until (7336308492289875088) -->
+ <skip />
+ <!-- no translation found for zen_mode_alarm (9128205721301330797) -->
+ <skip />
+ <!-- no translation found for zen_mode_forever (7420011936770086993) -->
+ <skip />
+ <!-- no translation found for zen_mode_forever_dnd (3792132696572189081) -->
+ <skip />
+ <!-- no translation found for zen_mode_rule_name_combination (191109939968076477) -->
+ <skip />
+ <!-- no translation found for toolbar_collapse_description (2821479483960330739) -->
+ <skip />
+ <!-- no translation found for zen_mode_feature_name (5254089399895895004) -->
+ <skip />
+ <!-- no translation found for zen_mode_downtime_feature_name (2626974636779860146) -->
+ <skip />
+ <!-- no translation found for zen_mode_default_weeknights_name (3081318299464998143) -->
+ <skip />
+ <!-- no translation found for zen_mode_default_weekends_name (2786495801019345244) -->
+ <skip />
+ <!-- no translation found for zen_mode_default_events_name (8158334939013085363) -->
+ <skip />
+ <!-- no translation found for muted_by (6147073845094180001) -->
+ <skip />
+ <!-- no translation found for system_error_wipe_data (6608165524785354962) -->
+ <skip />
+ <!-- no translation found for system_error_manufacturer (8086872414744210668) -->
+ <skip />
+ <!-- no translation found for stk_cc_ussd_to_dial (5202342984749947872) -->
+ <skip />
+ <!-- no translation found for stk_cc_ussd_to_ss (2345360594181405482) -->
+ <skip />
+ <!-- no translation found for stk_cc_ussd_to_ussd (7466087659967191653) -->
+ <skip />
+ <!-- no translation found for stk_cc_ss_to_dial (2151304435775557162) -->
+ <skip />
+ <!-- no translation found for stk_cc_ss_to_ussd (3951862188105305589) -->
+ <skip />
+ <!-- no translation found for stk_cc_ss_to_ss (5470768854991452695) -->
+ <skip />
+ <!-- no translation found for notification_work_profile_content_description (4600554564103770764) -->
+ <skip />
+ <!-- no translation found for usb_midi_peripheral_name (7221113987741003817) -->
+ <skip />
+ <!-- no translation found for usb_midi_peripheral_manufacturer_name (7176526170008970168) -->
+ <skip />
+ <!-- no translation found for usb_midi_peripheral_product_name (4971827859165280403) -->
+ <skip />
+ <!-- no translation found for floating_toolbar_open_overflow_description (4797287862999444631) -->
+ <skip />
+ <!-- no translation found for floating_toolbar_close_overflow_description (559796923090723804) -->
+ <skip />
+ <!-- no translation found for maximize_button_text (7543285286182446254) -->
+ <skip />
+ <!-- no translation found for close_button_text (3937902162644062866) -->
+ <skip />
+ <!-- no translation found for selected_count (7187339492915744615) -->
+ <!-- no translation found for default_notification_topic_label (227586145791870829) -->
+ <skip />
+ <!-- no translation found for importance_from_topic (3572280439880023233) -->
+ <skip />
+ <!-- no translation found for importance_from_person (9160133597262938296) -->
+ <skip />
+ <!-- no translation found for user_creation_cannot_add (7740333663230045315) -->
+ <skip />
+ <!-- no translation found for user_creation_cannot_add_any_more (6244197709981359266) -->
+ <skip />
+ <!-- no translation found for user_creation_account_exists (4880171855014489789) -->
+ <skip />
+ <!-- no translation found for user_creation_adding (3206420861363021392) -->
+ <skip />
+ <!-- no translation found for language_selection_title (7181332986330337171) -->
+ <skip />
+ <!-- no translation found for country_selection_title (2954859441620215513) -->
+ <skip />
+ <!-- no translation found for search_language_hint (7042102592055108574) -->
+ <skip />
+ <!-- no translation found for language_picker_section_suggested (8414489646861640885) -->
+ <skip />
+ <!-- no translation found for language_picker_section_all (3097279199511617537) -->
+ <skip />
+ <!-- no translation found for locale_search_menu (2560710726687249178) -->
+ <skip />
+</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index ba52781..602532c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Informe d\'error"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Crea informe d\'errors"</string>
<string name="bugreport_message" msgid="398447048750350456">"Es recopilarà informació sobre l\'estat actual del dispositiu i se t\'enviarà per correu electrònic. Passaran uns quants minuts des de l\'inici de l\'informe d\'errors fins al seu enviament, per la qual cosa et recomanem que tinguis paciència."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Informe interactiu"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Utilitza aquesta opció en la majoria de circumstàncies. Et permet fer un seguiment del progrés de l\'informe i introduir més dades sobre el problema. És possible que ometi seccions menys utilitzades que requereixen molt de temps i que no n\'informi."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Informe complet"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Es farà una captura de pantalla de l\'informe d\'errors d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons.</item>
+ <item quantity="one">Es farà una captura de pantalla de l\'informe d\'errors d\'aquí a <xliff:g id="NUMBER_0">%d</xliff:g> segon.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mode silenciós"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"So desactivat"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El so està activat"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toca per cancel·lar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Canvia el teclat"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Tria els teclats"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostra mètode d\'introducció"</string>
- <string name="hardware" msgid="7517821086888990278">"Maquinari"</string>
+ <string name="show_ime" msgid="2506087537466597099">"El deixa a la pantalla mentre el teclat físic està actiu"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostra el teclat virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona una disposició de teclat"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca per seleccionar una disposició de teclat."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" està provant d\'afegir un usuari, però s\'ha assolit el límit d\'usuaris."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" està provant d\'afegir un usuari, però el compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ja existeix en aquest dispositiu. Vols continuar igualment?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" està provant d\'afegir un usuari per al compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vols continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferència d\'idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferència de regió"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Nom de l\'idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggerits"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Tots els idiomes"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Cerca"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 1a73069..4c830f9 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Hlášení chyb"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Vytvořit chybové hlášení"</string>
<string name="bugreport_message" msgid="398447048750350456">"Shromažďuje informace o aktuálním stavu zařízení. Tyto informace je následně možné poslat v e-mailové zprávě, chvíli však potrvá, než bude hlášení o chybě připraveno k odeslání. Buďte prosím trpěliví."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktivní přehled"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Tato možnost se používá ve většině případů. Umožňuje sledovat průběh přehledu a zadat další podrobnosti o problému. Mohou být vynechány některé méně používané sekce, jejichž kontrola trvá dlouho."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Úplný přehled"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="few">Snímek obrazovky pro zprávu o chybě bude pořízen za <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="many">Snímek obrazovky pro zprávu o chybě bude pořízen za <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="other">Snímek obrazovky pro zprávu o chybě bude pořízen za <xliff:g id="NUMBER_1">%d</xliff:g> sekund.</item>
+ <item quantity="one">Snímek obrazovky pro zprávu o chybě bude pořízen za <xliff:g id="NUMBER_0">%d</xliff:g> sekundu.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tichý režim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je VYPNUTÝ."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvuk je zapnutý"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Klepnutím zrušíte"</string>
<string name="select_input_method" msgid="8547250819326693584">"Změna klávesnice"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Vybrat klávesnici"</string>
- <string name="show_ime" msgid="9157568568695230830">"Zobrazit metodu zadávání"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Ponechat na obrazovce, když je aktivní fyzická klávesnice"</string>
+ <string name="hardware" msgid="194658061510127999">"Zobrazit virtuální klávesnici"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Výběr rozložení klávesnice"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotykem vyberte rozložení klávesnice."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Aplikace "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" se pokouší přidat nového uživatele, avšak byl dosažen maximální počet uživatelů."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Aplikace "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" se pokouší přidat nového uživatele, avšak účet "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" již v zařízení existuje. Chcete přesto pokračovat?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Aplikace "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" se pro účet "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" pokouší přidat nového uživatele. Pokračovat?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferovaný jazyk"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferovaná oblast"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Zadejte název jazyka"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Navrhované"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Všechny jazyky"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Vyhledávání"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 791a379..164ae6b 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Fejlrapport"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Lav fejlrapport"</string>
<string name="bugreport_message" msgid="398447048750350456">"Der indsamles oplysninger om din enheds aktuelle status, der efterfølgende sendes i en e-mail. Der går lidt tid, fra fejlrapporten påbegyndes, til den er klar til at blive sendt. Tak for tålmodigheden."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv rapport"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Brug dette workflow under de fleste omstændigheder. Det giver dig mulighed for at se status på rapporten og angive flere oplysninger om problemet. Nogle mindre brugte sektioner, der tager lang tid at rapportere, udelades muligvis."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Fuld rapport"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Der tages et skærmbillede til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekund.</item>
+ <item quantity="other">Der tages et skærmbillede til fejlrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lydløs"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Lyden er slået FRA"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Lyden er TIL"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Tryk for at annullere"</string>
<string name="select_input_method" msgid="8547250819326693584">"Skift tastatur"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Vælg tastaturer"</string>
- <string name="show_ime" msgid="9157568568695230830">"Vis indtastningsmetode"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Behold den på skærmen, mens det fysiske tastatur er aktivt"</string>
+ <string name="hardware" msgid="194658061510127999">"Vis virtuelt tastatur"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Vælg tastaturlayout"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tryk for at vælge et tastaturlayout."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" forsøger at tilføje en ny bruger, men grænsen for antal brugere er nået."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" forsøger at tilføje en ny bruger, men kontoen "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" findes allerede på denne enhed. Vil du fortsætte?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" forsøger at føje en ny bruger til kontoen "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vil du fortsætte?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Sprogindstilling"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Områdeindstilling"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Angiv sprogets navn"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Foreslået"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alle sprog"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Søg"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index a28d2b8..4f43c2a 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Fehlerbericht"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Fehlerbericht abrufen"</string>
<string name="bugreport_message" msgid="398447048750350456">"Bei diesem Fehlerbericht werden Daten zum aktuellen Status deines Geräts erfasst und als E-Mail versandt. Vom Start des Berichts bis zu seinem Versand kann es eine Weile dauern. Bitte habe etwas Geduld."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiver Bericht"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Diese Option kann in den meisten Fällen verwendet werden. Du kannst darüber den aktuellen Stand der Berichterstellung verfolgen und genauere Angaben zu dem Problem machen. Einige selten genutzte Bereiche, deren Berichterstellung längere Zeit in Anspruch nimmt, werden unter Umständen ausgelassen."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Vollständiger Bericht"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Screenshot für den Fehlerbericht wird in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden aufgenommen.</item>
+ <item quantity="one">Screenshot für den Fehlerbericht wird in <xliff:g id="NUMBER_0">%d</xliff:g> Sekunde aufgenommen.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lautlos-Modus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ton ist AUS."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ton ist AN."</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Zum Abbrechen tippen"</string>
<string name="select_input_method" msgid="8547250819326693584">"Tastatur ändern"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Tastatur auswählen"</string>
- <string name="show_ime" msgid="9157568568695230830">"Eingabemethode anzeigen"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Auf dem Display einblenden, wenn die physische Tastatur aktiv ist"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtuelle Tastatur einblenden"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Tastaturlayout auswählen"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Zum Auswählen eines Tastaturlayouts berühren"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" versucht, einen neuen Nutzer hinzuzufügen. Die maximal zulässige Anzahl an Nutzern ist aber schon erreicht."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" versucht, einen neuen Nutzer hinzuzufügen, aber das Konto "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" besteht bereits auf diesem Gerät. Trotzdem fortfahren?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" versucht, einen neuen Nutzer für das Konto "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hinzuzufügen. Fortfahren?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Spracheinstellung"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Region auswählen"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Sprache eingeben"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Vorschläge"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alle Sprachen"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Suche"</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 40d2e5b..d572e22 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Αναφορά σφαλμάτων"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Λήψη αναφοράς σφάλματος"</string>
<string name="bugreport_message" msgid="398447048750350456">"Θα συλλέξει πληροφορίες σχετικά με την τρέχουσα κατάσταση της συσκευής σας και θα τις στείλει μέσω μηνύματος ηλεκτρονικού ταχυδρομείου. Απαιτείται λίγος χρόνος για τη σύνταξη της αναφοράς σφάλματος και την αποστολή της. Κάντε λίγη υπομονή."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Διαδραστική αναφορά"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Χρησιμοποιήστε αυτήν την επιλογή στις περισσότερες περιπτώσεις. Σας επιτρέπει να παρακολουθείτε την πρόοδο της αναφοράς και να εισάγετε περισσότερες λεπτομέρειες σχετικά με το πρόβλημα που αντιμετωπίζετε. Ενδέχεται να παραλείψει ορισμένες ενότητες που δεν χρησιμοποιούνται συχνά και για τις οποίες απαιτείται μεγάλο χρονικό διάστημα για τη δημιουργία αναφορών."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Πλήρης αναφορά"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Λήψη στιγμιότυπου οθόνης για αναφορά σφαλμάτων σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα.</item>
+ <item quantity="one">Λήψη στιγμιότυπου οθόνης για αναφορά σφαλμάτων σε <xliff:g id="NUMBER_0">%d</xliff:g> δευτερόλεπτο.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Λειτουργία σίγασης"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ο ήχος είναι απενεργοποιημένος"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ο ήχος είναι ενεργοποιημένος"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Αγγίξτε για ακύρωση"</string>
<string name="select_input_method" msgid="8547250819326693584">"Αλλαγή πληκτρολογίου"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Επιλογή πληκτρολογίων"</string>
- <string name="show_ime" msgid="9157568568695230830">"Εμφάνιση μεθόδου εισαγ."</string>
- <string name="hardware" msgid="7517821086888990278">"Υλικό"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Να παραμένει στην οθόνη όταν είναι ενεργό το φυσικό πληκτρολόγιο"</string>
+ <string name="hardware" msgid="194658061510127999">"Εμφάνιση εικονικού πληκτρολ."</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Επιλογή διάταξης πληκτρολογίου"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Αγγίξτε για να επιλέξετε διάταξη πληκτρολογίου."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Το "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" προσπαθεί να προσθέσει έναν νέο χρήστη, αλλά έχετε φτάσει το όριο χρηστών."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Το "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" προσπαθεί να προσθέσει έναν νέο χρήστη, αλλά ο λογαριασμός "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" υπάρχει ήδη σε αυτήν τη συσκευή. Θέλετε να συνεχίσετε ούτως ή άλλως;"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Το "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" προσπαθεί να προσθέσει έναν νέο χρήστη για το λογαριασμό "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Θέλετε να συνεχίσετε;"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Προτίμηση γλώσσας"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Προτίμηση περιοχής"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Εισαγ. όνομα γλώσσας"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Προτεινόμενες"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Όλες οι γλώσσες"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Αναζήτηση"</string>
</resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 80d2efe..ee7dd71 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Bug report"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Take bug report"</string>
<string name="bugreport_message" msgid="398447048750350456">"This will collect information about your current device state, to send as an email message. It will take a little time from starting the bug report until it is ready to be sent. Please be patient."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactive report"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Use this under most circumstances. It allows you to track progress of the report and enter more details about the problem. It might omit some less-used sections that take a long time to report."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Full report"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Taking screenshot for bug report in <xliff:g id="NUMBER_1">%d</xliff:g> seconds.</item>
+ <item quantity="one">Taking screenshot for bug report in <xliff:g id="NUMBER_0">%d</xliff:g> second.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sound is OFF"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sound is ON"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Touch to cancel"</string>
<string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Choose keyboards"</string>
- <string name="show_ime" msgid="9157568568695230830">"Show input method"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Keep it on screen while physical keyboard is active"</string>
+ <string name="hardware" msgid="194658061510127999">"Show virtual keyboard"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Select keyboard layout"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Touch to select a keyboard layout."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the user limit has been reached."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" already exists on this device. Proceed anyway?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user for the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Proceed?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Language preference"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Region preference"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Type language name"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggested"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 80d2efe..ee7dd71 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Bug report"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Take bug report"</string>
<string name="bugreport_message" msgid="398447048750350456">"This will collect information about your current device state, to send as an email message. It will take a little time from starting the bug report until it is ready to be sent. Please be patient."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactive report"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Use this under most circumstances. It allows you to track progress of the report and enter more details about the problem. It might omit some less-used sections that take a long time to report."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Full report"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Taking screenshot for bug report in <xliff:g id="NUMBER_1">%d</xliff:g> seconds.</item>
+ <item quantity="one">Taking screenshot for bug report in <xliff:g id="NUMBER_0">%d</xliff:g> second.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sound is OFF"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sound is ON"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Touch to cancel"</string>
<string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Choose keyboards"</string>
- <string name="show_ime" msgid="9157568568695230830">"Show input method"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Keep it on screen while physical keyboard is active"</string>
+ <string name="hardware" msgid="194658061510127999">"Show virtual keyboard"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Select keyboard layout"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Touch to select a keyboard layout."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the user limit has been reached."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" already exists on this device. Proceed anyway?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user for the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Proceed?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Language preference"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Region preference"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Type language name"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggested"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
</resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 80d2efe..ee7dd71 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Bug report"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Take bug report"</string>
<string name="bugreport_message" msgid="398447048750350456">"This will collect information about your current device state, to send as an email message. It will take a little time from starting the bug report until it is ready to be sent. Please be patient."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactive report"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Use this under most circumstances. It allows you to track progress of the report and enter more details about the problem. It might omit some less-used sections that take a long time to report."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Full report"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Taking screenshot for bug report in <xliff:g id="NUMBER_1">%d</xliff:g> seconds.</item>
+ <item quantity="one">Taking screenshot for bug report in <xliff:g id="NUMBER_0">%d</xliff:g> second.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sound is OFF"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sound is ON"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Touch to cancel"</string>
<string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Choose keyboards"</string>
- <string name="show_ime" msgid="9157568568695230830">"Show input method"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Keep it on screen while physical keyboard is active"</string>
+ <string name="hardware" msgid="194658061510127999">"Show virtual keyboard"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Select keyboard layout"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Touch to select a keyboard layout."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the user limit has been reached."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user, but the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" already exists on this device. Proceed anyway?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" is trying to add a new user for the account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Proceed?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Language preference"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Region preference"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Type language name"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggested"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 1900e8d..45a0e02 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Informe de errores"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Iniciar informe de errores"</string>
<string name="bugreport_message" msgid="398447048750350456">"Se recopilará información sobre el estado actual de tu dispositivo, que se enviará por correo. Pasarán unos minutos desde que se inicie el informe de errores hasta que se envíe, por lo que te recomendamos que tengas paciencia."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Informe interactivo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Usa esta opción en la mayoría de los casos. Te permite ingresar más detalles acerca del problema y realizar un seguimiento del progreso del informe. Es posible que se omitan secciones menos usadas cuyos informes demoran más en completarse."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Informe completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Se tomará una captura de pantalla para el informe de errores en <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="one">Se tomará una captura de pantalla para el informe de errores en <xliff:g id="NUMBER_0">%d</xliff:g> segundo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está Desactivado"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está Activado"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toca para cancelar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Cambiar el teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Seleccionar teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostrar método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Mantener en la pantalla cuando el teclado físico está activo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona un diseño de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca para seleccionar un diseño de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está intentado agregar un usuario nuevo, pero ya se alcanzó el límite máximo de usuarios."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está intentado agregar un usuario nuevo, pero la cuenta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ya existe en este dispositivo. ¿Deseas continuar de todas formas?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está intentando agregar un usuario nuevo a la cuenta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". ¿Deseas continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferencia de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferencia de región"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Nombre del idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos los idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Búsqueda"</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 846b9dc..2f1c4a8 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Informe de error"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Crear informe de errores"</string>
<string name="bugreport_message" msgid="398447048750350456">"Se recopilará información sobre el estado actual de tu dispositivo y se enviará por correo electrónico. Pasarán unos minutos desde que empiece a generarse el informe de errores hasta que se envíe."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Informe interactivo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Usa esta opción en la mayoría de los casos. Te permite realizar un seguimiento del progreso de la notificación e introducir más información sobre el problema. Es posible que se omitan algunas secciones menos utilizadas y que requieran más tiempo."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Informe completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">La captura de pantalla para el informe de errores se realizará en <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="one">La captura de pantalla para el informe de errores se realizará en <xliff:g id="NUMBER_0">%d</xliff:g> segundo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencio"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está desactivado. Activar"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está activado. Desactivar"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toca para cancelar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Elegir teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostrar método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Debe seguir en pantalla mientras el teclado físico esté activo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona un diseño de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca para seleccionar un diseño de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" quiere añadir un usuario nuevo, pero se ha alcanzado el límite de usuarios."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" quiere añadir un usuario nuevo, pero la cuenta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ya existe en este dispositivo. ¿Quieres continuar de todas formas?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" quiere añadir un usuario nuevo a la cuenta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". ¿Quieres continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferencia de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferencia de región"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Nombre de idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos los idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Buscar"</string>
</resources>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 09d031b..3a4f2af 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Veaaruanne"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Veaaruande võtmine"</string>
<string name="bugreport_message" msgid="398447048750350456">"Nii kogutakse teavet teie seadme praeguse oleku kohta, et saata see meilisõnumina. Enne kui saate veaaruande ära saata, võtab selle loomine natuke aega; varuge kannatust."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interakt. aruanne"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Kasutage seda enamikul juhtudel. See võimaldab jälgida aruande edenemist ja sisestada probleemi kohta täpsemat teavet. Vahele võivad jääda mõned vähem kasutatud jaotised, millest teavitamine võtab rohkem aega."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Täielik aruanne"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Veaaruande jaoks ekraanipildi jäädvustamine <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast.</item>
+ <item quantity="one">Veaaruande jaoks ekraanipildi jäädvustamine <xliff:g id="NUMBER_0">%d</xliff:g> sekundi pärast.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Hääletu režiim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Heli on VÄLJAS"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Heli on SEES"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Puudutage tühistamiseks"</string>
<string name="select_input_method" msgid="8547250819326693584">"Klaviatuuri muutmine"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Vali klaviatuurid"</string>
- <string name="show_ime" msgid="9157568568695230830">"Sisestusmeetodi kuvamine"</string>
- <string name="hardware" msgid="7517821086888990278">"Riistvara"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Hoia seda ekraanil, kui füüsiline klaviatuur on aktiivne"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtuaalse klaviatuuri kuvam."</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatuuri paigutuse valimine"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Puudutage klaviatuuri paigutuse valimiseks."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" üritab lisada uut kasutajat, ent olete jõudnud kasutajate maksimumarvuni."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" üritab lisada uut kasutajat, ent konto "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" on juba seadmes olemas. Kas soovite siiski jätkata?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" üritab lisada uut kasutajat kontole "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Kas soovite jätkata?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Keele-eelistus"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Piirkonnaeelistus"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Sisestage keele nimi"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Soovitatud"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Kõik keeled"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Otsing"</string>
</resources>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index 59cc71e..35d67e9 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Akatsen txostena"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Sortu akatsen txostena"</string>
<string name="bugreport_message" msgid="398447048750350456">"Gailuaren uneko egoerari buruzko informazioa bilduko da, mezu elektroniko gisa bidaltzeko. Minutu batzuk igaroko dira akatsen txostena sortzen hasten denetik bidaltzeko prest egon arte. Itxaron, mesedez."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Txosten dinamikoa"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Aukera hau erabili beharko zenuke ia beti. Txostenaren jarraipena egin ahal izango duzu eta arazoari buruzko xehetasunak eman ahal izango dituzu. Baliteke gutxitan erabili behar izaten diren atalak ez agertzea, denbora aurrezteko."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Txosten osoa"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Akatsen txostenaren argazkia aterako da <xliff:g id="NUMBER_1">%d</xliff:g> segundo barru.</item>
+ <item quantity="one">Akatsen txostenaren argazkia aterako da <xliff:g id="NUMBER_0">%d</xliff:g> segundo barru.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Isilik modua"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Soinua DESAKTIBATUTA dago"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Soinua AKTIBATUTA dago"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Ukitu bertan behera uzteko"</string>
<string name="select_input_method" msgid="8547250819326693584">"Aldatu teklatua"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Aukeratu teklatuak"</string>
- <string name="show_ime" msgid="9157568568695230830">"Erakutsi idazketa-metodoa"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardwarea"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Erakutsi pantailan teklatu fisikoa aktibo dagoen bitartean"</string>
+ <string name="hardware" msgid="194658061510127999">"Erakutsi teklatu birtuala"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Hautatu teklatuaren diseinua"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Ukitu teklatuaren diseinua hautatzeko."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" beste erabiltzaile bat gehitzen saiatzen ari da, baina erabiltzaileen mugara irisi da."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" beste erabiltzaile bat gehitzen saiatzen ari da, baina "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" badago gailuan. Jarraitu nahi duzu halere?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" beste erabiltzaile bat gehitzen saiatzen ari da "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" kontuan. Jarraitu nahi duzu?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Hizkuntza-hobespena"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Lurralde-hobespena"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Adierazi hizkuntza"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Iradokitakoak"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Hizkuntza guztiak"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Bilaketa"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 41c6729..e1adfb9 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"گزارش اشکال"</string>
<string name="bugreport_title" msgid="2667494803742548533">"گرفتن گزارش اشکال"</string>
<string name="bugreport_message" msgid="398447048750350456">"این گزارش اطلاعات مربوط به وضعیت دستگاه کنونی شما را جمعآوری میکند تا به صورت یک پیام ایمیل ارسال شود. از زمان شروع گزارش اشکال تا آماده شدن برای ارسال اندکی زمان میبرد؛ لطفاً شکیبا باشید."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"گزارش تعاملی"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"در بیشتر شرایط از این گزینه استفاده کنید. به شما امکان ردیابی پیشرفت گزارش و وارد کردن جزئیات بیشتری درباره مشکل را میدهد. ممکن است برخی از بخشهایی را که کمتر استفاده شده و باعث افزایش طول زمان گزارش میشود حذف کند."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"گزارش کامل"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">تا <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دیگر عکس صفحهنمایش برای گزارش اشکال گرفته میشود.</item>
+ <item quantity="other">تا <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دیگر عکس صفحهنمایش برای گزارش اشکال گرفته میشود.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"حالت ساکت"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"صدا خاموش است"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"صدا روشن است"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"برای لغو کردن لمس کنید"</string>
<string name="select_input_method" msgid="8547250819326693584">"تغییر صفحهکلید"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"انتخاب صفحهکلیدها"</string>
- <string name="show_ime" msgid="9157568568695230830">"نمایش روش ورودی"</string>
- <string name="hardware" msgid="7517821086888990278">"سختافزار"</string>
+ <string name="show_ime" msgid="2506087537466597099">"وقتی صفحهکلید فیزیکی فعال است این ویرایشگر را روی صفحه نگهمیدارد"</string>
+ <string name="hardware" msgid="194658061510127999">"نمایش صفحهکلید مجازی"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"انتخاب طرحبندی صفحهکلید"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"برای انتخاب یک طرحبندی صفحهکلید لمس کنید…"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" در تلاش است کاربر جدیدی اضافه کند، اما تعداد کاربران به حداکثر مجاز رسیده است."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" در تلاش است کاربر جدیدی اضافه کند، اما حساب "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" از قبل در این دستگاه وجود دارد. در هر صورت ادامه داده شود؟"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" در تلاش است کاربر جدیدی برای حساب "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" اضافه کند. ادامه میدهید؟"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"اولویتهای زبان"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"اولویتهای منطقه"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"نام زبان را تایپ کنید"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"پیشنهادشده"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"همه زبانها"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"جستجو"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 70b1bd28..9274b87 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Virheraportti"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Luo virheraportti"</string>
<string name="bugreport_message" msgid="398447048750350456">"Toiminto kerää tietoja laitteen tilasta ja lähettää ne sähköpostitse. Virheraportti on valmis lähetettäväksi hetken kuluttua - kiitos kärsivällisyydestäsi."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiivinen"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Valitse tämä vaihtoehto useimmissa tapauksissa. Voit seurata raportin etenemistä ja antaa lisätietoja ongelmasta. Tämä vaihtoehto saattaa ohittaa joitakin harvoin käytettyjä osioita, joiden käsittely raportissa kestää kauan."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Koko raportti"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Virheraporttiin otetaan kuvakaappaus <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua.</item>
+ <item quantity="one">Virheraporttiin otetaan kuvakaappaus <xliff:g id="NUMBER_0">%d</xliff:g> sekunnin kuluttua.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Äänetön tila"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Äänet ovat POISSA KÄYTÖSTÄ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Äänet ovat KÄYTÖSSÄ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Peruuta koskettamalla"</string>
<string name="select_input_method" msgid="8547250819326693584">"Vaihda näppäimistö"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Valitse näppäimistöt"</string>
- <string name="show_ime" msgid="9157568568695230830">"Näytä syöttötapa"</string>
- <string name="hardware" msgid="7517821086888990278">"Laitteisto"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Pidä näytöllä, kun fyysinen näppäimistö on aktiivinen."</string>
+ <string name="hardware" msgid="194658061510127999">"Näytä virtuaalinen näppäimistö"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Valitse näppäimistöasettelu"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Kosketa ja valitse näppäimistöasettelu."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" yrittää lisätä uutta käyttäjää, mutta käyttäjiä on jo enimmäismäärä."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" yrittää lisätä uutta käyttäjää, mutta tili "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" on jo tässä laitteessa. Jatketaanko silti?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" yrittää lisätä uutta käyttäjää tilille "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Jatketaanko?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Kieliasetus"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Alueasetus"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Anna kielen nimi"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Ehdotukset"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Kaikki kielet"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Haku"</string>
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 4cbda57..965a83c 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Rapport de bogue"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Créer un rapport de bogue"</string>
<string name="bugreport_message" msgid="398447048750350456">"Cela permet de recueillir des informations concernant l\'état actuel de votre appareil. Ces informations sont ensuite envoyées sous forme de courriel. Merci de patienter pendant la préparation du rapport de bogue. Cette opération peut prendre quelques instants."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Rapport interactif"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Utilisez cette option dans la plupart des circonstances. Elle vous permet de suivre la progression du rapport et d\'entrer plus de données sur le problème. Certaines sections moins utilisées et dont le remplissage demande beaucoup de temps peuvent être omises."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Rapport complet"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Saisie d\'écran pour le rapport de bogue dans <xliff:g id="NUMBER_1">%d</xliff:g> seconde.</item>
+ <item quantity="other">Saisie d\'écran pour le rapport de bogue dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mode silencieux"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Le son est désactivé."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Le son est activé."</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Touchez pour annuler"</string>
<string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Choisir les claviers"</string>
- <string name="show_ime" msgid="9157568568695230830">"Afficher le mode d\'entrée"</string>
- <string name="hardware" msgid="7517821086888990278">"Matériel"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Afficher lorsque le clavier physique est activé"</string>
+ <string name="hardware" msgid="194658061510127999">"Afficher le clavier virtuel"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Sélectionnez la disposition du clavier"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Appuyez ici pour sélectionner une disposition de clavier."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur, mais le nombre maximal d\'utilisateurs a été atteint."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur, mais le compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" existe déjà sur cet appareil. Continuer?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur, mais le compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuer?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Préférences linguistiques"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Préférence régionales"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Entrez la langue"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggestions"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Toutes les langues"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Rechercher"</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 2daaff4..b0260ef 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Rapport de bug"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Créer un rapport de bug"</string>
<string name="bugreport_message" msgid="398447048750350456">"Cela permet de recueillir des informations concernant l\'état actuel de votre appareil. Ces informations sont ensuite envoyées sous forme d\'e-mail. Merci de patienter pendant la préparation du rapport de bug. Cette opération peut prendre quelques instants."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Rapport interactif"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Utilisez cette option dans la plupart des circonstances. Elle vous permet de suivre la progression du rapport et de saisir plus d\'informations sur le problème. Certaines sections moins utilisées et dont le remplissage demande beaucoup de temps peuvent être omises."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Rapport complet"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Capture d\'écran pour le rapport de bug dans <xliff:g id="NUMBER_1">%d</xliff:g> seconde</item>
+ <item quantity="other">Capture d\'écran pour le rapport de bug dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mode silencieux"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Le son est désactivé."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Le son est activé."</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Appuyer pour annuler"</string>
<string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Sélectionner des claviers"</string>
- <string name="show_ime" msgid="9157568568695230830">"Afficher mode de saisie"</string>
- <string name="hardware" msgid="7517821086888990278">"Matériel"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Afficher lorsque le clavier physique est activé"</string>
+ <string name="hardware" msgid="194658061510127999">"Afficher le clavier virtuel"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Sélectionnez la disposition du clavier"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Appuyez ici pour sélectionner une disposition de clavier."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur, mais le nombre maximal d\'utilisateurs a été atteint."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur, mais le compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" existe déjà sur cet appareil. Continuer ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" essaie d\'ajouter un utilisateur au compte "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuer ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Préférences linguistiques"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Préférences régionales"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Saisissez la langue"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Recommandations"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Toutes les langues"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Rechercher"</string>
</resources>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index a74a013..b2a69fc 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Informe de erros"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Crear informe de erros"</string>
<string name="bugreport_message" msgid="398447048750350456">"Este informe recompilará información acerca do estado actual do teu dispositivo para enviala en forma de mensaxe de correo electrónico. O informe de erros tardará un pouco en completarse desde o seu inicio ata que estea preparado para enviarse, polo que che recomendamos que teñas paciencia."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Informe interactivo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Usa esta opción na maioría das circunstancias. Permíteche realizar un seguimento do progreso do informe e introducir máis detalles sobre o problema. Pode que omita algunhas seccións menos usadas para as que se tarda máis en facer o informe."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Informe completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Facendo captura de pantalla para informe de erros en <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="one">Facendo captura de pantalla para informe de erros en <xliff:g id="NUMBER_0">%d</xliff:g> segundo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo de silencio"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"O son está desactivado"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O son está activado"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Tocar para cancelar o informe de erros"</string>
<string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Seleccionar teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostra método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Manteno na pantalla mentres o teclado físico estea activo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Seleccionar deseño de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca para seleccionar un deseño de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando engadir un usuario novo, pero alcanzouse o límite de usuarios."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando engadir un usuario novo, pero a conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" xa existe neste dispositivo. Queres continuar igualmente?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando engadir un usuario novo á conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Queres continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferencia de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferencia de rexión"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Escribe o nome"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suxeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Buscar"</string>
</resources>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index 97404e9..9848cfb 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"બગ રિપોર્ટ"</string>
<string name="bugreport_title" msgid="2667494803742548533">"બગ રિપોર્ટ લો"</string>
<string name="bugreport_message" msgid="398447048750350456">"આ, એક ઇ-મેઇલ સંદેશ તરીકે મોકલવા માટે, તમારા વર્તમાન ઉપકરણ સ્થિતિ વિશેની માહિતી એકત્રિત કરશે. એક બગ રિપોર્ટ પ્રારંભ કરીને તે મોકલવા માટે તૈયાર ન થઈ જાય ત્યાં સુધી તેમાં થોડો સમય લાગશે; કૃપા કરીને ધીરજ રાખો."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ક્રિયાપ્રતિક્રિયાત્મક રિપોર્ટ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"મોટાભાગના સંજોગોમાં આનો ઉપયોગ કરો. તે રિપોર્ટની પ્રગતિને ટ્રૅક કરવા અમે સમસ્યા વિશે વધુ વિગતો દાખલ કરવાની મંજૂરી આપે છે. તે કેટલાંક ઓછા ઉપયોગમાં આવતા વિભાગો કે જે જાણ કરવામાં વધુ સમય લેતા હોય તેને છોડી દઈ શકે છે."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"પૂર્ણ રિપોર્ટ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">બગ રિપોર્ટ માટે <xliff:g id="NUMBER_1">%d</xliff:g> સેકન્ડમાં સ્ક્રીનશોટ લઈ રહ્યાં છે.</item>
+ <item quantity="other">બગ રિપોર્ટ માટે <xliff:g id="NUMBER_1">%d</xliff:g> સેકન્ડમાં સ્ક્રીનશોટ લઈ રહ્યાં છે.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"સાઇલેન્ટ મોડ"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"અવાજ બંધ છે"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ધ્વનિ ચાલુ છે"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"રદ કરવા માટે ટચ કરો"</string>
<string name="select_input_method" msgid="8547250819326693584">"કીબોર્ડ બદલો"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"કીબોર્ડ્સ પસંદ કરો"</string>
- <string name="show_ime" msgid="9157568568695230830">"ઇનપુટ પદ્ધતિ બતાવો"</string>
- <string name="hardware" msgid="7517821086888990278">"હાર્ડવેર"</string>
+ <string name="show_ime" msgid="2506087537466597099">"જ્યારે ભૌતિક કીબોર્ડ સક્રિય હોય ત્યારે તેને સ્ક્રીન પર રાખો"</string>
+ <string name="hardware" msgid="194658061510127999">"વર્ચ્યુઅલ કીબોર્ડ બતાવો"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"કીબોર્ડ લેઆઉટ પસંદ કરો."</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"કીબોર્ડ લેઆઉટ પસંદ કરવા માટે ટચ કરો."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", નવા વપરાશકર્તાને ઉમેરવાનો પ્રયાસ કરી રહી છે, પરંતુ વપરાશકર્તા મર્યાદા સુધી પહોંચી ગયા છો."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", નવા વપરાશકર્તાને ઉમેરવાનો પ્રયાસ કરી રહી છે, પરંતુ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" એકાઉન્ટ પહેલાંથી જ આ ઉપકરણ પર અસ્તિત્વમાં છે. કોઇપણ રીતે આગળ વધીએ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" એકાઉન્ટ માટે એક નવા વપરાશકર્તાને ઉમેરવાનો પ્રયાસ કરી રહી છે. આગળ વધીએ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ભાષા પસંદગી"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"પ્રદેશ પસંદગી"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ભાષાનું નામ ટાઇપ કરો"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"સૂચવેલા"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"બધી ભાષાઓ"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"શોધ"</string>
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 39bc701..39608cb 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"बग रिपोर्ट"</string>
<string name="bugreport_title" msgid="2667494803742548533">"बग रिपोर्ट प्राप्त करें"</string>
<string name="bugreport_message" msgid="398447048750350456">"ईमेल संदेश के रूप में भेजने के लिए, इसके द्वारा आपके डिवाइस की वर्तमान स्थिति के बारे में जानकारी एकत्र की जाएगी. बग रिपोर्ट प्रारंभ करने से लेकर भेजने के लिए तैयार होने तक कुछ समय लगेगा; कृपया धैर्य रखें."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"सहभागी रिपोर्ट"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"अधिकांश परिस्थितियों में इसका उपयोग करें. यह आपको रिपोर्ट की प्रगति ट्रैक करने देता है और समस्या के बारे में अधिक विवरण डालने देता है. यह आपको ऐसे कम उपयोग किए गए अनुभाग मिटाने दे सकता है जिनकी रिपोर्ट करने में अधिक समय लगता है."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"पूर्ण रिपोर्ट"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">बग रिपोर्ट के लिए <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में स्क्रीनशॉट लिया जा रहा है.</item>
+ <item quantity="other">बग रिपोर्ट के लिए <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में स्क्रीनशॉट लिया जा रहा है.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मौन मोड"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ध्वनि बंद है"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि चालू है"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"रद्द करने के लिए स्पर्श करें"</string>
<string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदलें"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"कीबोर्ड चुनें"</string>
- <string name="show_ime" msgid="9157568568695230830">"इनपुट विधि दिखाएं"</string>
- <string name="hardware" msgid="7517821086888990278">"हार्डवेयर"</string>
+ <string name="show_ime" msgid="2506087537466597099">"भौतिक कीबोर्ड के सक्रिय होने के दौरान इसे स्क्रीन पर बनाए रखें"</string>
+ <string name="hardware" msgid="194658061510127999">"वर्चुअल कीबोर्ड दिखाएं"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"कीबोर्ड लेआउट को चुनें"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"कीबोर्ड लेआउट का चयन करने के लिए स्पर्श करें."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" नए उपयोगकर्ता को जोड़ने का प्रयास कर रहा है, लेकिन उपयोगकर्ता की सीमा पूरी हो गई है."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" नए उपयोगकर्ता को जोड़ने का प्रयास कर रहा है, लेकिन "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" खाता इस डिवाइस पर पहले से मौजूद है. फिर भी आगे बढ़ें?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" इस "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" खाते के लिए नया उपयोगकर्ता जोड़ने का प्रयास कर रहा है. आगे बढ़ें?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"भाषा प्राथमिकता"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"क्षेत्र प्राथमिकता"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"भाषा का नाम लिखें"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"सुझाए गए"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"सभी भाषाएं"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"खोजें"</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index fbb347f..2584260 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -212,15 +212,16 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Izvješće o bugovima"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Izvješće o programskoj pogrešci"</string>
<string name="bugreport_message" msgid="398447048750350456">"Time će se prikupiti podaci o trenutačnom stanju vašeg uređaja koje ćete nam poslati u e-poruci. Za pripremu izvješća o programskoj pogrešci potrebno je nešto vremena pa vas molimo za strpljenje."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktivno izvješće"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"To možete upotrebljavati u većini slučajeva. Moći ćete pratiti izradu izvješća i unijeti više pojedinosti o problemu. Mogu se izostaviti neki odjeljci koji se upotrebljavaju rjeđe i produljuju izradu izvješća."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Potpuno izvješće"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Izrada snimke zaslona za izvješće o programskoj pogrešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekundu.</item>
+ <item quantity="few">Izrada snimke zaslona za izvješće o programskoj pogrešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekunde.</item>
+ <item quantity="other">Izrada snimke zaslona za izvješće o programskoj pogrešci za <xliff:g id="NUMBER_1">%d</xliff:g> sekundi.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Bešumni način"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je isključen"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvuk je uključen"</string>
@@ -1056,8 +1057,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Dodirnite da biste otkazali"</string>
<string name="select_input_method" msgid="8547250819326693584">"Promjena tipkovnice"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Odaberi tipkovnice"</string>
- <string name="show_ime" msgid="9157568568695230830">"Prikaz način unosa"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardver"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Zadržava se na zaslonu dok je fizička tipkovnica aktivna"</string>
+ <string name="hardware" msgid="194658061510127999">"Prikaži virtualnu tipkovnicu"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Odaberite izgled tipkovnice"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dodirnite za odabir izgleda tipkovnice."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1549,4 +1550,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava dodati novog korisnika, no dosegnuto je ograničenje broja korisnika."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava dodati novog korisnika, ali račun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" već postoji na ovom uređaju. Želite li ipak nastaviti?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" pokušava dodati novog korisnika za račun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Želite li nastaviti?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Postavke jezika"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Postavke regije"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Unesite naziv jezika"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Predloženo"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Svi jezici"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Pretraži"</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 569e725..a5d8f14 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Programhiba bejelentése"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Hibajelentés készítése"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ezzel információt fog gyűjteni az eszköz jelenlegi állapotáról, amelyet a rendszer e-mailben fog elküldeni. Kérjük, legyen türelemmel, amíg a hibajelentés elkészül, és küldhető állapotba kerül."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktív jelentés"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Ezt használja a legtöbb esetben. Segítségével nyomon követheti a jelentés folyamatát, és további információkat kaphat a problémáról. A folyamat során kimaradhatnak az olyan kevésbé használt részek, amelyek jelentése túl sok időt igényel."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Teljes jelentés"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Képernyőkép készítése a hibajelentéshez <xliff:g id="NUMBER_1">%d</xliff:g> másodpercen belül.</item>
+ <item quantity="one">Képernyőkép készítése a hibajelentéshez <xliff:g id="NUMBER_0">%d</xliff:g> másodpercen belül.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Néma üzemmód"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Hang kikapcsolva"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Hang bekapcsolva"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"A visszavonáshoz érintse meg"</string>
<string name="select_input_method" msgid="8547250819326693584">"Billentyűzet megváltoztatása"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Billentyűzetek kiválasztása"</string>
- <string name="show_ime" msgid="9157568568695230830">"Beviteli mód megjelenítése"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardver"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Maradjon a képernyőn, amíg a billentyűzet aktív"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtuális billentyűzet"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Válasszon billentyűzetkiosztást"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Érintse meg az egyik billentyűzetkiosztás kiválasztásához."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"A(z) "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" alkalmazás egy új felhasználót szeretne megadni, azonban Ön elérte a felhasználók számára vonatkozó felső korlátot."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"A(z) "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" alkalmazás egy új felhasználót szeretne megadni, de a(z) "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" fiók már létezik ezen az eszközön. Ettől függetlenül is folytatja?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"A(z) "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" alkalmazás egy új felhasználót szeretne hozzáadni a(z) "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" fiókhoz. Folytatja a műveletet?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Nyelvi beállítás"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Régió beállítása"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Adja meg a nyelvet"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Javasolt"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Minden nyelv"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Keresés"</string>
</resources>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index cbe058e..1149ec1 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Վրիպակի զեկույց"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Գրել սխալի զեկույց"</string>
<string name="bugreport_message" msgid="398447048750350456">"Սա տեղեկություններ կհավաքագրի ձեր սարքի առկա կարգավիճակի մասին և կուղարկի այն էլեկտրոնային նամակով: Որոշակի ժամանակ կպահանջվի վրիպակի մասին զեկուցելու պահից սկսած մինչ ուղարկելը: Խնդրում ենք փոքր-ինչ համբերատար լինել:"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Ինտերակտիվ զեկույց"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Հիմնականում օգտագործեք այս տարբերակը: Այն ձեզ թույլ է տալիս հետագծել զեկույցի ստեղծման գործընթացը և խնդրի մասին լրացուցիչ տեղեկություններ մուտքագրել: Կարող է բաց թողնել որոշ քիչ օգտագործվող բաժինները, որոնց ստեղծումը երկար է տևում:"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Ամբողջական զեկույց"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Վրիպակի զեկույցի համար էկրանի պատկերի լուսանկարումը կատարվելու է <xliff:g id="NUMBER_1">%d</xliff:g> վայրկյանից:</item>
+ <item quantity="other">Վրիպակի զեկույցի համար էկրանի պատկերի լուսանկարումը կատարվելու է <xliff:g id="NUMBER_1">%d</xliff:g> վայրկյանից:</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Անձայն ռեժիմ"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ձայնը անջատված է"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ձայնը միացված է"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Հպեք՝ չեղարկելու համար"</string>
<string name="select_input_method" msgid="8547250819326693584">"Փոխել ստեղնաշարը"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Ընտրել ստեղնաշար"</string>
- <string name="show_ime" msgid="9157568568695230830">"Ցուցադրել մուտքագրման եղանակը"</string>
- <string name="hardware" msgid="7517821086888990278">"Սարքաշար"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Պահել էկրանին մինչդեռ ֆիզիկական ստեղնաշարն ակտիվ է"</string>
+ <string name="hardware" msgid="194658061510127999">"Ցույց տալ վիրտուալ ստեղնաշարը"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Ընտրեք ստեղնաշարի դիրքը"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Հպեք` ստեղնաշարի դիրքը ընտրելու համար:"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՈՒՓՔԵւՕՖ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" հավելվածը փորձում է նոր օգտվող ավելացնել, սակայն օգտվողների քանակի սահմանաչափը լրացել է:"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" հավելվածը փորձում է նոր օգտվող ավելացնել, սակայն "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" հաշիվն այս սարքում արդեն գոյություն ունի: Շարունակե՞լ:"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" հավելվածը փորձում է "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" հաշվի համար նոր օգտվող ավելացնել: Շարունակե՞լ:"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Նախընտրելի լեզու"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Նախընտրելի տարածաշրջան"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Մուտքագրեք լեզուն"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Առաջարկներ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Բոլոր լեզուները"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Որոնում"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 15efd94..37084e3 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Laporan bug"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Ambil laporan bug"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ini akan mengumpulkan informasi status perangkat Anda saat ini, untuk dikirimkan sebagai pesan email. Harap bersabar, mungkin perlu waktu untuk memulai laporan bug hingga siap dikirim."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Laporan interaktif"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Gunakan ini di berbagai keadaan. Ini memungkinkan Anda melacak kemajuan laporan dan memasukkan detail masalah selengkapnya. Mungkin menghilangkan beberapa bagian yang jarang digunakan dan yang perlu waktu lama untuk dilaporkan."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Laporan lengkap"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Mengambil tangkapan layar untuk laporan bug dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik.</item>
+ <item quantity="one">Mengambil tangkapan layar untuk laporan bug dalam <xliff:g id="NUMBER_0">%d</xliff:g> detik.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mode senyap"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Suara MATI"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Suara AKTIF"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Sentuh untuk membatalkan"</string>
<string name="select_input_method" msgid="8547250819326693584">"Ubah keyboard"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Pilih keyboard"</string>
- <string name="show_ime" msgid="9157568568695230830">"Tampilkan metode masukan"</string>
- <string name="hardware" msgid="7517821086888990278">"Perangkat Keras"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Pertahankan di layar jika keyboard fisik masih aktif"</string>
+ <string name="hardware" msgid="194658061510127999">"Tampilkan keyboard virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pilih tata letak keyboard"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Sentuh untuk memilih tata letak keyboard."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mencoba menambahkan pengguna baru, tetapi batas jumlah pengguna telah tercapai."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mencoba menambahkan pengguna baru, tetapi akun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" sudah ada di perangkat. Tetap lanjutkan?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mencoba menambahkan pengguna baru untuk akun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Lanjutkan?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferensi bahasa"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferensi wilayah"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Ketik nama bahasa"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Disarankan"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Semua bahasa"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Telusuri"</string>
</resources>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index 88d58b0..662d1dd 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Villutilkynning"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Útbúa villutilkynningu"</string>
<string name="bugreport_message" msgid="398447048750350456">"Þetta safnar upplýsingum um núverandi stöðu tækisins til að senda með tölvupósti. Það tekur smástund frá því villutilkynningin er ræst og þar til hún er tilbúin til sendingar – sýndu biðlund."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Gagnvirk skýrsla"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Þú getur notað þetta í flestum tilvikum. Með þessu móti geturðu fylgst með framgangi skýrslunnar og slegið inn viðbótarupplýsingar um vandamálið. Hugsanlegt er að lítið notuðum hlutum verði sleppt til að spara tíma."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Heildarskýrsla"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Tekur skjámynd fyrir villutilkynningu eftir <xliff:g id="NUMBER_1">%d</xliff:g> sekúndu.</item>
+ <item quantity="other">Tekur skjámynd fyrir villutilkynningu eftir <xliff:g id="NUMBER_1">%d</xliff:g> sekúndur.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Hljóðlaus stilling"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"SLÖKKT er á hljóði"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"KVEIKT er á hljóði"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Snertu til að hætta við"</string>
<string name="select_input_method" msgid="8547250819326693584">"Skipta um lyklaborð"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Velja lyklaborð"</string>
- <string name="show_ime" msgid="9157568568695230830">"Sýna innsláttaraðferð"</string>
- <string name="hardware" msgid="7517821086888990278">"Vélbúnaður"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Haltu því á skjánum meðan vélbúnaðarlyklaborðið er virkt"</string>
+ <string name="hardware" msgid="194658061510127999">"Sýna sýndarlyklaborð"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Veldu lyklaskipan"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Snertu til að velja lyklaskipan."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁBCDÐEÉFGHIÍJKLMNOÓPQRSTUÚVWXYÝZÞÆÖ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" er að reyna að bæta við nýjum notanda, en notandahámarkinu hefur þegar verið náð."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" er að reyna að bæta við nýjum notanda, en reikningurinn "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" er nú þegar til á þessu tæki. Halda samt áfram?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" er að reyna að bæta nýjum notanda við reikninginn "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Halda áfram?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Val tungumáls"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Svæðisval"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Sláðu inn heiti tungumáls"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Tillögur"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Öll tungumál"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Leita"</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index da34b35..230f3e0 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Segnalazione di bug"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Apri segnalazione bug"</string>
<string name="bugreport_message" msgid="398447048750350456">"Verranno raccolte informazioni sullo stato corrente del dispositivo che saranno inviate sotto forma di messaggio email. Passerà un po\' di tempo prima che la segnalazione di bug aperta sia pronta per essere inviata; ti preghiamo di avere pazienza."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Rapporto interattivo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Utilizza questa opzione nella maggior parte dei casi. Ti consente di monitorare l\'avanzamento del rapporto e di inserire maggiori dettagli relativi al problema. Potrebbero essere omesse alcune sezioni meno utilizzate il cui inserimento nel rapporto richiede molto tempo."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Rapporto completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Lo screenshot per la segnalazione di bug verrà acquisito tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi.</item>
+ <item quantity="one">Lo screenshot per la segnalazione di bug verrà acquisito tra <xliff:g id="NUMBER_0">%d</xliff:g> secondo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modalità silenziosa"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Audio non attivo"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Audio attivo"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Tocca per annullare"</string>
<string name="select_input_method" msgid="8547250819326693584">"Cambia tastiera"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Scegli tastiera"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostra metodo immissione"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Tieni sullo schermo quando è attiva la tastiera fisica"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostra tastiera virtuale"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Seleziona layout tastiera"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tocca per selezionare un layout di tastiera."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sta cercando di aggiungere un nuovo utente, ma è stato raggiunto il limite massimo di utenti."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sta cercando di aggiungere un nuovo utente, ma l\'account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" esiste già su questo dispositivo. Continuare comunque?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sta cercando di aggiungere un nuovo utente per l\'account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuare?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferenza lingua"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Area geografica preferita"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Digita nome lingua"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggerite"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Tutte le lingue"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Cerca"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 54c1fb1..0278191 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"דיווח על באג"</string>
<string name="bugreport_title" msgid="2667494803742548533">"שלח דיווח על באג"</string>
<string name="bugreport_message" msgid="398447048750350456">"פעולה זו תאסוף מידע על מצב המכשיר הנוכחי שלך על מנת לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת דיווח הבאג ועד לשליחת ההודעה בפועל. אנא המתן בסבלנות."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"דוח אינטראקטיבי"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"השתמש באפשרות זו ברוב המקרים. היא מאפשרת לך לעקוב אחר התקדמות הדוח ולהזין פרטים נוספים על הבעיה. היא עשויה להשמיט כמה קטעים שנמצאים פחות בשימוש ואשר יצירת הדיווח עליהם נמשכת זמן רב."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"דוח מלא"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="two">יוצר צילום מסך לדוח על באג בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות.</item>
+ <item quantity="many">יוצר צילום מסך לדוח על באג בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות.</item>
+ <item quantity="other">יוצר צילום מסך לדוח על באג בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות.</item>
+ <item quantity="one">יוצר צילום מסך לדוח על באג בעוד <xliff:g id="NUMBER_0">%d</xliff:g> שנייה.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"מצב שקט"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"הקול כבוי"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"קול מופעל"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"גע כדי לבטל"</string>
<string name="select_input_method" msgid="8547250819326693584">"שינוי מקלדת"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"בחר מקלדות"</string>
- <string name="show_ime" msgid="9157568568695230830">"הצג שיטת קלט"</string>
- <string name="hardware" msgid="7517821086888990278">"חומרה"</string>
+ <string name="show_ime" msgid="2506087537466597099">"השאר אותו במסך בזמן שהמקלדת הפיזית פעילה"</string>
+ <string name="hardware" msgid="194658061510127999">"הצג מקלדת וירטואלית"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"בחירת פריסת מקלדת"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"גע כדי לבחור פריסת מקלדת."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" מנסה להוסיף משתמש חדש, אך מכסת המשתמשים כבר מלאה."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" מנסה להוסיף משתמש חדש, אך החשבון "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" כבר קיים במכשיר זה. להמשיך בכל זאת?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" מנסה להוסיף משתמש חדש לחשבון "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". להמשיך?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"העדפת שפה"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"העדפת אזור"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"הקלד שם שפה"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"הצעות"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"כל השפות"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"חיפוש"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 35dbd24..a92a800 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"バグレポート"</string>
<string name="bugreport_title" msgid="2667494803742548533">"バグレポートを取得"</string>
<string name="bugreport_message" msgid="398447048750350456">"現在の端末の状態に関する情報が収集され、その内容がメールで送信されます。バグレポートが開始してから送信可能な状態となるまでには多少の時間がかかりますのでご了承ください。"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"対話型レポート"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ほとんどの場合はこのオプションを使用します。レポートの進行状況を追跡し、問題についての詳細情報を確認することができます。レポート作成に時間がかかってもあまり使用されないセクションは省略されることがあります。"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"完全レポート"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> 秒後にバグレポートのスクリーンショットが作成されます。</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> 秒後にバグレポートのスクリーンショットが作成されます。</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"マナーモード"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"サウンドOFF"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"サウンドON"</string>
@@ -246,13 +246,13 @@
<string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
<string name="permgroupdesc_sms" msgid="4656988620100940350">"SMSメッセージの送信と表示"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
- <string name="permgroupdesc_storage" msgid="637758554581589203">"端末上の写真、メディア、ファイルへのアクセス"</string>
+ <string name="permgroupdesc_storage" msgid="637758554581589203">"端末内の写真、メディア、ファイルへのアクセス"</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"マイク"</string>
<string name="permgroupdesc_microphone" msgid="4988812113943554584">"音声の録音"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string>
- <string name="permgroupdesc_camera" msgid="3250611594678347720">"写真の撮影と動画の記録"</string>
+ <string name="permgroupdesc_camera" msgid="3250611594678347720">"写真と動画の撮影"</string>
<string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string>
- <string name="permgroupdesc_phone" msgid="6234224354060641055">"通話の発信と管理"</string>
+ <string name="permgroupdesc_phone" msgid="6234224354060641055">"電話の発信と管理"</string>
<string name="permgrouplab_sensors" msgid="416037179223226722">"ボディーセンサー"</string>
<string name="permgroupdesc_sensors" msgid="7147968539346634043">"バイタルサインに関するセンサーデータへのアクセス"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ウィンドウコンテンツの取得"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"キャンセルするにはタップしてください"</string>
<string name="select_input_method" msgid="8547250819326693584">"キーボードの変更"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"キーボードの選択"</string>
- <string name="show_ime" msgid="9157568568695230830">"スクリーンキーボードを表示する"</string>
- <string name="hardware" msgid="7517821086888990278">"ハードウェア"</string>
+ <string name="show_ime" msgid="2506087537466597099">"物理キーボードが有効になっている間は、画面に表示されます"</string>
+ <string name="hardware" msgid="194658061510127999">"仮想キーボードの表示"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"キーボードレイアウトの選択"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"タップしてキーボードレイアウトを選択してください。"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" で新しいユーザーを追加しようとしていますが、ユーザー数の上限に達しています。"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" で新しいユーザーを追加しようとしていますが、アカウント "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" は既にこの端末に存在します。続行しますか?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" でアカウント "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" に新しいユーザーを追加しようとしています。続行しますか?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"言語設定"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"地域設定"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"言語名を入力"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"言語の候補"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"すべての言語"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"検索"</string>
</resources>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 864e495..3f5ad1f 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ხარვეზის შესახებ ანგარიში"</string>
<string name="bugreport_title" msgid="2667494803742548533">"შექმენით შეცდომის ანგარიში"</string>
<string name="bugreport_message" msgid="398447048750350456">"იგი შეაგროვებს ინფორმაციას თქვენი მოწყობილობის ამჟამინდელი მდგომარეობის შესახებ, რათა ის ელფოსტის შეტყობინების სახით გააგზავნოს. ხარვეზის ანგარიშის მომზადებასა და შეტყობინების გაგზავნას გარკვეული დრო სჭირდება. გთხოვთ, მოითმინოთ."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ინტერაქტიული ანგარიში"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"გამოიყენეთ ეს ვარიანტი შემთხვევათა უმეტესობაში. ის საშუალებას მოგცემთ, თვალი მიადევნოთ ანგარიშის პროგრესს და პრობლემის შესახებ მეტი დეტალი შეიყვანოთ. ამ ვარიანტის არჩევის შემთხვევაში, შეიძლება მოხდეს ზოგიერთი ნაკლებად გამოყენებადი სექციის გამოტოვება, რომელთა შესახებ მოხსენებასაც დიდი დრო სჭირდება."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"სრული ანგარიში"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">ხარვეზის შესახებ ანგარიშის ეკრანის ანაბეჭდის გადაღება მოხდება <xliff:g id="NUMBER_1">%d</xliff:g> წამში.</item>
+ <item quantity="one">ხარვეზის შესახებ ანგარიშის ეკრანის ანაბეჭდის გადაღება მოხდება <xliff:g id="NUMBER_0">%d</xliff:g> წამში.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"ჩუმი რეჟიმი"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ხმა გამორთულია"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ხმა ჩართულია"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"შეეხეთ გასაუქმებლად"</string>
<string name="select_input_method" msgid="8547250819326693584">"კლავიატურის შეცვლა"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"კლავიატურების არჩევა"</string>
- <string name="show_ime" msgid="9157568568695230830">"შეყვანის მეთოდის ჩვენება"</string>
- <string name="hardware" msgid="7517821086888990278">"მოწყობილობა"</string>
+ <string name="show_ime" msgid="2506087537466597099">"აქტიური ფიზიკური კლავიატურისას ეკრანზე შენარჩუნება"</string>
+ <string name="hardware" msgid="194658061510127999">"ვირტუალური კლავიატურის ჩვენება"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"შეარჩიეთ კლავიატურის განლაგება."</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"კლავიატურის განლაგების შესარჩევად შეეხეთ."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ახალი მომხმარებლის დამატებას ცდილობს, მაგრამ მიღწეულია მომხმარებლების ლიმიტი."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ახალი მომხმარებლის დამატებას ცდილობს, მაგრამ ანგარიში — "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" უკვე არსებობს ამ მოწყობილობაში. მაინც გსურთ გაგრძელება?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ცდილობს, ანგარიშს — "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ახალი მომხმარებელი დაუმატოს. გსურთ გაგრძელება?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ენის პარამეტრები"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"რეგიონის პარამეტრები"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"აკრიფეთ ენის სახელი"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"რეკომენდებული"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ყველა ენა"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ძიება"</string>
</resources>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index 8062208..25de46b 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Вирус туралы хабарлау"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Қате туралы есеп құру"</string>
<string name="bugreport_message" msgid="398447048750350456">"Құрылғының қазіргі күйі туралы ақпаратты жинап, электрондық хабармен жібереді. Есеп әзір болғанша біраз уақыт кетеді, шыдай тұрыңыз."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактивті есеп"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Мұны жағдайлардың көпшілігінде пайдаланыңыз. Ол есептің орындалу барысын бақылауға және мәселе туралы қосымша мәліметтер енгізуге мүмкіндік береді. Ол есеп беруге ұзақ уақыт кететін кейбір азырақ пайдаланылатын бөлімдерді өткізіп жіберуі мүмкін."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Толық есеп"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> секундтан кейін қате туралы есептің скриншоты түсіріледі.</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> секундтан кейін қате туралы есептің скриншоты түсіріледі.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Үнсіз режимі"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Дыбыс ӨШІРУЛІ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Дыбыс ҚОСУЛЫ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Бас тарту үшін түртіңіз"</string>
<string name="select_input_method" msgid="8547250819326693584">"Пернетақтаны өзгерту"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Пернетақталарды таңдау"</string>
- <string name="show_ime" msgid="9157568568695230830">"Енгізу әдісін көрсету"</string>
- <string name="hardware" msgid="7517821086888990278">"Компьютерлік жабдық"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Физикалық пернетақта белсенді кезде оны экранда ұстау"</string>
+ <string name="hardware" msgid="194658061510127999">"Виртуалды пернетақтаны көрсету"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Пернетақта орналасуын таңдау"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Пернетақта орналасуын таңдау үшін түртіңіз."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңа пайдаланушыны қосуға тырысуда, бірақ пайдаланушылар саны шегіне жетті."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңа пайдаланушыны қосуға тырысуда, бірақ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" есептік жазбасы осы құрылғыда әлдеқашан бар. Бәрібір жалғастыру керек пе?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" есептік жазбасы үшін жаңа пайдаланушыны қосуға тырысуда. Жалғастыру керек пе?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Тіл параметрі"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Аймақ параметрі"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Тіл атауын теріңіз"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Ұсынылған"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Барлық тілдер"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Іздеу"</string>
</resources>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index db743b5..6b51f61 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"របាយការណ៍កំហុស"</string>
<string name="bugreport_title" msgid="2667494803742548533">"យករបាយការណ៍កំហុស"</string>
<string name="bugreport_message" msgid="398447048750350456">"វានឹងប្រមូលព័ត៌មានអំពីស្ថានភាពឧបករណ៍របស់អ្នក ដើម្បីផ្ញើជាសារអ៊ីមែល។ វានឹងចំណាយពេលតិចពីពេលចាប់ផ្ដើមរបាយការណ៍រហូតដល់ពេលវារួចរាល់ដើម្បីផ្ញើ សូមអត់ធ្មត់។"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"របាយការណ៍អន្តរកម្ម"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ប្រើវាគ្រប់កាលៈទេសៈទាំងអស់។ វាអនុញ្ញាតឲ្យអ្នកតាមដានដំណើរការនៃរបាយការណ៍ និងចូលទៅព័ត៌មានលម្អិតបន្ថែមអំពីបញ្ហានេះ។ វាអាចនឹងលុបផ្នែកមួយចំនួនដែលមិនសូវប្រើចេញ ដែលធ្វើឲ្យចំណាយពេលយូរក្នុងការរាយការណ៍។"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"របាយការណ៍ពេញលេញ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">នឹងថតរូបអេក្រង់សម្រាប់របាយការណ៍កំហុសក្នុងរយៈពេល <xliff:g id="NUMBER_1">%d</xliff:g> វិនាទីទៀត។</item>
+ <item quantity="one">នឹងថតរូបអេក្រង់សម្រាប់របាយការណ៍កំហុសក្នុងរយៈពេល <xliff:g id="NUMBER_0">%d</xliff:g> វិនាទីទៀត។</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"របៀបស្ងាត់"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"បិទសំឡេង"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"បើកសំឡេង"</string>
@@ -1051,8 +1051,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ប៉ះដើម្បីបោះបង់"</string>
<string name="select_input_method" msgid="8547250819326693584">"ប្ដូរក្ដារចុច"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ជ្រើសក្ដារចុច"</string>
- <string name="show_ime" msgid="9157568568695230830">"បង្ហាញវិធីសាស្ត្របញ្ចូល"</string>
- <string name="hardware" msgid="7517821086888990278">"ផ្នែករឹង"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ទុកវានៅលើអេក្រង់ខណៈពេលក្តារចុចពិតប្រាកដកំពុងសកម្ម"</string>
+ <string name="hardware" msgid="194658061510127999">"បង្ហាញក្ដារចុចនិម្មិត"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"ជ្រើសប្លង់ក្ដារចុច"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ប៉ះ ដើម្បីជ្រើសប្លង់ក្ដារចុច។"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1533,4 +1533,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" កំពុងព្យាយាមបន្ថែមអ្នកប្រើថ្មី ប៉ុន្តែបានឈានដល់ចំនួនកំណត់អ្នកប្រើហើយ។"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" កំពុងព្យាយាមបន្ថែមអ្នកប្រើថ្មី ប៉ុន្តែគណនី "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" មានរួចទៅហើយនៅលើឧបករណ៍នេះ។ បន្តទោះយ៉ាងណាក៏ដោយ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" កំពុងព្យាយាមបន្ថែមអ្នកប្រើថ្មីសម្រាប់គណនី "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"។ បន្តឬ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ចំណូលចិត្តភាសា"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ចំណូលចិត្តតំបន់"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"វាយបញ្ចូលឈ្មោះភាសា"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"បានស្នើ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ភាសាទាំងអស់"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ស្វែងរក"</string>
</resources>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index cde0901..d85d3984 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ದೋಷದ ವರದಿ"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ದೋಷ ವರದಿ ರಚಿಸಿ"</string>
<string name="bugreport_message" msgid="398447048750350456">"ನಿಮ್ಮ ಸಾಧನದ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳುವುದರ ಜೊತೆ ಇ-ಮೇಲ್ ರೂಪದಲ್ಲಿ ನಿಮಗೆ ರವಾನಿಸುತ್ತದೆ. ಇದು ದೋಷ ವರದಿಯನ್ನು ಪ್ರಾರಂಭಿಸಿದ ಸಮಯದಿಂದ ಅದನ್ನು ಕಳುಹಿಸುವವರೆಗೆ ಸ್ವಲ್ಪ ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ; ದಯವಿಟ್ಟು ತಾಳ್ಮೆಯಿಂದಿರಿ."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ಪರಸ್ಪರ ಸಂವಹನ ವರದಿ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಇದನ್ನು ಬಳಸಿ. ಇದು ವರದಿಯ ಪ್ರಗತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಮತ್ತು ಸಮಸ್ಯೆ ಕುರಿತು ಹೆಚ್ಚಿನ ವಿವರಗಳನ್ನು ನಮೂದಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ವರದಿ ಮಾಡಲು ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವಂತಹ ಕೆಲವು ಕಡಿಮೆ ಬಳಸಲಾದ ವಿಭಾಗಗಳನ್ನು ತ್ಯಜಿಸಬಹುದು."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"ಪೂರ್ಣ ವರದಿ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">ಬಗ್ ವರದಿ ಮಾಡಲು <xliff:g id="NUMBER_1">%d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ಕ್ರೀನ್ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತಿದೆ.</item>
+ <item quantity="other">ಬಗ್ ವರದಿ ಮಾಡಲು <xliff:g id="NUMBER_1">%d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ಕ್ರೀನ್ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತಿದೆ.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"ಶಾಂತ ಮೋಡ್"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ಶಬ್ಧ ಆಫ್ ಆಗಿದೆ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ಶಬ್ಧ ಆನ್ ಆಗಿದೆ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ರದ್ದುಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="select_input_method" msgid="8547250819326693584">"ಕೀಬೋರ್ಡ್ ಬದಲಿಸಿ"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ಕೀಬೋರ್ಡ್ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="show_ime" msgid="9157568568695230830">"ಇನ್ಪುಟ್ ವಿಧಾನವನ್ನು ತೋರಿಸು"</string>
- <string name="hardware" msgid="7517821086888990278">"ಹಾರ್ಡ್ವೇರ್"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್ ಸಕ್ರಿಯವಾಗಿರುವಾಗ ಅದನ್ನು ಪರದೆಯ ಮೇಲೆ ಇರಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="hardware" msgid="194658061510127999">"ವರ್ಚ್ಯುಯಲ್ ಕೀಬೋರ್ಡ್ ತೋರಿಸು"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"ಕೀಬೋರ್ಡ್ ಲೇಔಟ್ ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ಕೀಬೋರ್ಡ್ ಲೇಔಟ್ ಆಯ್ಕೆ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದಾರೆ, ಆದರೆ ಬಳಕೆದಾರರ ಮಿತಿಯನ್ನು ತಲುಪಲಾಗಿದೆ."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದಾರೆ, ಆದರೆ ಈ ಸಾಧನದಲ್ಲಿ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ಖಾತೆ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ. ಹೇಗಾದರೂ ಮುಂದುವರೆಯುವುದೇ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ಖಾತೆಗೆ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದಾರೆ. ಮುಂದುವರೆಯುವುದೇ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ಭಾಷೆಯ ಪ್ರಾಶಸ್ತ್ಯ"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ಪ್ರದೇಶ ಪ್ರಾಶಸ್ತ್ಯ"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ಭಾಷೆ ಹೆಸರನ್ನು ಟೈಪ್ ಮಾಡಿ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"ಸಲಹೆ ಮಾಡಿರುವುದು"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ಎಲ್ಲಾ ಭಾಷೆಗಳು"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ಹುಡುಕು"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f3c6c69..1a92e93 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"버그 신고"</string>
<string name="bugreport_title" msgid="2667494803742548533">"버그 신고"</string>
<string name="bugreport_message" msgid="398447048750350456">"현재 기기 상태에 대한 정보를 수집하여 이메일 메시지로 전송합니다. 버그 신고를 시작하여 전송할 준비가 되려면 약간 시간이 걸립니다."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"대화형 보고서"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"대부분의 경우 이 옵션을 사용합니다. 신고 진행 상황을 추적할 수 있고 문제에 대한 세부정보를 입력할 수 있습니다. 신고하기에 시간이 너무 오래 걸리고 사용 빈도가 낮은 일부 섹션을 생략할 수 있습니다."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"전체 보고서"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">버그 신고 스크린샷을 <xliff:g id="NUMBER_1">%d</xliff:g>초 후에 찍습니다.</item>
+ <item quantity="one">버그 신고 스크린샷을 <xliff:g id="NUMBER_0">%d</xliff:g>초 후에 찍습니다.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"무음 모드"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"소리 꺼짐"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"소리 켜짐"</string>
@@ -238,23 +238,23 @@
<string name="user_owner_label" msgid="2804351898001038951">"개인"</string>
<string name="managed_profile_label" msgid="6260850669674791528">"직장"</string>
<string name="permgrouplab_contacts" msgid="3657758145679177612">"주소록"</string>
- <string name="permgroupdesc_contacts" msgid="6951499528303668046">"주소록 액세스"</string>
+ <string name="permgroupdesc_contacts" msgid="6951499528303668046">"주소록에 접근할 수 있도록"</string>
<string name="permgrouplab_location" msgid="7275582855722310164">"위치"</string>
- <string name="permgroupdesc_location" msgid="1346617465127855033">"이 기기의 위치에 액세스"</string>
+ <string name="permgroupdesc_location" msgid="1346617465127855033">"이 기기의 위치정보에 접근할 수 있도록"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string>
- <string name="permgroupdesc_calendar" msgid="3889615280211184106">"캘린더 액세스"</string>
+ <string name="permgroupdesc_calendar" msgid="3889615280211184106">"일정에 접근할 수 있도록"</string>
<string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
- <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS 메시지 전송 및 보기"</string>
+ <string name="permgroupdesc_sms" msgid="4656988620100940350">"문자 메시지를 보내고 확인할 수 있도록"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
- <string name="permgroupdesc_storage" msgid="637758554581589203">"기기 사진, 미디어, 파일 액세스"</string>
+ <string name="permgroupdesc_storage" msgid="637758554581589203">"기기 사진, 미디어, 파일에 접근할 수 있도록"</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"마이크"</string>
- <string name="permgroupdesc_microphone" msgid="4988812113943554584">"오디오 녹음"</string>
+ <string name="permgroupdesc_microphone" msgid="4988812113943554584">"오디오를 녹음할 수 있도록"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"카메라"</string>
- <string name="permgroupdesc_camera" msgid="3250611594678347720">"사진 및 동영상 촬영"</string>
+ <string name="permgroupdesc_camera" msgid="3250611594678347720">"사진 및 동영상을 촬영할 수 있도록"</string>
<string name="permgrouplab_phone" msgid="5229115638567440675">"전화"</string>
- <string name="permgroupdesc_phone" msgid="6234224354060641055">"전화 걸기 및 관리"</string>
+ <string name="permgroupdesc_phone" msgid="6234224354060641055">"통화 상태를 관리하거나 전화를 걸 수 있도록"</string>
<string name="permgrouplab_sensors" msgid="416037179223226722">"신체 센서"</string>
- <string name="permgroupdesc_sensors" msgid="7147968539346634043">"생체 신호에 관한 센서 데이터에 액세스"</string>
+ <string name="permgroupdesc_sensors" msgid="7147968539346634043">"생체 신호에 관한 센서 데이터에 접근할 수 있도록"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"창 콘텐츠 가져오기"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"상호작용 중인 창의 콘텐츠를 검사합니다."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"터치하여 탐색 사용"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"취소하려면 터치하세요."</string>
<string name="select_input_method" msgid="8547250819326693584">"키보드 변경"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"키보드 선택"</string>
- <string name="show_ime" msgid="9157568568695230830">"입력 방법 표시"</string>
- <string name="hardware" msgid="7517821086888990278">"하드웨어"</string>
+ <string name="show_ime" msgid="2506087537466597099">"물리적 키보드가 활성 상태인 경우 화면에 켜 둠"</string>
+ <string name="hardware" msgid="194658061510127999">"가상 키보드 표시"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"키보드 레이아웃 선택"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"터치하여 키보드 레이아웃을 선택합니다."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"에서 새 사용자를 추가하려고 하지만 사용자 한도에 도달했습니다."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"에서 새 사용자를 추가하려고 하지만 계정 "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"이(가) 이미 기기에 있습니다. 계속할까요?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"에서 계정 "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"에 새 사용자를 추가하려고 합니다. 계속할까요?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"언어 환경설정"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"지역 환경설정"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"언어 이름 입력"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"추천"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"모든 언어"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"검색"</string>
</resources>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 58402e9..f9dcce5 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Ката тууралуу билдирүү"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Ката тууралуу билдирүү түзүү"</string>
<string name="bugreport_message" msgid="398447048750350456">"Бул сиздин түзмөгүңүздүн учурдагы абалын эмейл билдирүүсү катары жөнөтүш максатында маалымат чогултат. Ката тууралуу билдирүү түзүлүп башталып, жөнөтүлгөнгө чейин бир аз убакыт керек болот; сураныч, бир аз күтө туруңуз."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактивдүү кабар"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Ката жөнүндө кабардын абалын жана көйгөй тууралуу кошумча маалыматты көрсөтүү үчүн ушул функцияны колдонууну сунуштайбыз. Ката жөнүндө кабар жөнөтүлүп жатканда көп убакыт талап кылынбашы үчүн негизги бөлүмдөр гана көрүнөт."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Толук кабар берүү"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Мүчүлүштүк тууралуу кабарлоо үчүн <xliff:g id="NUMBER_1">%d</xliff:g> секундда скриншот алынат.</item>
+ <item quantity="one">Мүчүлүштүк тууралуу кабарлоо үчүн <xliff:g id="NUMBER_0">%d</xliff:g> секундда скриншот алынат.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Үнсүз режим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Добушу ӨЧҮК"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Добушу КҮЙҮК"</string>
@@ -1043,15 +1043,15 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB мүчүлүштүктөрдү оңдоо туташтырылган"</string>
<string name="adb_active_notification_message" msgid="1016654627626476142">"USB мүчүлүштүктөрдү жоюу мүмкүнчүлүгүн өчүрүү үчүн тийип коюңуз."</string>
<string name="share_remote_bugreport_notification_title" msgid="3116061729914615290">"Администратор менен мүчүлүштүктөр тууралуу кабар бөлүшүлсүнбү?"</string>
- <string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"IT администраторуңуз бузулууларды аныктап оңдоого жардам берүү үчүн мүчүлүштүктөр тууралу кабар берүүнү суранды"</string>
+ <string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"IT администраторуңуз мүчүлүштүктөр тууралуу маалыматты сурап жатат. Бул маалыматтын жардамы менен бузулган жерлерди аныктап, оңдоп берет."</string>
<string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"КАБЫЛ АЛУУ"</string>
<string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ЧЕТКЕ КАГУУ"</string>
<string name="remote_bugreport_progress_notification_title" msgid="2785600634417078622">"Мүчүлүштүк тууралуу кабар алынууда…"</string>
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Жокко чыгаруу үчүн тийип коюңуз"</string>
<string name="select_input_method" msgid="8547250819326693584">"Баскычтопту өзгөртүү"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Баскычтопторду тандаңыз"</string>
- <string name="show_ime" msgid="9157568568695230830">"Киргизүү ыкмасын көрсөтүү"</string>
- <string name="hardware" msgid="7517821086888990278">"Аппараттык"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Баскычтоп иштетилгенде экранда көрүнүп турсун"</string>
+ <string name="hardware" msgid="194658061510127999">"Виртуалдык баскычтоп"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Тергичтин жайгашуусун тандоо"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Тергичтин жайгашуусун тандаш үчүн басыңыз."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1528,8 +1528,14 @@
<string name="default_notification_topic_label" msgid="227586145791870829">"Калган-каткандар"</string>
<string name="importance_from_topic" msgid="3572280439880023233">"Бул эскертмелердин маанилүүлүгүн белгиледиңиз."</string>
<string name="importance_from_person" msgid="9160133597262938296">"Булар сиз үчүн маанилүү адамдар."</string>
- <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучу кошууга аракет кылууда, бирок учурда ага тыюу салынган."</string>
- <string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучу кошууга аракет кылууда, бирок колдонуучулар чегине жетип калды."</string>
- <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучу кошууга аракет кылууда, бирок "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" каттоо эсеби мурунтан эле бул түзмөктө бар. Баары бир уланта берсинби?"</string>
+ <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучуну кошууга аракет кылууда, бирок учурда ага тыюу салынган."</string>
+ <string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучуну кошууга аракет кылууда, бирок колдонуучулардын саны эң жогорку чекке жетип калды."</string>
+ <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучуну кошууга аракет кылууда, бирок түзмөктө мындай каттоо эсеби "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" мурунтан эле бар. Баары бир уланта бересизби?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" жаңы колдонуучуну "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" каттоо эсебине кошууга аракет кылууда. Улантылсынбы?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Тил жөндөөлөрү"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Чөлкөмдүк жөндөөлөр"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Тилди киргизиңиз"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Сунушталган"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Бардык тилдер"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Издөө"</string>
</resources>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 94897ac..1fe72ac 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ລາຍງານຂໍ້ຜິດພາດ"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ໃຊ້ລາຍງານຂໍ້ບົກພ່ອງ"</string>
<string name="bugreport_message" msgid="398447048750350456">"ນີ້ຈະເປັນການເກັບກຳຂໍ້ມູນກ່ຽວກັບ ສະຖານະປັດຈຸບັນຂອງອຸປະກອນທ່ານ ເພື່ອສົ່ງເປັນຂໍ້ຄວາມທາງອີເມວ. ມັນຈະໃຊ້ເວລາໜ້ອຍນຶ່ງ ໃນການເລີ່ມຕົ້ນການລາຍງານຂໍ້ຜິດພາດ ຈົນກວ່າຈະພ້ອມທີ່ຈະສົ່ງໄດ້, ກະລຸນາລໍຖ້າ."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ລາຍງານແບບໂຕ້ຕອບ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ໃຊ້ອັນນີ້ພາຍໃຕ້ສະພາບການສ່ວນໃຫຍ່. ມັນອະນຸຍາດໃຫ້ທ່ານຕິດຕາມຄວາມຄືບໜ້າຂອງລາຍງານ ແລະ ປ້ອນລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບບັນຫາ. ມັນອາດຈະຕັດບາງສ່ວນທີ່ບໍ່ຄ່ອຍໄດ້ໃຊ້ທີ່ໃຊ້ເວລາດົນໃນການລາຍງານອອກໄປ."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"ລາຍງານເຕັມ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">ກຳລັງຈະຖ່າຍພາບໜ້າຈໍສຳລັບການລາຍງານຂໍ້ຜິດພາດໃນ <xliff:g id="NUMBER_1">%d</xliff:g> ວິນາທີ.</item>
+ <item quantity="one">ກຳລັງຈະຖ່າຍພາບໜ້າຈໍສຳລັບການລາຍງານຂໍ້ຜິດພາດໃນ <xliff:g id="NUMBER_0">%d</xliff:g> ວິນາທີ.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"ໂໝດປິດສຽງ"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ປິດສຽງແລ້ວ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ເປິດສຽງແລ້ວ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ແຕະເພື່ອຍົກເລີກ"</string>
<string name="select_input_method" msgid="8547250819326693584">"ປ່ຽນແປ້ນພິມ"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ເລືອກແປ້ນພິມ"</string>
- <string name="show_ime" msgid="9157568568695230830">"ສະແດງຮູບແບບການປ້ອນຂໍ້ມູນ"</string>
- <string name="hardware" msgid="7517821086888990278">"ຮາດແວ"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ເປີດໃຊ້ໃຫ້ມັນຢູ່ໃນໜ້າຈໍໃນຂະນະທີ່ໃຊ້ແປ້ນພິມພາຍນອກຢູ່"</string>
+ <string name="hardware" msgid="194658061510127999">"ສະແດງແປ້ນພິມສະເໝືອນ"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"ເລືອກຮູບແບບແປ້ນພິມ"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ກົດເພື່ອເລືອກຮູບແບບແປ້ນພິມ."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ກຳລັງພະຍາຍາມເພີ່ມຜູ້ໃຊ້ໃໝ່, ແຕ່ໄດ້ຮອດຂີດຈຳກັດຜູ້ໃຊ້ແລ້ວ."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ກຳລັງພະຍາຍາມເພີ່ມຜູ້ໃຊ້ໃໝ່, ແຕ່ບັນຊີ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ມີຢູ່ແລ້ວໃນອຸປະກອນນີ້. ແນວໃດກໍດຳເນີນຕໍ່ບໍ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ກຳລັງພະຍາຍາມເພີ່ມຜູ້ໃຊ້ໃໝ່ສຳລັບບັນຊີ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". ດຳເນີນຕໍ່ບໍ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ການຕັ້ງຄ່າພາສາ"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ການຕັ້ງຄ່າພາກພື້ນ"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ພິມຊື່ພາສາ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"ແນະນຳ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ທຸກພາສາ"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ຄົ້ນຫາ"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 5da0a81..2e78344 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Pranešimas apie riktą"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Pranešti apie riktą"</string>
<string name="bugreport_message" msgid="398447048750350456">"Bus surinkta informacija apie dabartinę įrenginio būseną ir išsiųsta el. pašto pranešimu. Šiek tiek užtruks, kol pranešimas apie riktą bus paruoštas siųsti; būkite kantrūs."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interakt. ataskaita"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Naudokite tai esant daugumai aplinkybių. Galite stebėti ataskaitos eigą ir įvesti daugiau išsamios informacijos apie problemą. Gali būti praleidžiamos kelios nelabai naudingos skiltys, kurių ataskaitų teikimas ilgai trunka."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Išsami ataskaita"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Pranešimo apie riktą ekrano kopija bus užfiksuota po <xliff:g id="NUMBER_1">%d</xliff:g> sekundės.</item>
+ <item quantity="few">Pranešimo apie riktą ekrano kopija bus užfiksuota po <xliff:g id="NUMBER_1">%d</xliff:g> sekundžių.</item>
+ <item quantity="many">Pranešimo apie riktą ekrano kopija bus užfiksuota po <xliff:g id="NUMBER_1">%d</xliff:g> sekundės.</item>
+ <item quantity="other">Pranešimo apie riktą ekrano kopija bus užfiksuota po <xliff:g id="NUMBER_1">%d</xliff:g> sekundžių.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tylus režimas"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Garsas IŠJUNGTAS"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Garsas ĮJUNGTAS"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Palieskite, kad atšauktumėte"</string>
<string name="select_input_method" msgid="8547250819326693584">"Klaviatūros keitimas"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Pasirinkti klaviatūras"</string>
- <string name="show_ime" msgid="9157568568695230830">"Rodyti įvesties metodą"</string>
- <string name="hardware" msgid="7517821086888990278">"Apar. įr."</string>
+ <string name="show_ime" msgid="2506087537466597099">"Palikti ekrane, kol fizinė klaviatūra aktyvi"</string>
+ <string name="hardware" msgid="194658061510127999">"Rodyti virtualiąją klaviatūrą"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pasirinkite klaviatūros išdėstymą"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Palieskite, kad pasirinktumėte klaviatūros išdėstymą."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"„<xliff:g id="APP">%1$s</xliff:g>“"</b>" bando pridėti naują naudotoją, tačiau pasiektas naudotojų skaičiaus apribojimas."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"„<xliff:g id="APP">%1$s</xliff:g>“"</b>" bando pridėti naują naudotoją, tačiau paskyra "<b>"„<xliff:g id="ACCOUNT">%2$s</xliff:g>“"</b>" jau yra šiame įrenginyje. Vis tiek tęsti?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"„<xliff:g id="APP">%1$s</xliff:g>“"</b>" bando pridėti naują paskyros "<b>"„<xliff:g id="ACCOUNT">%2$s</xliff:g>“"</b>" naudotoją. Tęsti?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Kalbos nuostata"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Regiono nuostata"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Įveskite kalbos pav."</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Siūloma"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Visos kalbos"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Paieška"</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 86d6600..9da04df 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -212,15 +212,16 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Kļūdu ziņojums"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Kļūdu ziņojuma sagatavošana"</string>
<string name="bugreport_message" msgid="398447048750350456">"Veicot šo darbību, tiks apkopota informācija par jūsu ierīces pašreizējo stāvokli un nosūtīta e-pasta ziņojuma veidā. Kļūdu ziņojuma pabeigšanai un nosūtīšanai var būt nepieciešams laiks. Lūdzu, esiet pacietīgs."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktīvs pārskats"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Izmantojiet lielākajā daļā gadījumu. Varat izsekot pārskata izveides norisi un ievadīt papildu informāciju par problēmu. Var tikt izlaistas dažas mazāk izmantotas sadaļas, kuru izveidei nepieciešams daudz laika."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Viss pārskats"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="zero">Pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm tiks veikts ekrānuzņēmums kļūdas pārskatam.</item>
+ <item quantity="one">Pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundes tiks veikts ekrānuzņēmums kļūdas pārskatam.</item>
+ <item quantity="other">Pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm tiks veikts ekrānuzņēmums kļūdas pārskatam.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Klusuma režīms"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Skaņa ir IZSLĒGTA."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Skaņa ir IESLĒGTA."</string>
@@ -1056,8 +1057,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Pieskarieties, lai atceltu"</string>
<string name="select_input_method" msgid="8547250819326693584">"Tastatūras maiņa"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Izvēlēties tastatūru"</string>
- <string name="show_ime" msgid="9157568568695230830">"Rādīt ievades metodi"</string>
- <string name="hardware" msgid="7517821086888990278">"Aparatūra"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Paturēt ekrānā, kamēr ir aktīva fiziskā tastatūra"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtuālās tastatūras rādīšana"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Atlasiet tastatūras izkārtojumu"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Pieskarieties, lai atlasītu tastatūras izkārtojumu."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ"</string>
@@ -1549,4 +1550,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mēģina pievienot jaunu lietotāju, taču ir sasniegts lietotāju skaita ierobežojums."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mēģina pievienot jaunu lietotāju, taču šajā ierīcē jau ir izveidots konts "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vai turpināt?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" mēģina pievienot jaunu lietotāju kontam "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vai turpināt?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Valodas preference"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Reģiona preference"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Ierakstiet valodas nosaukumu"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Ieteiktās"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Visas valodas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Meklēt"</string>
</resources>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index 6acdb45..14fe940 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Извештај за грешка"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Земи извештај за грешки"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ова ќе собира информации за моменталната состојба на вашиот уред, за да ги испрати како порака по е-пошта. Тоа ќе одземе малку време почнувајќи од извештајот за грешки додека не се подготви за праќање; бидете трпеливи."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактивен извештај"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Користете го ова во повеќето ситуации. Ви дозволува да го следите напредокот на извештајот и да внесете повеќе детали во врска со проблемот. Може да испушти некои помалку користени делови за коишто е потребно долго време за да се пријават."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Целосен извештај"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Ќе се направи слика од екранот за извештајот за грешки за <xliff:g id="NUMBER_1">%d</xliff:g> секунда.</item>
+ <item quantity="other">Ќе се направи слика од екранот за извештајот за грешки за <xliff:g id="NUMBER_1">%d</xliff:g> секунди.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Тивок режим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Звукот е исклучен"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Звукот е вклучен"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Допрете за да откажете"</string>
<string name="select_input_method" msgid="8547250819326693584">"Измени тастатура"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Избери тастатури"</string>
- <string name="show_ime" msgid="9157568568695230830">"Прикажи влезен метод"</string>
- <string name="hardware" msgid="7517821086888990278">"Хардвер"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Прикажувај го на екранот додека е активна физичката тастатура"</string>
+ <string name="hardware" msgid="194658061510127999">"Прикажи виртуелна тастатура"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Избери изглед на тастатура"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Допри за да избереш изглед на тастатура."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1533,4 +1533,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" се обидува да додаде нов корисник, но ограничувањето за корисници е достигнато."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" се обидува да додаде нов корисник, но сметката "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" веќе постои на уредот. Сепак продолжете?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" се обидува да додаде нов корисник за сметката "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Продолжете?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Претпочитувања за јазик"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Претпочитувања за регион"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Внеси име на јазик"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Предложени"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Сите јазици"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Пребарај"</string>
</resources>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 58fc6e1..ce3c32f 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ബഗ് റിപ്പോർട്ട്"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ബഗ് റിപ്പോർട്ട് എടുക്കുക"</string>
<string name="bugreport_message" msgid="398447048750350456">"ഒരു ഇമെയിൽ സന്ദേശമായി അയയ്ക്കുന്നതിന്, ഇത് നിങ്ങളുടെ നിലവിലെ ഉപകരണ നിലയെക്കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കും. ബഗ് റിപ്പോർട്ട് ആരംഭിക്കുന്നതിൽ നിന്ന് ഇത് അയയ്ക്കാനായി തയ്യാറാകുന്നതുവരെ അൽപ്പസമയമെടുക്കും; ക്ഷമയോടെ കാത്തിരിക്കുക."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ഇന്റരാക്റ്റീവ് റിപ്പോർട്ട്"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"മിക്ക സാഹചര്യങ്ങളിലും ഇത് ഉപയോഗിക്കുക. റിപ്പോർട്ടിന്റെ പുരോഗതി കാണാനും പ്രശ്നത്തിന്റെ കൂടുതൽ വിശദാംശങ്ങളിലേക്ക് പ്രവേശിക്കാനും ഇത് അനുവദിക്കുന്നു. റിപ്പോർട്ടുചെയ്യാൻ നീണ്ട സമയം എടുക്കുന്ന, നിങ്ങൾ കുറവായി ഉപയോഗിക്കുന്ന ചില വിഭാഗങ്ങളെ ഇത് വിട്ടുകളഞ്ഞേക്കാം."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"പൂർണ്ണ റിപ്പോർട്ട്"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">ബഗ് റിപ്പോർട്ടിനായി <xliff:g id="NUMBER_1">%d</xliff:g> സെക്കൻഡിൽ സ്ക്രീൻഷോട്ട് എടുക്കുന്നു.</item>
+ <item quantity="one">ബഗ് റിപ്പോർട്ടിനായി <xliff:g id="NUMBER_0">%d</xliff:g> സെക്കൻഡിൽ സ്ക്രീൻഷോട്ട് എടുക്കുന്നു.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"നിശബ്ദ മോഡ്"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ശബ്ദം ഓഫാണ്"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ശബ്ദം ഓണാണ്"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"റദ്ദാക്കുന്നതിന് സ്പർശിക്കുക"</string>
<string name="select_input_method" msgid="8547250819326693584">"കീബോഡ് മാറ്റുക"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"കീബോർഡുകൾ തിരഞ്ഞെടുക്കുക"</string>
- <string name="show_ime" msgid="9157568568695230830">"ടൈപ്പുചെയ്യൽ രീതി കാണിക്കുക"</string>
- <string name="hardware" msgid="7517821086888990278">"ഹാർഡ്വെയർ"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ഭൗതിക കീബോർഡ് സജീവമായിരിക്കുമ്പോൾ സ്ക്രീനിൽ നിലനിർത്തുക"</string>
+ <string name="hardware" msgid="194658061510127999">"വെർച്വൽ കീബോർഡ് കാണിക്കുക"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"കീബോർഡ് ലേഔട്ട് തിരഞ്ഞെടുക്കുക"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ഒരു കീബോർഡ് ലേഔട്ട് തിരഞ്ഞെടുക്കാൻ സ്പർശിക്കുക."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"പുതിയൊരു ഉപയോക്താവിനെ ചേർക്കാൻ "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ശ്രമിക്കുന്നു, എന്നാൽ ഉപയോക്തൃ പരിധി എത്തിക്കഴിഞ്ഞിരിക്കുന്നു."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"പുതിയൊരു ഉപയോക്താവിനെ ചേർക്കാൻ "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ശ്രമിക്കുന്നു, എന്നാൽ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" എന്ന അക്കൗണ്ട് ഇതിനകം തന്നെ ഈ ഉപകരണത്തിൽ നിലവിലുണ്ട്. എന്തായാലും തുടരണോ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" എന്ന അക്കൗണ്ടിനായി പുതിയൊരു ഉപയോക്താവിനെ ചേർക്കാൻ "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ശ്രമിക്കുന്നു. തുടരണോ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ഭാഷാ മുൻഗണന"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"മേഖലാ മുൻഗണന"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ഭാഷയുടെ പേര് ടൈപ്പുചെയ്യുക"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"നിര്ദ്ദേശിച്ചത്"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"എല്ലാ ഭാഷകളും"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"തിരയുക"</string>
</resources>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index b59863b..08233f8 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Алдаа мэдээллэх"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Согог репорт авах"</string>
<string name="bugreport_message" msgid="398447048750350456">"Энэ таны төхөөрөмжийн одоогийн статусын талаарх мэдээллийг цуглуулах ба имэйл мессеж болгон илгээнэ. Алдааны мэдэгдлээс эхэлж илгээхэд бэлэн болоход хэсэг хугацаа зарцуулагдана тэвчээртэй байна уу."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактив тайлан"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Ихэнх тохиолдолд үүнийг хэрэглэнэ үү. Энэ нь танд тайлангийн явцыг хянах болон асуудлын талаар дэлгэрэнгүйг мэдэх боломж олгоно. Таны бага ашигладаг, тайлагнахад хугацаа их шаарддаг зарим хэсгийг алгана."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Бүрэн тайлан"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Алдааны тайлангийн дэлгэцийн зургийг <xliff:g id="NUMBER_1">%d</xliff:g> секундад авна.</item>
+ <item quantity="one">Алдааны тайлангийн дэлгэцийн зургийг <xliff:g id="NUMBER_0">%d</xliff:g> секундад авна.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Чимээгүй горим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Дуу хаагдсан"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Дуу асав"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Цуцлахын тулд хүрэх"</string>
<string name="select_input_method" msgid="8547250819326693584">"Гарыг өөрчлөх"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Гар сонгох"</string>
- <string name="show_ime" msgid="9157568568695230830">"Оруулах аргыг харуулах"</string>
- <string name="hardware" msgid="7517821086888990278">"Хардвер"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Бодит гар идэвхтэй үед үүнийг дэлгэцэнд харуулна уу"</string>
+ <string name="hardware" msgid="194658061510127999">"Хийсвэр гарыг харуулах"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Гарын схемийг сонгох"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Гарын схемийг сонгох бол хүрнэ үү."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1527,6 +1527,12 @@
<string name="importance_from_person" msgid="9160133597262938296">"Оролцсон хүмүүсээс шалтгаалан энэ нь өндөр ач холбогдолтой."</string>
<string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" шинэ хэрэглэгч нэмэхээр оролдож байгаа боловч одоогоор боломжгүй байна."</string>
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" шинэ хэрэглэгч нэмэхээр оролдож байгаа ч хэрэглэгчийн тооны хязгаарт хүрсэн байна."</string>
- <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" шинэ хэрэглэгч нэмэх гэсэн боловч "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" бүртгэл нь энэ төхөөрөмжид аль хэдийн байна. Гэсэн хэдий ч үргэлжлүүлэх үү?"</string>
+ <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" шинэ хэрэглэгч нэмэх гэсэн боловч "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" бүртгэл нь энэ төхөөрөмжид аль хэдийн бүртгэгдсэн байна. Үргэлжлүүлэх үү?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" нь "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" бүртгэлд шинэ хэрэглэгч нэмэх гэж байна. Үргэлжлүүлэх үү?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Хэлний тохиргоо"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Бүс нутгийн тохиргоо"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Улсын хэлийг бичнэ үү"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Санал болгосон"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Бүх хэл"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Хайх"</string>
</resources>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index bf52c38..30edff7 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"दोष अहवाल"</string>
<string name="bugreport_title" msgid="2667494803742548533">"दोष अहवाल घ्या"</string>
<string name="bugreport_message" msgid="398447048750350456">"ई-मेल संदेश म्हणून पाठविण्यासाठी, हे आपल्या वर्तमान डिव्हाइस स्थितीविषयी माहिती संकलित करेल. दोष अहवाल प्रारंभ करण्यापासून तो पाठविण्यापर्यंत थोडा वेळ लागेल; कृपया धीर धरा."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"परस्परसंवादी अहवाल"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"बहुतांश प्रसंगांमध्ये याचा वापर करा. ते आपल्याला अहवालाच्या प्रगतीचा मागोवा घेण्याची आणि समस्येविषयी अधिक तपशील प्रविष्ट करण्याची अनुमती देतात. ते अहवाल देण्यासाठी बराच वेळ घेणार्या कमी वापरलेल्या विभागांना कदाचित वगळेल."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"संपूर्ण अहवाल"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">दोष अहवालासाठी <xliff:g id="NUMBER_1">%d</xliff:g> सेकंदामध्ये स्क्रीनशॉट घेत आहे.</item>
+ <item quantity="other">दोष अहवालासाठी <xliff:g id="NUMBER_1">%d</xliff:g> सेकंदांमध्ये स्क्रीनशॉट घेत आहे.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मूक मोड"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ध्वनी बंद आहे"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनी चालू आहे"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"रद्द करण्यासाठी स्पर्श करा"</string>
<string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदला"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"कीबोर्ड निवडा"</string>
- <string name="show_ime" msgid="9157568568695230830">"इनपुट पद्धत दर्शवा"</string>
- <string name="hardware" msgid="7517821086888990278">"हार्डवेअर"</string>
+ <string name="show_ime" msgid="2506087537466597099">"भौतिक कीबोर्ड सक्रिय असताना त्यास स्क्रीनवर ठेवा"</string>
+ <string name="hardware" msgid="194658061510127999">"व्हर्च्युअल कीबोर्ड दर्शवा"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"कीबोर्ड लेआउट निवडा"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"कीबोर्ड लेआउट निवडण्यासाठी स्पर्श करा."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" नवीन वापरकर्ता जोडण्यासाठी प्रयत्न करीत आहे परंतु वापरकर्ता मर्यादा गाठली गेली आहे."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" नवीन वापरकर्ता जोडण्याचा प्रयत्न करीत आहे परंतु या डिव्हाइसवर "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" खाते आधीपासून अस्तित्वात आहे. तरीही पुढे सुरु ठेवायचे?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" खात्यासाठी "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" नवीन वापरकर्ता जोडण्याचा प्रयत्न करीत आहे. पुढे सुरु ठेवायचे?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"भाषा प्राधान्य"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"प्रदेश प्राधान्य"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"भाषा नाव टाइप करा"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"सूचित केलेले"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"सर्व भाषा"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"शोध"</string>
</resources>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index eaa3dcf..3f1bb14 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Laporan pepijat"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Ambil laporan pepijat"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ini akan mengumpul maklumat tentang keadaan peranti semasa anda untuk dihantarkan sebagai mesej e-mel. Harap bersabar, mungkin perlu sedikit masa untuk memulakan laporan sehingga siap untuk dihantar."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Laporan interaktif"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Gunakan laporan ini dalam kebanyakan keadaan. Anda boleh menjejak kemajuan dan memasukkan butiran lanjut tentang masalah tersebut. Laporan ini mungkin meninggalkan beberapa bahagian yang kurang digunakan, yang mengambil masa lama untuk dilaporkan."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Laporan penuh"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Mengambil tangkapan skrin untuk laporan pepijat dalam masa <xliff:g id="NUMBER_1">%d</xliff:g> saat.</item>
+ <item quantity="one">Mengambil tangkapan skrin untuk laporan pepijat dalam masa <xliff:g id="NUMBER_0">%d</xliff:g> saat.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mod senyap"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Bunyi DIMATIKAN"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Bunyi DIHIDUPKAN"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Sentuh untuk membatalkan"</string>
<string name="select_input_method" msgid="8547250819326693584">"Tukar papan kekunci"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Pilih papan kekunci"</string>
- <string name="show_ime" msgid="9157568568695230830">"Tunjukkan kaedah input"</string>
- <string name="hardware" msgid="7517821086888990278">"Perkakasan"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Pastikannya pada skrin, semasa papan kekunci fizikal aktif"</string>
+ <string name="hardware" msgid="194658061510127999">"Tunjukkan papan kekunci maya"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pilih susun atur papan kekunci"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Sentuh untuk memilih susun atur papan kekunci."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1529,6 +1529,12 @@
<string name="importance_from_person" msgid="9160133597262938296">"Mesej ini penting disebabkan orang yang terlibat."</string>
<string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" cuba menambahkan pengguna baharu tetapi dilarang pada masa ini."</string>
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" cuba menambahkan pengguna baharu tetapi had pengguna telah dicapai."</string>
- <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" cuba menambahkan pengguna baharu tetapi akaun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" telah wujud pada peranti ini. Teruskan juga?"</string>
+ <string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" cuba menambahkan pengguna baharu tetapi akaun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" sudah wujud pada peranti ini. Teruskan juga?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" cuba menambahkan pengguna baharu untuk akaun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Teruskan?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Pilihan bahasa"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Pilihan wilayah"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Taipkan nama bahasa"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Dicadangkan"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Semua bahasa"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Cari"</string>
</resources>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index c9807314..17c1eda 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"အမှားရှာဖွေပြင်ဆင်မှုမှတ်တမ်း"</string>
<string name="bugreport_title" msgid="2667494803742548533">"အမှားရှာဖွေပြင်ဆင်မှုမှတ်တမ်းအား ယူရန်"</string>
<string name="bugreport_message" msgid="398447048750350456">"သင့်ရဲ့ လက်ရှိ စက်အခြေအနေ အချက်အလက်များကို အီးမေးလ် အနေဖြင့် ပေးပို့ရန် စုဆောင်းပါမည်။ အမှားရှာဖွေပြင်ဆင်မှုမှတ်တမ်းမှ ပေးပို့ရန် အသင့်ဖြစ်သည်အထိ အချိန် အနည်းငယ်ကြာမြင့်မှာ ဖြစ်သဖြင့် သည်းခံပြီး စောင့်ပါရန်"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"လက်ငင်းတုံ့ပြန်နိုင်သည့် အစီရင်ခံချက်"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"အများအားဖြင့် ၎င်းကိုအသုံးပြုပါ။ ၎င်းသည် အစီရင်ခံချက်ကို ခြေရာခံခွင့်ပေးပြီး ပြဿနာအကြောင်း အသေးစိတ်များကို ထည့်ခွင့်ပြုပါသည်။ အစီရင်ခံရန်ကြာသည့် သိပ်မသုံးသော ကဏ္ဍများကို ချန်ထားခဲ့နိုင်ပါသည်။"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"အစီရင်ခံချက်အပြည့်"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> စက္ကန့်အတွင်း ချွတ်ယွင်းချက် အစီရင်ခံရန်အတွက် မျက်နှာပြင်ဓာတ်ပုံ ရိုက်ပါမည်။</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> စက္ကန့်အတွင်း ချွတ်ယွင်းချက် အစီရင်ခံရန်အတွက် မျက်နှာပြင်ဓာတ်ပုံ ရိုက်ပါမည်။</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"အသံတိတ်စနစ်"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"အသံပိတ်ထားသည်"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"အသံဖွင့်ထားသည်"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ဖျက်သိမ်းရန် တို့ပါ"</string>
<string name="select_input_method" msgid="8547250819326693584">"ကီးဘုတ် ပြောင်းလဲရန်"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ကီးဘုတ်များကို ရွေးရန်"</string>
- <string name="show_ime" msgid="9157568568695230830">"ရိုက်သွင်းမှု နည်းလမ်းကို ပြရန်"</string>
- <string name="hardware" msgid="7517821086888990278">"ဟာ့ဒ်ဝဲ"</string>
+ <string name="show_ime" msgid="2506087537466597099">"စက်၏ကီးဘုတ်ကိုအသုံးပြုနေစဉ် ၎င်းကိုမျက်နှာပြင်ပေါ်တွင် ထားပါ"</string>
+ <string name="hardware" msgid="194658061510127999">"ကီးဘုတ်အတုပြရန်"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"လက်ကွက် အပြင်အဆင်ရွေးရန်"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"လက်ကွက် အပြင်အဆင်ရွေးရန် တို့ထိပါ"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"က အသုံးပြုသူ အသစ်ကို ထည့်ရန် ကြိုးစားနေပါသည်၊ သို့သော် အသုံးပြုသူ ကန့်သတ်ချက် ပြည့်မီသွားပါပြီ။"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"က အသုံးပြုသူ အသစ်ကို ထည့်ရန် ကြိုးစားနေပါသည်၊ သို့သော် အကောင့် "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"မှာ ဤကိရိယာထဲတွင် ရှိနှင့်နေပါပြီ။ မည်သို့ပင်ဖြစ်စေ ဆက်လက်လုပ်ဆောင်ရမလား။"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"က အကောင့် "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"အတွက် အသုံးပြုသူ အသစ်ကို ထည့်ရန် ကြိုးစားနေပါသည်။ ဆက်လက်လုပ်ဆောင်ရမလား။"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ဘာသာစကားရွေးချယ်မှု"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ဒေသရွေးချယ်မှု"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ဘာသာစကားအမည် ထည့်ပါ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"အကြံပြုထားသော"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ဘာသာစကားများအားလုံး"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ရှာဖွေရန်"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 9efa863..2385ad7 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Feilrapport"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Utfør feilrapport"</string>
<string name="bugreport_message" msgid="398447048750350456">"Informasjon om tilstanden til enheten din samles inn og sendes som en e-post. Det tar litt tid fra du starter feilrapporten til e-posten er klar, så vær tålmodig."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv rapport"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Bruk dette alternativet i de fleste tilfeller. Da kan du spore fremgangen for rapporten samt skrive inn flere detaljer om problemet. Noen deler som tar lang tid å behandle, blir kanskje utelatt."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Fullstendig rapport"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Tar skjermdump for feilrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder.</item>
+ <item quantity="one">Tar skjermdump for feilrapporten om <xliff:g id="NUMBER_0">%d</xliff:g> sekund.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stillemodus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Lyden er av"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Lyden er på"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Trykk for å avbryte"</string>
<string name="select_input_method" msgid="8547250819326693584">"Endre tastatur"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Velg tastatur"</string>
- <string name="show_ime" msgid="9157568568695230830">"Vis inndatametode"</string>
- <string name="hardware" msgid="7517821086888990278">"Maskinvare"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Ha den på skjermen mens det fysiske tastaturet er aktivt"</string>
+ <string name="hardware" msgid="194658061510127999">"Vis det virtuelle tastaturet"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Velg tastaturoppsett"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Trykk for å velge et tastaturoppsett"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" prøver å legge til en ny bruker, men brukergrensen er nådd."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" prøver å legge til en ny bruker, men kontoen "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" finnes allerede på denne enheten. Vil du fortsette likevel?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" prøver å legge til en ny bruker på kontoen "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vil du fortsette?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Språkinnstilling"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Regionsinnstilling"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Skriv inn språknavn"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Foreslått"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alle språk"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Søk"</string>
</resources>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index f7b96d9..3e0cb29 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -146,7 +146,7 @@
<string name="httpErrorLookup" msgid="4711687456111963163">"URL भेटाउन सकेन।"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"साइटको आधिकारिकता योजना समर्थित छैन।"</string>
<string name="httpErrorAuth" msgid="1435065629438044534">"प्रमाणीकरण गर्न सकेन।"</string>
- <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रोक्सी सर्भरको माध्यमद्वारा प्रमाणिकरण असफल भएको छ।"</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रोक्सी सर्भरको माध्यमद्वारा प्रमाणीकरण असफल भएको छ।"</string>
<string name="httpErrorConnect" msgid="8714273236364640549">"सर्भरसँग जोड्न सकेन।"</string>
<string name="httpErrorIO" msgid="2340558197489302188">"सर्भरसँग संचार गर्न सकेन। फेरि पछि कोसिस गर्नुहोस्।"</string>
<string name="httpErrorTimeout" msgid="4743403703762883954">"सर्भर संगको सम्पर्क प्रक्रिया समय सकियो।"</string>
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"बग रिपोर्ट"</string>
<string name="bugreport_title" msgid="2667494803742548533">"बग रिपोर्ट लिनुहोस्"</string>
<string name="bugreport_message" msgid="398447048750350456">"एउटा इमेल सन्देशको रूपमा पठाउनलाई यसले तपाईँको हालैको उपकरणको अवस्थाको बारेमा सूचना जम्मा गर्ने छ। बग रिपोर्ट सुरु गरेदेखि पठाउन तयार नभएसम्म यसले केही समय लिन्छ; कृपया धैर्य गर्नुहोस्।"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"पारस्परिक रिपोर्ट"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"यसलाई धेरै परिस्थिति भन्दा मुनि प्रयोग गर्नुहोस्। यसले तपाईंलाई रिपोर्टको प्रगति ट्र्याक गर्न र समस्या सम्बन्धी थप विवरणहरू प्रविष्ट गर्न अनुमति दिन्छ। यसले रिपोर्ट गर्न धेरै नै समय लिने केही कम प्रयोग भएका खण्डहरू मेटाउन सक्छ।"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"पूर्ण रिपोर्ट"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"> बग रिपोर्टको लागि <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा स्क्रिनशट लिँदै।</item>
+ <item quantity="one"> बग रिपोर्टको लागि <xliff:g id="NUMBER_0">%d</xliff:g> सेकेन्डमा स्क्रिनशट लिँदै।</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मौन मोड"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"आवाज बन्द छ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि खुल्ला छ"</string>
@@ -1047,7 +1047,7 @@
<string name="usb_notification_message" msgid="7347368030849048437">"थप विकल्पहरूका लागि छुनुहोस्।"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string>
<string name="adb_active_notification_message" msgid="1016654627626476142">"USB डिबग गर्ने असक्षम पार्न छुनुहोस्।"</string>
- <string name="share_remote_bugreport_notification_title" msgid="3116061729914615290">"व्यवस्थापकसँग बग रिपोर्ट साझेदारी गर्ने हो?"</string>
+ <string name="share_remote_bugreport_notification_title" msgid="3116061729914615290">"प्रशासकसँग बग रिपोर्ट साझेदारी गर्ने हो?"</string>
<string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"तपाईंको IT व्यवस्थापकले समस्या निवारणमा मद्दत गर्न बग रिपोर्ट अनुरोध गर्नुभयो"</string>
<string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"स्वीकार गर्नुहोस्"</string>
<string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"अस्वीकार गर्नुहोस्"</string>
@@ -1055,8 +1055,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"रद्द गर्न छुनुहोस्"</string>
<string name="select_input_method" msgid="8547250819326693584">"कुञ्जीपाटी परिवर्तन गर्नुहोस्"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"कीबोर्ड छान्नुहोस्"</string>
- <string name="show_ime" msgid="9157568568695230830">"आगत विधि देखाउनुहोस्"</string>
- <string name="hardware" msgid="7517821086888990278">"हार्डवेयर"</string>
+ <string name="show_ime" msgid="2506087537466597099">"भौतिक किबोर्ड सक्रिय हुँदा यसलाई स्क्रिनमा राख्नुहोस्"</string>
+ <string name="hardware" msgid="194658061510127999">"भर्चुअल किबोर्ड देखाउनुहोस्"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"किबोर्ड रूपरेखा चयन गर्नुहोस्"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"किबोर्ड रूपरेखा चयन गर्न टच गर्नुहोस्।"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1533,8 +1533,14 @@
<string name="default_notification_topic_label" msgid="227586145791870829">"विविध"</string>
<string name="importance_from_topic" msgid="3572280439880023233">"तपाईंले यी सूचनाहरूको महत्त्व सेट गर्नुहुन्छ।"</string>
<string name="importance_from_person" msgid="9160133597262938296">"यसमा सङ्लग्न भएका मानिसहरूको कारणले गर्दा यो महत्वपूर्ण छ।"</string>
- <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ले नयाँ प्रयोगकर्ता थप्ने प्रयास गरिरहेको छ तर हाललाई निषेध छ।"</string>
+ <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ले नयाँ प्रयोगकर्ता थप्ने प्रयास गरिरहेको छ तर हाललाई निषेधित छ।"</string>
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ले नयाँ प्रयोगकर्ता थप्ने प्रयास गरिरहेको छ तर प्रयोगकर्ताको सीमा पुगेको छ।"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ले नयाँ प्रयोगकर्ता थप्ने प्रयास गरिरहेको छ तर यो यन्त्रमा खाता "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" पहिले नै अवस्थित छ। जे भए पनि अगाडि बढ्ने हो?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ले खाता "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" मा नयाँ प्रयोगकर्ता थप्ने प्रयास गरिरहेको छ। अगाडि बढ्ने हो?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"भाषाको प्राथमिकता"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"क्षेत्रको प्राथमिकता"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"भाषाको नाम टाइप गर्नुहोस्"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"सुझाव दिइयो"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"सम्पूर्ण भाषाहरू"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"खोज"</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index cd70afa..d0a333b 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Foutenrapport"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Foutenrapport genereren"</string>
<string name="bugreport_message" msgid="398447048750350456">"Hiermee worden gegevens over de huidige status van je apparaat verzameld en als e-mail verzonden. Wanneer u een foutenrapport start, duurt het even voordat het kan worden verzonden. Even geduld alstublieft."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactief rapport"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Gebruik deze optie in de meeste situaties. Hiermee kun je de voortgang van het rapport bijhouden en meer gegevens over het probleem opgeven. Mogelijk worden bepaalde minder vaak gebruikte gedeelten weggelaten (waarvoor het lang zou duren om een rapport te genereren)."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Volledig rapport"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Er wordt over <xliff:g id="NUMBER_1">%d</xliff:g> seconden een screenshot gemaakt voor het bugrapport.</item>
+ <item quantity="one">Er wordt over <xliff:g id="NUMBER_0">%d</xliff:g> seconde een screenshot gemaakt voor het bugrapport.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stille modus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Geluid is UIT"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Geluid is AAN"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Tik om te annuleren"</string>
<string name="select_input_method" msgid="8547250819326693584">"Toetsenbord wijzigen"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Toetsenborden kiezen"</string>
- <string name="show_ime" msgid="9157568568695230830">"Invoermethode weergeven"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Dit op het scherm weergeven terwijl het fysieke toetsenbord actief is"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtueel toetsenbord tonen"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Toetsenbordindeling selecteren"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tik om een toetsenbordindeling te selecteren."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeert een nieuwe gebruiker toe te voegen, maar de gebruikerslimiet is al bereikt."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeert een nieuwe gebruiker toe te voegen, maar het account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" bestaat al op dit apparaat. Toch doorgaan?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" probeert een nieuwe gebruiker toe te voegen voor het account "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Doorgaan?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Taalvoorkeur"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Regiovoorkeur"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Typ een taalnaam"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Voorgesteld"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alle talen"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Zoeken"</string>
</resources>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index 7c9f1b4..7e762b00 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"ਬਗ ਰਿਪੋਰਟ"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ਬਗ ਰਿਪੋਰਟ ਲਓ"</string>
<string name="bugreport_message" msgid="398447048750350456">"ਇਹ ਇੱਕ ਈ-ਮੇਲ ਸੁਨੇਹਾ ਭੇਜਣ ਲਈ, ਤੁਹਾਡੀ ਵਰਤਮਾਨ ਡਿਵਾਈਸ ਬਾਰੇ ਜਾਣਕਾਰੀ ਇਕੱਤਰ ਕਰੇਗਾ। ਬਗ ਰਿਪੋਰਟ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਥੋੜ੍ਹਾ ਸਮਾਂ ਲੱਗੇਗਾ ਜਦੋਂ ਤੱਕ ਇਹ ਭੇਜੇ ਜਾਣ ਲਈ ਤਿਆਰ ਨਾ ਹੋਵੇ, ਕਿਰਪਾ ਕਰਕੇ ਧੀਰਜ ਰੱਖੋ।"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ਅੰਤਰਕਿਰਿਆਤਮਕ ਰਿਪੋਰਟ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ਜ਼ਿਆਦਾਤਰ ਹਾਲਾਤਾਂ ਵਿੱਚ ਇਸ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਤੁਹਾਨੂੰ ਰਿਪੋਰਟ ਦੀ ਪ੍ਰਗਤੀ ਨੂੰ ਟਰੈਕ ਕਰਨ ਦਿੰਦਾ ਹੈ ਅਤੇ ਸਮੱਸਿਆ ਬਾਰੇ ਹੋਰ ਵੇਰਵੇ ਦਾਖਲ ਕਰਨ ਦਿੰਦਾ ਹੈ। ਇਹ ਉਹਨਾਂ ਘੱਟ-ਵਰਤੇ ਗਏ ਕੁਝ ਭਾਗਾਂ ਨੂੰ ਨਜ਼ਰ-ਅੰਦਾਜ਼ ਕਰ ਸਕਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਦੀ ਰਿਪੋਰਟ ਕਰਨ ਵਿੱਚ ਵੱਧ ਸਮਾਂ ਲੱਗ ਸਕਦਾ ਹੈ।"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"ਪੂਰੀ ਰਿਪੋਰਟ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">ਬੱਗ ਰਿਪੋਰਟ ਲਈ <xliff:g id="NUMBER_1">%d</xliff:g> ਸਕਿੰਟ ਵਿੱਚ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲਿਆ ਜਾ ਰਿਹਾ ਹੈ।</item>
+ <item quantity="other">ਬੱਗ ਰਿਪੋਰਟ ਲਈ <xliff:g id="NUMBER_1">%d</xliff:g> ਸਕਿੰਟ ਵਿੱਚ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲਿਆ ਜਾ ਰਿਹਾ ਹੈ।</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"ਸਾਈਲੈਂਟ ਮੋਡ"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ਅਵਾਜ਼ ਬੰਦ ਹੈ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ਅਵਾਜ਼ ਚਾਲੂ ਹੈ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ਰੱਦ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="select_input_method" msgid="8547250819326693584">"ਕੀਬੋਰਡ ਬਦਲੋ"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"ਕੀਬੋਰਡਸ ਚੁਣੋ"</string>
- <string name="show_ime" msgid="9157568568695230830">"ਇਨਪੁਟ ਵਿਧੀ ਦਿਖਾਓ"</string>
- <string name="hardware" msgid="7517821086888990278">"ਹਾਰਡਵੇਅਰ"</string>
+ <string name="show_ime" msgid="2506087537466597099">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਸਰਗਰਮ ਹੋਣ ਦੌਰਾਨ ਇਸ ਨੂੰ ਸਕ੍ਰੀਨ \'ਤੇ ਬਣਾਈ ਰੱਖੋ"</string>
+ <string name="hardware" msgid="194658061510127999">"ਵਰਚੁਅਲ ਕੀ-ਬੋਰਡ ਵਿਖਾਓ"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"ਕੀਬੋਰਡ ਲੇਆਊਟ ਚੁਣੋ"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ਇੱਕ ਕੀਬੋਰਡ ਲੇਆਊਟ ਚੁਣਨ ਲਈ ਛੋਹਵੋ।"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ਇੱਕ ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ, ਪਰ ਵਰਤੋਂਕਾਰ ਮਿਆਦ ਪੂਰੀ ਹੋ ਚੁੱਕੀ ਹੈ।"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ਇੱਕ ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ, ਪਰ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ਖਾਤਾ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਕੀ ਫਿਰ ਵੀ ਅੱਗੇ ਵੱਧਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ਖਾਤੇ ਵਿੱਚ ਇੱਕ ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ। ਕੀ ਅੱਗੇ ਵੱਧਣਾ ਹੈ?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ਭਾਸ਼ਾ ਤਰਜੀਹ"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ਖੇਤਰ ਤਰਜੀਹ"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"ਭਾਸ਼ਾ ਨਾਮ ਟਾਈਪ ਕਰੋ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"ਸੁਝਾਈਆਂ ਗਈਆਂ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ਸਾਰੀਆਂ ਭਾਸ਼ਾਵਾਂ"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ਖੋਜ"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 1e5bc5f..8f475d5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Zgłoszenie błędu"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Zgłoś błąd"</string>
<string name="bugreport_message" msgid="398447048750350456">"Informacje o bieżącym stanie urządzenia zostaną zebrane i wysłane e-mailem. Przygotowanie zgłoszenia błędu do wysłania chwilę potrwa, więc zachowaj cierpliwość."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Raport interaktywny"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Używaj tej opcji w większości przypadków. Umożliwia śledzenie postępów raportu i podanie dodatkowych szczegółów problemu. Raport może pomijać niektóre rzadko używane sekcje, których utworzenie zajmuje dużo czasu."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Pełny raport"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="few">Zrzut ekranu do raportu o błędzie zostanie zrobiony za <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="many">Zrzut ekranu do raportu o błędzie zostanie zrobiony za <xliff:g id="NUMBER_1">%d</xliff:g> sekund.</item>
+ <item quantity="other">Zrzut ekranu do raportu o błędzie zostanie zrobiony za <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="one">Zrzut ekranu do raportu o błędzie zostanie zrobiony za <xliff:g id="NUMBER_0">%d</xliff:g> sekundę.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tryb cichy"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Dźwięk jest wyłączony"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Dźwięk jest włączony"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Kliknij, by anulować"</string>
<string name="select_input_method" msgid="8547250819326693584">"Zmień klawiaturę"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Wybierz klawiatury"</string>
- <string name="show_ime" msgid="9157568568695230830">"Pokaż metodę wprowadzania"</string>
- <string name="hardware" msgid="7517821086888990278">"Sprzęt"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Pozostaw na ekranie, gdy aktywna jest klawiatura fizyczna"</string>
+ <string name="hardware" msgid="194658061510127999">"Pokaż klawiaturę wirtualną"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Wybierz układ klawiatury"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Kliknij, by wybrać układ klawiatury."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Aplikacja "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" próbuje dodać nowego użytkownika, ale osiągnięto już limit użytkowników."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Aplikacja "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" próbuje dodać nowego użytkownika, ale na tym urządzeniu istnieje już konto "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Kontynuować mimo to?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Aplikacja "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" próbuje dodać nowego użytkownika do konta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Kontynuować?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Ustawienie języka"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Ustawienie regionu"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Wpisz nazwę języka"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugerowane"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Wszystkie języki"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Szukaj"</string>
</resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 1d0d9e5..60d4860 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Relatório de bugs"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Obter relatório de bugs"</string>
<string name="bugreport_message" msgid="398447048750350456">"Isto coletará informações sobre o estado atual do dispositivo para enviá-las em uma mensagem de e-mail. Após iniciar o relatório de bugs, será necessário aguardar algum tempo até que esteja pronto para ser enviado."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Relatório interativo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Use este recurso na maioria das circunstâncias. Ele permite que você acompanhe o progresso do relatório e informe mais detalhes sobre o problema. É possível que ele omita algumas seções menos utilizadas que levam muito tempo na emissão dos relatórios."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Relatório completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Capturas de tela para o relatório do bug serão feitas em <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="other">Capturas de tela para o relatório do bug serão feitas em <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Som DESATIVADO"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O som está ATIVADO"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toque para cancelar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Escolher teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostrar método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Manter na tela enquanto o teclado físico estiver ativo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecione o layout de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toque para selecionar um layout de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário, mas o limite de usuários foi atingido."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário, mas a conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" já existe neste dispositivo. Continuar mesmo assim?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário à conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferência de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferência de região"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Digitar nome do idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Pesquisa"</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 453179a..e58e693 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Relatório de erros"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Criar relatório de erros"</string>
<string name="bugreport_message" msgid="398447048750350456">"Será recolhida informação sobre o estado atual do seu dispositivo a enviar através de uma mensagem de email. Demorará algum tempo até que o relatório de erro esteja pronto para ser enviado. Aguarde um pouco."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Relatório interativo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Utilize esta opção na maioria das circunstâncias. Permite monitorizar o progresso do relatório e introduzir mais detalhes acerca do problema. Pode omitir algumas secções menos utilizadas que demoram muito tempo a comunicar."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Relatório completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="one">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_0">%d</xliff:g> segundo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Som desativado"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O som está ativado"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toque para cancelar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Escolher teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostrar método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Manter no ecrã enquanto o teclado físico estiver ativo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar o teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecionar esquema de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toque para selecionar um esquema de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1527,8 +1527,14 @@
<string name="default_notification_topic_label" msgid="227586145791870829">"Diversos"</string>
<string name="importance_from_topic" msgid="3572280439880023233">"Definiu a importância destas notificações."</string>
<string name="importance_from_person" msgid="9160133597262938296">"É importante devido às pessoas envolvidas."</string>
- <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está a tentar adicionar um novo utilizador, mas está atualmente proibido."</string>
+ <string name="user_creation_cannot_add" msgid="7740333663230045315"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está a tentar adicionar um novo utilizador, mas está atualmente proibido(a)."</string>
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está a tentar adicionar um novo utilizador, mas foi atingido o limite de utilizadores."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está a tentar adicionar um novo utilizador, mas a conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" já existe neste dispositivo. Pretende continuar mesmo assim?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está a tentar adicionar um novo utilizador à conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Pretende continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferência de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferência de região"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Intr. nome do idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Pesquisa"</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 1d0d9e5..60d4860 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Relatório de bugs"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Obter relatório de bugs"</string>
<string name="bugreport_message" msgid="398447048750350456">"Isto coletará informações sobre o estado atual do dispositivo para enviá-las em uma mensagem de e-mail. Após iniciar o relatório de bugs, será necessário aguardar algum tempo até que esteja pronto para ser enviado."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Relatório interativo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Use este recurso na maioria das circunstâncias. Ele permite que você acompanhe o progresso do relatório e informe mais detalhes sobre o problema. É possível que ele omita algumas seções menos utilizadas que levam muito tempo na emissão dos relatórios."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Relatório completo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Capturas de tela para o relatório do bug serão feitas em <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ <item quantity="other">Capturas de tela para o relatório do bug serão feitas em <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Som DESATIVADO"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O som está ATIVADO"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Toque para cancelar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Escolher teclados"</string>
- <string name="show_ime" msgid="9157568568695230830">"Mostrar método de entrada"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Manter na tela enquanto o teclado físico estiver ativo"</string>
+ <string name="hardware" msgid="194658061510127999">"Mostrar teclado virtual"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecione o layout de teclado"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toque para selecionar um layout de teclado."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário, mas o limite de usuários foi atingido."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário, mas a conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" já existe neste dispositivo. Continuar mesmo assim?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" está tentando adicionar um novo usuário à conta "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuar?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferência de idioma"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferência de região"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Digitar nome do idioma"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugeridos"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Todos os idiomas"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Pesquisa"</string>
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 3602d91..4db1209 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -212,15 +212,16 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Raport despre erori"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Executați un raport despre erori"</string>
<string name="bugreport_message" msgid="398447048750350456">"Acest raport va colecta informații despre starea actuală a dispozitivului, pentru a le trimite într-un e-mail. Aveți răbdare după pornirea raportului despre erori până când va fi gata de trimis."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Raport interactiv"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Folosiți această opțiune în majoritatea situațiilor. Astfel, puteți să urmăriți progresul raportului și să introduceți mai multe detalii în privința problemei. Pot fi omise unele secțiuni mai puțin folosite pentru care raportarea durează prea mult."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Raport complet"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="few">Peste <xliff:g id="NUMBER_1">%d</xliff:g> secunde se va realiza o captură de ecran pentru raportul de eroare.</item>
+ <item quantity="other">Peste <xliff:g id="NUMBER_1">%d</xliff:g> de secunde se va realiza o captură de ecran pentru raportul de eroare.</item>
+ <item quantity="one">Peste <xliff:g id="NUMBER_0">%d</xliff:g> secundă se va realiza o captură de ecran pentru raportul de eroare.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mod Silențios"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sunetul este DEZACTIVAT"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sunetul este ACTIVAT"</string>
@@ -1056,8 +1057,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Atingeți pentru a anula"</string>
<string name="select_input_method" msgid="8547250819326693584">"Schimbați tastatura"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Alegeți tastaturi"</string>
- <string name="show_ime" msgid="9157568568695230830">"Afișați metoda de introducere a textului"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Se păstrează pe ecran cât timp este activată tastatura fizică"</string>
+ <string name="hardware" msgid="194658061510127999">"Afișați tastatura virtuală"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selectați aspectul tastaturii"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Atingeți pentru a selecta un aspect de tastatură."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1549,4 +1550,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" încearcă să adauge un nou utilizator, dar a fost atinsă limita de utilizatori."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" încearcă să adauge un nou utilizator, dar contul "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" există deja pe acest dispozitiv. Continuați oricum?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" încearcă să adauge un nou utilizator pentru contul "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Continuați?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Limba preferată"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Regiunea preferată"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Scrieți nume limbă"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugerate"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Toate limbile"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Căutați"</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 2d69607..1185422 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Отчет об ошибке"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Отчет об ошибке"</string>
<string name="bugreport_message" msgid="398447048750350456">"Информация о текущем состоянии вашего устройства будет собрана и отправлена по электронной почте. Подготовка отчета займет некоторое время."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактивный отчет"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Рекомендуем пользоваться этой функцией, чтобы отслеживать статус отчета и указывать дополнительные данные о проблеме. Показываются только основные разделы (чтобы отправка отчета об ошибке занимала меньше времени)."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Подробный отчет"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Скриншот будет сделан через <xliff:g id="NUMBER_1">%d</xliff:g> секунду</item>
+ <item quantity="few">Скриншот будет сделан через <xliff:g id="NUMBER_1">%d</xliff:g> секунды</item>
+ <item quantity="many">Скриншот будет сделан через <xliff:g id="NUMBER_1">%d</xliff:g> секунд</item>
+ <item quantity="other">Скриншот будет сделан через <xliff:g id="NUMBER_1">%d</xliff:g> секунды</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Режим без звука"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Выключить"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Включить"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Нажмите, чтобы отменить"</string>
<string name="select_input_method" msgid="8547250819326693584">"Выбор раскладки"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Выбрать раскладку"</string>
- <string name="show_ime" msgid="9157568568695230830">"Показать способ ввода"</string>
- <string name="hardware" msgid="7517821086888990278">"Аппаратная"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Показывать на экране, когда физическая клавиатура включена"</string>
+ <string name="hardware" msgid="194658061510127999">"Виртуальная клавиатура"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Выберите раскладку клавиатуры"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Нажмите, чтобы выбрать раскладку клавиатуры."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Приложение "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хочет добавить пользователя, однако лимит уже достигнут."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Приложение "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хочет добавить пользователя, однако аккаунт "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" уже есть на этом устройстве. Продолжить?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Приложение "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хочет добавить пользователя для аккаунта "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Продолжить?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Языковые настройки"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Региональные настройки"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Введите язык"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Рекомендуемые"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Все языки"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Поиск"</string>
</resources>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index fb36adc..2cbf5ad 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"දෝෂ වර්තාව"</string>
<string name="bugreport_title" msgid="2667494803742548533">"දෝෂ වාර්තාවක් ගන්න"</string>
<string name="bugreport_message" msgid="398447048750350456">"ඊ-තැපැල් පණිවිඩයක් ලෙස යැවීමට මෙය ඔබගේ වත්මන් උපාංග තත්වය ගැන තොරතුරු එකතු කරනු ඇත. දෝෂ වාර්තාව ආරම්භ කර එය යැවීමට සූදානම් කරන තෙක් එයට කිසියම් කාලයක් ගතවනු ඇත; කරුණාකර ඉවසන්න."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"අන්තර්ක්රියා වාර්."</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"බොහොමයක් වාතාවරණ යටතේ මෙය භාවිත කරන්න. එය ඔබට වාර්තාවේ ප්රගතිය හඹා යාමට සහ ගැටලුව පිළිබඳ වැඩිපුර විස්තර ඇතුළත් කිරීමට ඉඩ දෙයි. එය වාර්තා කිරීමට දිගු වේලාවක් ගන්නා සමහර අඩුවෙන්-භාවිත වන කොටස් මග හැරීමට හැකිය."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"සම්පූර්ණ වාර්තාව"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">තත්පර <xliff:g id="NUMBER_1">%d</xliff:g>කින් දෝෂ වාර්තාව සඳහා තිර රුවක් ලබා ගනිමින්</item>
+ <item quantity="other">තත්පර <xliff:g id="NUMBER_1">%d</xliff:g>කින් දෝෂ වාර්තාව සඳහා තිර රුවක් ලබා ගනිමින්</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"නිහඬ ආකාරය"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ශබ්දය අක්රියයි"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"හඬ සක්රියයි"</string>
@@ -1051,8 +1051,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"අවලංගු කිරීමට ස්පර්ශ කරන්න"</string>
<string name="select_input_method" msgid="8547250819326693584">"යතුරු පුවරු වෙනස් කිරීම"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"යතුරු පුවරු තෝරන්න"</string>
- <string name="show_ime" msgid="9157568568695230830">"ආදාන ක්රමය පෙන්වන්න"</string>
- <string name="hardware" msgid="7517821086888990278">"දෘඨාංග"</string>
+ <string name="show_ime" msgid="2506087537466597099">"භෞතික යතුරු පුවරුව සක්රිය අතරතුර එය තිරය මත තබා ගන්න"</string>
+ <string name="hardware" msgid="194658061510127999">"අතථ්ය යතුරු පුවරුව පෙන්වන්න"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"යතුරු පුවරුවට පිරිසැලැස්ම තෝරන්න"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"යතුරු පුවරුවට පිරිසැලැස්මක් තේරීමට ස්පර්ශ කරන්න."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1533,4 +1533,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" නව පරිශීලකයෙකු එක් කිරීමට උත්සාහ කරමින් සිටින නමුත්, පරිශීලක සීමාවට ළඟා වී ඇත."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" නව පරිශීලකයෙකු එක් කිරීමට උත්සාහ කරමින් සිටී, නමුත් "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ගිණුම මෙම උපාංගය මත දැනටමත් පවතී. කෙසේ වෙතත් ඉදිරියට යන්නද?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" නව පරිශීලකයෙකු "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ගිණුම සඳහා එක් කිරීමට උත්සාහ කරමින් සිටී. ඉදිරියට යන්නද?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"භාෂා මනාප"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ප්රදේශ මනාපය"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"භාෂා නම ටයිප් කරන්න"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"යෝජිත"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"සියලු භාෂා"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"සෙවීම"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index d81e4e73..8e08adc 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Hlásenie o chybách"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Vytvoriť hlásenie chyby"</string>
<string name="bugreport_message" msgid="398447048750350456">"Týmto zhromaždíte informácie o aktuálnom stave zariadenia. Informácie je potom možné odoslať e-mailom, chvíľu však potrvá, kým bude hlásenie chyby pripravené na odoslanie. Prosíme vás preto o trpezlivosť."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktívne nahlásenie"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Táto možnosť je vhodná pre väčšinu prípadov. Umožňuje sledovať priebeh nahlásenia a zadať ďalšie podrobnosti o probléme. Môžu byť vynechané niektoré menej používané sekcie, ktorých nahlásenie trvá dlho."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Úplné nahlásenie"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="few">Snímka obrazovky pre hlásenie chyby sa vytvorí o <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="many">Snímka obrazovky pre hlásenie chyby sa vytvorí o <xliff:g id="NUMBER_1">%d</xliff:g> sekundy.</item>
+ <item quantity="other">Snímka obrazovky pre hlásenie chyby sa vytvorí o <xliff:g id="NUMBER_1">%d</xliff:g> sekúnd.</item>
+ <item quantity="one">Snímka obrazovky pre hlásenie chyby sa vytvorí o <xliff:g id="NUMBER_0">%d</xliff:g> sekundu.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tichý režim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je VYPNUTÝ."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvuk je zapnutý"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Dotykom zrušíte"</string>
<string name="select_input_method" msgid="8547250819326693584">"Zmeniť klávesnicu"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Vybrať klávesnicu"</string>
- <string name="show_ime" msgid="9157568568695230830">"Zobraziť metódu vstupu"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardvér"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Ponechať na obrazovke, keď je aktívna fyzická klávesnica"</string>
+ <string name="hardware" msgid="194658061510127999">"Zobraziť virtuálnu klávesnicu"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Zvoľte rozloženie klávesnice"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotykom zvoľte rozloženie klávesnice."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĽMNŇOÓÔPRŔSŠTŤUÚVWXYÝZŽ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Aplikácia "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sa pokúša pridať nového používateľa, bol však prekročený limit počtu používateľov."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Aplikácia "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sa pokúša pridať nového používateľa, účet "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" však na tomto zariadení už existuje. Chcete napriek tomu pokračovať?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Aplikácia "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" sa pokúša pridať nového používateľa pre účet "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Chcete pokračovať?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Jazykové predvoľby"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferovaný región"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Zadajte názov jazyka"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Navrhované"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Všetky jazyky"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Vyhľadávanie"</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index c86227e..c85f7b5 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Poročilo o napakah"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Ustvari poročilo o napakah"</string>
<string name="bugreport_message" msgid="398447048750350456">"S tem bodo zbrani podatki o trenutnem stanju naprave, ki bodo poslani v e-poštnem sporočilu. Izvedba poročila o napakah in priprava trajata nekaj časa, zato bodite potrpežljivi."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktivno poročilo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"To možnost uporabite v večini primerov. Omogoča sledenje napredka poročila in vnos več podrobnosti o težavi. Morda bodo izpuščeni nekateri redkeje uporabljani razdelki, za katere je poročanje dolgotrajno."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Celotno poročilo"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Posnetek zaslona za poročilo o napakah bo narejen čez <xliff:g id="NUMBER_1">%d</xliff:g> s.</item>
+ <item quantity="two">Posnetek zaslona za poročilo o napakah bo narejen čez <xliff:g id="NUMBER_1">%d</xliff:g> s.</item>
+ <item quantity="few">Posnetek zaslona za poročilo o napakah bo narejen čez <xliff:g id="NUMBER_1">%d</xliff:g> s.</item>
+ <item quantity="other">Posnetek zaslona za poročilo o napakah bo narejen čez <xliff:g id="NUMBER_1">%d</xliff:g> s.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tihi način"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvok je IZKLOPLJEN"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvok je VKLOPLJEN"</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Če želite prekiniti, se dotaknite"</string>
<string name="select_input_method" msgid="8547250819326693584">"Sprememba tipkovnice"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Izbira tipkovnic"</string>
- <string name="show_ime" msgid="9157568568695230830">"Pokaži način vnosa"</string>
- <string name="hardware" msgid="7517821086888990278">"Strojna oprema"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Ohrani na zaslonu, dokler je aktivna fizična tipkovnica"</string>
+ <string name="hardware" msgid="194658061510127999">"Pokaži navidezno tipkovnico"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Izberite razporeditev tipkovnice"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotaknite se, da izberete razporeditev tipkovnice"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Aplikacija "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" poskuša dodati novega uporabnika, vendar je dosežena omejitev števila uporabnikov."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Aplikacija "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" poskuša dodati novega uporabnika, vendar račun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" v napravi že obstaja. Ali želite kljub temu nadaljevati?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Aplikacija "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" poskuša dodati novega uporabnika za račun "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Ali želite nadaljevati?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Nastavitev jezika"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Nastavitev območja"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Vnesite ime jezika"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Predlagano"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Vsi jeziki"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Išči"</string>
</resources>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index c33dc5b..65156f0 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Raporti i defekteve në kod"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Merr raportin e defekteve në kod"</string>
<string name="bugreport_message" msgid="398447048750350456">"Ky funksion mundëson mbledhjen e informacioneve mbi gjendjen aktuale të pajisjes për ta dërguar si mesazh mail-i. Do të duhet pak kohë nga nisja e raportit të defekteve në kod. Faleminderit për durimin."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Raport interaktiv"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Përdore këtë në shumicën e rrethanave. Të lejon të gjurmosh progresin e raportit dhe të fusësh më shumë detaje rreth problemit. Mund të fshijë disa seksione që përdoren më pak të cilat kërkojnë shumë kohë për t\'u raportuar."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Raporti i plotë"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Marrja e pamjes së ekranit për raportin e defektit në kod në <xliff:g id="NUMBER_1">%d</xliff:g> sekonda.</item>
+ <item quantity="one">Marrja e pamjes së ekranit për raportin e defektit në kod në <xliff:g id="NUMBER_0">%d</xliff:g> sekondë.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modaliteti \"në heshtje\""</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zëri është çaktivizuar"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zëri është i aktivizuar"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Prek për ta anuluar"</string>
<string name="select_input_method" msgid="8547250819326693584">"Ndërro tastierë"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Zgjidh tastierat"</string>
- <string name="show_ime" msgid="9157568568695230830">"Shfaq metodën e hyrjes"</string>
- <string name="hardware" msgid="7517821086888990278">"Harduer"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Mbaje në ekran ndërsa tastiera fizike është aktive"</string>
+ <string name="hardware" msgid="194658061510127999">"Shfaq tastierën virtuale"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Përzgjidh planin e tastierës"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Prek për të përzgjedhur tastierën."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" po përpiqet të shtojë një përdorues të ri, por është arritur limiti i përdoruesve."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" po provon të shtojë një përdorues të ri, por llogaria "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ekziston tashmë në këtë pajisje. Dëshiron të vazhdosh gjithsesi?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" po provon të shtojë një përdorues të ri për llogarinë "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Dëshiron të vazhdosh?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Preferenca për gjuhën"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Preferenca e rajonit"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Shkruaj emrin e gjuhës"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Sugjeruar"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Të gjitha gjuhët"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Kërko"</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 04a170c..fe7b0d7 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -212,15 +212,16 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Извештај о грешци"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Направи извештај о грешци"</string>
<string name="bugreport_message" msgid="398447048750350456">"Овим ће се прикупити информације о тренутном стању уређаја како би биле послате у поруци е-поште. Од започињања извештаја о грешци до тренутка за његово слање проћи ће неко време; будите стрпљиви."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Интерактив. извештај"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Користите ово у већини случајева. То вам омогућава да пратите напредак извештаја и да уносите додатне детаље о проблему. Вероватно ће изоставити неке мање коришћене одељке за које прављење извештаја дуго траје."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Комплетан извештај"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Направићемо снимак екрана ради извештаја о грешци за <xliff:g id="NUMBER_1">%d</xliff:g> секунду.</item>
+ <item quantity="few">Направићемо снимак екрана ради извештаја о грешци за <xliff:g id="NUMBER_1">%d</xliff:g> секунде.</item>
+ <item quantity="other">Направићемо снимак екрана ради извештаја о грешци за <xliff:g id="NUMBER_1">%d</xliff:g> секунди.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Нечујни режим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Звук је ИСКЉУЧЕН"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Звук је УКЉУЧЕН"</string>
@@ -1056,8 +1057,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Додирните да бисте отказали"</string>
<string name="select_input_method" msgid="8547250819326693584">"Промените тастатуру"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Изаберите тастатуре"</string>
- <string name="show_ime" msgid="9157568568695230830">"Приказивање метода уноса"</string>
- <string name="hardware" msgid="7517821086888990278">"Хардвер"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Задржи га на екрану док је физичка тастатура активна"</string>
+ <string name="hardware" msgid="194658061510127999">"Прикажи виртуелну тастатуру"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Избор распореда тастатуре"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Додирните да бисте изабрали распоред тастатуре."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1549,4 +1550,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" покушава да дода новог корисника, али је ограничење за број корисника достигнуто."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" покушава да дода новог корисника, али налог "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" већ постоји на овом уређају. Желите ли ипак да наставите?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" покушава да дода новог корисника за налог "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Желите ли да наставите?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Подешавање језика"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Подешавање региона"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Унесите назив језика"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Предложени"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Сви језици"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Претражи"</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 346b1234..d80b4c2 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Felrapport"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Skapa felrapport"</string>
<string name="bugreport_message" msgid="398447048750350456">"Nu hämtas information om aktuell status för enheten, som sedan skickas i ett e-postmeddelade. Det tar en liten stund innan felrapporten är färdig och kan skickas, så vi ber dig ha tålamod."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv rapport"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Bör användas i de flesta fall. Då kan du spåra rapportförloppet och ange mer information om problemet. En del mindre använda avsnitt, som det tar lång tid att rapportera om, kan uteslutas."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Fullständig rapport"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Tar en skärmdump till felrapporten om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder.</item>
+ <item quantity="one">Tar en skärmdump till felrapporten om <xliff:g id="NUMBER_0">%d</xliff:g> sekund.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tyst läge"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ljudet är AV"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ljudet är PÅ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Tryck här om du vill avbryta"</string>
<string name="select_input_method" msgid="8547250819326693584">"Byt tangentbord"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Välj tangentbord"</string>
- <string name="show_ime" msgid="9157568568695230830">"Visa inmatningsmetod"</string>
- <string name="hardware" msgid="7517821086888990278">"Maskinvara"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Ha kvar den på skärmen när det fysiska tangentbordet används"</string>
+ <string name="hardware" msgid="194658061510127999">"Visa virtuellt tangentbord"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Välj en tangentbordslayout"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Välj en tangentbordslayout genom att trycka."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" försöker lägga till en ny användare, men gränsen för antal användare har uppnåtts."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" försöker lägga till en ny användare, men kontot "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" finns redan på den här enheten. Vill du fortsätta ändå?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" försöker lägga till en ny användare för kontot "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Vill du fortsätta?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Språkinställning"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Regionsinställningar"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Ange språket"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Förslag"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Alla språk"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Söka"</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 714827c..5ae50b8 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -213,15 +213,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Ripoti ya hitilafu"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Chukua ripoti ya hitilafu"</string>
<string name="bugreport_message" msgid="398447048750350456">"Hii itakusanya maelezo kuhusu hali ya kifaa chako kwa sasa, na itume kama barua pepe. Itachukua muda mfupi tangu ripoti ya hitilafu ianze kuzalishwa hadi iwe tayari kutumwa; vumilia."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Ripoti ya kushirikiana"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Itumie katika hali nyingi. Inakuruhusu kufuatilia maendeleo ya ripoti na kuweka maelezo zaidi kuhusu tatizo. Huenda ikaondoa sehemu ambazo hazitumiki sana, ambazo huchukua muda mrefu kuripoti."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Ripoti kamili"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Inapiga picha ya skrini ili iripoti hitilafu baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>.</item>
+ <item quantity="one">Inapiga picha ya skrini ili iripoti hitilafu baada ya sekunde <xliff:g id="NUMBER_0">%d</xliff:g>.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mtindo wa kimya"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sauti Imezimwa"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sauti imewashwa"</string>
@@ -1051,8 +1051,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Gusa ili ufute"</string>
<string name="select_input_method" msgid="8547250819326693584">"Badilisha kibodi"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Chagua kibodi"</string>
- <string name="show_ime" msgid="9157568568695230830">"Onyesha mbinu ya kuingiza"</string>
- <string name="hardware" msgid="7517821086888990278">"Maunzi"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Iweke kwenye skrini wakati kibodi inapotumika"</string>
+ <string name="hardware" msgid="194658061510127999">"Onyesha kibodi pepe"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Teua mpangilio wa kibodi"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Gusa ili kuchagua mpangilio wa kibodi."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1533,4 +1533,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" inajaribu kuongeza mtumiaji mpya, lakini idadi ya juu ya watumiaji imefikiwa."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" inajaribu kuongeza mtumiaji mpya, lakini akaunti ya "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" tayari ipo kwenye kifaa hiki. Ungependa kundelea?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" inajaribu kuongeza mtumiaji mpya kwenye akaunti ya "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Ungependa kuendelea?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Lugha ninayopendelea"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Mapendeleo ya eneo"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Weka jina la lugha"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Inayopendekezwa"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Lugha zote"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Tafuta"</string>
</resources>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index 38c2e26..4671344 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"பிழை அறிக்கை"</string>
<string name="bugreport_title" msgid="2667494803742548533">"பிழை அறிக்கையை எடு"</string>
<string name="bugreport_message" msgid="398447048750350456">"உங்கள் நடப்புச் சாதன நிலையை மின்னஞ்சல் செய்தியாக அனுப்ப, அது குறித்த தகவலை இது சேகரிக்கும். பிழை அறிக்கையைத் தொடங்குவதில் இருந்து, அது அனுப்புவதற்குத் தயாராகும் வரை, இதற்குச் சிறிது நேரம் ஆகும்; பொறுமையாகக் காத்திருக்கவும்."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ஊடாடத்தக்க அறிக்கை"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"பெரும்பாலான சூழ்நிலைகளில் இதைப் பயன்படுத்தவும். இது அறிக்கையின் நிலையைக் கண்காணிக்கவும், சிக்கலைப் பற்றிய மேலும் விவரங்களை உள்ளிடவும் அனுமதிக்கும். அறிக்கையிட நீண்ட நேரம் எடுக்கக்கூடிய குறைவாகப் பயன்படுத்தப்படும் பிரிவுகள் சிலவற்றை இது தவிர்க்கக்கூடும்."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"முழு அறிக்கை"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> வினாடிகளில் பிழை அறிக்கைக்கான ஸ்கிரீன் ஷாட் எடுக்கப்படும்.</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> வினாடியில் பிழை அறிக்கைக்கான ஸ்கிரீன் ஷாட் எடுக்கப்படும்.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"நிசப்த பயன்முறை"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ஒலி முடக்கத்தில் உள்ளது"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ஒலி இயக்கத்தில் உள்ளது"</string>
@@ -1044,13 +1044,13 @@
<string name="share_remote_bugreport_notification_title" msgid="3116061729914615290">"பிழை அறிக்கையை நிர்வாகியுடன் பகிரவா?"</string>
<string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"பிழைகாண்பதற்கு உதவ, உங்கள் ஐடி நிர்வாகி பிழை அறிக்கையைக் கோரியுள்ளார்"</string>
<string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"சரி"</string>
- <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"நிராகரி"</string>
+ <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"வேண்டாம்"</string>
<string name="remote_bugreport_progress_notification_title" msgid="2785600634417078622">"பிழை அறிக்கையை எடுக்கிறது…"</string>
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"ரத்துசெய்ய, தொடவும்"</string>
<string name="select_input_method" msgid="8547250819326693584">"விசைப்பலகையை மாற்று"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"விசைப்பலகைகளைத் தேர்வுசெய்க"</string>
- <string name="show_ime" msgid="9157568568695230830">"உள்ளீட்டு முறையைக் காட்டு"</string>
- <string name="hardware" msgid="7517821086888990278">"வன்பொருள்"</string>
+ <string name="show_ime" msgid="2506087537466597099">"கைமுறை விசைப்பலகை இயக்கத்தில் இருக்கும் போது IMEஐ திரையில் வைத்திரு"</string>
+ <string name="hardware" msgid="194658061510127999">"விர்ச்சுவல் விசைப்பலகையை காட்டு"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"விசைப்பலகைத் தளவமைப்பைத் தேர்ந்தெடுக்கவும்"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"விசைப்பலகைத் தளவமைப்பைத் தேர்ந்தெடுக்க தொடவும்."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" பயன்பாடு புதிய பயனரைச் சேர்க்க முயல்கிறது, ஆனால் பயனருக்கான வரம்பு முடிந்துவிட்டது."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" பயன்பாடு புதிய பயனரைச் சேர்க்க முயல்கிறது. ஆனால் "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" கணக்கு ஏற்கனவே இந்தச் சாதனத்தில் உள்ளது. தொடரவா?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" பயன்பாடு "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" கணக்கிற்குப் புதிய பயனரைச் சேர்க்க முயல்கிறது. தொடரவா?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"மொழி விருப்பம்"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"மண்டல விருப்பம்"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"மொழி பெயரை உள்ளிடுக"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"பரிந்துரைகள்"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"எல்லா மொழிகளும்"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"தேடு"</string>
</resources>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index 14cc2c1..8535b9c 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"బగ్ నివేదిక"</string>
<string name="bugreport_title" msgid="2667494803742548533">"బగ్ నివేదికను సిద్ధం చేయి"</string>
<string name="bugreport_message" msgid="398447048750350456">"ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ నివేదికను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ప్రభావశీల నివేదిక"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"చాలా సందర్భాల్లో ఇది ఉపయోగించబడుతుంది. ఇది మిమ్మల్ని నివేదిక ప్రోగ్రెస్ ట్రాక్ చేయడానికి మరియు సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి అనుమతిస్తుంది. ఇది నివేదించడానికి అధిక సమయం పట్టే తక్కువగా వినియోగించే విభాగాలను విడిచిపెట్టవచ్చు."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"పూర్తి నివేదిక"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">బగ్ నివేదిక కోసం <xliff:g id="NUMBER_1">%d</xliff:g> సెకన్లలో స్క్రీన్షాట్ తీయబోతోంది.</item>
+ <item quantity="one">బగ్ నివేదిక కోసం <xliff:g id="NUMBER_0">%d</xliff:g> సెకనులో స్క్రీన్షాట్ తీయబోతోంది.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"నిశ్శబ్ద మోడ్"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ధ్వని ఆఫ్లో ఉంది"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ధ్వని ఆన్లో ఉంది"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"రద్దు చేయడానికి తాకండి"</string>
<string name="select_input_method" msgid="8547250819326693584">"కీబోర్డ్ను మార్చు"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"కీబోర్డ్లను ఎంచుకోండి"</string>
- <string name="show_ime" msgid="9157568568695230830">"ఇన్పుట్ పద్ధతిని చూపు"</string>
- <string name="hardware" msgid="7517821086888990278">"హార్డ్వేర్"</string>
+ <string name="show_ime" msgid="2506087537466597099">"దీన్ని భౌతిక కీబోర్డ్ సక్రియంగా ఉన్నప్పుడు స్క్రీన్పై ఉంచుతుంది"</string>
+ <string name="hardware" msgid="194658061510127999">"వర్చువల్ కీబోర్డ్ను చూపు"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"కీబోర్డ్ లేఅవుట్ను ఎంచుకోండి"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"కీబోర్డ్ లేఅవుట్ను ఎంచుకోవడానికి తాకండి."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" కొత్త వినియోగదారుని జోడించడానికి ప్రయత్నిస్తోంది, కానీ వినియోగదారు పరిమితి చేరుకుంది."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" కొత్త వినియోగదారుని జోడించడానికి ప్రయత్నిస్తోంది, కానీ ఖాతా "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ఇప్పటికే ఈ పరికరంలో ఉంది. ఏదేమైనా కొనసాగించాలా?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ఖాతా "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" కోసం కొత్త వినియోగదారుని జోడించడానికి ప్రయత్నిస్తోంది. కొనసాగించాలా?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"భాష ప్రాధాన్యత"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ప్రాంతం ప్రాధాన్యత"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"భాష పేరును టైప్ చేయండి"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"సూచించినవి"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"అన్ని భాషలు"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"శోధించు"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 59f6ffa..a759145 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"รายงานข้อบกพร่อง"</string>
<string name="bugreport_title" msgid="2667494803742548533">"ใช้รายงานข้อบกพร่อง"</string>
<string name="bugreport_message" msgid="398447048750350456">"การดำเนินการนี้จะรวบรวมข้อมูลเกี่ยวกับสถานะปัจจุบันของอุปกรณ์ของคุณ โดยจะส่งไปในรูปแบบข้อความอีเมล อาจใช้เวลาสักครู่ตั้งแต่เริ่มการสร้างรายงานข้อบกพร่องจนกระทั่งเสร็จสมบูรณ์ โปรดอดทนรอ"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"รายงานแบบอินเทอร์แอกทีฟ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"ใช้ตัวเลือกนี้ได้เกือบทุกสถานการณ์ โดยจะอนุญาตให้คุณติดตามความคืบหน้าของรายงานและป้อนรายละเอียดเพิ่มเติมของปัญหา หัวข้อที่ใช้งานน้อยแต่ใช้เวลานานในการรายงานอาจถูกข้ามไป"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"รายงานฉบับเต็ม"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">จะจับภาพหน้าจอสำหรับรายงานข้อบกพร่องใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที</item>
+ <item quantity="one">จะจับภาพหน้าจอสำหรับรายงานข้อบกพร่องใน <xliff:g id="NUMBER_0">%d</xliff:g> วินาที</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"โหมดปิดเสียง"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ปิดเสียงไว้"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"เปิดเสียงแล้ว"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"แตะเพื่อยกเลิก"</string>
<string name="select_input_method" msgid="8547250819326693584">"เปลี่ยนแป้นพิมพ์"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"เลือกแป้นพิมพ์"</string>
- <string name="show_ime" msgid="9157568568695230830">"แสดงวิธีการป้อนข้อมูล"</string>
- <string name="hardware" msgid="7517821086888990278">"ฮาร์ดแวร์"</string>
+ <string name="show_ime" msgid="2506087537466597099">"เปิดทิ้งไว้บนหน้าจอในระหว่างใช้งานแป้นพิมพ์จริง"</string>
+ <string name="hardware" msgid="194658061510127999">"แสดงแป้นพิมพ์เสมือน"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"เลือกรูปแบบแป้นพิมพ์"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"แตะเพื่อเลือกรูปแบบแป้นพิมพ์"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" กำลังพยายามเพิ่มผู้ใช้ใหม่ แต่ถึงขีดจำกัดของผู้ใช้แล้ว"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" กำลังพยายามเพิ่มผู้ใช้ใหม่ แต่มีบัญชี "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" อยู่แล้วบนอุปกรณ์เครื่องนี้ ดำเนินการต่อไหม"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" กำลังพยายามเพิ่มผู้ใช้ใหม่สำหรับบัญชี "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" ดำเนินการต่อไหม"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"ค่ากำหนดภาษา"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"ค่ากำหนดภูมิภาค"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"พิมพ์ชื่อภาษา"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"แนะนำ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"ทุกภาษา"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"ค้นหา"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index c6e643b..b5e1de8 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Ulat sa bug"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Kunin ang ulat sa bug"</string>
<string name="bugreport_message" msgid="398447048750350456">"Mangongolekta ito ng impormasyon tungkol sa kasalukuyang katayuan ng iyong device, na ipapadala bilang mensaheng e-mail. Gugugol ito ng kaunting oras mula sa pagsisimula ng ulat sa bug hanggang sa handa na itong maipadala; mangyaring magpasensya."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactive na ulat"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Gamitin ito sa karamihan ng sitwasyon. Nagbibigay-daan ito sa iyo na subaybayan ang pag-usad ng ulat at magbigay ng higit pang mga detalye tungkol sa problema. Maaari itong mag-alis ng ilan sa mga hindi masyadong ginagamit na seksyon na nangangailangan ng mahabang panahon upang iulat."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Buong ulat"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Kukuha ng screenshot para sa ulat ng bug sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> segundo.</item>
+ <item quantity="other">Kukuha ng screenshot para sa ulat ng bug sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> na segundo.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Naka-OFF ang tunog"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Naka-ON ang sound"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Pindutin upang kanselahin"</string>
<string name="select_input_method" msgid="8547250819326693584">"Baguhin ang keyboard"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Pumili ng mga keyboard"</string>
- <string name="show_ime" msgid="9157568568695230830">"Ipakita ang pamamaraan ng pag-input"</string>
- <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Panatilihin ito sa screen habang aktibo ang pisikal na keyboard"</string>
+ <string name="hardware" msgid="194658061510127999">"Ipakita ang virtual keyboard"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pumili ng layout ng keyboard"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Pindutin upang pumili ng layout ng keyboard."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266">"Sinusubukan ng "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" na magdagdag ng bagong user, ngunit naabot na ang limitasyon sa user."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789">"Sinusubukan ng "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" na magdagdag ng bagong user, ngunit nasa device na ito na ang account na "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Magpatuloy pa rin?"</string>
<string name="user_creation_adding" msgid="3206420861363021392">"Sinusubukan ng "<b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" na magdagdag ng bagong user para sa account na "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Magpatuloy?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Kagustuhan sa wika"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Kagustuhan sa rehiyon"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"I-type ang wika"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Iminumungkahi"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Lahat ng wika"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Maghanap"</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 3603952..79a5c54 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Hata raporu"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Hata raporu al"</string>
<string name="bugreport_message" msgid="398447048750350456">"Bu rapor, e-posta iletisi olarak göndermek üzere cihazınızın şu anki durumuyla ilgili bilgi toplar. Hata raporu başlatıldıktan sonra hazır olması biraz zaman alabilir, lütfen sabırlı olun."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Etkileşimli rapor"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Çoğu durumda bunu kullanın. Bu seçenek, raporun ilerleme durumunu takip etmenize ve sorunla ilgili daha fazla ayrıntı girmenize olanak sağlar. Rapor edilmesi uzun süren ve az kullanılan bazı bölümleri yok sayabilir."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Tam rapor"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde hata raporu ekran görüntüsü alınıyor.</item>
+ <item quantity="one">Hata raporu ekran görüntüsü <xliff:g id="NUMBER_0">%d</xliff:g> saniye içinde alınacak.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Sessiz mod"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ses KAPALI"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ses AÇIK"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"İptal etmek için dokunun"</string>
<string name="select_input_method" msgid="8547250819326693584">"Klavyeyi değiştir"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Klavyeyi seç"</string>
- <string name="show_ime" msgid="9157568568695230830">"Giriş yöntemini göster"</string>
- <string name="hardware" msgid="7517821086888990278">"Donanım"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Fiziksel klavye etkin durumdayken ekranda tut"</string>
+ <string name="hardware" msgid="194658061510127999">"Sanal klavyeyi göster"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klavye düzeni seçin"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Bir klavye düzeni seçmek için dokunun."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", yeni bir kullanıcı eklemeye çalışıyor, ancak kullanıcı sınırına ulaşıldı."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", yeni bir kullanıcı eklemeye çalışıyor, ancak "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hesabı bu cihazda zaten var. Yine de devam edilsin mi?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>", "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hesabı için yeni bir kullanıcı eklemeye çalışıyor. Devam edilsin mi?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Dil tercihi"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Bölge tercihi"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Dil adını yazın"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Önerilen"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Tüm diller"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Ara"</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index fdc6323..f4ba226 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -213,15 +213,17 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Звіт про помилки"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Звіт про помилку"</string>
<string name="bugreport_message" msgid="398447048750350456">"Інформація про поточний стан вашого пристрою буде зібрана й надіслана електронною поштою. Підготовка звіту триватиме певний час."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Інтерактивний звіт"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Підходить для більшості випадків. Можна відстежувати, як створюється звіт, і вводити більше деталей про проблему. Можуть опускатися деякі розділи, які рідко використовуються, але довго створюються."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Повний звіт"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Знімок екрана для звіту про помилки буде зроблено через <xliff:g id="NUMBER_1">%d</xliff:g> секунду.</item>
+ <item quantity="few">Знімок екрана для звіту про помилки буде зроблено через <xliff:g id="NUMBER_1">%d</xliff:g> секунди.</item>
+ <item quantity="many">Знімок екрана для звіту про помилки буде зроблено через <xliff:g id="NUMBER_1">%d</xliff:g> секунд.</item>
+ <item quantity="other">Знімок екрана для звіту про помилки буде зроблено через <xliff:g id="NUMBER_1">%d</xliff:g> секунди.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Беззвуч. режим"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Звук ВИМК."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Звук УВІМК."</string>
@@ -1063,8 +1065,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Торкніться, щоб скасувати"</string>
<string name="select_input_method" msgid="8547250819326693584">"Змінити клавіатуру"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Вибрати клавіатури"</string>
- <string name="show_ime" msgid="9157568568695230830">"Показати метод введення"</string>
- <string name="hardware" msgid="7517821086888990278">"Обладнання"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Утримуйте на екрані, коли активна фізична клавіатура"</string>
+ <string name="hardware" msgid="194658061510127999">"Показати віртуальну клавіатуру"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Виберіть розкладку клавіатури"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Торкніться, щоб вибрати розкладку клавіатури."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"</string>
@@ -1567,4 +1569,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хоче додати нового користувача, але вже додано максимальну кількість користувачів."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хоче додати нового користувача, але обліковий запис "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" уже існує на цьому пристрої. Продовжити?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" хоче додати нового користувача облікового запису "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Продовжити?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Вибір мови"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Вибір регіону"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Введіть назву мови"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Пропозиції"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Усі мови"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Пошук"</string>
</resources>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index 14167ac..bf2f989 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"بگ کی اطلاع"</string>
<string name="bugreport_title" msgid="2667494803742548533">"بگ کی اطلاع لیں"</string>
<string name="bugreport_message" msgid="398447048750350456">"ایک ای میل پیغام کے بطور بھیجنے کیلئے، یہ آپ کے موجودہ آلہ کی حالت کے بارے میں معلومات جمع کرے گا۔ بگ کی اطلاع شروع کرنے سے لے کر بھیجنے کیلئے تیار ہونے تک اس میں تھوڑا وقت لگے گا؛ براہ کرم تحمل سے کام لیں۔"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"متعامل رپورٹ"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"زیادہ تر حالات میں اسے استعمال کریں۔ یہ آپ کو رپورٹ کی پیش رفت ٹریک کرنے اور مسئلہ سے متعلق زیادہ تفصیلات میں جانے کی اجازت دیتا ہے۔ شاید یہ کچھ ایسے کم استعمال ہونے والے سیکشنز کو خارج کر دے جو رپورٹ کرنے میں زیادہ وقت لگاتے ہیں۔"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"مکمل رپورٹ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">بگ رپورٹ کیلئے <xliff:g id="NUMBER_1">%d</xliff:g> سیکنڈز میں اسکرین شاٹ لیا جائے گا۔</item>
+ <item quantity="one">بگ رپورٹ کیلئے <xliff:g id="NUMBER_0">%d</xliff:g> سیکنڈ میں اسکرین شاٹ لیا جائے گا۔</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"خاموش وضع"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"آواز آف ہے"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"آواز آن ہے"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"منسوخ کرنے کیلئے ٹچ کریں"</string>
<string name="select_input_method" msgid="8547250819326693584">"کی بورڈ تبدیل کریں"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"کی بورڈز منتخب کریں"</string>
- <string name="show_ime" msgid="9157568568695230830">"ان پٹ طریقہ دکھائیں"</string>
- <string name="hardware" msgid="7517821086888990278">"ہارڈ ویئر"</string>
+ <string name="show_ime" msgid="2506087537466597099">"جب فزیکل کی بورڈ فعال ہو تو IME کو اسکرین پر رکھیں"</string>
+ <string name="hardware" msgid="194658061510127999">"ورچوئل کی بورڈ دکھائیں"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"کی بورڈ کا خاکہ منتخب کریں"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"ایک کی بورڈ کا خاکہ منتخب کرنے کیلئے چھوئیں۔"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ایک نیا صارف شامل کرنے کی کوشش کر رہی ہے، لیکن صارف کی حد پوری ہوگئی ہے۔"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ایک نیا صارف شامل کرنے کی کوشش کر رہی ہے لیکن اکاؤنٹ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" پہلے سے اس آلہ پر موجود ہے۔ بہر صورت آگے بڑھیں؟"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" اکاؤنٹ "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" کیلئے ایک نیا صارف شامل کرنے کی کوشش کر رہی ہے۔ آگے بڑھیں؟"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"زبان کی ترجیح"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"علاقہ کی ترجیح"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"زبان کا نام ٹائپ کریں"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"تجویز کردہ"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"سبھی زبانیں"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"تلاش"</string>
</resources>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index e904573..a33a283 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Nosozlik haqida ma’lumot berish"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Xatoliklar hisoboti"</string>
<string name="bugreport_message" msgid="398447048750350456">"Qurilmangiz holati haqidagi ma’lumotlar to‘planib, e-pochta orqali yuboriladi. Hisobotni tayyorlash biroz vaqt olishi mumkin."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interaktiv hisobot"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Bundan maxsus vaziyatlarda foydalaning. Bu hisobot jarayonini kuzatish imkonini beradi va muammo haqida batafsil ma’lumotlarni ko‘rishingiz mumkin bo‘ladi. Hisobot uchun ko‘p vaqt oladigan kam ishlatiladigan bo‘limlar qoldirib ketilishi mumkin."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"To‘liq hisobot"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Xatoliklar hisoboti uchun skrinshot <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng olinadi.</item>
+ <item quantity="one">Xatoliklar hisoboti uchun skrinshot <xliff:g id="NUMBER_0">%d</xliff:g> soniyadan so‘ng olinadi.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Ovozsiz rejim"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Tovush o‘chirilgan"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"YONIQ"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Bekor qilish uchun bosing"</string>
<string name="select_input_method" msgid="8547250819326693584">"Klaviaturani o‘zgartirish"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Klaviaturani tanlash"</string>
- <string name="show_ime" msgid="9157568568695230830">"Kiritish usulini ko‘rish"</string>
- <string name="hardware" msgid="7517821086888990278">"Qurilma"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Tashqi klaviaturadan foydalanilayotganda buni ekranda saqlab turish"</string>
+ <string name="hardware" msgid="194658061510127999">"Virtual klaviatura ko‘rsatilsin"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Tugmalar tartibini tanlash"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tugmalar tartibini tanlash uchun bosing."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ilovasi yangi foydalanuvchi qo‘shishga urinmqoda, lekin ortiq foydalanuvchi qo‘shib bo‘lmaydi."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ilovasi yangi foydalanuvchi qo‘shishga urinmoqda, lekin "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hisobi allaqachon qurilmada mavjud. Baribir davom etilsinmi?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" ilovasi "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" hisobi uchun yangi foydalanuvchi qo‘shishga urinmoqda. Davom etilsinmi?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Til sozlamalari"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Hudud sozlamalari"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Til nomini kiriting"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Taklif etiladi"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Barcha tillar"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Qidiruv"</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index c979b3c4..56af67d 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Báo cáo lỗi"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Nhận báo cáo lỗi"</string>
<string name="bugreport_message" msgid="398447048750350456">"Báo cáo này sẽ thu thập thông tin về tình trạng thiết bị hiện tại của bạn, để gửi dưới dạng thông báo qua email. Sẽ mất một chút thời gian kể từ khi bắt đầu báo cáo lỗi cho tới khi báo cáo sẵn sàng để gửi; xin vui lòng kiên nhẫn."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Báo cáo tương tác"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Sử dụng tùy chọn này trong hầu hết các trường hợp. Tùy chọn này cho phép bạn theo dõi tiến trình của báo cáo và nhập thêm thông tin chi tiết về sự cố. Tùy chọn này có thể bỏ qua một số phần ít được sử dụng mà mất nhiều thời gian để báo cáo."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Báo cáo đầy đủ"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">Sẽ chụp ảnh màn hình để báo cáo lỗi sau <xliff:g id="NUMBER_1">%d</xliff:g> giây.</item>
+ <item quantity="one">Sẽ chụp ảnh màn hình để báo cáo lỗi sau <xliff:g id="NUMBER_0">%d</xliff:g> giây.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Chế độ im lặng"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Âm thanh TẮT"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Âm thanh BẬT"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Chạm để hủy"</string>
<string name="select_input_method" msgid="8547250819326693584">"Thay đổi bàn phím"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Chọn bàn phím"</string>
- <string name="show_ime" msgid="9157568568695230830">"Hiển thị phương thức nhập"</string>
- <string name="hardware" msgid="7517821086888990278">"Phần cứng"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Tiếp tục sử dụng ứng dụng trên màn hình trong khi bàn phím thực đang hoạt động"</string>
+ <string name="hardware" msgid="194658061510127999">"Hiển thị bàn phím ảo"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Chọn bố cục bàn phím"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Chạm để chọn bố cục bàn phím."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" đang cố thêm người dùng mới nhưng đã đạt đến giới hạn người dùng."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" đang cố thêm người dùng mới nhưng tài khoản "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" đã tồn tại trên thiết bị này. Vẫn tiếp tục?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" đang cố thêm người dùng mới cho tài khoản "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Tiếp tục?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Tùy chọn ngôn ngữ"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Tùy chọn khu vực"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Nhập tên ngôn ngữ"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Ðược đề xuất"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Tất cả ngôn ngữ"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Tìm kiếm"</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index fd12d29..45d13e8 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"错误报告"</string>
<string name="bugreport_title" msgid="2667494803742548533">"提交错误报告"</string>
<string name="bugreport_message" msgid="398447048750350456">"这会收集有关当前设备状态的信息,并以电子邮件的形式进行发送。从开始生成错误报告到准备好发送需要一点时间,请耐心等待。"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"互动式报告"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"在大多数情况下,建议您使用此选项,以便追踪报告的生成进度,以及输入与相应问题相关的更多详细信息。系统可能会省略掉一些不常用的区段,从而缩短生成报告的时间。"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"完整报告"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">系统将在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后对错误报告进行截屏。</item>
+ <item quantity="one">系统将在 <xliff:g id="NUMBER_0">%d</xliff:g> 秒后对错误报告进行截屏。</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"静音模式"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"声音已关闭"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"声音已开启"</string>
@@ -238,9 +238,9 @@
<string name="user_owner_label" msgid="2804351898001038951">"个人"</string>
<string name="managed_profile_label" msgid="6260850669674791528">"工作"</string>
<string name="permgrouplab_contacts" msgid="3657758145679177612">"通讯录"</string>
- <string name="permgroupdesc_contacts" msgid="6951499528303668046">"使用您的通讯录"</string>
+ <string name="permgroupdesc_contacts" msgid="6951499528303668046">"访问您的通讯录"</string>
<string name="permgrouplab_location" msgid="7275582855722310164">"位置信息"</string>
- <string name="permgroupdesc_location" msgid="1346617465127855033">"使用此设备的位置信息"</string>
+ <string name="permgroupdesc_location" msgid="1346617465127855033">"获取此设备的位置信息"</string>
<string name="permgrouplab_calendar" msgid="5863508437783683902">"日历"</string>
<string name="permgroupdesc_calendar" msgid="3889615280211184106">"访问您的日历"</string>
<string name="permgrouplab_sms" msgid="228308803364967808">"短信"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"触摸可取消"</string>
<string name="select_input_method" msgid="8547250819326693584">"更改键盘"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"选择键盘"</string>
- <string name="show_ime" msgid="9157568568695230830">"显示输入法"</string>
- <string name="hardware" msgid="7517821086888990278">"硬件"</string>
+ <string name="show_ime" msgid="2506087537466597099">"连接到实体键盘时使其在屏幕上保持显示状态"</string>
+ <string name="hardware" msgid="194658061510127999">"显示虚拟键盘"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"选择键盘布局"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"触摸可选择键盘布局。"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"正尝试添加新用户,但已达到用户人数上限。"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"正尝试添加新用户,但这个设备上已经存在"<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"这个帐号。仍要继续吗?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>"正尝试为"<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>"这个帐号添加新用户,要继续吗?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"语言偏好设置"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"区域偏好设置"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"输入语言名称"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"建议语言"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"所有语言"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"搜索"</string>
</resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index bd6ec0a..2fe2228 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"錯誤報告"</string>
<string name="bugreport_title" msgid="2667494803742548533">"取得錯誤報告"</string>
<string name="bugreport_message" msgid="398447048750350456">"這會收集您目前裝置狀態的相關資訊,並以電郵傳送給您。從開始建立錯誤報告到準備傳送需要一段時間,請耐心等候。"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"互動報告"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"在大部分情況下,建議您使用此選項,以便追蹤報告進度,以及輸入更多與問題相關的的資訊。系統可能會省略部分不常用的區段,藉此縮短產生報告的時間。"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"完整報告"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">系統將在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後擷取錯誤報告的螢幕畫面。</item>
+ <item quantity="one">系統將在 <xliff:g id="NUMBER_0">%d</xliff:g> 秒後擷取錯誤報告的螢幕畫面。</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"靜音模式"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"關閉音效"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"音效已開啟"</string>
@@ -248,7 +248,7 @@
<string name="permgrouplab_storage" msgid="1971118770546336966">"儲存空間"</string>
<string name="permgroupdesc_storage" msgid="637758554581589203">"在您的裝置上存取相片、媒體和檔案"</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"麥克風"</string>
- <string name="permgroupdesc_microphone" msgid="4988812113943554584">"錄製語音訊息"</string>
+ <string name="permgroupdesc_microphone" msgid="4988812113943554584">"錄音"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"相機"</string>
<string name="permgroupdesc_camera" msgid="3250611594678347720">"拍照和錄製影片"</string>
<string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"輕觸即可取消"</string>
<string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"選擇鍵盤"</string>
- <string name="show_ime" msgid="9157568568695230830">"顯示輸入法"</string>
- <string name="hardware" msgid="7517821086888990278">"硬件"</string>
+ <string name="show_ime" msgid="2506087537466597099">"在實體鍵盤處於連接狀態時保持顯示"</string>
+ <string name="hardware" msgid="194658061510127999">"顯示虛擬鍵盤"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"選取鍵盤配置"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"輕觸即可選取鍵盤配置。"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" 正在嘗試新增使用者,但使用者人數已達上限。"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" 正在嘗試新增使用者,但此裝置上已有 "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" 這個帳戶。仍要繼續嗎?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" 正在嘗試為 "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" 這個帳戶新增使用者。要繼續嗎?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"語言偏好設定"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"地區偏好設定"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"輸入語言名稱"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"推薦"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"所有語言"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"搜尋"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 4181697..6554153 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"錯誤報告"</string>
<string name="bugreport_title" msgid="2667494803742548533">"取得錯誤報告"</string>
<string name="bugreport_message" msgid="398447048750350456">"這會收集您目前裝置狀態的相關資訊,以便透過電子郵件傳送。從錯誤報告開始建立到準備傳送的這段過程可能需要一點時間,敬請耐心等候。"</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"互動式報告"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"在一般情況下,建議您使用這個選項,以便追蹤報告產生進度,以及輸入更多與問題相關的資訊。系統可能會省略部分較少使用的區段,藉此縮短報告產生時間。"</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"完整報告"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="other">系統將在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後擷取錯誤報告的螢幕畫面。</item>
+ <item quantity="one">系統將在 <xliff:g id="NUMBER_0">%d</xliff:g> 秒後擷取錯誤報告的螢幕畫面。</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"靜音模式"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"音效已關閉"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"音效已開啟"</string>
@@ -1042,15 +1042,15 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"已連接 USB 偵錯工具"</string>
<string name="adb_active_notification_message" msgid="1016654627626476142">"輕觸即可停用 USB 偵錯。"</string>
<string name="share_remote_bugreport_notification_title" msgid="3116061729914615290">"要與管理員分享錯誤報告嗎?"</string>
- <string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"您的 IT 管理員要求您提供錯誤報告,協助排解問題"</string>
+ <string name="share_remote_bugreport_notification_message" msgid="1310517845557771773">"您的 IT 管理員要求您提供錯誤報告以便排解問題"</string>
<string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"接受"</string>
<string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"拒絕"</string>
- <string name="remote_bugreport_progress_notification_title" msgid="2785600634417078622">"正在取得錯誤報告…"</string>
+ <string name="remote_bugreport_progress_notification_title" msgid="2785600634417078622">"正在接收錯誤報告…"</string>
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"輕觸即可取消"</string>
<string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"選擇鍵盤"</string>
- <string name="show_ime" msgid="9157568568695230830">"顯示輸入法"</string>
- <string name="hardware" msgid="7517821086888990278">"硬體"</string>
+ <string name="show_ime" msgid="2506087537466597099">"有連接的實體鍵盤時保持顯示"</string>
+ <string name="hardware" msgid="194658061510127999">"顯示虛擬鍵盤"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"選取鍵盤配置"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"輕觸即可選取鍵盤配置。"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b></b>"「<xliff:g id="APP">%1$s</xliff:g>」正在嘗試新增使用者,但已達到使用者人數上限。"</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b></b>"「<xliff:g id="APP">%1$s</xliff:g>」正在嘗試新增使用者,但這個裝置上已經有 <xliff:g id="ACCOUNT">%2$s</xliff:g> "<b></b>"這個帳戶。仍要繼續嗎?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b></b>"「<xliff:g id="APP">%1$s</xliff:g>」正在嘗試為 <xliff:g id="ACCOUNT">%2$s</xliff:g> "<b></b>"這個帳戶新增使用者。要繼續嗎?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"語言偏好設定"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"地區偏好設定"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"請輸入語言名稱"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"建議語言"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"所有語言"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"搜尋"</string>
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index f257f6c..b6a8039e 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -211,15 +211,15 @@
<string name="global_action_bug_report" msgid="7934010578922304799">"Umbiko wephutha"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Thatha umbiko wesiphazamiso"</string>
<string name="bugreport_message" msgid="398447048750350456">"Lokhu kuzoqoqa ulwazi mayelana nesimo samanje sedivayisi yakho, ukuthumela imilayezo ye-imeyili. Kuzothatha isikhathi esincane kusuka ekuqaleni umbiko wesiphazamiso uze ulungele ukuthunyelwa; sicela ubekezele."</string>
- <!-- no translation found for bugreport_option_interactive_title (8635056131768862479) -->
+ <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Umbiko obandakanyayo"</string>
+ <string name="bugreport_option_interactive_summary" msgid="8180152634022797629">"Sebenzisa lokhu ngaphansi kwezimo eziningi. Kukuvumela ukuthi ulandelele ukuqhubeka kombiko uphinde ufake imininingwane engaphezulu mayelana nenkinga. Kungakhipha ezinye izigaba ezisetshenziswe kancane ezithatha isikhathi eside ukuze zibikwe."</string>
+ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Umbiko ogcwele"</string>
+ <!-- no translation found for bugreport_option_full_summary (6687306111256813257) -->
<skip />
- <!-- no translation found for bugreport_option_interactive_summary (8180152634022797629) -->
- <skip />
- <!-- no translation found for bugreport_option_full_title (6354382025840076439) -->
- <skip />
- <!-- no translation found for bugreport_option_full_summary (6440582052207304578) -->
- <skip />
- <!-- no translation found for bugreport_countdown (6878900193900090368) -->
+ <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+ <item quantity="one">Ithathela umbiko wesiphazamisi isithombe-skrini kumasekhondi angu-<xliff:g id="NUMBER_1">%d</xliff:g>.</item>
+ <item quantity="other">Ithathela umbiko wesiphazamisi isithombe-skrini kumasekhondi angu-<xliff:g id="NUMBER_1">%d</xliff:g>.</item>
+ </plurals>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Imodi ethulile"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Umsindo UVALIWE"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Umsindo UVULIWE"</string>
@@ -1049,8 +1049,8 @@
<string name="remote_bugreport_progress_notification_message_can_cancel" msgid="5743435483005099451">"Thinta ukuze ukhansele"</string>
<string name="select_input_method" msgid="8547250819326693584">"Shintsha ikhibhodi"</string>
<string name="configure_input_methods" msgid="4769971288371946846">"Khetha amakhibhodi"</string>
- <string name="show_ime" msgid="9157568568695230830">"Bonisa indlela yokufaka"</string>
- <string name="hardware" msgid="7517821086888990278">"I-Hardware"</string>
+ <string name="show_ime" msgid="2506087537466597099">"Yigcine kusikrini ngenkathi kusebenza ikhibhodi ephathekayo"</string>
+ <string name="hardware" msgid="194658061510127999">"Bonisa ikhibhodi ebonakalayo"</string>
<string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Khetha isendlalelo sekhibhodi"</string>
<string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Thinta ukuze ukhethe isendlalelo sekhibhodi."</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
@@ -1531,4 +1531,10 @@
<string name="user_creation_cannot_add_any_more" msgid="6244197709981359266"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" izama ukungeza umsebenzisi omusha, kodwa umkhawulo womsebenzisi ufinyelelwe."</string>
<string name="user_creation_account_exists" msgid="4880171855014489789"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" izama ukungeza umsebenzisi omusha, kodwa i-akhawunti "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>" isivele ikhona kule divayisi. Qhubeka noma kunjalo?"</string>
<string name="user_creation_adding" msgid="3206420861363021392"><b>"<xliff:g id="APP">%1$s</xliff:g>"</b>" izama ukungeza umsebenzisi omusha we-akhawunti "<b>"<xliff:g id="ACCOUNT">%2$s</xliff:g>"</b>". Qhubeka?"</string>
+ <string name="language_selection_title" msgid="7181332986330337171">"Okuncamelayo kolimi"</string>
+ <string name="country_selection_title" msgid="2954859441620215513">"Okuncamelayo kwesifunda"</string>
+ <string name="search_language_hint" msgid="7042102592055108574">"Thayipha igama lolimi"</string>
+ <string name="language_picker_section_suggested" msgid="8414489646861640885">"Okuphakanyisiwe"</string>
+ <string name="language_picker_section_all" msgid="3097279199511617537">"Zonke izilimi"</string>
+ <string name="locale_search_menu" msgid="2560710726687249178">"Sesha"</string>
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index e0f9eca..713038b 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3412,6 +3412,32 @@
<attr name="name" />
</declare-styleable>
+ <!-- Use <code>host-nfcf-service</code> as the root tag of the XML resource that
+ describes an {@link android.nfc.cardemulation.HostNfcFService} service, which
+ is referenced from its {@link android.nfc.cardemulation.HostNfcFService#SERVICE_META_DATA}
+ entry. -->
+ <declare-styleable name="HostNfcFService">
+ <!-- Short description of the functionality the service implements. This attribute
+ is mandatory.-->
+ <attr name="description" />
+ </declare-styleable>
+
+ <!-- Specify one or more <code>system-code-filter</code> elements inside a
+ <code>host-nfcf-service</code> element to specify a System Code
+ your service can handle. -->
+ <declare-styleable name="SystemCodeFilter">
+ <!-- The System Code. This attribute is mandatory. -->
+ <attr name="name" />
+ </declare-styleable>
+
+ <!-- Specify one or more <code>nfcid2-filter</code> elements inside a
+ <code>host-nfcf-service</code> element to specify a NFCID2
+ your service can handle. -->
+ <declare-styleable name="Nfcid2Filter">
+ <!-- The NFCID2. This attribute is mandatory. -->
+ <attr name="name" />
+ </declare-styleable>
+
<declare-styleable name="ActionMenuItemView">
<attr name="minWidth" />
</declare-styleable>
@@ -7512,6 +7538,10 @@
<!-- Flag indicating whether this voice interaction service is capable of being launched
from the keyguard. -->
<attr name="supportsLaunchVoiceAssistFromKeyguard" format="boolean" />
+ <!-- Flag indicating whether this voice interaction service can handle local voice
+ interaction requests from an Activity. This flag is new in
+ {@link android.os.Build.VERSION_CODES#N} and not used in previous versions. -->
+ <attr name="supportsLocalInteraction" format="boolean" />
</declare-styleable>
<!-- Use <code>voice-enrollment-application</code>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index c883b1f8..57132ea 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2690,6 +2690,7 @@
<public type="attr" name="tickMarkTintMode" />
<public type="attr" name="canPerformGestures" />
<public type="attr" name="externalService" />
+ <public type="attr" name="supportsLocalInteraction" />
<public type="style" name="Theme.Material.Light.DialogWhenLarge.DarkActionBar" />
<public type="style" name="Widget.Material.SeekBar.Discrete" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index eebdd61..28c76bb 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -492,17 +492,17 @@
current device state, to send as an e-mail message. It will take a little
time from starting the bug report until it is ready to be sent; please be
patient.</string>
- <!-- Title in the bugreport dialog for the interactive workflow. [CHAR LIMIT=20] -->
+ <!-- Title in the bugreport dialog for the interactive workflow. Should fit in one line. [CHAR LIMIT=30] -->
<string name="bugreport_option_interactive_title">Interactive report</string>
<!-- Summary in the bugreport dialog for the interactive workflow. [CHAR LIMIT=NONE] -->
<string name="bugreport_option_interactive_summary">Use this under most circumstances.
It allows you to track progress of the report and enter more details about the problem.
It might omit some less-used sections that take a long time to report.</string>
- <!-- Title in the bugreport dialog for the full workflow. [CHAR LIMIT=20] -->
+ <!-- Title in the bugreport dialog for the full workflow. Should fit in one line. [CHAR LIMIT=30] -->
<string name="bugreport_option_full_title">Full report</string>
- <!-- Summary in the bugreport dialog for the full workflow. [CHAR LIMIT=20] -->
- <string name="bugreport_option_full_summary">Use this option for minimal interference when
- your device is unresponsive or too slow, or when you need all sections.
+ <!-- Summary in the bugreport dialog for the full workflow. [CHAR LIMIT=NONE] -->
+ <string name="bugreport_option_full_summary">Use this option for minimal system interference when
+ your device is unresponsive or too slow, or when you need all report sections.
Does not take a screenshot or allow you to enter more details.</string>
<!-- Toast message informing user in how many seconds a bugreport screenshot will be taken -->
<plurals name="bugreport_countdown">
@@ -4164,4 +4164,14 @@
<!-- Menu item in the locale menu [CHAR LIMIT=30] -->
<string name="locale_search_menu">Search</string>
+ <!-- Title for dialog displayed when work profile is turned off. [CHAR LIMIT=30] -->
+ <string name="work_mode_off_title">Work mode is OFF</string>
+ <!-- Message displayed in dialog when work profile is turned off. [CHAR LIMIT=NONE] -->
+ <string name="work_mode_off_message">Allow work profile to function, including apps, background sync, and related features.</string>
+ <!-- Title for button to turn on work profile. [CHAR LIMIT=NONE] -->
+ <string name="work_mode_turn_on">Turn on</string>
+ <!-- Title for dialog displayed when a packge is suspended by device admin. [CHAR LIMIT=30] -->
+ <string name="suspended_package_title">%1$s disabled</string>
+ <!-- Message for dialog displayed when a packge is suspended by device admin. [CHAR LIMIT=NONE] -->
+ <string name="suspended_package_message">Disabled by %1$s administrator. Contact them to learn more.</string>
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a5d0020..57ff243 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2485,4 +2485,12 @@
<java-symbol type="string" name="language_selection_title" />
<java-symbol type="string" name="search_language_hint" />
+ <java-symbol type="layout" name="unlaunchable_app_activity" />
+ <java-symbol type="id" name="unlaunchable_app_title" />
+ <java-symbol type="id" name="unlaunchable_app_message" />
+ <java-symbol type="string" name="work_mode_off_title" />
+ <java-symbol type="string" name="work_mode_off_message" />
+ <java-symbol type="string" name="work_mode_turn_on" />
+ <java-symbol type="string" name="suspended_package_title" />
+ <java-symbol type="string" name="suspended_package_message" />
</resources>
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 77d2ada..5a08887 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -78,10 +78,10 @@
<shortcode country="cz" premium="9\\d{6,7}" free="116\\d{3}" />
<!-- Germany: 4-5 digits plus 1232xxx (premium codes from http://www.vodafone.de/infofaxe/537.pdf and http://premiumdienste.eplus.de/pdf/kodex.pdf), plus EU. To keep the premium regex from being too large, it only includes payment processors that have been used by SMS malware, with the regular pattern matching the other premium short codes. -->
- <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529" />
+ <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296" />
<!-- Denmark: see http://iprs.webspacecommerce.com/Denmark-Premium-Rate-Numbers -->
- <shortcode country="dk" pattern="\\d{4,5}" premium="1\\d{3}" free="116\\d{3}" />
+ <shortcode country="dk" pattern="\\d{4,5}" premium="1\\d{3}" free="116\\d{3}|4665" />
<!-- Estonia: short codes 3-5 digits starting with 1, plus premium 7 digit numbers starting with 90, plus EU.
http://www.tja.ee/public/documents/Elektrooniline_side/Oigusaktid/ENG/Estonian_Numbering_Plan_annex_06_09_2010.mht -->
@@ -102,7 +102,7 @@
<!-- United Kingdom (Great Britain): 4-6 digits, common codes [5-8]xxxx, plus EU:
http://www.short-codes.com/media/Co-regulatoryCodeofPracticeforcommonshortcodes170206.pdf,
visual voicemail code for EE: 887 -->
- <shortcode country="gb" pattern="\\d{4,6}" premium="[5-8]\\d{4}" free="116\\d{3}|887" />
+ <shortcode country="gb" pattern="\\d{4,6}" premium="[5-8]\\d{4}" free="116\\d{3}|887|83669|34664|40406" />
<!-- Georgia: 4 digits, known premium codes listed -->
<shortcode country="ge" pattern="\\d{4}" premium="801[234]|888[239]" />
@@ -114,6 +114,9 @@
http://clients.txtnation.com/entries/209633-hungary-premium-sms-short-code-regulations -->
<shortcode country="hu" pattern="[01](?:\\d{3}|\\d{9})" premium="0691227910|1784" free="116\\d{3}" />
+ <!-- Indonesia -->
+ <shortcode country="id" free="99477|6006|46645" />
+
<!-- Ireland: 5 digits, 5xxxx (50xxx=free, 5[12]xxx=standard), plus EU:
http://www.comreg.ie/_fileupload/publications/ComReg1117.pdf -->
<shortcode country="ie" pattern="\\d{5}" premium="5[3-9]\\d{3}" free="50\\d{3}|116\\d{3}" standard="5[12]\\d{3}" />
@@ -123,7 +126,7 @@
<!-- Italy: 5 digits (premium=4xxxx), plus EU:
http://clients.txtnation.com/attachments/token/di5kfblvubttvlw/?name=Italy_CASP_EN.pdf -->
- <shortcode country="it" pattern="\\d{5}" premium="4\\d{4}" free="116\\d{3}" />
+ <shortcode country="it" pattern="\\d{5}" premium="4\\d{4}" free="116\\d{3}|4112503" />
<!-- Japan: 8083 used by SOFTBANK_DCB_2 -->
<shortcode country="jp" free="8083" />
@@ -137,6 +140,9 @@
<!-- Kazakhstan: 4 digits, known premium codes listed: http://smscoin.net/info/pricing-kazakhstan/ -->
<shortcode country="kz" pattern="\\d{4}" premium="335[02]|4161|444[469]|77[2359]0|8444|919[3-5]|968[2-5]" />
+ <!-- Kuwait -->
+ <shortcode country="kw" free="1378|50420|94006" />
+
<!-- Lithuania: 3-5 digits, known premium codes listed, plus EU -->
<shortcode country="lt" pattern="\\d{3,5}" premium="13[89]1|1394|16[34]5" free="116\\d{3}" />
@@ -148,13 +154,13 @@
<shortcode country="lv" pattern="\\d{4}" premium="18(?:19|63|7[1-4])" free="116\\d{3}" />
<!-- Mexico: 4-5 digits (not confirmed), known premium codes listed -->
- <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" />
+ <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" free="46645" />
<!-- Malaysia: 5 digits: http://www.skmm.gov.my/attachment/Consumer_Regulation/Mobile_Content_Services_FAQs.pdf -->
- <shortcode country="my" pattern="\\d{5}" premium="32298|33776" />
+ <shortcode country="my" pattern="\\d{5}" premium="32298|33776" free="22099" />
<!-- The Netherlands, 4 digits, known premium codes listed, plus EU -->
- <shortcode country="nl" pattern="\\d{4}" premium="4466|5040" free="116\\d{3}" />
+ <shortcode country="nl" pattern="\\d{4}" premium="4466|5040" free="116\\d{3}|2223" />
<!-- Norway: 4-5 digits (not confirmed), known premium codes listed -->
<shortcode country="no" pattern="\\d{4,5}" premium="2201|222[67]" />
@@ -163,10 +169,10 @@
<shortcode country="nz" pattern="\\d{3,4}" premium="3903|8995|4679" />
<!-- Philippines -->
- <shortcode country="ph" free="2147" />
+ <shortcode country="ph" free="2147|5495|5496" />
<!-- Poland: 4-5 digits (not confirmed), known premium codes listed, plus EU -->
- <shortcode country="pl" pattern="\\d{4,5}" premium="74240|79(?:10|866)|92525" free="116\\d{3}|8012" />
+ <shortcode country="pl" pattern="\\d{4,5}" premium="74240|79(?:10|866)|92525" free="116\\d{3}|8012|80921" />
<!-- Portugal: 5 digits, plus EU:
http://clients.txtnation.com/entries/158326-portugal-premium-sms-short-code-regulations -->
@@ -210,4 +216,7 @@
visual voicemail code for T-Mobile: 122 -->
<shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327|654)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" free="122|87902" />
+ <!-- Vietnam -->
+ <shortcode country="vn" free="5001" />
+
</shortcodes>
diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h
index 88fecce..d8801b8 100644
--- a/include/androidfw/ResourceTypes.h
+++ b/include/androidfw/ResourceTypes.h
@@ -1128,7 +1128,6 @@
// configuration. (eg. Hant, Latn, etc.). Interpreted in conjunction with
// the locale field.
char localeScript[4];
- bool localeScriptWasProvided;
// A single BCP-47 variant subtag. Will vary in length between 4 and 8
// chars. Interpreted in conjunction with the locale field.
@@ -1152,6 +1151,10 @@
uint32_t screenConfig2;
};
+ // If true, it means that the script of the locale was explicitly provided.
+ // If false, it means that the script was automatically computed.
+ bool localeScriptWasProvided;
+
void copyFromDeviceNoSwap(const ResTable_config& o);
void copyFromDtoH(const ResTable_config& o);
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 8ba6318..483ccf7 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -235,7 +235,8 @@
tests/unit/LinearAllocatorTests.cpp \
tests/unit/VectorDrawableTests.cpp \
tests/unit/OffscreenBufferPoolTests.cpp \
- tests/unit/StringUtilsTests.cpp
+ tests/unit/StringUtilsTests.cpp \
+ tests/unit/BufferPoolTests.cpp
ifeq (true, $(HWUI_NEW_OPS))
LOCAL_SRC_FILES += \
diff --git a/libs/hwui/BufferPool.h b/libs/hwui/BufferPool.h
new file mode 100644
index 0000000..9bda233
--- /dev/null
+++ b/libs/hwui/BufferPool.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <utils/RefBase.h>
+#include <utils/Log.h>
+
+#include <atomic>
+#include <stdint.h>
+#include <memory>
+#include <mutex>
+
+namespace android {
+namespace uirenderer {
+
+/*
+ * Simple thread-safe pool of int64_t arrays of a provided size.
+ *
+ * Permits allocating a client-provided max number of buffers.
+ * If all buffers are in use, refuses to service any more
+ * acquire requests until buffers are re-released to the pool.
+ */
+class BufferPool : public VirtualLightRefBase {
+public:
+ class Buffer {
+ public:
+ int64_t* getBuffer() { return mBuffer.get(); }
+ size_t getSize() { return mSize; }
+
+ void release() {
+ LOG_ALWAYS_FATAL_IF(mPool.get() == nullptr, "attempt to release unacquired buffer");
+ mPool->release(this);
+ }
+
+ Buffer* incRef() {
+ mRefs++;
+ return this;
+ }
+
+ int decRef() {
+ int refs = mRefs.fetch_sub(1);
+ LOG_ALWAYS_FATAL_IF(refs == 0, "buffer reference decremented below 0");
+ return refs - 1;
+ }
+
+ private:
+ friend class BufferPool;
+
+ Buffer(BufferPool* pool, size_t size) {
+ mSize = size;
+ mBuffer.reset(new int64_t[size]);
+ mPool = pool;
+ mRefs++;
+ }
+
+ void setPool(BufferPool* pool) {
+ mPool = pool;
+ }
+
+ std::unique_ptr<Buffer> mNext;
+ std::unique_ptr<int64_t[]> mBuffer;
+ sp<BufferPool> mPool;
+ size_t mSize;
+
+ std::atomic_int mRefs;
+ };
+
+ BufferPool(size_t bufferSize, size_t count)
+ : mBufferSize(bufferSize), mCount(count) {}
+
+ /**
+ * Acquires a buffer from the buffer pool if available.
+ *
+ * Only `mCount` buffers are allowed to be in use at a single
+ * instance.
+ *
+ * If no buffer is available, i.e. `mCount` buffers are in use,
+ * returns nullptr.
+ *
+ * The pointer returned from this method *MUST NOT* be freed, instead
+ * BufferPool::release() must be called upon it when the client
+ * is done with it. Failing to release buffers will eventually make the
+ * BufferPool refuse to service any more BufferPool::acquire() requests.
+ */
+ BufferPool::Buffer* acquire() {
+ std::lock_guard<std::mutex> lock(mLock);
+
+ if (mHead.get() != nullptr) {
+ BufferPool::Buffer* res = mHead.release();
+ mHead = std::move(res->mNext);
+ res->mNext.reset(nullptr);
+ res->setPool(this);
+ res->incRef();
+ return res;
+ }
+
+ if (mAllocatedCount < mCount) {
+ ++mAllocatedCount;
+ return new BufferPool::Buffer(this, mBufferSize);
+ }
+
+ return nullptr;
+ }
+
+ /**
+ * Releases a buffer previously acquired by BufferPool::acquire().
+ *
+ * The released buffer is not valid after calling this method and
+ * attempting to use will result in undefined behavior.
+ */
+ void release(BufferPool::Buffer* buffer) {
+ std::lock_guard<std::mutex> lock(mLock);
+
+ if (buffer->decRef() != 0) {
+ return;
+ }
+
+ buffer->setPool(nullptr);
+
+ BufferPool::Buffer* list = mHead.get();
+ if (list == nullptr) {
+ mHead.reset(buffer);
+ mHead->mNext.reset(nullptr);
+ return;
+ }
+
+ while (list->mNext.get() != nullptr) {
+ list = list->mNext.get();
+ }
+
+ list->mNext.reset(buffer);
+ }
+
+ /*
+ * Used for testing.
+ */
+ size_t getAvailableBufferCount() {
+ size_t remainingToAllocateCount = mCount - mAllocatedCount;
+
+ BufferPool::Buffer* list = mHead.get();
+ if (list == nullptr) return remainingToAllocateCount;
+
+ int count = 1;
+ while (list->mNext.get() != nullptr) {
+ count++;
+ list = list->mNext.get();
+ }
+
+ return count + remainingToAllocateCount;
+ }
+
+private:
+ mutable std::mutex mLock;
+
+ size_t mBufferSize;
+ size_t mCount;
+ size_t mAllocatedCount = 0;
+ std::unique_ptr<BufferPool::Buffer> mHead;
+};
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/FrameInfo.h b/libs/hwui/FrameInfo.h
index f8013ab..0baca39 100644
--- a/libs/hwui/FrameInfo.h
+++ b/libs/hwui/FrameInfo.h
@@ -118,6 +118,10 @@
set(FrameInfoIndex::Flags) |= static_cast<uint64_t>(frameInfoFlag);
}
+ const int64_t* data() const {
+ return mFrameInfo;
+ }
+
inline int64_t operator[](FrameInfoIndex index) const {
return get(index);
}
diff --git a/libs/hwui/FrameStatsObserver.h b/libs/hwui/FrameStatsObserver.h
new file mode 100644
index 0000000..7abc9f1
--- /dev/null
+++ b/libs/hwui/FrameStatsObserver.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <utils/RefBase.h>
+
+#include "BufferPool.h"
+
+namespace android {
+namespace uirenderer {
+
+class FrameStatsObserver : public VirtualLightRefBase {
+public:
+ virtual void notify(BufferPool::Buffer* buffer);
+};
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/FrameStatsReporter.h b/libs/hwui/FrameStatsReporter.h
new file mode 100644
index 0000000..b8a9432
--- /dev/null
+++ b/libs/hwui/FrameStatsReporter.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <utils/RefBase.h>
+#include <utils/Log.h>
+
+#include "BufferPool.h"
+#include "FrameInfo.h"
+#include "FrameStatsObserver.h"
+
+#include <string.h>
+#include <vector>
+
+namespace android {
+namespace uirenderer {
+
+class FrameStatsReporter {
+public:
+ FrameStatsReporter() {
+ mBufferPool = new BufferPool(kBufferSize, kBufferCount);
+ LOG_ALWAYS_FATAL_IF(mBufferPool.get() == nullptr, "OOM: unable to allocate buffer pool");
+ }
+
+ void addObserver(FrameStatsObserver* observer) {
+ mObservers.push_back(observer);
+ }
+
+ bool removeObserver(FrameStatsObserver* observer) {
+ for (size_t i = 0; i < mObservers.size(); i++) {
+ if (mObservers[i].get() == observer) {
+ mObservers.erase(mObservers.begin() + i);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool hasObservers() {
+ return mObservers.size() > 0;
+ }
+
+ void reportFrameStats(const int64_t* stats) {
+ BufferPool::Buffer* statsBuffer = mBufferPool->acquire();
+
+ if (statsBuffer != nullptr) {
+ // copy in frame stats
+ memcpy(statsBuffer->getBuffer(), stats, kBufferSize * sizeof(*stats));
+
+ // notify on requested threads
+ for (size_t i = 0; i < mObservers.size(); i++) {
+ mObservers[i]->notify(statsBuffer);
+ }
+
+ // drop our reference
+ statsBuffer->release();
+ } else {
+ mDroppedReports++;
+ }
+ }
+
+ int getDroppedReports() { return mDroppedReports; }
+
+private:
+ static const size_t kBufferCount = 3;
+ static const size_t kBufferSize = static_cast<size_t>(FrameInfoIndex::NumIndexes);
+
+ std::vector< sp<FrameStatsObserver> > mObservers;
+
+ sp<BufferPool> mBufferPool;
+
+ int mDroppedReports = 0;
+};
+
+}; // namespace uirenderer
+}; // namespace android
+
diff --git a/libs/hwui/Texture.cpp b/libs/hwui/Texture.cpp
index 92de894..5046d37 100644
--- a/libs/hwui/Texture.cpp
+++ b/libs/hwui/Texture.cpp
@@ -41,9 +41,7 @@
void Texture::setWrapST(GLenum wrapS, GLenum wrapT, bool bindTexture, bool force,
GLenum renderTarget) {
- if (mFirstWrap || force || wrapS != mWrapS || wrapT != mWrapT) {
- mFirstWrap = false;
-
+ if (force || wrapS != mWrapS || wrapT != mWrapT) {
mWrapS = wrapS;
mWrapT = wrapT;
@@ -59,9 +57,7 @@
void Texture::setFilterMinMag(GLenum min, GLenum mag, bool bindTexture, bool force,
GLenum renderTarget) {
- if (mFirstFilter || force || min != mMinFilter || mag != mMagFilter) {
- mFirstFilter = false;
-
+ if (force || min != mMinFilter || mag != mMagFilter) {
mMinFilter = min;
mMagFilter = mag;
@@ -92,14 +88,21 @@
return true;
}
+void Texture::resetCachedParams() {
+ mWrapS = GL_REPEAT;
+ mWrapT = GL_REPEAT;
+ mMinFilter = GL_NEAREST_MIPMAP_LINEAR;
+ mMagFilter = GL_LINEAR;
+}
+
void Texture::upload(GLint internalformat, uint32_t width, uint32_t height,
GLenum format, GLenum type, const void* pixels) {
GL_CHECKPOINT();
- mCaches.textureState().activateTexture(0);
bool needsAlloc = updateSize(width, height, internalformat);
if (!mId) {
glGenTextures(1, &mId);
needsAlloc = true;
+ resetCachedParams();
}
mCaches.textureState().bindTexture(GL_TEXTURE_2D, mId);
if (needsAlloc) {
@@ -207,10 +210,12 @@
// If the texture had mipmap enabled but not anymore,
// force a glTexImage2D to discard the mipmap levels
bool needsAlloc = canMipMap && mipMap && !bitmap.hasHardwareMipMap();
+ bool setDefaultParams = false;
if (!mId) {
glGenTextures(1, &mId);
needsAlloc = true;
+ setDefaultParams = true;
}
GLint format, type;
@@ -245,11 +250,8 @@
}
}
- if (mFirstFilter) {
+ if (setDefaultParams) {
setFilter(GL_NEAREST);
- }
-
- if (mFirstWrap) {
setWrap(GL_CLAMP_TO_EDGE);
}
}
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index 4e8e6dc..9749f73 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -149,26 +149,22 @@
// Returns true if the size changed, false if it was the same
bool updateSize(uint32_t width, uint32_t height, GLint format);
+ void resetCachedParams();
GLuint mId = 0;
uint32_t mWidth = 0;
uint32_t mHeight = 0;
GLint mFormat = 0;
- /**
- * Last wrap modes set on this texture.
+ /* See GLES spec section 3.8.14
+ * "In the initial state, the value assigned to TEXTURE_MIN_FILTER is
+ * NEAREST_MIPMAP_LINEAR and the value for TEXTURE_MAG_FILTER is LINEAR.
+ * s, t, and r wrap modes are all set to REPEAT."
*/
- GLenum mWrapS = GL_CLAMP_TO_EDGE;
- GLenum mWrapT = GL_CLAMP_TO_EDGE;
-
- /**
- * Last filters set on this texture.
- */
- GLenum mMinFilter = GL_NEAREST;
- GLenum mMagFilter = GL_NEAREST;
-
- bool mFirstFilter = true;
- bool mFirstWrap = true;
+ GLenum mWrapS = GL_REPEAT;
+ GLenum mWrapT = GL_REPEAT;
+ GLenum mMinFilter = GL_NEAREST_MIPMAP_LINEAR;
+ GLenum mMagFilter = GL_LINEAR;
Caches& mCaches;
}; // struct Texture
diff --git a/libs/hwui/renderstate/OffscreenBufferPool.cpp b/libs/hwui/renderstate/OffscreenBufferPool.cpp
index 98c94df..54f38e8 100644
--- a/libs/hwui/renderstate/OffscreenBufferPool.cpp
+++ b/libs/hwui/renderstate/OffscreenBufferPool.cpp
@@ -41,6 +41,7 @@
, texture(caches) {
uint32_t width = computeIdealDimension(viewportWidth);
uint32_t height = computeIdealDimension(viewportHeight);
+ caches.textureState().activateTexture(0);
texture.resize(width, height, GL_RGBA);
texture.blend = true;
texture.setWrap(GL_CLAMP_TO_EDGE);
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index 6f8d627..cdd2da0 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -505,6 +505,9 @@
mJankTracker.addFrame(*mCurrentFrameInfo);
mRenderThread.jankTracker().addFrame(*mCurrentFrameInfo);
+ if (CC_UNLIKELY(mFrameStatsReporter.get() != nullptr)) {
+ mFrameStatsReporter->reportFrameStats(mCurrentFrameInfo->data());
+ }
GpuMemoryTracker::onFrameCompleted();
}
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 8e64cbb..270fb1f 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -20,6 +20,7 @@
#include "DamageAccumulator.h"
#include "FrameInfo.h"
#include "FrameInfoVisualizer.h"
+#include "FrameStatsReporter.h"
#include "IContextFactory.h"
#include "LayerUpdateQueue.h"
#include "RenderNode.h"
@@ -139,6 +140,31 @@
return mRenderThread.renderState();
}
+ void addFrameStatsObserver(FrameStatsObserver* observer) {
+ if (mFrameStatsReporter.get() == nullptr) {
+ mFrameStatsReporter.reset(new FrameStatsReporter());
+ }
+
+ mFrameStatsReporter->addObserver(observer);
+ }
+
+ void removeFrameStatsObserver(FrameStatsObserver* observer) {
+ if (mFrameStatsReporter.get() != nullptr) {
+ mFrameStatsReporter->removeObserver(observer);
+ if (!mFrameStatsReporter->hasObservers()) {
+ mFrameStatsReporter.reset(nullptr);
+ }
+ }
+ }
+
+ long getDroppedFrameReportCount() {
+ if (mFrameStatsReporter.get() != nullptr) {
+ return mFrameStatsReporter->getDroppedReports();
+ }
+
+ return 0;
+ }
+
private:
friend class RegisterFrameCallbackTask;
// TODO: Replace with something better for layer & other GL object
@@ -187,6 +213,7 @@
std::string mName;
JankTracker mJankTracker;
FrameInfoVisualizer mProfiler;
+ std::unique_ptr<FrameStatsReporter> mFrameStatsReporter;
std::set<RenderNode*> mPrefetechedLayers;
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index db2a2c8..1d1b144 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -568,6 +568,54 @@
post(task);
}
+CREATE_BRIDGE2(addFrameStatsObserver, CanvasContext* context,
+ FrameStatsObserver* frameStatsObserver) {
+ args->context->addFrameStatsObserver(args->frameStatsObserver);
+ if (args->frameStatsObserver != nullptr) {
+ args->frameStatsObserver->decStrong(args->context);
+ }
+ return nullptr;
+}
+
+void RenderProxy::addFrameStatsObserver(FrameStatsObserver* observer) {
+ SETUP_TASK(addFrameStatsObserver);
+ args->context = mContext;
+ args->frameStatsObserver = observer;
+ if (observer != nullptr) {
+ observer->incStrong(mContext);
+ }
+ post(task);
+}
+
+CREATE_BRIDGE2(removeFrameStatsObserver, CanvasContext* context,
+ FrameStatsObserver* frameStatsObserver) {
+ args->context->removeFrameStatsObserver(args->frameStatsObserver);
+ if (args->frameStatsObserver != nullptr) {
+ args->frameStatsObserver->decStrong(args->context);
+ }
+ return nullptr;
+}
+
+void RenderProxy::removeFrameStatsObserver(FrameStatsObserver* observer) {
+ SETUP_TASK(removeFrameStatsObserver);
+ args->context = mContext;
+ args->frameStatsObserver = observer;
+ if (observer != nullptr) {
+ observer->incStrong(mContext);
+ }
+ post(task);
+}
+
+CREATE_BRIDGE1(getDroppedFrameReportCount, CanvasContext* context) {
+ return (void*) args->context->getDroppedFrameReportCount();
+}
+
+long RenderProxy::getDroppedFrameReportCount() {
+ SETUP_TASK(getDroppedFrameReportCount);
+ args->context = mContext;
+ return (long) postAndWait(task);
+}
+
void RenderProxy::post(RenderTask* task) {
mRenderThread.queue(task);
}
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 0f91b2a..4180d802 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -29,6 +29,7 @@
#include <utils/StrongPointer.h>
#include "../Caches.h"
+#include "../FrameStatsObserver.h"
#include "../IContextFactory.h"
#include "CanvasContext.h"
#include "DrawFrameTask.h"
@@ -112,6 +113,10 @@
ANDROID_API void drawRenderNode(RenderNode* node);
ANDROID_API void setContentDrawBounds(int left, int top, int right, int bottom);
+ ANDROID_API void addFrameStatsObserver(FrameStatsObserver* observer);
+ ANDROID_API void removeFrameStatsObserver(FrameStatsObserver* observer);
+ ANDROID_API long getDroppedFrameReportCount();
+
private:
RenderThread& mRenderThread;
CanvasContext* mContext;
diff --git a/libs/hwui/tests/unit/BufferPoolTests.cpp b/libs/hwui/tests/unit/BufferPoolTests.cpp
new file mode 100644
index 0000000..09bd302
--- /dev/null
+++ b/libs/hwui/tests/unit/BufferPoolTests.cpp
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include <BufferPool.h>
+#include <utils/StrongPointer.h>
+
+namespace android {
+namespace uirenderer {
+
+TEST(BufferPool, acquireThenRelease) {
+ static const int numRuns = 5;
+
+ // 10 buffers of size 1
+ static const size_t bufferSize = 1;
+ static const size_t bufferCount = 10;
+ sp<BufferPool> pool = new BufferPool(bufferSize, bufferCount);
+
+ for (int run = 0; run < numRuns; run++) {
+ BufferPool::Buffer* acquiredBuffers[bufferCount];
+ for (size_t i = 0; i < bufferCount; i++) {
+ ASSERT_EQ(bufferCount - i, pool->getAvailableBufferCount());
+ acquiredBuffers[i] = pool->acquire();
+ ASSERT_NE(nullptr, acquiredBuffers[i]);
+ }
+
+ for (size_t i = 0; i < bufferCount; i++) {
+ ASSERT_EQ(i, pool->getAvailableBufferCount());
+ acquiredBuffers[i]->release();
+ acquiredBuffers[i] = nullptr;
+ }
+
+ ASSERT_EQ(bufferCount, pool->getAvailableBufferCount());
+ }
+}
+
+TEST(BufferPool, acquireReleaseInterleaved) {
+ static const int numRuns = 5;
+
+ // 10 buffers of size 1
+ static const size_t bufferSize = 1;
+ static const size_t bufferCount = 10;
+
+ sp<BufferPool> pool = new BufferPool(bufferSize, bufferCount);
+
+ for (int run = 0; run < numRuns; run++) {
+ BufferPool::Buffer* acquiredBuffers[bufferCount];
+
+ // acquire all
+ for (size_t i = 0; i < bufferCount; i++) {
+ ASSERT_EQ(bufferCount - i, pool->getAvailableBufferCount());
+ acquiredBuffers[i] = pool->acquire();
+ ASSERT_NE(nullptr, acquiredBuffers[i]);
+ }
+
+ // release half
+ for (size_t i = 0; i < bufferCount / 2; i++) {
+ ASSERT_EQ(i, pool->getAvailableBufferCount());
+ acquiredBuffers[i]->release();
+ acquiredBuffers[i] = nullptr;
+ }
+
+ const size_t expectedRemaining = bufferCount / 2;
+ ASSERT_EQ(expectedRemaining, pool->getAvailableBufferCount());
+
+ // acquire half
+ for (size_t i = 0; i < bufferCount / 2; i++) {
+ ASSERT_EQ(expectedRemaining - i, pool->getAvailableBufferCount());
+ acquiredBuffers[i] = pool->acquire();
+ }
+
+ // acquire one more, should fail
+ ASSERT_EQ(nullptr, pool->acquire());
+
+ // release all
+ for (size_t i = 0; i < bufferCount; i++) {
+ ASSERT_EQ(i, pool->getAvailableBufferCount());
+ acquiredBuffers[i]->release();
+ acquiredBuffers[i] = nullptr;
+ }
+
+ ASSERT_EQ(bufferCount, pool->getAvailableBufferCount());
+ }
+}
+
+};
+};
diff --git a/libs/hwui/utils/TestWindowContext.cpp b/libs/hwui/utils/TestWindowContext.cpp
index dcc4946..b0431ce 100644
--- a/libs/hwui/utils/TestWindowContext.cpp
+++ b/libs/hwui/utils/TestWindowContext.cpp
@@ -138,8 +138,8 @@
// Move the pixels into the destination SkBitmap
- SK_ALWAYSBREAK(nativeBuffer.format == android::PIXEL_FORMAT_RGBA_8888 &&
- "Native buffer not RGBA!");
+ LOG_ALWAYS_FATAL_IF(nativeBuffer.format != android::PIXEL_FORMAT_RGBA_8888,
+ "Native buffer not RGBA!");
SkImageInfo nativeConfig =
SkImageInfo::Make(nativeBuffer.width, nativeBuffer.height,
kRGBA_8888_SkColorType, kPremul_SkAlphaType);
@@ -153,8 +153,8 @@
return false;
}
- SK_ALWAYSBREAK(bmp->colorType() == kRGBA_8888_SkColorType &&
- "Destination buffer not RGBA!");
+ LOG_ALWAYS_FATAL_IF(bmp->colorType() != kRGBA_8888_SkColorType,
+ "Destination buffer not RGBA!");
success =
nativeWrapper.readPixels(destinationConfig, bmp->getPixels(), bmp->rowBytes(), 0, 0);
if (!success) {
diff --git a/media/java/android/mtp/MtpDeviceInfo.java b/media/java/android/mtp/MtpDeviceInfo.java
index 1ceca84..2e4f451 100644
--- a/media/java/android/mtp/MtpDeviceInfo.java
+++ b/media/java/android/mtp/MtpDeviceInfo.java
@@ -30,6 +30,7 @@
private String mVersion;
private String mSerialNumber;
private int[] mOperationsSupported;
+ private int[] mEventsSupported;
// only instantiated via JNI
private MtpDeviceInfo() {
@@ -74,9 +75,71 @@
/**
* Returns operation code supported by the device.
*
- * @return supported operation code
+ * @return supported operation code. Can be null if device does not provide the property.
+ * @see MtpConstants#OPERATION_GET_DEVICE_INFO
+ * @see MtpConstants#OPERATION_OPEN_SESSION
+ * @see MtpConstants#OPERATION_CLOSE_SESSION
+ * @see MtpConstants#OPERATION_GET_STORAGE_I_DS
+ * @see MtpConstants#OPERATION_GET_STORAGE_INFO
+ * @see MtpConstants#OPERATION_GET_NUM_OBJECTS
+ * @see MtpConstants#OPERATION_GET_OBJECT_HANDLES
+ * @see MtpConstants#OPERATION_GET_OBJECT_INFO
+ * @see MtpConstants#OPERATION_GET_OBJECT
+ * @see MtpConstants#OPERATION_GET_THUMB
+ * @see MtpConstants#OPERATION_DELETE_OBJECT
+ * @see MtpConstants#OPERATION_SEND_OBJECT_INFO
+ * @see MtpConstants#OPERATION_SEND_OBJECT
+ * @see MtpConstants#OPERATION_INITIATE_CAPTURE
+ * @see MtpConstants#OPERATION_FORMAT_STORE
+ * @see MtpConstants#OPERATION_RESET_DEVICE
+ * @see MtpConstants#OPERATION_SELF_TEST
+ * @see MtpConstants#OPERATION_SET_OBJECT_PROTECTION
+ * @see MtpConstants#OPERATION_POWER_DOWN
+ * @see MtpConstants#OPERATION_GET_DEVICE_PROP_DESC
+ * @see MtpConstants#OPERATION_GET_DEVICE_PROP_VALUE
+ * @see MtpConstants#OPERATION_SET_DEVICE_PROP_VALUE
+ * @see MtpConstants#OPERATION_RESET_DEVICE_PROP_VALUE
+ * @see MtpConstants#OPERATION_TERMINATE_OPEN_CAPTURE
+ * @see MtpConstants#OPERATION_MOVE_OBJECT
+ * @see MtpConstants#OPERATION_COPY_OBJECT
+ * @see MtpConstants#OPERATION_GET_PARTIAL_OBJECT
+ * @see MtpConstants#OPERATION_INITIATE_OPEN_CAPTURE
+ * @see MtpConstants#OPERATION_GET_OBJECT_PROPS_SUPPORTED
+ * @see MtpConstants#OPERATION_GET_OBJECT_PROP_DESC
+ * @see MtpConstants#OPERATION_GET_OBJECT_PROP_VALUE
+ * @see MtpConstants#OPERATION_SET_OBJECT_PROP_VALUE
+ * @see MtpConstants#OPERATION_GET_OBJECT_REFERENCES
+ * @see MtpConstants#OPERATION_SET_OBJECT_REFERENCES
+ * @see MtpConstants#OPERATION_SKIP
*/
public final @Nullable int[] getOperationsSupported() {
return mOperationsSupported;
}
+
+ /**
+ * Returns event code supported by the device.
+ *
+ * @return supported event code. Can be null if device does not provide the property.
+ * @see MtpConstants#EVENT_UNDEFINED
+ * @see MtpConstants#EVENT_CANCEL_TRANSACTION
+ * @see MtpConstants#EVENT_OBJECT_ADDED
+ * @see MtpConstants#EVENT_OBJECT_REMOVED
+ * @see MtpConstants#EVENT_STORE_ADDED
+ * @see MtpConstants#EVENT_STORE_REMOVED
+ * @see MtpConstants#EVENT_DEVICE_PROP_CHANGED
+ * @see MtpConstants#EVENT_OBJECT_INFO_CHANGED
+ * @see MtpConstants#EVENT_DEVICE_INFO_CHANGED
+ * @see MtpConstants#EVENT_REQUEST_OBJECT_TRANSFER
+ * @see MtpConstants#EVENT_STORE_FULL
+ * @see MtpConstants#EVENT_DEVICE_RESET
+ * @see MtpConstants#EVENT_STORAGE_INFO_CHANGED
+ * @see MtpConstants#EVENT_CAPTURE_COMPLETE
+ * @see MtpConstants#EVENT_UNREPORTED_STATUS
+ * @see MtpConstants#EVENT_OBJECT_PROP_CHANGED
+ * @see MtpConstants#EVENT_OBJECT_PROP_DESC_CHANGED
+ * @see MtpConstants#EVENT_OBJECT_REFERENCES_CHANGED
+ */
+ public final @Nullable int[] getEventsSupported() {
+ return mEventsSupported;
+ }
}
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index 1c043e0..4ac62f5 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -574,6 +574,7 @@
case HAL_PIXEL_FORMAT_Y8:
// Single plane 8bpp data.
ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
+ pixelStride = 1;
break;
case HAL_PIXEL_FORMAT_YV12:
pixelStride = 1;
diff --git a/media/jni/android_mtp_MtpDevice.cpp b/media/jni/android_mtp_MtpDevice.cpp
index b1b3b62..8b7a926 100644
--- a/media/jni/android_mtp_MtpDevice.cpp
+++ b/media/jni/android_mtp_MtpDevice.cpp
@@ -25,6 +25,8 @@
#include <unistd.h>
#include <fcntl.h>
+#include <memory>
+
#include "jni.h"
#include "JNIHelp.h"
#include "ScopedPrimitiveArray.h"
@@ -66,6 +68,7 @@
static jfieldID field_deviceInfo_version;
static jfieldID field_deviceInfo_serialNumber;
static jfieldID field_deviceInfo_operationsSupported;
+static jfieldID field_deviceInfo_eventsSupported;
// MtpStorageInfo fields
static jfieldID field_storageInfo_storageId;
@@ -216,7 +219,7 @@
ALOGD("android_mtp_MtpDevice_get_device_info device is null");
return NULL;
}
- MtpDeviceInfo* deviceInfo = device->getDeviceInfo();
+ std::unique_ptr<MtpDeviceInfo> deviceInfo(device->getDeviceInfo());
if (!deviceInfo) {
ALOGD("android_mtp_MtpDevice_get_device_info deviceInfo is null");
return NULL;
@@ -224,7 +227,6 @@
jobject info = env->NewObject(clazz_deviceInfo, constructor_deviceInfo);
if (info == NULL) {
ALOGE("Could not create a MtpDeviceInfo object");
- delete deviceInfo;
return NULL;
}
@@ -242,17 +244,35 @@
env->NewStringUTF(deviceInfo->mSerial));
if (deviceInfo->mOperations) {
const size_t size = deviceInfo->mOperations->size();
- const jintArray operations = env->NewIntArray(size);
+ ScopedLocalRef<jintArray> operations(env, static_cast<jintArray>(env->NewIntArray(size)));
{
- ScopedIntArrayRW elements(env, operations);
+ ScopedIntArrayRW elements(env, operations.get());
+ if (elements.get() == NULL) {
+ ALOGE("Could not create operationsSupported element.");
+ return NULL;
+ }
for (size_t i = 0; i < size; ++i) {
elements[i] = deviceInfo->mOperations->itemAt(i);
}
+ env->SetObjectField(info, field_deviceInfo_operationsSupported, operations.get());
}
- env->SetObjectField(info, field_deviceInfo_operationsSupported, operations);
+ }
+ if (deviceInfo->mEvents) {
+ const size_t size = deviceInfo->mEvents->size();
+ ScopedLocalRef<jintArray> events(env, static_cast<jintArray>(env->NewIntArray(size)));
+ {
+ ScopedIntArrayRW elements(env, events.get());
+ if (elements.get() == NULL) {
+ ALOGE("Could not create eventsSupported element.");
+ return NULL;
+ }
+ for (size_t i = 0; i < size; ++i) {
+ elements[i] = deviceInfo->mEvents->itemAt(i);
+ }
+ env->SetObjectField(info, field_deviceInfo_eventsSupported, events.get());
+ }
}
- delete deviceInfo;
return info;
}
@@ -686,6 +706,11 @@
ALOGE("Can't find MtpDeviceInfo.mOperationsSupported");
return -1;
}
+ field_deviceInfo_eventsSupported = env->GetFieldID(clazz, "mEventsSupported", "[I");
+ if (field_deviceInfo_eventsSupported == NULL) {
+ ALOGE("Can't find MtpDeviceInfo.mEventsSupported");
+ return -1;
+ }
clazz_deviceInfo = (jclass)env->NewGlobalRef(clazz);
clazz = env->FindClass("android/mtp/MtpStorageInfo");
diff --git a/packages/DocumentsUI/res/drawable/cabinet.png b/packages/DocumentsUI/res/drawable/cabinet.png
new file mode 100644
index 0000000..da44023
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/cabinet.png
Binary files differ
diff --git a/packages/DocumentsUI/res/layout/dialog_create_dir.xml b/packages/DocumentsUI/res/layout/dialog_file_name.xml
similarity index 100%
rename from packages/DocumentsUI/res/layout/dialog_create_dir.xml
rename to packages/DocumentsUI/res/layout/dialog_file_name.xml
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml
index 1b5911d..223d729 100644
--- a/packages/DocumentsUI/res/layout/fragment_directory.xml
+++ b/packages/DocumentsUI/res/layout/fragment_directory.xml
@@ -36,8 +36,8 @@
android:background="@color/material_grey_50"
android:visibility="gone"/>
- <!-- The empty directory view -->
- <LinearLayout
+ <!-- The empty container view -->
+ <FrameLayout
android:id="@android:id/empty"
android:gravity="center"
android:layout_width="match_parent"
@@ -45,21 +45,34 @@
android:orientation="vertical"
android:visibility="gone">
- <TextView
- android:id="@+id/message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/empty"
- style="@android:style/TextAppearance.Material.Subhead" />
+ <LinearLayout
+ android:id="@+id/content"
+ android:gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
- <Button
- android:id="@+id/button_retry"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/button_retry"
- style="?android:attr/buttonBarPositiveButtonStyle" />
+ <ImageView
+ android:id="@+id/artwork"
+ android:src="@drawable/cabinet"
+ android:adjustViewBounds="true"
+ android:layout_height="250dp"
+ android:layout_width="fill_parent"
+ android:alpha="1"
+ android:layout_centerVertical="true"
+ android:layout_marginBottom="25dp"
+ android:scaleType="fitCenter"
+ android:contentDescription="@null" />
- </LinearLayout>
+ <TextView
+ android:id="@+id/message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/empty"
+ style="@android:style/TextAppearance.Material.Subhead" />
+
+ </LinearLayout>
+ </FrameLayout>
<!-- This FrameLayout works around b/24189541 -->
<FrameLayout
diff --git a/packages/DocumentsUI/res/menu/mode_directory.xml b/packages/DocumentsUI/res/menu/mode_directory.xml
index 4ff396f..6f9bfb5 100644
--- a/packages/DocumentsUI/res/menu/mode_directory.xml
+++ b/packages/DocumentsUI/res/menu/mode_directory.xml
@@ -48,4 +48,9 @@
android:title="@string/menu_move"
android:showAsAction="never"
android:visible="false" />
+ <item
+ android:id="@+id/menu_rename"
+ android:title="@string/menu_rename"
+ android:showAsAction="never"
+ android:visible="false" />
</menu>
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
index 1599178..97fef4f 100644
--- a/packages/DocumentsUI/res/values-af/strings.xml
+++ b/packages/DocumentsUI/res/values-af/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Toestelle"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Nog programme"</string>
<string name="empty" msgid="7858882803708117596">"Geen items nie"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Kan lêer nie oopmaak nie"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan sommige dokumente nie uitvee nie"</string>
<string name="share_via" msgid="8966594246261344259">"Deel via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Ontdoen"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Maak tans gereed vir kopieer …"</string>
<string name="move_preparing" msgid="2772219441375531410">"Berei tans voor vir skuif …"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Maak tans gereed om uit te vee …"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie kopieer nie</item>
<item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie kopieer nie</item>
@@ -92,7 +95,12 @@
<item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie skuif nie</item>
<item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie skuif nie</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Raak om besonderhede te bekyk"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie uitvee nie</item>
+ <item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie uitvee nie</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Herprobeer"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Hierdie lêers is nie gekopieer nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Hierdie lêers is nie geskuif nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Het <xliff:g id="COUNT_0">%1$d</xliff:g> lêer na die knipbord gekopieer.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan nie die geselekteerde lêers in hierdie ligging plak nie."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
index 1a6c85a..c4bf922 100644
--- a/packages/DocumentsUI/res/values-am/strings.xml
+++ b/packages/DocumentsUI/res/values-am/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"መሣሪያዎች"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ተጨማሪ መተግበሪያዎች"</string>
<string name="empty" msgid="7858882803708117596">"ምንም ንጥሎች የሉም"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s ውስጥ ምንም ተዛማጆች የሉም"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ፋይል መክፈት አይቻልም"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"አንዳንድ ሰነዶችን መሰረዝ አልተቻለም"</string>
<string name="share_via" msgid="8966594246261344259">"በሚከተለው በኩል ያጋሩ"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"ቀልብስ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"ቅጂ በማዘጋጀት ላይ…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ለመውሰድ በማዘጋጀት ላይ…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ለመሰረዝ በመዘጋጀት ላይ…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መቅዳት አልተቻለም</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መቅዳት አልተቻለም</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መውሰድ አልተቻለም</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መውሰድ አልተቻለም</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"ዝርዝሮችን ለመመልከት ይንኩ።"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መሰረዝ አልተቻለም።</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መሰረዝ አልተቻለም።</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"ዝርዝሮችን ለመመልከት መታ ያድርጉ"</string>
<string name="retry" msgid="7564024179122207376">"እንደገና ይሞክሩ"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"እነዚህ ፋይሎች አልተቀዱም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"እነዚህ ፋይሎች አልተወሰዱም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎች ወደ ቅንጥብ ሰሌዳ ቀድተዋል።</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"የተመረጡትን ፋይሎች ወደዚህ አካባቢ መለጠፍ አይቻልም።"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"እንደገና ሰይም"</string>
+ <string name="rename_error" msgid="4203041674883412606">"ሰነዱን ዳግም መሰየም አልተሳካም"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
index 1e86c03..dc8cdaf 100644
--- a/packages/DocumentsUI/res/values-ar/strings.xml
+++ b/packages/DocumentsUI/res/values-ar/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"أجهزة"</string>
<string name="root_type_apps" msgid="8838065367985945189">"المزيد من التطبيقات"</string>
<string name="empty" msgid="7858882803708117596">"ليس هناك أي عناصر"</string>
+ <string name="no_results" msgid="6622510343880730446">"لا نتائج مطابقة في %1$s."</string>
<string name="toast_no_application" msgid="1339885974067891667">"لا يمكن فتح الملف"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"تعذر حذف بعض المستندات"</string>
<string name="share_via" msgid="8966594246261344259">"مشاركة عبر"</string>
@@ -96,6 +97,7 @@
<string name="undo" msgid="7905788502491742328">"تراجع"</string>
<string name="copy_preparing" msgid="3896202461003039386">"جارٍ التحضير للنسخ ..."</string>
<string name="move_preparing" msgid="2772219441375531410">"جارٍ التحضير للنقل…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"جارٍ الإعداد للحذف…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="zero">لم يتعذر نسخ أية ملفات (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
<item quantity="two">تعذر نسخ ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
@@ -112,7 +114,15 @@
<item quantity="other">تعذر نقل <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات</item>
<item quantity="one">تعذر نقل ملف واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"المس لعرض التفاصيل"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="zero">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف</item>
+ <item quantity="two">تعذر حذف ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+ <item quantity="few">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات</item>
+ <item quantity="many">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا</item>
+ <item quantity="other">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف</item>
+ <item quantity="one">تعذر حذف <xliff:g id="COUNT_0">%1$d</xliff:g> ملف</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"انقر لعرض التفاصيل."</string>
<string name="retry" msgid="7564024179122207376">"إعادة المحاولة"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"لم يتم نسخ هذه الملفات: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"لم يتم نقل الملفات التالية: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -125,4 +135,6 @@
<item quantity="one">تم نسخ ملف واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>) إلى الحافظة.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"يتعذر لصق الملفات المحددة في هذا الموقع."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"إعادة تسمية"</string>
+ <string name="rename_error" msgid="4203041674883412606">"أخفقت إعادة تسمية المستند."</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-az-rAZ/strings.xml b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
index b6dd297..bd6fe01 100644
--- a/packages/DocumentsUI/res/values-az-rAZ/strings.xml
+++ b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Daha çox tətbiq"</string>
<string name="empty" msgid="7858882803708117596">"Element yoxdur"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s ilə heç bir uyğunluq yoxdur"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Faylı aça bilmir"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
<string name="share_via" msgid="8966594246261344259">"Bunun vasitəsilə paylaş:"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Ləğv edin"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmaq üçün hazırlanır ..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Köçürmə üçün hazırlanır..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Silmək üçün hazırlanır..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl kopyalanmadı</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl kopyalanmadı</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl köçürülə bilmədi</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl köçürülə bilmədi</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Detallara baxmaq üçün toxunun"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fayl silinmədi</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fayl silinmədi</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Detallara baxmaq üçün basın"</string>
<string name="retry" msgid="7564024179122207376">"Yenidən cəhd edin"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Bu fayllar kopyalanmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Bu fayllar köçürülmədi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl buferə kopyalandı.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Seçilmiş faylları bu məkana yerləşdirmək olmaz."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Adını dəyişdirin"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Sənəd adını dəyişmək uğursuz oldu"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml b/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml
index feace71..e6ce761 100644
--- a/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Još aplikacija"</string>
<string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Nije moguće otvoriti datoteku"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
<string name="share_via" msgid="8966594246261344259">"Delite preko"</string>
@@ -87,6 +89,7 @@
<string name="undo" msgid="7905788502491742328">"Opozovi"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Priprema se kopiranje…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Priprema se premeštanje..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Priprema se brisanje…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Nismo uspeli da kopiramo <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku</item>
<item quantity="few">Nismo uspeli da kopiramo <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke</item>
@@ -97,7 +100,13 @@
<item quantity="few">Nije uspelo premeštanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke</item>
<item quantity="other">Nije uspelo premeštanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Dodirnite da biste videli detalje"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
+ <item quantity="few">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
+ <item quantity="other">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije uspelo</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Pokušaj ponovo"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Sledeće datoteke nisu kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ove datoteke nisu premeštene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -107,4 +116,8 @@
<item quantity="other">Kopirali ste <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka u privremenu memoriju.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Izabrane datoteke ne mogu da se nalepe na ovoj lokaciji."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
index f4aff3e..b72412d 100644
--- a/packages/DocumentsUI/res/values-bg/strings.xml
+++ b/packages/DocumentsUI/res/values-bg/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Още приложения"</string>
<string name="empty" msgid="7858882803708117596">"Няма елементи"</string>
+ <string name="no_results" msgid="6622510343880730446">"В/ъв „%1$s“ няма съответствия"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файлът не може да се отвори"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Някои документи не могат да бъдат изтрити"</string>
<string name="share_via" msgid="8966594246261344259">"Споделяне чрез"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Отмяна"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Подготвя се за копиране…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Преместването се подготвя…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Подготвя се за изтриване..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файла не можаха да се копират</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл не можа да се копира</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файла не можаха да бъдат преместени</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл не можа да бъде преместен</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Докоснете, за да видите подробностите"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файла не можаха да бъдат изтрити</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл не можа да бъде изтрит</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Докоснете, за да видите подробности"</string>
<string name="retry" msgid="7564024179122207376">"Нов опит"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Следните файлове не бяха копирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Следните файлове не бяха преместени: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">Копирахте <xliff:g id="COUNT_0">%1$d</xliff:g> файл в буферната памет.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Избраните файлове не могат да се поставят на това място."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Преименуване"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Преименуването на документа не бе успешно"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-bn-rBD/strings.xml b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
index c757eaf..503d78a 100644
--- a/packages/DocumentsUI/res/values-bn-rBD/strings.xml
+++ b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"ডিভাইসগুলি"</string>
<string name="root_type_apps" msgid="8838065367985945189">"আরো অ্যাপ্লিকেশান"</string>
<string name="empty" msgid="7858882803708117596">"কোনো আইটেম নেই"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s এ কোনো মিল নেই"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ফাইল খোলা যাবে না"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"কিছু দস্তাবেজ মুছতে অসমর্থ"</string>
<string name="share_via" msgid="8966594246261344259">"এর মাধ্যমে ভাগ করুন"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"পূর্বাবস্থায় ফিরুন"</string>
<string name="copy_preparing" msgid="3896202461003039386">"অনুলিপি করার জন্য প্রস্তুত করা হচ্ছে..."</string>
<string name="move_preparing" msgid="2772219441375531410">"সরানোর জন্য প্রস্তুত হচ্ছে..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"মোছার জন্য প্রস্তুত করা হচ্ছে..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইলের প্রতিলিপি করা যায়নি</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইলের প্রতিলিপি করা যায়নি</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল সরানো যায়নি৷</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল সরানো যায়নি৷</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"বিশদ বিবরণ দেখতে স্পর্শ করুন"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল মোছা গেল না</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল মোছা গেল না</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"বিশদ বিবরণ দেখতে আলতো চাপুন"</string>
<string name="retry" msgid="7564024179122207376">"পুনরায় চেষ্টা করুন"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"এই ফাইলগুলির প্রতিলিপি করা হয় নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"এই ফাইলগুলি সরানো হয়নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল ক্লিপবোর্ডে প্রতিলিপি করা হয়েছে।</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"এই স্থানে নির্বাচিত ফাইলগুলি আটকানো যাবে না।"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"পুনঃনামকরণ"</string>
+ <string name="rename_error" msgid="4203041674883412606">"দস্তাবেজের পুনঃনামকরণ ব্যর্থ হয়েছে৷"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-bs-rBA/config.xml b/packages/DocumentsUI/res/values-bs-rBA/config.xml
new file mode 100644
index 0000000..843a8aa
--- /dev/null
+++ b/packages/DocumentsUI/res/values-bs-rBA/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="trusted_quick_viewer_package" msgid="3354383993907861267"></string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-bs-rBA/strings.xml b/packages/DocumentsUI/res/values-bs-rBA/strings.xml
new file mode 100644
index 0000000..c94f5cd
--- /dev/null
+++ b/packages/DocumentsUI/res/values-bs-rBA/strings.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for app_label (2783841764617238354) -->
+ <skip />
+ <!-- no translation found for files_label (6051402950202690279) -->
+ <skip />
+ <!-- no translation found for downloads_label (959113951084633612) -->
+ <skip />
+ <!-- no translation found for title_open (4353228937663917801) -->
+ <skip />
+ <!-- no translation found for title_save (2433679664882857999) -->
+ <skip />
+ <!-- no translation found for menu_create_dir (2547620241173881754) -->
+ <skip />
+ <!-- no translation found for menu_grid (6878021334497835259) -->
+ <skip />
+ <!-- no translation found for menu_list (7279285939892417279) -->
+ <skip />
+ <!-- no translation found for menu_sort (7677740407158414452) -->
+ <skip />
+ <!-- no translation found for menu_search (3816712084502856974) -->
+ <skip />
+ <!-- no translation found for menu_settings (6008033148948428823) -->
+ <skip />
+ <!-- no translation found for menu_open (432922957274920903) -->
+ <skip />
+ <!-- no translation found for menu_save (2394743337684426338) -->
+ <skip />
+ <!-- no translation found for menu_share (3075149983979628146) -->
+ <skip />
+ <!-- no translation found for menu_delete (8138799623850614177) -->
+ <skip />
+ <!-- no translation found for menu_select_all (8323579667348729928) -->
+ <skip />
+ <!-- no translation found for menu_copy (3612326052677229148) -->
+ <skip />
+ <!-- no translation found for menu_move (1828090633118079817) -->
+ <skip />
+ <!-- no translation found for menu_new_window (1226032889278727538) -->
+ <skip />
+ <!-- no translation found for menu_copy_to_clipboard (489311381979634291) -->
+ <skip />
+ <!-- no translation found for menu_paste_from_clipboard (2071583031180257091) -->
+ <skip />
+ <!-- no translation found for menu_advanced_show (4693652895715631401) -->
+ <skip />
+ <!-- no translation found for menu_advanced_show (5792182900084144261) -->
+ <skip />
+ <!-- no translation found for menu_advanced_hide (4218809952721972589) -->
+ <skip />
+ <!-- no translation found for menu_advanced_hide (4845869969015718848) -->
+ <skip />
+ <!-- no translation found for menu_file_size_show (3240323619260823076) -->
+ <skip />
+ <!-- no translation found for menu_file_size_hide (8881975928502581042) -->
+ <skip />
+ <!-- no translation found for button_select (527196987259139214) -->
+ <skip />
+ <!-- no translation found for button_copy (8706475544635021302) -->
+ <skip />
+ <!-- no translation found for button_move (2202666023104202232) -->
+ <skip />
+ <!-- no translation found for button_dismiss (3714065566893946085) -->
+ <skip />
+ <!-- no translation found for button_retry (4392027584153752797) -->
+ <skip />
+ <!-- no translation found for sort_name (9183560467917256779) -->
+ <skip />
+ <!-- no translation found for sort_date (586080032956151448) -->
+ <skip />
+ <!-- no translation found for sort_size (3350681319735474741) -->
+ <skip />
+ <!-- no translation found for drawer_open (4545466532430226949) -->
+ <skip />
+ <!-- no translation found for drawer_close (7602734368552123318) -->
+ <skip />
+ <!-- no translation found for save_error (6167009778003223664) -->
+ <skip />
+ <!-- no translation found for create_error (3735649141335444215) -->
+ <skip />
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
+ <!-- no translation found for root_recent (4470053704320518133) -->
+ <skip />
+ <!-- no translation found for root_available_bytes (8568452858617033281) -->
+ <skip />
+ <!-- no translation found for root_type_service (2178854894416775409) -->
+ <skip />
+ <!-- no translation found for root_type_shortcut (3318760609471618093) -->
+ <skip />
+ <!-- no translation found for root_type_device (7121342474653483538) -->
+ <skip />
+ <!-- no translation found for root_type_apps (8838065367985945189) -->
+ <skip />
+ <!-- no translation found for empty (7858882803708117596) -->
+ <skip />
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
+ <!-- no translation found for toast_no_application (1339885974067891667) -->
+ <skip />
+ <!-- no translation found for toast_failed_delete (2180678019407244069) -->
+ <skip />
+ <!-- no translation found for share_via (8966594246261344259) -->
+ <skip />
+ <!-- no translation found for copy_notification_title (6374299806748219777) -->
+ <skip />
+ <!-- no translation found for move_notification_title (6193835179777284805) -->
+ <skip />
+ <!-- no translation found for copy_remaining (6283790937387975095) -->
+ <skip />
+ <!-- no translation found for copy_begin (9071199452634086365) -->
+ <!-- no translation found for move_begin (8430330882138871643) -->
+ <!-- no translation found for deleting (5054338566802559411) -->
+ <!-- no translation found for undo (7905788502491742328) -->
+ <skip />
+ <!-- no translation found for copy_preparing (3896202461003039386) -->
+ <skip />
+ <!-- no translation found for move_preparing (2772219441375531410) -->
+ <skip />
+ <string name="delete_preparing" msgid="5655813182533491992">"Pripremanje za brisanje…"</string>
+ <!-- no translation found for copy_error_notification_title (5267616889076217261) -->
+ <!-- no translation found for move_error_notification_title (2779299594174898891) -->
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Nije bilo moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku</item>
+ <item quantity="few">Nije bilo moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke</item>
+ <item quantity="other">Nije bilo moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
+ <!-- no translation found for retry (7564024179122207376) -->
+ <skip />
+ <!-- no translation found for copy_failure_alert_content (3715575000297709082) -->
+ <skip />
+ <!-- no translation found for move_failure_alert_content (7151140279020481180) -->
+ <skip />
+ <!-- no translation found for clipboard_files_clipped (855459017537058539) -->
+ <!-- no translation found for clipboard_files_cannot_paste (2878324825602325706) -->
+ <skip />
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
+</resources>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
index f01624a..177a4d6 100644
--- a/packages/DocumentsUI/res/values-ca/strings.xml
+++ b/packages/DocumentsUI/res/values-ca/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositius"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Més aplicacions"</string>
<string name="empty" msgid="7858882803708117596">"Sense elements"</string>
+ <string name="no_results" msgid="6622510343880730446">"No hi ha cap coincidència a %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"No es pot obrir el fitxer."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es poden suprimir alguns documents."</string>
<string name="share_via" msgid="8966594246261344259">"Comparteix mitjançant"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Desfés"</string>
<string name="copy_preparing" msgid="3896202461003039386">"S\'està preparant una còpia…"</string>
<string name="move_preparing" msgid="2772219441375531410">"S\'està preparant per moure\'ls..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"S\'està preparant per suprimir…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">No s\'han pogut copiar <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
<item quantity="one">No s\'ha pogut copiar <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
@@ -92,7 +94,11 @@
<item quantity="other">No s\'han pogut moure <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
<item quantity="one">No s\'ha pogut moure <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca per veure els detalls"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">No s\'han pogut suprimir <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
+ <item quantity="one">No s\'ha pogut suprimir <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Toca per veure\'n els detalls"</string>
<string name="retry" msgid="7564024179122207376">"Torna-ho a provar"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Aquests fitxers no s\'han copiat: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Aquests fitxers no s\'han mogut: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">S\'ha copiat <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer al porta-retalls.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"No s\'han pogut enganxar els fitxers seleccionats en aquesta ubicació."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Canvia el nom"</string>
+ <string name="rename_error" msgid="4203041674883412606">"No s\'ha pogut canviar el nom del document"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
index 7c70809..1430b70 100644
--- a/packages/DocumentsUI/res/values-cs/strings.xml
+++ b/packages/DocumentsUI/res/values-cs/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Zařízení"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Další aplikace"</string>
<string name="empty" msgid="7858882803708117596">"Žádné položky"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Soubor nelze otevřít"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Některé dokumenty nelze smazat"</string>
<string name="share_via" msgid="8966594246261344259">"Sdílet pomocí"</string>
@@ -90,6 +92,7 @@
<string name="undo" msgid="7905788502491742328">"Vrátit zpět"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Příprava na kopírování…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Příprava na přesunutí…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Příprava na mazání…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="few">Nepodařilo se zkopírovat <xliff:g id="COUNT_1">%1$d</xliff:g> soubory</item>
<item quantity="many">Nepodařilo se zkopírovat <xliff:g id="COUNT_1">%1$d</xliff:g> souboru</item>
@@ -102,7 +105,14 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů nelze přesunout</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor nelze přesunout</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Podrobnosti zobrazíte klepnutím"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> soubory se smazat nepodařilo</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> souboru se smazat nepodařilo</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů se smazat nepodařilo</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor se smazat nepodařilo</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Opakovat"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Tyto soubory nebyly zkopírovány: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Následující soubory nebyly přesunuty: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +123,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor byl zkopírován do schránky.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Vybrané soubory nelze vložit do tohoto umístění."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
index ef7819a..527b598 100644
--- a/packages/DocumentsUI/res/values-da/strings.xml
+++ b/packages/DocumentsUI/res/values-da/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Enheder"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Flere apps"</string>
<string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
+ <string name="no_results" msgid="6622510343880730446">"Ingen kampe i %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Filen kan ikke åbnes"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nogle dokumenter kan ikke slettes"</string>
<string name="share_via" msgid="8966594246261344259">"Del via"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Fortryd"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Forbereder flytning…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Forbereder til sletning…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke kopieret</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke kopieret</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke flyttet</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke flyttet</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Tryk for at se yderligere oplysninger."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fil kunne ikke slettes</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer kunne ikke slettes</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Tryk for at se oplysninger"</string>
<string name="retry" msgid="7564024179122207376">"Prøv igen"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Disse filer blev ikke kopieret: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Følgende filer blev ikke flyttet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev kopieret til udklipsholder.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"De valgte filer kan ikke indsættes på denne placering."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Omdøb"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Dokumentet kunne ikke omdøbes"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
index 83eb8e0..e40c15e 100644
--- a/packages/DocumentsUI/res/values-de/strings.xml
+++ b/packages/DocumentsUI/res/values-de/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Geräte"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Weitere Apps"</string>
<string name="empty" msgid="7858882803708117596">"Keine Dokumente"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Datei kann nicht geöffnet werden."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Einige Dokumente konnten nicht gelöscht werden."</string>
<string name="share_via" msgid="8966594246261344259">"Teilen über"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Rückgängig machen"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopieren wird vorbereitet…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Verschieben wird vorbereitet…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Löschvorgang wird vorbereitet…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht kopiert werden.</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht kopiert werden.</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht verschoben werden.</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht verschoben werden.</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Zum Einblenden von Details tippen"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht gelöscht werden</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht gelöscht werden</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Erneut versuchen"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Diese Dateien wurden nicht kopiert: <xliff:g id="LIST">%1$s</xliff:g>."</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Diese Dateien wurden nicht verschoben: <xliff:g id="LIST">%1$s</xliff:g>."</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wurde in die Zwischenablage kopiert.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Die ausgewählten Dateien können an diesem Ort nicht eingefügt werden."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
index 42959af..8a0db57 100644
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Συσκευές"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Περισσότερες εφαρμογές"</string>
<string name="empty" msgid="7858882803708117596">"Δεν υπάρχουν στοιχεία"</string>
+ <string name="no_results" msgid="6622510343880730446">"Χωρίς αντιστοιχίσεις στο %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Δεν είναι δυνατό το άνοιγμα του αρχείου"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
<string name="share_via" msgid="8966594246261344259">"Κοινή χρήση μέσω"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Αναίρεση"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Προετοιμασία για αντιγραφή…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Προετοιμασία για μετακίνηση…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Προετοιμασία για διαγραφή…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Δεν ήταν δυνατή η αντιγραφή <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων</item>
<item quantity="one">Δεν ήταν δυνατή η αντιγραφή <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου</item>
@@ -92,7 +94,11 @@
<item quantity="other">Δεν ήταν δυνατή η μετακίνηση <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων</item>
<item quantity="one">Δεν ήταν δυνατή η μετακίνηση <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Αγγίξτε για προβολή λεπτομερειών"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Δεν ήταν δυνατή η διαγραφή <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων</item>
+ <item quantity="one">Δεν ήταν δυνατή η διαγραφή <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Πατήστε για προβολή λεπτομερειών"</string>
<string name="retry" msgid="7564024179122207376">"Επανάληψη"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Αυτά τα αρχεία δεν αντιγράφηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Αυτά τα αρχεία δεν μετακινήθηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> αρχείο αντιγράφηκε στο πρόχειρο.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Δεν είναι δυνατή η επικόλληση των επιλεγμένων αρχείων σε αυτήν την τοποθεσία."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Μετονομασία"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Αποτυχία μετονομασίας εγγράφου"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-en-rAU/strings.xml b/packages/DocumentsUI/res/values-en-rAU/strings.xml
index 5dca8e8..f75f322 100644
--- a/packages/DocumentsUI/res/values-en-rAU/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rAU/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
<string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
<string name="empty" msgid="7858882803708117596">"No items"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="share_via" msgid="8966594246261344259">"Share via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Undo"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
@@ -92,7 +95,12 @@
<item quantity="other">Couldn\'t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Couldn\'t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Retry"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"These files weren\'t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
index 5dca8e8..f75f322 100644
--- a/packages/DocumentsUI/res/values-en-rGB/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
<string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
<string name="empty" msgid="7858882803708117596">"No items"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="share_via" msgid="8966594246261344259">"Share via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Undo"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
@@ -92,7 +95,12 @@
<item quantity="other">Couldn\'t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Couldn\'t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Retry"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"These files weren\'t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
index 5dca8e8..f75f322 100644
--- a/packages/DocumentsUI/res/values-en-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
<string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
<string name="empty" msgid="7858882803708117596">"No items"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="share_via" msgid="8966594246261344259">"Share via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Undo"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
@@ -92,7 +95,12 @@
<item quantity="other">Couldn\'t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
<item quantity="one">Couldn\'t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Couldn\'t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Retry"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"These files weren\'t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
index 58090ce..f85f991 100644
--- a/packages/DocumentsUI/res/values-es-rUS/strings.xml
+++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
<string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"No se puede abrir el archivo."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos."</string>
<string name="share_via" msgid="8966594246261344259">"Compartir mediante"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Deshacer"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparación para mover archivos…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparando para borrar…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">No se pudieron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
<item quantity="one">No se pudo copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
@@ -92,7 +95,12 @@
<item quantity="other">No se pudieron mover <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
<item quantity="one">No se pudo mover <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca el elemento para ver más información."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">No se pudieron borrar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
+ <item quantity="one">No se pudo borrar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Reintentar"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"No se copiaron estos archivos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"No se movieron los siguientes archivos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Se copió <xliff:g id="COUNT_0">%1$d</xliff:g> archivo al portapapeles.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"No se pueden pegar los archivos seleccionados en esta ubicación."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
index c91a990..5ca8902 100644
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
<string name="empty" msgid="7858882803708117596">"No hay elementos"</string>
+ <string name="no_results" msgid="6622510343880730446">"Sin coincidencias en %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Error al abrir el archivo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Deshacer"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparando para mover…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparando para eliminar…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">No se han podido copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
<item quantity="one">No se ha podido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
@@ -92,7 +94,11 @@
<item quantity="other">No se han podido mover <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
<item quantity="one">No se ha podido mover <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca para ver más información"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">No se han podido eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
+ <item quantity="one">No se ha podido eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Toca para ver detalles"</string>
<string name="retry" msgid="7564024179122207376">"Volver a intentar"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Archivos que no se han copiado: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Archivos que no se han movido: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">Se ha copiado <xliff:g id="COUNT_0">%1$d</xliff:g> archivo al portapapeles.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Los archivos seleccionados no se pueden pegar en esta ubicación."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Cambiar nombre"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Error al cambiar el nombre del documento"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
index 55d2503..4594571 100644
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Seadmed"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Rohkem rakendusi"</string>
<string name="empty" msgid="7858882803708117596">"Üksusi ei ole"</string>
+ <string name="no_results" msgid="6622510343880730446">"Otsing %1$s ei andnud vasteid"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Faili ei saa avada"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Mõnda dokumenti ei õnnestu kustutada"</string>
<string name="share_via" msgid="8966594246261344259">"Jagage teenusega"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Võta tagasi"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopeerimise ettevalmistamine …"</string>
<string name="move_preparing" msgid="2772219441375531410">"Teisaldamise ettevalmistamine …"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Kustutamise ettevalmistamine …"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud kopeerida</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud kopeerida</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud teisaldada</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud teisaldada</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Puudutage üksikasjade vaatamiseks"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei õnnestunud kustutada</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei õnnestunud kustutada</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Puudutage üksikasjade vaatamiseks"</string>
<string name="retry" msgid="7564024179122207376">"Proovi uuesti"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Neid faile ei kopeeritud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Neid faile ei teisaldatud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fail kopeeriti lõikelauale.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Valitud faile ei saa sellesse asukohta kleepida."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Nimeta ümber"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Dokumendi ümbernimetamine ebaõnnestus"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-eu-rES/strings.xml b/packages/DocumentsUI/res/values-eu-rES/strings.xml
index 7ad1dbc..b8ed348 100644
--- a/packages/DocumentsUI/res/values-eu-rES/strings.xml
+++ b/packages/DocumentsUI/res/values-eu-rES/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Gailuak"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Aplikazio gehiago"</string>
<string name="empty" msgid="7858882803708117596">"Ez dago elementurik"</string>
+ <string name="no_results" msgid="6622510343880730446">"Ez da aurkitu ezer %1$s atalean"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Ezin da fitxategia ireki"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ezin izan dira dokumentu batzuk ezabatu"</string>
<string name="share_via" msgid="8966594246261344259">"Partekatu honen bidez:"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Desegin"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopiatzeko prestatzen…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Mugitzeko prestatzen…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Ezabatzeko prestatzen…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Ezin izan dira kopiatu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
<item quantity="one">Ezin izan da kopiatu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
@@ -92,7 +94,11 @@
<item quantity="other">Ezin izan dira mugitu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
<item quantity="one">Ezin izan da mugitu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Xehetasunak ikusteko, ukitu hau."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Ezin izan dira ezabatu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
+ <item quantity="one">Ezin izan da ezabatu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Sakatu xehetasunak ikusteko"</string>
<string name="retry" msgid="7564024179122207376">"Saiatu berriro"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Ez dira kopiatu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ez dira mugitu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi kopiatu da arbelean.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ezin dira itsatsi hautatutako fitxategiak kokapen honetan."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Aldatu izena"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Ezin izan zaio aldatu izena dokumentuari"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
index 1989c62..778942b 100644
--- a/packages/DocumentsUI/res/values-fa/strings.xml
+++ b/packages/DocumentsUI/res/values-fa/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"دستگاهها"</string>
<string name="root_type_apps" msgid="8838065367985945189">"برنامههای بیشتر"</string>
<string name="empty" msgid="7858882803708117596">"موردی موجود نیست"</string>
+ <string name="no_results" msgid="6622510343880730446">"مورد منطبقی در %1$s وجود ندارد"</string>
<string name="toast_no_application" msgid="1339885974067891667">"فایل باز نمیشود"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"برخی از اسناد حذف نمیشوند"</string>
<string name="share_via" msgid="8966594246261344259">"اشتراکگذاری از طریق"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"لغو"</string>
<string name="copy_preparing" msgid="3896202461003039386">"در حال آمادهسازی برای کپی..."</string>
<string name="move_preparing" msgid="2772219441375531410">"درحال آمادهسازی برای انتقال…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"درحال آمادهسازی برای حذف…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل کپی نشد</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل کپی نشد</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل منتقل نشد</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل منتقل نشد</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"برای مشاهده جزئیات لمس کنید"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل حذف نشد</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل حذف نشد</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"برای مشاهده جزئیات ضربه بزنید"</string>
<string name="retry" msgid="7564024179122207376">"امتحان مجدد"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"این فایلها کپی نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"این فایلها منتقل نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل در بریدهدان کپی شد.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"نمیتوان فایلهای انتخابی را در این مکان جایگذاری کرد."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"تغییر نام"</string>
+ <string name="rename_error" msgid="4203041674883412606">"نام سند تغییر نکرد"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
index 9228634..e159bd8 100644
--- a/packages/DocumentsUI/res/values-fi/strings.xml
+++ b/packages/DocumentsUI/res/values-fi/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Laitteet"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Lisää sovelluksia"</string>
<string name="empty" msgid="7858882803708117596">"Ei kohteita"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Tiedostoa ei voi avata"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Joitakin asiakirjoja ei voi poistaa"</string>
<string name="share_via" msgid="8966594246261344259">"Jaa sovelluksessa"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Kumoa"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Valmistellaan kopiointia…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Valmistellaan siirtämistä…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Valmistellaan poistamista…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston siirtäminen epäonnistui.</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston siirtäminen epäonnistui.</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Lue lisätietoja koskettamalla"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston poistaminen epäonnistui</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston poistaminen epäonnistui</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Yritä uudelleen"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Seuraavia tiedostoja ei kopioitu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Näitä tiedostoja ei siirretty: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto kopioitiin leikepöydälle.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Valittuja tiedostoja ei voi liittää tähän sijaintiin."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index ec81e67..f2b515c 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Plus d\'applications"</string>
<string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents"</string>
<string name="share_via" msgid="8966594246261344259">"Partager par"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Annuler"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours"</string>
<string name="move_preparing" msgid="2772219441375531410">"Préparation du déplacement..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Préparation de la suppression..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
<item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
@@ -92,7 +95,12 @@
<item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
<item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Touchez ici pour afficher les détails"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier</item>
+ <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Réessayer"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Ces fichiers ne ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ces fichiers n\'ont pas été déplacés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ont été copiés dans le presse-papiers.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossible de coller les fichiers sélectionnés à cet endroit."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
index 3d7ab32..ad7b801 100644
--- a/packages/DocumentsUI/res/values-fr/strings.xml
+++ b/packages/DocumentsUI/res/values-fr/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Autres applications"</string>
<string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents."</string>
<string name="share_via" msgid="8966594246261344259">"Partager via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Annuler"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Préparation au déplacement…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Préparation à la suppression…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
<item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
@@ -92,7 +95,12 @@
<item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
<item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Appuyez pour en savoir plus."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
+ <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Réessayer"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Les fichiers suivants n\'ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Les fichiers suivants n\'ont pas été déplacés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ont bien été copiés dans le Presse-papiers.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossible de coller les fichiers sélectionnés à cet endroit."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-gl-rES/strings.xml b/packages/DocumentsUI/res/values-gl-rES/strings.xml
index db980064..7358860 100644
--- a/packages/DocumentsUI/res/values-gl-rES/strings.xml
+++ b/packages/DocumentsUI/res/values-gl-rES/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Máis aplicacións"</string>
<string name="empty" msgid="7858882803708117596">"Ningún elemento"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Non se pode abrir o ficheiro"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Non se poden eliminar algúns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Desfacer"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparándose para mover..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparando para eliminar…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Non se puideron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
<item quantity="one">Non se puido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
@@ -92,7 +95,12 @@
<item quantity="other">Non se puideron mover <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
<item quantity="one">Non se puido mover <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca para ver detalles"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Non se puideron eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
+ <item quantity="one">Non se puido eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Tentar de novo"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Non se copiaron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Non se moveron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Copiouse <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro no portapapeis.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Non se poden pegar os ficheiros seleccionados nesta localización."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-gu-rIN/strings.xml b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
index 9f5eba0..cc1d71c 100644
--- a/packages/DocumentsUI/res/values-gu-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"ઉપકરણો"</string>
<string name="root_type_apps" msgid="8838065367985945189">"વધુ એપ્લિકેશનો"</string>
<string name="empty" msgid="7858882803708117596">"કોઈ આઇટમ્સ નથી"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s માં કોઇ મેળ નથી"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ફાઇલ ખોલી શકાતી નથી"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"કેટલાક દસ્તાવેજો કાઢી નાખવામાં અસમર્થ"</string>
<string name="share_via" msgid="8966594246261344259">"આના દ્વારા શેર કરો"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"પૂર્વવત્ કરો"</string>
<string name="copy_preparing" msgid="3896202461003039386">"કૉપિ માટે તૈયારી કરી રહ્યું છે…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ખસેડવા માટે તૈયાર કરી રહ્યું છે…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"કાઢી નાખવાની તૈયારી કરી રહ્યાં છે…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો ખસેડી શકાઈ નથી</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો ખસેડી શકાઈ નથી</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"વિગતો જોવા માટે ટચ કરો"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલ કાઢી નાખી શક્યાં નથી</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલ કાઢી નાખી શક્યાં નથી</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"વિગતો જોવા માટે ટૅપ કરો"</string>
<string name="retry" msgid="7564024179122207376">"ફરી પ્રયાસ કરો"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"આ ફાઇલો કૉપિ કરી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"આ ફાઇલો ખસેડી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other">ક્લિપબોર્ડ પર <xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"આ સ્થાનમાં પસંદ કરેલ ફાઇલો પેસ્ટ કરી શકાતી નથી."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"નામ બદલો"</string>
+ <string name="rename_error" msgid="4203041674883412606">"દસ્તાવેજનું નામ બદલવામાં નિષ્ફળ થયાં"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
index d146145..d20d1c1 100644
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"डिवाइस"</string>
<string name="root_type_apps" msgid="8838065367985945189">"अधिक ऐप्स"</string>
<string name="empty" msgid="7858882803708117596">"कोई आइटम नहीं"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s में कोई मिलान नहीं मिला"</string>
<string name="toast_no_application" msgid="1339885974067891667">"फ़ाइल नहीं खोली जा सकती"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"कुछ दस्तावेज़ों को हटाने में अक्षम"</string>
<string name="share_via" msgid="8966594246261344259">"इसके द्वारा साझा करें"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"वापस लाएं"</string>
<string name="copy_preparing" msgid="3896202461003039386">"कॉपी करने की तैयारी हो रही है…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ले जाने की तैयारी हो रही है…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"हटाने के लिए तैयार हो रहा है…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलों की कॉपी नहीं बनाई जा सकती</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलों की कॉपी नहीं बनाई जा सकती</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें नहीं ले जाई जा सकीं</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें नहीं ले जाई जा सकीं</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"विवरण देखने के लिए स्पर्श करें"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें हटाई नहीं जा सकीं</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें हटाई नहीं जा सकीं</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"विवरणों को देखने के लिए टैप करें"</string>
<string name="retry" msgid="7564024179122207376">"पुन: प्रयास करें"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"इन फ़ाइलों की कॉपी नहीं बनाई गई: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ये फ़ाइलें नहीं ले जाई गईं: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other">क्लिपबोर्ड पर <xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलों की कॉपी बनाई गई.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"चयनित फ़ाइलों को इस स्थान में नहीं चिपकाया जा सकता."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"नाम बदलें"</string>
+ <string name="rename_error" msgid="4203041674883412606">"दस्तावेज़ का नाम बदलना विफल रहा"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
index 5884d6f..8ed0aa3 100644
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Više aplikacija"</string>
<string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Datoteku nije moguće otvoriti"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
<string name="share_via" msgid="8966594246261344259">"Dijeli putem"</string>
@@ -87,6 +89,7 @@
<string name="undo" msgid="7905788502491742328">"Poništi"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Priprema za kopiranje…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Priprema za premještanje…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Priprema za brisanje…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije kopirana</item>
<item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu kopirane</item>
@@ -97,7 +100,13 @@
<item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu premještene</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije premješteno</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Dodirnite da biste vidjeli pojedinosti"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije izbrisana</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu izbrisane</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije izbrisano</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Pokušaj ponovo"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Ove datoteke nisu kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ove datoteke nisu premještene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -107,4 +116,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka kopirano je u međuspremnik.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nije moguće zalijepiti odabrane datoteke na ovu lokaciju."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
index 95b45ba..8c1388c 100644
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Eszközök"</string>
<string name="root_type_apps" msgid="8838065367985945189">"További alkalmazások"</string>
<string name="empty" msgid="7858882803708117596">"Nincsenek elemek"</string>
+ <string name="no_results" msgid="6622510343880730446">"Nincs találat itt: %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"A fájlt nem lehet megnyitni"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Néhány dokumentumot nem lehet törölni"</string>
<string name="share_via" msgid="8966594246261344259">"Megosztás itt:"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Visszavonás"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Felkészülés a másolásra…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Áthelyezés előkészítése…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Törlés előkészítése…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
@@ -92,7 +94,11 @@
<item quantity="other">Nem sikerült áthelyezni <xliff:g id="COUNT_1">%1$d</xliff:g> fájlt</item>
<item quantity="one">Nem sikerült áthelyezni <xliff:g id="COUNT_0">%1$d</xliff:g> fájlt</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Érintse meg a részletek megtekintéséhez"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült törölni</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült törölni</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Koppintson rá a részletek megtekintéséhez"</string>
<string name="retry" msgid="7564024179122207376">"Újra"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"A következő fájlokat nem sikerült átmásolni: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"A következő fájlok nem lettek áthelyezve: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fájl vágólapra másolva.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"A kijelölt fájlokat nem lehet beilleszteni erre a helyre."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Átnevezés"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Nem sikerült átnevezni a dokumentumot"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
index 7be66d3..cf9455f 100644
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Սարքեր"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Հավելյալ ծրագրեր"</string>
<string name="empty" msgid="7858882803708117596">"Տարրեր չկան"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Հնարավոր չէ բացել ֆայլը"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
<string name="share_via" msgid="8966594246261344259">"Տարածել"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Հետարկել"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Պատճենման նախապատրաստում…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Տեղափոխման նախապատրաստում…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Պատրաստվում է ջնջել…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Չհաջողվեց պատճենել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
<item quantity="other">Չհաջողվեց պատճենել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
@@ -92,7 +95,12 @@
<item quantity="one">Չհաջողվեց տեղափոխել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
<item quantity="other">Չհաջողվեց տեղափոխել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Հպեք՝ մանրամասները դիտելու համար"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Չհաջողվեց ջնջել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
+ <item quantity="other">Չհաջողվեց ջնջել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Կրկնել"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Հետևյալ ֆայլերը չեն պատճենվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Հետևյալ ֆայլերը չեն տեղափոխվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ պատճենվեց սեղմատախտակին:</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Հնարավոր չէ տեղադրել ընտրված ֆայլերը այս տեղադրությունում:"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
index 29d66c0..7c75e9c 100644
--- a/packages/DocumentsUI/res/values-in/strings.xml
+++ b/packages/DocumentsUI/res/values-in/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Perangkat"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Aplikasi lain"</string>
<string name="empty" msgid="7858882803708117596">"Tidak ada item"</string>
+ <string name="no_results" msgid="6622510343880730446">"Tidak ada kecocokan dalam %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat menghapus beberapa dokumen"</string>
<string name="share_via" msgid="8966594246261344259">"Bagikan melalui"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Urungkan"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Menyiapkan salinan..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Menyiapkan pemindahan…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Bersiap menghapus…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
@@ -92,7 +94,11 @@
<item quantity="other">Tidak dapat memindahkan <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="one">Tidak dapat memindahkan <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Sentuh untuk melihat detail"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Tidak dapat menghapus <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="one">Tidak dapat menghapus <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Ketuk untuk melihat detail"</string>
<string name="retry" msgid="7564024179122207376">"Coba lagi"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Semua file ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Semua file ini tidak dipindahkan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> file disalin ke papan klip.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tidak dapat menempel file yang dipilih di lokasi ini."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Ganti nama"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Gagal mengganti nama dokumen"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-is-rIS/strings.xml b/packages/DocumentsUI/res/values-is-rIS/strings.xml
index 76dbe32..a1962f6 100644
--- a/packages/DocumentsUI/res/values-is-rIS/strings.xml
+++ b/packages/DocumentsUI/res/values-is-rIS/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Tæki"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Fleiri forrit"</string>
<string name="empty" msgid="7858882803708117596">"Engin atriði"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Ekki er hægt að opna skrána"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ekki er hægt að eyða einhverjum skjölum"</string>
<string name="share_via" msgid="8966594246261344259">"Deila í gegnum"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Afturkalla"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Undirbúningur fyrir afritun…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Flutningur undirbúinn…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Býr sig undir að eyða…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Ekki var hægt að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
<item quantity="other">Ekki var hægt að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrár</item>
@@ -92,7 +95,12 @@
<item quantity="one">Ekki tókst að færa <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
<item quantity="other">Ekki tókst að færa <xliff:g id="COUNT_1">%1$d</xliff:g> skrár</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Snertu til að skoða nánari upplýsingar"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Ekki tókst að eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
+ <item quantity="other">Ekki tókst að eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrám</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Reyna aftur"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Þessar skrár voru ekki afritaðar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Þessar skrár voru ekki færðar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skrár afritaðar á klippiborð.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ekki er hægt að vista valdar skrár á þessum stað."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
index 2e74550..3f1d383 100644
--- a/packages/DocumentsUI/res/values-it/strings.xml
+++ b/packages/DocumentsUI/res/values-it/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivi"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Altre app"</string>
<string name="empty" msgid="7858882803708117596">"Nessun elemento"</string>
+ <string name="no_results" msgid="6622510343880730446">"Nessuna corrispondenza in %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Impossibile aprire il file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossibile eliminare alcuni documenti"</string>
<string name="share_via" msgid="8966594246261344259">"Condividi via"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Annulla"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparazione alla copia…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparazione dello spostamento…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparazione eliminazione…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Impossibile copiare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="one">Impossibile copiare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
@@ -92,7 +94,11 @@
<item quantity="other">Impossibile spostare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="one">Impossibile spostare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Tocca per visualizzare i dettagli"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Impossibile eliminare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="one">Impossibile eliminare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Tocca per vedere i dettagli"</string>
<string name="retry" msgid="7564024179122207376">"Riprova"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"I seguenti file non sono stati copiati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"I seguenti file non sono stati spostati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> file copiato negli appunti.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossibile incollare i file selezionati in questa posizione."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Rinomina"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Ridenominazione documento non riuscita"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
index ed0a6a4..b6e4170 100644
--- a/packages/DocumentsUI/res/values-iw/strings.xml
+++ b/packages/DocumentsUI/res/values-iw/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"מכשירים"</string>
<string name="root_type_apps" msgid="8838065367985945189">"עוד אפליקציות"</string>
<string name="empty" msgid="7858882803708117596">"אין פריטים"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"לא ניתן לפתוח את הקובץ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"לא ניתן למחוק חלק מהמסמכים"</string>
<string name="share_via" msgid="8966594246261344259">"שתף באמצעות"</string>
@@ -90,6 +92,7 @@
<string name="undo" msgid="7905788502491742328">"בטל"</string>
<string name="copy_preparing" msgid="3896202461003039386">"מתכונן להעתקה..."</string>
<string name="move_preparing" msgid="2772219441375531410">"מתכונן להעברה…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"מתכונן למחיקה…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="two">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
<item quantity="many">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
@@ -102,7 +105,14 @@
<item quantity="other">לא ניתן היה להעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
<item quantity="one">לא ניתן היה להעביר קובץ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"גע כדי להציג את הפרטים"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="two">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="many">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="other">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="one">לא ניתן היה למחוק קובץ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"נסה שוב"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"הקבצים הבאים לא הועתקו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"הקבצים הבאים לא הועברו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +123,8 @@
<item quantity="one">קובץ <xliff:g id="COUNT_0">%1$d</xliff:g> הועתק אל הלוח.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"לא ניתן להדביק את הקבצים הנבחרים במיקום הזה."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
index a954927..519903a 100644
--- a/packages/DocumentsUI/res/values-ja/strings.xml
+++ b/packages/DocumentsUI/res/values-ja/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"端末"</string>
<string name="root_type_apps" msgid="8838065367985945189">"その他のアプリ"</string>
<string name="empty" msgid="7858882803708117596">"アイテムがありません"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"ファイルを開けません"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"一部のドキュメントを削除できません"</string>
<string name="share_via" msgid="8966594246261344259">"共有ツール"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"元に戻す"</string>
<string name="copy_preparing" msgid="3896202461003039386">"コピーの準備をしています…"</string>
<string name="move_preparing" msgid="2772219441375531410">"移動の準備をしています…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"削除の準備をしています…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>ファイルをコピーできませんでした</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>ファイルをコピーできませんでした</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>個のファイルを移動できませんでした</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>個のファイルを移動できませんでした</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"タップして詳細をご覧ください"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 個のファイルを削除できませんでした</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 個のファイルを削除できませんでした</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"再試行"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ファイル(<xliff:g id="LIST">%1$s</xliff:g>)をコピーできませんでした"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ファイル(<xliff:g id="LIST">%1$s</xliff:g>)を移動できませんでした"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>件のファイルをクリップボードにコピーしました。</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"選択したファイルをこの場所に貼り付けることはできません。"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
index ef91fab..8a89a3ad 100644
--- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml
+++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"მოწყობილობები"</string>
<string name="root_type_apps" msgid="8838065367985945189">"მეტი აპები"</string>
<string name="empty" msgid="7858882803708117596">"ერთეულები არ არის"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"ფაილის გახსნა ვერ ხერხდება"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ზოგიერთი დოკუმენტის წაშლა ვერ ხერხდება"</string>
<string name="share_via" msgid="8966594246261344259">"გაზიარება:"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"დაბრუნება"</string>
<string name="copy_preparing" msgid="3896202461003039386">"მომზადება კოპირებისთვის…"</string>
<string name="move_preparing" msgid="2772219441375531410">"გადაადგილება მზადდება..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"მზადდება წასაშლელად…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">ვერ მოხდა <xliff:g id="COUNT_1">%1$d</xliff:g> ფაილის კოპირება</item>
<item quantity="one">ვერ მოხდა <xliff:g id="COUNT_0">%1$d</xliff:g> ფაილის კოპირება.</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ფაილი ვერ გადაადგილდა</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ფაილი ვერ გადაადგილდა</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"შეეხეთ მონაცემების სანახავად."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ფაილი ვერ წაიშალა</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ფაილი ვერ წაიშალა</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"ხელახლა ცდა"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ეს ფაილები არ იყო გადაწერილი: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ეს ფაილები ვერ გადაადგილდა: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">მოხდა <xliff:g id="COUNT_0">%1$d</xliff:g> ფაილის გაცვლის ბუფერში კოპირება.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ამ მდებარეობაში შერჩეული ფაილების ჩასმა შეუძლებელია."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml b/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
index 09d7e37..a0b8677 100644
--- a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
+++ b/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Құрылғылар"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Басқа қолданбалар"</string>
<string name="empty" msgid="7858882803708117596">"Бос"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Файлды аша алмады"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Кейбір құжаттарды жою мүмкін болмады"</string>
<string name="share_via" msgid="8966594246261344259">"Бөлісу"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Кері қайтару"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Көшіруге дайындау…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Тасымалдауға дайындалуда..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Жоюға дайындалуда…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файлды көшіру мүмкін емес</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файлды көшіру мүмкін емес</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл тасымалданбады</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл тасымалданбады</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Толығырақ мәліметті көру үшін түртіңіз"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файлды жою мүмкін болмады</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файлды жою мүмкін болмады</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Қайталау"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Мына файлдар көшірілген жоқ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Мына файлдар тасымалданған жоқ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Аралық сақтағышқа <xliff:g id="COUNT_0">%1$d</xliff:g> файл көшірілді.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Таңдалған файлдарды бұл орынға қою мүмкін емес."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
index f95594b6..f83bce7 100644
--- a/packages/DocumentsUI/res/values-km-rKH/strings.xml
+++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"ឧបករណ៍"</string>
<string name="root_type_apps" msgid="8838065367985945189">"កម្មវិធីច្រើនទៀត"</string>
<string name="empty" msgid="7858882803708117596">"គ្មានធាតុ"</string>
+ <string name="no_results" msgid="6622510343880730446">"មិនមានការប្រកួតនៅក្នុង %1$s ទេ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"មិនអាចបើកឯកសារ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"មិនអាចលុបឯកសារមួយចំនួន"</string>
<string name="share_via" msgid="8966594246261344259">"ចែករំលែកតាម"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"មិនធ្វើវិញ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"កំពុងរៀបចំចម្លង…"</string>
<string name="move_preparing" msgid="2772219441375531410">"កំពុងរៀបចំផ្លាស់ទី…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"កំពុងរៀបចំលុប…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">មិនអាចចម្លងឯកសារ <xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="one">មិនអាចចម្លងឯកសារ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
@@ -92,7 +94,11 @@
<item quantity="other">មិនអាចផ្លាស់ទីឯកសារ <xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="one">មិនអាចផ្លាស់ទីឯកសារ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"ប៉ះ ដើម្បីមើលព័ត៌មានលម្អិត"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">មិនអាចលុបឯកសារ <xliff:g id="COUNT_1">%1$d</xliff:g> បានទេ</item>
+ <item quantity="one">មិនអាចលុបឯកសារ <xliff:g id="COUNT_0">%1$d</xliff:g> បានទេ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"ប៉ះដើម្បីមើលព័ត៌មានលម្អិត"</string>
<string name="retry" msgid="7564024179122207376">"ព្យាយាមម្ដងទៀត"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ឯកសារទាំងនេះមិនបានចម្លងទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ឯកសារទាំងនេះមិនអាចផ្លាស់ទីបានទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">បានចម្លងឯកសារ <xliff:g id="COUNT_0">%1$d</xliff:g> ទៅតម្បៀតខ្ទាស់។</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"មិនអាចបិទភ្ជាប់ឯកសារដែលបានជ្រើសនៅក្នុងទីតាំងនេះបានទេ។"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"ប្ដូរឈ្មោះ"</string>
+ <string name="rename_error" msgid="4203041674883412606">"បានបរាជ័យក្នុងការប្តូរឈ្មោះឯកសារ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-kn-rIN/strings.xml b/packages/DocumentsUI/res/values-kn-rIN/strings.xml
index 5da5cd0..6ba108e 100644
--- a/packages/DocumentsUI/res/values-kn-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-kn-rIN/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"ಸಾಧನಗಳು"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ಇನ್ನಷ್ಟು ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
<string name="empty" msgid="7858882803708117596">"ಯಾವುದೇ ಐಟಂಗಳಿಲ್ಲ"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ಕೆಲವು ಡಾಕ್ಯುಮೆಂಟ್ಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
<string name="share_via" msgid="8966594246261344259">"ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"ರದ್ದುಗೊಳಿಸಿ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"ನಕಲಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ..."</string>
<string name="move_preparing" msgid="2772219441375531410">"ಸರಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ಅಳಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
@@ -92,7 +95,12 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ಸರಿಸಲಾಗಲಿಲ್ಲ</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ಸರಿಸಲಾಗಲಿಲ್ಲ</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"ಮರುಪ್ರಯತ್ನಿಸು"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ಈ ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ಈ ಫೈಲ್ಗಳನ್ನು ಸರಿಸಲಾಗಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other">ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗಿದೆ.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ಈ ಸ್ಥಳದಲ್ಲಿ ಆಯ್ಕೆಮಾಡಿದ ಫೈಲ್ಗಳನ್ನು ಅಂಟಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
index 4074841..344d403 100644
--- a/packages/DocumentsUI/res/values-ko/strings.xml
+++ b/packages/DocumentsUI/res/values-ko/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"기기"</string>
<string name="root_type_apps" msgid="8838065367985945189">"앱 더보기"</string>
<string name="empty" msgid="7858882803708117596">"항목 없음"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s에 일치하는 항목이 없습니다."</string>
<string name="toast_no_application" msgid="1339885974067891667">"파일을 열 수 없음"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"일부 문서를 삭제할 수 없음"</string>
<string name="share_via" msgid="8966594246261344259">"공유 방법"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"실행취소"</string>
<string name="copy_preparing" msgid="3896202461003039386">"사본 준비 중…"</string>
<string name="move_preparing" msgid="2772219441375531410">"이동 준비 중…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"삭제 준비 중..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">파일 <xliff:g id="COUNT_1">%1$d</xliff:g>개를 복사할 수 없습니다.</item>
<item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 복사할 수 없습니다.</item>
@@ -92,7 +94,11 @@
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g>개 파일을 이동할 수 없습니다.</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g>개 파일을 이동할 수 없습니다.</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"세부정보를 보려면 터치하세요."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">파일 <xliff:g id="COUNT_1">%1$d</xliff:g>개를 삭제할 수 없습니다.</item>
+ <item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 삭제할 수 없습니다.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"세부정보를 보려면 탭하세요."</string>
<string name="retry" msgid="7564024179122207376">"다시 시도"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"다음 파일이 복사되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"다음 파일이 이동되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 클립보드에 복사함</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"선택한 파일을 이 위치에 붙여넣을 수 없습니다."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"이름 바꾸기"</string>
+ <string name="rename_error" msgid="4203041674883412606">"문서 이름을 변경하지 못했습니다."</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ky-rKG/strings.xml b/packages/DocumentsUI/res/values-ky-rKG/strings.xml
index 6172c77..e2411ce 100644
--- a/packages/DocumentsUI/res/values-ky-rKG/strings.xml
+++ b/packages/DocumentsUI/res/values-ky-rKG/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Түзмөктөр"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Көбүрөөк колдонмолор"</string>
<string name="empty" msgid="7858882803708117596">"Эч нерсе жок"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Файл ачылбады"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Кээ бир документтерди өчүрүү кыйрады"</string>
<string name="share_via" msgid="8966594246261344259">"Кийинки аркылуу бөлүшүү:"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Артка кайтаруу"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Көчүрүүгө даярдалууда…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Жылдырууга даярдалууда…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Жок кылууга даярдалууда…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл көчүрүлбөй койду</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл көчүрүлбөй койду</item>
@@ -92,7 +95,12 @@
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файл жылдырылбай калды</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл жылдырылбай калды</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Чоо-жайын билүү үчүн тийип коюңуз"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл жок кылынбай койду</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл жок кылынбай койду</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Дагы аракет кылуу"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Төмөнкү файлдар көчүрүлгөн жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Төмөнкү файлдар жылдырылган жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файл буферге көчүрүлдү.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Тандалган файлдарды бул жерге чаптоого мүмкүн эмес."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
index baa7e25..3ea582f 100644
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"ອຸປະກອນ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ແອັບຯອື່ນໆ"</string>
<string name="empty" msgid="7858882803708117596">"ບໍ່ມີລາຍການ"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"ບໍ່ສາມດາເປີດໄຟລ໌ໄດ້"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ບໍ່ສາມາດລຶບບາງເອກະສານໄດ້"</string>
<string name="share_via" msgid="8966594246261344259">"ແບ່ງປັນຜ່ານ"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"ບໍ່ເຮັດ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"ກຳລັງກຽມອັດສຳເນົາ…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ກຳລັງກະກຽມຍ້າຍ…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ກຳລັງກະກຽມລຶບ…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">ບໍ່ສາມາດອັດສຳເນົາ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌ໄດ້</item>
<item quantity="one">ບໍ່ສາມາດອັດສຳເນົາ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌ໄດ້</item>
@@ -92,7 +95,12 @@
<item quantity="other">ບໍ່ສາມາດຍ້າຍໄດ້ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌</item>
<item quantity="one">ບໍ່ສາມາດຍ້າຍໄດ້ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"ສຳພັດເພື່ອເບິ່ງລາຍລະອຽດ"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">ບໍ່ສາມາດລຶບ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌</item>
+ <item quantity="one">ບໍ່ສາມາດລຶບ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"ລອງໃໝ່"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ຖືກອັດສຳເນົາ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ຖືກຍ້າຍ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">ອັດສຳເນົາ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌ໃສ່ຄລິບບອດແລ້ວ.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ບໍ່ສາມາດແປະໄຟລ໌ເລືອກໄວ້ຢູ່ໃນທີ່ຕັ້ງນີ້ໄດ້."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
index dadd006..c52aaff 100644
--- a/packages/DocumentsUI/res/values-lt/strings.xml
+++ b/packages/DocumentsUI/res/values-lt/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Įrenginiai"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Daugiau programų"</string>
<string name="empty" msgid="7858882803708117596">"Nėra elementų"</string>
+ <string name="no_results" msgid="6622510343880730446">"Nėra jokių atitikčių pagal %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Nepavyksta atidaryti failo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nepavyko ištrinti kai kurių dokumentų"</string>
<string name="share_via" msgid="8966594246261344259">"Bendrinti naudojant"</string>
@@ -90,6 +91,7 @@
<string name="undo" msgid="7905788502491742328">"Anuliuoti"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Ruošiamasi kopijuoti…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Ruošiamasi perkelti…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Ruošiama ištrinti…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
<item quantity="few">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
@@ -102,7 +104,13 @@
<item quantity="many">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
<item quantity="other">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Palieskite, kad peržiūr. išsamią informaciją"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
+ <item quantity="few">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
+ <item quantity="many">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
+ <item quantity="other">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Palieskite, kad peržiūrėtumėte informaciją"</string>
<string name="retry" msgid="7564024179122207376">"Bandyti dar kartą"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Šie failai nenukopijuoti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Šie failai nebuvo perkelti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +121,6 @@
<item quantity="other">Nukopijuota <xliff:g id="COUNT_1">%1$d</xliff:g> failų į iškarpinę.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nepavyko įklijuoti pasirinktų failų šioje vietoje."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Pervardyti"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Nepavyko pervardyti dokumento"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
index 4e0d519..0252740d 100644
--- a/packages/DocumentsUI/res/values-lv/strings.xml
+++ b/packages/DocumentsUI/res/values-lv/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Ierīces"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Vairāk lietotņu"</string>
<string name="empty" msgid="7858882803708117596">"Nav vienumu"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Nevar atvērt failu."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nevar dzēst dažus dokumentus."</string>
<string name="share_via" msgid="8966594246261344259">"Kopīgot, izmantojot"</string>
@@ -87,6 +89,7 @@
<string name="undo" msgid="7905788502491742328">"Atsaukt"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Gatavošanās kopēšanai…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Sagatavošana pārvietošanai…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Notiek gatavošanās dzēšanai…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="zero">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
<item quantity="one">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failu</item>
@@ -97,7 +100,13 @@
<item quantity="one">Nevarēja pārvietot <xliff:g id="COUNT_1">%1$d</xliff:g> failu.</item>
<item quantity="other">Nevarēja pārvietot <xliff:g id="COUNT_1">%1$d</xliff:g> failus.</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Pieskarieties, lai skatītu informāciju"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="zero">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus.</item>
+ <item quantity="one">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failu.</item>
+ <item quantity="other">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus.</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Mēģināt vēlreiz"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Netika nokopēti šādi faili: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Šie faili netika pārvietoti: <xliff:g id="LIST">%1$s</xliff:g>."</string>
@@ -107,4 +116,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili tika kopēti starpliktuvē.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Atlasītos failus šeit nevar ielīmēt."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-mk-rMK/strings.xml b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
index 51cb774..a633c4a 100644
--- a/packages/DocumentsUI/res/values-mk-rMK/strings.xml
+++ b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Уреди"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Повеќе апликации"</string>
<string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Датотеката не се отвора"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Некои документи не може да се избришат"</string>
<string name="share_via" msgid="8966594246261344259">"Сподели преку"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Врати"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Се подготвува за копирање…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Се подготвува за преместување…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Се подготвува за бришење…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Не може да копира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
<item quantity="other">Не може да копираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
@@ -92,7 +95,12 @@
<item quantity="one">Не можеше да се премести <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
<item quantity="other">Не можеше да се преместат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Допрете за да ги погледнете деталите"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Не можеше да се избрише <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
+ <item quantity="other">Не можеше да се избришат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Обидете се повторно"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Датотекиве не се ископирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Овие датотеки не се преместија: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other">Копирани се <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки на таблата со исечоци.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не може да ги залепи избраните датотеки на локацијава."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ml-rIN/strings.xml b/packages/DocumentsUI/res/values-ml-rIN/strings.xml
index 1de31ce..e722b02 100644
--- a/packages/DocumentsUI/res/values-ml-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-ml-rIN/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"ഉപകരണങ്ങൾ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"കൂടുതൽ അപ്ലിക്കേഷനുകൾ"</string>
<string name="empty" msgid="7858882803708117596">"ഇനങ്ങളൊന്നുമില്ല"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s എന്നതിൽ പൊരുത്തങ്ങളില്ല"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ഫയൽ തുറക്കാനായില്ല"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ചില പ്രമാണങ്ങൾ ഇല്ലാതാക്കാനായില്ല"</string>
<string name="share_via" msgid="8966594246261344259">"ഇതുവഴി പങ്കിടുക"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"പഴയപടിയാക്കുക"</string>
<string name="copy_preparing" msgid="3896202461003039386">"പകർപ്പിനായി തയ്യാറെടുക്കുന്നു…"</string>
<string name="move_preparing" msgid="2772219441375531410">"നീക്കാനൊരുങ്ങുന്നു…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ഇല്ലാതാക്കാൻ തയ്യാറെടുക്കുന്നു..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ പകർത്താനായില്ല</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ പകർത്താനായില്ല</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ നീക്കാനായില്ല</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ നീക്കാനായില്ല</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"വിശദാംശങ്ങൾ കാണാൻ സ്പർശിക്കുക"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ ഇല്ലാതാക്കാൻ കഴിഞ്ഞില്ല</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ ഇല്ലാതാക്കാൻ കഴിഞ്ഞില്ല</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"വിശദാംശങ്ങൾ കാണുന്നതിന് ടാപ്പുചെയ്യുക"</string>
<string name="retry" msgid="7564024179122207376">"വീണ്ടും ശ്രമിക്കുക"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ഈ ഫയലുകൾ പകർത്താനായില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ഈ ഫയലുകളെ നീക്കിയില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"തിരഞ്ഞെടുത്ത ഫയലുകൾ ഈ ലൊക്കേഷനിൽ ഒട്ടിക്കാനാകുന്നില്ല."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"പേരുമാറ്റുക"</string>
+ <string name="rename_error" msgid="4203041674883412606">"ഡോക്യുമെന്റ് പേരുമാറ്റുന്നത് പരാജയപ്പെട്ടു"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
index d0e43f4..e7ce4c5 100644
--- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml
+++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Төхөөрөмжүүд"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Өөр апп-ууд"</string>
<string name="empty" msgid="7858882803708117596">"Хоосон"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s-д тохирох зүйл байхгүй байна"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файлыг нээх боломжгүй"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Зарим документуудыг устгах боломжгүй"</string>
<string name="share_via" msgid="8966594246261344259">"Дараахаар дамжуулан хуваалцах"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Буцаах"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Хуулбарлахад бэлтгэж байна..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Зөөвөрлөхөд бэлтгэж байна..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Устгах гэж байна..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлыг хуулбарлаж чадсангүй</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файлыг хуулбарлаж чадсангүй</item>
@@ -92,7 +94,11 @@
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлыг зөөвөрлөх боломжгүй байна</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файлыг зөөвөрлөх боломжгүй байна</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Дэлгэрэнгүй мэдээллийг үзэхийн тулд хүрнэ үү."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлыг устгаж чадсангүй</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файлыг устгаж чадсангүй</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Дэлгэрэнгүй мэдээллийг үзэхийн тулд дарна уу"</string>
<string name="retry" msgid="7564024179122207376">"Дахин оролдох"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Дараах файлуудыг хуулаагүй: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Эдгээр файлыг зөөвөрлөөгүй байна: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> материалыг түр санах ой руу хуулсан.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Энэ байршилд сонгосон файлыг байршуулах боломжгүй байна."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Нэр өөрчлөх"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Баримт бичгийн нэрийн өөрчилж чадсангүй"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-mr-rIN/strings.xml b/packages/DocumentsUI/res/values-mr-rIN/strings.xml
index e359e1e..0b56a26 100644
--- a/packages/DocumentsUI/res/values-mr-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-mr-rIN/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"डिव्हाइसेस"</string>
<string name="root_type_apps" msgid="8838065367985945189">"अधिक अॅप्स"</string>
<string name="empty" msgid="7858882803708117596">"कोणतेही आयटम नाहीत"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"फाईल उघडू शकत नाही"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"काही दस्तऐवज हटविण्यात अक्षम"</string>
<string name="share_via" msgid="8966594246261344259">"द्वारे सामायिक करा"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"पूर्ववत करा"</string>
<string name="copy_preparing" msgid="3896202461003039386">"कॉपी करण्यासाठी तयार करीत आहे…"</string>
<string name="move_preparing" msgid="2772219441375531410">"हलविण्यास तयार होत आहे…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"हटविण्यासाठी तयार करीत आहे..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फाईल कॉपी करू शकलो नाही</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फायली कॉपी करू शकलो नाही</item>
@@ -92,7 +95,12 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फाईल हलविणे शक्य झाले नाही</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फायली हलविणे शक्य झाले नाही</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"तपशील पाहण्यासाठी स्पर्श करा"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> फाईल हटविणे शक्य झाले नाही</item>
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> फायली हटविणे शक्य झाले नाही</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"पुन्हा प्रयत्न करा"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"या फायली कॉपी झाल्या नाहीत: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"या फायली हलविल्या नव्हत्या: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other">क्लिपबोर्डवर <xliff:g id="COUNT_1">%1$d</xliff:g> फायली कॉपी केल्या.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"या स्थानामध्ये निवडलेल्या फायली पेस्ट करू शकत नाही."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
index ea88ef6..a9cf815 100644
--- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml
+++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Peranti"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Lebih banyak apl"</string>
<string name="empty" msgid="7858882803708117596">"Tiada item"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka fail"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat memadam beberapa dokumen"</string>
<string name="share_via" msgid="8966594246261344259">"Kongsi melalui"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Buat asal"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Bersedia untuk salin..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Bersedia untuk mengalih…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Bersedia untuk memadam…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
<item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
@@ -92,7 +95,12 @@
<item quantity="other">Tidak dapat mengalihkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
<item quantity="one">Tidak dapat mengalihkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Sentuh untuk melihat butiran"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Tidak dapat memadamkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
+ <item quantity="one">Tidak dapat memadamkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Cuba semula"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Fail ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Fail ini tidak dialihkan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fail disalin ke papan keratan.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tidak boleh menampalkan fail yang dipilih dalam lokasi ini."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-my-rMM/strings.xml b/packages/DocumentsUI/res/values-my-rMM/strings.xml
index 4c8fb49..8fff7f0 100644
--- a/packages/DocumentsUI/res/values-my-rMM/strings.xml
+++ b/packages/DocumentsUI/res/values-my-rMM/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"စက်ပစ္စည်းများ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"နောက်ထပ်အပလီကေးရှင်းများ"</string>
<string name="empty" msgid="7858882803708117596">"ဘာမှ မရှိပါ"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s တွင်ကိုက်ညီမှုမရှိပါ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ဖိုင်အား ဖွင့်မရပါ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"တချို့ စာရွက်စာတန်းများ မဖျက်စီးနိုင်ပါ"</string>
<string name="share_via" msgid="8966594246261344259">"မှ ဝေမျှပါ"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"ပြန်ဖျက်ရန်"</string>
<string name="copy_preparing" msgid="3896202461003039386">"မိတ္တူကူးရန်ပြင်ဆင်နေ..."</string>
<string name="move_preparing" msgid="2772219441375531410">"ရွှေ့ရန် ပြင်ဆင်နေသည်…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ဖျက်ရန်အတွက် ပြင်ဆင်နေသည်..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ဖိုင် ကော်ပီ မကူးနိုင်ပါ</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင် ကော်ပီမကူးနိုင်ပါ</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ဖိုင်များကို မရွှေ့နိုင်ပါ</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင်ကို မရွှေ့နိုင်ပါ</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"အသေးစိတ် ကြည့်ရန် ထိပါ။"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">ဖိုင် <xliff:g id="COUNT_1">%1$d</xliff:g> ခုကိုဖျက်၍မရပါ</item>
+ <item quantity="one">ဖိုင် <xliff:g id="COUNT_0">%1$d</xliff:g> ခုကိုဖျက်၍မရပါ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"အသေးစိတ်ကြည့်ရန် တို့ပါ"</string>
<string name="retry" msgid="7564024179122207376">"ထပ်စမ်းရန်"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ဤဖိုင်များ ကော်ပီကူးမထားပါ- <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ဤဖိုင်များကို မရွှေ့ခဲ့ပါ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"> ဖိုင် <xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင်ကိုအချက်အလက်သိမ်းတဲ့နေရာသို့ ကူးယူပါ။</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ဤနေရာတွင် ရွေးချယ်ထားသည့် ဖိုင်များကို ကူးထည့်၍မရပါ။"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"အမည်ပြောင်းရန်"</string>
+ <string name="rename_error" msgid="4203041674883412606">"စာရွက်စာတမ်းကို အမည်ပြောင်းခြင်း မအောင်မြင်ပါ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
index 01dda74..8957258 100644
--- a/packages/DocumentsUI/res/values-nb/strings.xml
+++ b/packages/DocumentsUI/res/values-nb/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Flere apper"</string>
<string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Kan ikke åpne filen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Enkelte dokumenter kunne ikke slettes"</string>
<string name="share_via" msgid="8966594246261344259">"Del via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Angre"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering …"</string>
<string name="move_preparing" msgid="2772219441375531410">"Forbereder flytting …"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Gjøres klar for sletting …"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Kunne ikke kopiere <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
<item quantity="one">Kunne ikke kopiere <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
@@ -92,7 +95,12 @@
<item quantity="other">Kunne ikke flytte <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
<item quantity="one">Kunne ikke flytte <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Trykk for å se detaljer"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Kunne ikke slette <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
+ <item quantity="one">Kunne ikke slette <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Prøv på nytt"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Disse filene ble ikke kopiert: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Disse filene ble ikke flyttet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Kopierte <xliff:g id="COUNT_0">%1$d</xliff:g> fil til utklippstavlen.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan ikke lime inn de valgte filene her."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ne-rNP/strings.xml b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
index cd809af..c847e67 100644
--- a/packages/DocumentsUI/res/values-ne-rNP/strings.xml
+++ b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"उपकरणहरू"</string>
<string name="root_type_apps" msgid="8838065367985945189">"थप अनुप्रयोगहरू"</string>
<string name="empty" msgid="7858882803708117596">"कुनै वस्तु छैन।"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s मा कुनै पनि मेल खानेहरू छैन"</string>
<string name="toast_no_application" msgid="1339885974067891667">"फाइल खोल्न सक्दैन"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"केही कागजातहरू मेट्न असमर्थ छ"</string>
<string name="share_via" msgid="8966594246261344259">"माध्यमबाट साझेदारी गर्नुहोस्"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"अनडू गर्नुहोस्"</string>
<string name="copy_preparing" msgid="3896202461003039386">"प्रतिलिपिको लागि तयारी गर्दै ..."</string>
<string name="move_preparing" msgid="2772219441375531410">"सार्नको लागि तयारी गर्दै ..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"मेटाउन तयारी गर्दै..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> फाइलहरू प्रतिलिपि गर्न सकेन</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल प्रतिलिपि गर्न सकेन</item>
@@ -92,7 +94,11 @@
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> फाइलहरू सार्न सकिएन</item>
<item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल सार्न सकिएन</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"विवरणहरू हेर्न छुनुहोस्"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> फाइलहरू मेट्न सकेन</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल मेट्न सकेन</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"विवरणहरू हेर्न ट्याप गर्नुहोस्"</string>
<string name="retry" msgid="7564024179122207376">"पुनःप्रयास गर्नुहोस्"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"यी फाइलहरू प्रतिलिपि गरिएको थिएनः <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"यी फाइलहरू सारिएनन्: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"> क्लिपबोर्डमा <xliff:g id="COUNT_0">%1$d</xliff:g> फाइलहरूका प्रतिलिपि बनाइए।</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"यो स्थानमा चयन गरिएका फाइलहरू टाँस्न सकिँदैन।"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"पुन: नामाकरण गर्नुहोस्"</string>
+ <string name="rename_error" msgid="4203041674883412606">"कागजात पुन: नामाकरण गर्न असफल भयो"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
index 5948167..dd12aa5 100644
--- a/packages/DocumentsUI/res/values-nl/strings.xml
+++ b/packages/DocumentsUI/res/values-nl/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Apparaten"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Meer apps"</string>
<string name="empty" msgid="7858882803708117596">"Geen items"</string>
+ <string name="no_results" msgid="6622510343880730446">"Geen overeenkomsten in %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Kan bestand niet openen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan bepaalde documenten niet verwijderen"</string>
<string name="share_via" msgid="8966594246261344259">"Delen via"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Ongedaan maken"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopiëren voorbereiden…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Verplaatsen voorbereiden…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Verwijderen voorbereiden…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet kopiëren</item>
<item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet kopiëren</item>
@@ -92,7 +94,11 @@
<item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet verplaatsen</item>
<item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet verplaatsen</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Tik om details weer te geven"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet verwijderen</item>
+ <item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet verwijderen</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Tik om details te bekijken"</string>
<string name="retry" msgid="7564024179122207376">"Opnieuw proberen"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Deze bestanden zijn niet gekopieerd: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Deze bestanden zijn niet verplaatst: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand gekopieerd naar klembord.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan de geselecteerde bestanden niet plakken op deze locatie."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Naam wijzigen"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Kan naam van document niet wijzigen"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-pa-rIN/strings.xml b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
index dd081ab..00f7a8a 100644
--- a/packages/DocumentsUI/res/values-pa-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"ਡਿਵਾਈਸਾਂ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ਹੋਰ ਐਪਸ"</string>
<string name="empty" msgid="7858882803708117596">"ਕੋਈ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s ਵਿੱਚ ਕੋਈ ਮੇਲ ਨਹੀਂ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ਫਾਈਲ ਨਹੀਂ ਖੋਲ੍ਹ ਸਕਦਾ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ਕੁਝ ਦਸਤਾਵੇਜ਼ ਮਿਟਾਉਣ ਵਿੱਚ ਅਸਮਰੱਥ"</string>
<string name="share_via" msgid="8966594246261344259">"ਇਸ ਰਾਹੀਂ ਸ਼ੇਅਰ ਕਰੋ"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"ਕਾਪੀ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ਮੂਵ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"ਮਿਟਾਉਣ ਦੀ ਤਿਆਰੀ ਹੋ ਰਹੀ ਹੈ…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
<item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
@@ -92,7 +94,11 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਨੂੰ ਮੂਵ ਨਹੀਂ ਕਰ ਸਕਿਆ</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਨੂੰ ਮੂਵ ਨਹੀਂ ਕਰ ਸਕਿਆ</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"ਵੇਰਵੇ ਵੇਖਣ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"ਵੇਰਵਿਆਂ ਨੂੰ ਵੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="retry" msgid="7564024179122207376">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾਈ ਗਈ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮੂਵ ਨਹੀਂ ਕੀਤਾ ਗਿਆ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other">ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਬਣਾਈ ਗਈ।</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ਇਸ ਸਥਾਨ ਵਿੱਚ ਚੁਣੀਆਂ ਗਈਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਪੇਸਟ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"ਮੁੜ-ਨਾਮਕਰਨ ਕਰੋ"</string>
+ <string name="rename_error" msgid="4203041674883412606">"ਦਸਤਾਵੇਜ਼ ਦਾ ਮੁੜ-ਨਾਮਕਰਨ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
index 3fd3266..71a7c0ae 100644
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Urządzenia"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Więcej aplikacji"</string>
<string name="empty" msgid="7858882803708117596">"Brak elementów"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Nie można otworzyć pliku"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
<string name="share_via" msgid="8966594246261344259">"Udostępnij przez:"</string>
@@ -90,6 +92,7 @@
<string name="undo" msgid="7905788502491742328">"Cofnij"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Przygotowuję do kopiowania…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Przygotowuję przenoszenie…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Przygotowuję do usunięcia…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="few">Nie można skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
<item quantity="many">Nie można skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
@@ -102,7 +105,14 @@
<item quantity="other">Nie udało się przenieść <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
<item quantity="one">Nie udało się przenieść <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Kliknij, by zobaczyć szczegóły"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="few">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
+ <item quantity="many">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
+ <item quantity="other">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
+ <item quantity="one">Nie udało się usunąć <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Ponów"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Te pliki nie zostały skopiowane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Te pliki nie zostały przeniesione: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +123,8 @@
<item quantity="one">Skopiowano <xliff:g id="COUNT_0">%1$d</xliff:g> plik do schowka.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nie można wkleić wybranych plików w tej lokalizacji."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rBR/strings.xml b/packages/DocumentsUI/res/values-pt-rBR/strings.xml
index dce7cc0..b30233d 100644
--- a/packages/DocumentsUI/res/values-pt-rBR/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rBR/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Mais apps"</string>
<string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o arquivo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Desfazer"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparando para mover..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparando-se para excluir..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
<item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
@@ -92,7 +95,12 @@
<item quantity="one">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
<item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toque para ver detalhes"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ <item quantity="other">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Repetir"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Estes arquivos não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Estes arquivos não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os arquivos selecionados neste local."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
index 02cd2dd..59ae4ae 100644
--- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Mais aplicações"</string>
<string name="empty" msgid="7858882803708117596">"Sem itens"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o ficheiro"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Não é possível eliminar alguns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Partilhar através de"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Anular"</string>
<string name="copy_preparing" msgid="3896202461003039386">"A preparar para copiar…"</string>
<string name="move_preparing" msgid="2772219441375531410">"A preparar para mover…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"A preparar para eliminar…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
<item quantity="one">Não foi possível copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
@@ -92,7 +95,12 @@
<item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
<item quantity="one">Não foi possível mover <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toque para ver detalhes"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Não foi possível eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
+ <item quantity="one">Não foi possível eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Tentar novamente"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Os seguintes ficheiros não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Os seguintes ficheiros não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">Copiou <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro para a área de transferência.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os ficheiros selecionados nesta localização."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
index dce7cc0..b30233d 100644
--- a/packages/DocumentsUI/res/values-pt/strings.xml
+++ b/packages/DocumentsUI/res/values-pt/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Mais apps"</string>
<string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o arquivo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Desfazer"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Preparando para mover..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Preparando-se para excluir..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
<item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
@@ -92,7 +95,12 @@
<item quantity="one">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
<item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Toque para ver detalhes"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ <item quantity="other">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Repetir"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Estes arquivos não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Estes arquivos não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os arquivos selecionados neste local."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
index 5d32285..92343c5 100644
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Dispozitive"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Alte aplicații"</string>
<string name="empty" msgid="7858882803708117596">"Nu există elemente"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Fișierul nu poate fi deschis"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
<string name="share_via" msgid="8966594246261344259">"Trimiteți prin"</string>
@@ -87,6 +89,7 @@
<string name="undo" msgid="7905788502491742328">"Anulați"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Se pregătește copierea..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Se pregătește mutarea…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Se pregătește ștergerea…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="few">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere</item>
<item quantity="other">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
@@ -97,7 +100,13 @@
<item quantity="other">Nu s-au putut muta <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
<item quantity="one">Nu s-a putut muta <xliff:g id="COUNT_0">%1$d</xliff:g> fișier</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Atingeți pentru a afișa detaliile"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> fișiere nu au fost șterse</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere nu au fost șterse</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fișier nu a fost șters</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Reîncercați"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Aceste fișiere nu au fost copiate: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Aceste fișiere nu au fost mutate: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -107,4 +116,8 @@
<item quantity="one">A fost copiat <xliff:g id="COUNT_0">%1$d</xliff:g> fișier în clipboard.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Fișierele selectate nu au putut fi inserate în această locație."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
index e68c137..2b9629a2 100644
--- a/packages/DocumentsUI/res/values-ru/strings.xml
+++ b/packages/DocumentsUI/res/values-ru/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Другие приложения"</string>
<string name="empty" msgid="7858882803708117596">"Ничего нет"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Не удалось открыть файл"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string>
<string name="share_via" msgid="8966594246261344259">"Поделиться"</string>
@@ -90,6 +92,7 @@
<string name="undo" msgid="7905788502491742328">"Отменить"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Подготовка к копированию…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Подготовка…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Подготовка к удалению…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
<item quantity="few">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
@@ -102,7 +105,14 @@
<item quantity="many">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
<item quantity="other">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Нажмите, чтобы узнать подробности."</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
+ <item quantity="few">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
+ <item quantity="many">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
+ <item quantity="other">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Повторить"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Не удалось скопировать эти файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Эти файлы не были перемещены: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +123,8 @@
<item quantity="other">Скопированы <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не удается вставить сюда выбранные файлы"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-si-rLK/strings.xml b/packages/DocumentsUI/res/values-si-rLK/strings.xml
index 0f40df9..60e964f 100644
--- a/packages/DocumentsUI/res/values-si-rLK/strings.xml
+++ b/packages/DocumentsUI/res/values-si-rLK/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"උපාංග"</string>
<string name="root_type_apps" msgid="8838065367985945189">"තවත් යෙදුම්"</string>
<string name="empty" msgid="7858882803708117596">"අයිතම නැත"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$s හි තරඟ නැත"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ගොනුව විවෘත කළ නොහැක"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"සමහර ලේඛන මැකීමට නොහැකි විය"</string>
<string name="share_via" msgid="8966594246261344259">"හරහා බෙදාගන්න"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"අස් කරන්න"</string>
<string name="copy_preparing" msgid="3896202461003039386">"පිටපතක් සඳහා සූදානම් කරමින්..."</string>
<string name="move_preparing" msgid="2772219441375531410">"ගෙන යාම සඳහා පිළියෙළ කරමින් ..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"මැකීම සඳහා සූදානම් කරමින්..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කළ නොහැකි විය</item>
<item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කළ නොහැකි විය</item>
@@ -92,7 +94,11 @@
<item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් ගෙන යාමට නොහැකි විය</item>
<item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් ගෙන යාමට නොහැකි විය</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"විස්තර බැලීමට ස්පර්ශ කරන්න"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g>ක් මැකීමට නොහැකි විය</item>
+ <item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g>ක් මැකීමට නොහැකි විය</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"විස්තර බැලීමට තට්ටු කරන්න"</string>
<string name="retry" msgid="7564024179122207376">"නැවත උත්සාහ කරන්න"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"මෙම ගොනු පිටපත් නොකරන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"මෙම ගොනු ගෙන නොයන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other">පසුරු පුවරුවට ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කරන ලදි.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"මෙම ස්ථානය තුළ තෝරාගත් ගොනු ඇලවිය නොහැක."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"යළි නම් කරන්න"</string>
+ <string name="rename_error" msgid="4203041674883412606">"ලේඛනය යළි නම් කිරීම අසාර්ථක විය"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
index 2f0cbe8..40b0863 100644
--- a/packages/DocumentsUI/res/values-sk/strings.xml
+++ b/packages/DocumentsUI/res/values-sk/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Zariadenia"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Ďalšie aplikácie"</string>
<string name="empty" msgid="7858882803708117596">"Žiadne položky"</string>
+ <string name="no_results" msgid="6622510343880730446">"Žiadne zhody – %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Súbor sa nepodarilo otvoriť"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Niektoré dokumenty sa nepodarilo odstrániť"</string>
<string name="share_via" msgid="8966594246261344259">"Zdieľať"</string>
@@ -90,6 +91,7 @@
<string name="undo" msgid="7905788502491742328">"Späť"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Pripravuje sa na kopírovanie..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Prebieha príprava na presunutie…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Príprava na odstránenie…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="few">Zlyhalo kopírovanie <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
<item quantity="many">Zlyhalo kopírovanie <xliff:g id="COUNT_1">%1$d</xliff:g> súboru</item>
@@ -102,7 +104,13 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> súborov nie je možné presunúť</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> súbor nie je možné presunúť</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Klepnutím zobrazíte podrobné informácie"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="few">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súbory</item>
+ <item quantity="many">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súboru</item>
+ <item quantity="other">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
+ <item quantity="one">Nepodarilo sa odstrániť <xliff:g id="COUNT_0">%1$d</xliff:g> súbor</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Klepnutím zobrazíte podrobnosti"</string>
<string name="retry" msgid="7564024179122207376">"Skúsiť znova"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Tieto súbory neboli skopírované: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Tieto súbory neboli presunuté: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +121,6 @@
<item quantity="one">Do schránky bol skopírovaný <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Do tohto umiestnenia nie je možné prilepiť vybrané súbory"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Premenovať"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Premenovanie dokumentu zlyhalo"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
index 6da1290..60abaee 100644
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Naprave"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Več aplikacij"</string>
<string name="empty" msgid="7858882803708117596">"Ni elementov"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Datoteke ni mogoče odpreti"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nekaterih dokumentov ni mogoče izbrisati"</string>
<string name="share_via" msgid="8966594246261344259">"Deli z drugimi prek"</string>
@@ -90,6 +92,7 @@
<string name="undo" msgid="7905788502491742328">"Razveljavi"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Pripravljanje na kopiranje …"</string>
<string name="move_preparing" msgid="2772219441375531410">"Priprava na premikanje …"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Pripravljanje na izbris …"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče kopirati</item>
<item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
@@ -102,7 +105,14 @@
<item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče premakniti</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče premakniti</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Dotaknite se za ogled podrobnosti"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče izbrisati</item>
+ <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Poskusi znova"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Te datoteke niso bile kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Te datoteke niso bile premaknjene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +123,8 @@
<item quantity="other">V odložišče je bilo kopiranih <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Izbranih datotek ni mogoče prilepiti sem."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-sq-rAL/strings.xml b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
index b880bb4..0062e82 100644
--- a/packages/DocumentsUI/res/values-sq-rAL/strings.xml
+++ b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Pajisjet"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Aplikacione të tjera"</string>
<string name="empty" msgid="7858882803708117596">"Nuk ka artikuj"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Skedari nuk mund të hapet"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"E pamundur të fshihen disa dokumente"</string>
<string name="share_via" msgid="8966594246261344259">"Shpërnda publikisht përmes"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Zhbëj"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Po përgatitet për kopjimin…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Po përgatitet për zhvendosjen…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Po përgatitet për fshirje…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të kopjoheshin</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të kopjohej</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të zhvendoseshin</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të zhvendosej</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Prek për të parë detajet"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të fshiheshin</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të fshihej</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Provo përsëri"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Këta skedarë nuk u kopjuan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Këta skedarë nuk u zhvendosën: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">U kopjua <xliff:g id="COUNT_0">%1$d</xliff:g> skedar në kujtesën e fragmenteve.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Skedarët e zgjedhur nuk mund të ngjiten në këtë vendndodhje."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
index 93a1cf6..403ae93 100644
--- a/packages/DocumentsUI/res/values-sr/strings.xml
+++ b/packages/DocumentsUI/res/values-sr/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Уређаји"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Још апликација"</string>
<string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Није могуће отворити датотеку"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string>
<string name="share_via" msgid="8966594246261344259">"Делите преко"</string>
@@ -87,6 +89,7 @@
<string name="undo" msgid="7905788502491742328">"Опозови"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Припрема се копирање…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Припрема се премештање..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Припрема се брисање…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеку</item>
<item quantity="few">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке</item>
@@ -97,7 +100,13 @@
<item quantity="few">Није успело премештање <xliff:g id="COUNT_1">%1$d</xliff:g> датотекe</item>
<item quantity="other">Није успело премештање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Додирните да бисте видели детаље"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
+ <item quantity="few">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
+ <item quantity="other">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека није успело</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Покушај поново"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Следеће датотеке нису копиране: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ове датотеке нису премештене: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -107,4 +116,8 @@
<item quantity="other">Копирали сте <xliff:g id="COUNT_1">%1$d</xliff:g> датотека у привремену меморију.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Изабране датотеке не могу да се налепе на овој локацији."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
index 63da2c6..50c5beb 100644
--- a/packages/DocumentsUI/res/values-sv/strings.xml
+++ b/packages/DocumentsUI/res/values-sv/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Fler appar"</string>
<string name="empty" msgid="7858882803708117596">"Inga objekt"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Det går inte att öppna filen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Det gick inte att ta bort vissa dokument"</string>
<string name="share_via" msgid="8966594246261344259">"Dela via"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Ångra"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopieringen förbereds …"</string>
<string name="move_preparing" msgid="2772219441375531410">"Förbereder för att flytta …"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Radering förbereds …"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer gick inte att kopiera</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fil gick inte att kopiera</item>
@@ -92,7 +95,12 @@
<item quantity="other">Det gick inte att flytta <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
<item quantity="one">Det gick inte att flytta <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Tryck här om du vill veta mer"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Det gick inte att radera <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
+ <item quantity="one">Det gick inte att radera <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Försök igen"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Följande filer kopierades inte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Följande filer har inte flyttats: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fil har kopierats till Urklipp.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Det går inte att klistra in den valda filen på den här platsen."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
index c303e0c..875ffd4 100644
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Vifaa"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Programu zaidi"</string>
<string name="empty" msgid="7858882803708117596">"Hakuna vipengee"</string>
+ <string name="no_results" msgid="6622510343880730446">"Hakuna zinazolingana katika %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Haiwezi kufungua faili"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
<string name="share_via" msgid="8966594246261344259">"Shiriki kupitia"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Tendua"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Inaanda kunakili..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Inatayarisha kuhamisha..."</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Inajitayarisha kufuta..."</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Haikuweza kunakili faili <xliff:g id="COUNT_1">%1$d</xliff:g> </item>
<item quantity="one">Haikuweza kunakili faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
@@ -92,7 +94,11 @@
<item quantity="other">Haikuweza kuhamisha faili <xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="one">Haikuweza kuhamisha faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Gusa ili uone maelezo"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Haikuweza kufuta faili <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">Haikuweza kufuta faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Gonga ili uangalie maelezo"</string>
<string name="retry" msgid="7564024179122207376">"Jaribu tena"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Faili hizi hazikunakiliwa: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Faili hizi hazikuhamishwa: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">Alinakili faili <xliff:g id="COUNT_0">%1$d</xliff:g> kwenye ubao wa kunakili.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Haiwezi kubandika faili zilizochaguliwa katika eneo hili."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Badilisha jina"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Imeshindwa kubadilisha jina la hati"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ta-rIN/strings.xml b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
index 87cb68d..1a05053 100644
--- a/packages/DocumentsUI/res/values-ta-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"சாதனங்கள்"</string>
<string name="root_type_apps" msgid="8838065367985945189">"மேலும் பயன்பாடுகள்"</string>
<string name="empty" msgid="7858882803708117596">"எதுவும் இல்லை"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"கோப்பைத் திறக்க முடியவில்லை"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"சில ஆவணங்களை நீக்க முடியவில்லை"</string>
<string name="share_via" msgid="8966594246261344259">"இதன் வழியாகப் பகிர்"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"செயல்தவிர்"</string>
<string name="copy_preparing" msgid="3896202461003039386">"நகல் தயாராகிறது…"</string>
<string name="move_preparing" msgid="2772219441375531410">"நகர்த்துவதற்குத் தயார்படுத்துகிறது…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"நீக்கத் தயாராகிறது…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நகலெடுக்க முடியவில்லை</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நகலெடுக்க முடியவில்லை</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நகர்த்த முடியவில்லை</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நகர்த்த முடியவில்லை</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"விவரங்களைப் பார்க்க, தொடவும்"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நீக்க முடியவில்லை</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நீக்க முடியவில்லை</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"மீண்டும் முயற்சிக்கவும்"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"நகலெடுக்கப்படாத கோப்புகள்: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"இந்தக் கோப்புகள் நகர்த்தப்படவில்லை: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">கிளிப்போர்டிற்கு <xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பு நகலெடுக்கப்பட்டது.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"தேர்ந்தெடுத்த கோப்புகளை இங்கு ஒட்ட முடியாது."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-te-rIN/strings.xml b/packages/DocumentsUI/res/values-te-rIN/strings.xml
index 7b34df5..71b92f4 100644
--- a/packages/DocumentsUI/res/values-te-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-te-rIN/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"పరికరాలు"</string>
<string name="root_type_apps" msgid="8838065367985945189">"మరిన్ని అనువర్తనాలు"</string>
<string name="empty" msgid="7858882803708117596">"అంశాలు లేవు"</string>
+ <string name="no_results" msgid="6622510343880730446">"%1$sలో సరిపోలినవి లేవు"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ఫైల్ను తెరవడం సాధ్యపడదు"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"కొన్ని పత్రాలను తొలగించడం సాధ్యపడలేదు"</string>
<string name="share_via" msgid="8966594246261344259">"దీని ద్వారా భాగస్వామ్యం చేయండి"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"చర్య రద్దు చేయి"</string>
<string name="copy_preparing" msgid="3896202461003039386">"కాపీ చేయడానికి సిద్ధం చేస్తోంది…"</string>
<string name="move_preparing" msgid="2772219441375531410">"తరలించడానికి సిద్ధమవుతోంది…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"తొలగించడానికి సిద్ధం చేస్తోంది…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను కాపీ చేయలేకపోయింది</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను కాపీ చేయలేకపోయింది</item>
@@ -92,7 +94,11 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను తరలించలేకపోయింది</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను తరలించలేకపోయింది</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"వివరాలను వీక్షించడానికి తాకండి"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను తొలగించడం సాధ్యపడలేదు</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను తొలగించడం సాధ్యపడలేదు</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"వివరాలను వీక్షించడానికి నొక్కండి"</string>
<string name="retry" msgid="7564024179122207376">"మళ్లీ ప్రయత్నించు"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ఈ ఫైల్లు కాపీ చేయబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ఈ ఫైల్లు తరలించబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">క్లిప్బోర్డ్కి <xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను కాపీ చేసారు.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ఎంచుకున్న ఫైల్లను ఈ స్థానంలోకి తీసుకురావడం సాధ్యపడదు."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"పేరు మార్చు"</string>
+ <string name="rename_error" msgid="4203041674883412606">"పత్రం పేరు మార్చడంలో విఫలమైంది"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
index dfb423e..1e90bc5 100644
--- a/packages/DocumentsUI/res/values-th/strings.xml
+++ b/packages/DocumentsUI/res/values-th/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"อุปกรณ์"</string>
<string name="root_type_apps" msgid="8838065367985945189">"แอปเพิ่มเติม"</string>
<string name="empty" msgid="7858882803708117596">"ไม่มีรายการ"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"ไม่สามารถเปิดไฟล์ได้"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ไม่สามารถลบเอกสารบางรายการ"</string>
<string name="share_via" msgid="8966594246261344259">"แชร์ผ่าน"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"เลิกทำ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"กำลังเตรียมการคัดลอก…"</string>
<string name="move_preparing" msgid="2772219441375531410">"กำลังเตรียมการย้าย…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"กำลังเตรียมลบ…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">ไม่สามารถคัดลอก <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
<item quantity="one">ไม่สามารถคัดลอก <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
@@ -92,7 +95,12 @@
<item quantity="other">ไม่สามารถย้ายไฟล์ <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
<item quantity="one">ไม่สามารถย้ายไฟล์ <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"แตะเพื่อดูรายละเอียด"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">ไม่สามารถลบ <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
+ <item quantity="one">ไม่สามารถลบ <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"ลองอีกครั้ง"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"ไม่มีการคัดลอกไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"ไม่มีการย้ายไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">คัดลอก <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์ไปยังคลิปบอร์ดแล้ว</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"ไม่สามารถวางไฟล์ที่เลือกในตำแหน่งนี้"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
index 813b39a..971186c 100644
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Mga Device"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Higit pang apps"</string>
<string name="empty" msgid="7858882803708117596">"Walang mga item"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Hindi mabuksan ang file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Hindi matanggal ang ilang dokumento"</string>
<string name="share_via" msgid="8966594246261344259">"Ibahagi sa pamamagitan ng"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"I-undo"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Naghahanda para sa pagkopya…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Naghahanda para sa paglilipat…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Naghahanda para sa pag-delete…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="other">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
@@ -92,7 +95,12 @@
<item quantity="one">Hindi nailipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
<item quantity="other">Hindi nailipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Pindutin upang tingnan ang mga detalye"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Hindi ma-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="other">Hindi ma-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Subukang muli"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Hindi nakopya ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Hindi nailipat ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="other">Nakopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file sa clipboard.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Hindi mai-paste sa lokasyong ito ang mga piniling file."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
index 90794a2..720f6bc 100644
--- a/packages/DocumentsUI/res/values-tr/strings.xml
+++ b/packages/DocumentsUI/res/values-tr/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Diğer uygulamalar"</string>
<string name="empty" msgid="7858882803708117596">"Öğe yok"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Dosya açılamıyor"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Bazı dokümanlar silinemiyor"</string>
<string name="share_via" msgid="8966594246261344259">"Şunu kullanarak paylaş:"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Geri al"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmak için hazırlanıyor…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Taşıma için hazırlanıyor…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Silmek için hazırlanıyor…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya kopyalanamadı</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya kopyalanamadı</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya taşınamadı</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya taşınamadı</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Ayrıntıları görüntülemek için dokunun"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya silinemedi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya silinemedi</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Yeniden dene"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Şu dosyalar kopyalanmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Şu dosyalar taşınmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya panoya kopyalandı.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Seçili dosyalar bu konuma yapıştırılamıyor."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
index a8278d9..8aeda26 100644
--- a/packages/DocumentsUI/res/values-uk/strings.xml
+++ b/packages/DocumentsUI/res/values-uk/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Пристрої"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Інші програми"</string>
<string name="empty" msgid="7858882803708117596">"Нічого немає"</string>
+ <string name="no_results" msgid="6622510343880730446">"Немає збігів для запиту \"%1$s\""</string>
<string name="toast_no_application" msgid="1339885974067891667">"Не вдалося відкрити файл"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Не вдалося видалити деякі документи"</string>
<string name="share_via" msgid="8966594246261344259">"Надіслати через"</string>
@@ -90,6 +91,7 @@
<string name="undo" msgid="7905788502491742328">"Відмінити"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Підготовка до копіювання…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Підготовка до переміщення…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Підготовка до видалення…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
<item quantity="few">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
@@ -102,7 +104,13 @@
<item quantity="many">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
<item quantity="other">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Торкніться, щоб дізнатися більше"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
+ <item quantity="few">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
+ <item quantity="many">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
+ <item quantity="other">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Торкніться, щоб переглянути деталі"</string>
<string name="retry" msgid="7564024179122207376">"Повторити"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Ці файли не скопійовано: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Не переміщено ці файли: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -113,4 +121,6 @@
<item quantity="other">У буфер обміну скопійовано <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не вдається вставити вибрані файли в цю папку."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Перейменувати"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Не вдалося перейменувати документ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ur-rPK/strings.xml b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
index d8caa37..cf74224 100644
--- a/packages/DocumentsUI/res/values-ur-rPK/strings.xml
+++ b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"آلات"</string>
<string name="root_type_apps" msgid="8838065367985945189">"مزید ایپس"</string>
<string name="empty" msgid="7858882803708117596">"کوئی آئٹمز نہيں ہیں"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"فائل نہيں کھول سکتے ہیں"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"کچھ دستاویزات کو حذف کرنے سے قاصر"</string>
<string name="share_via" msgid="8966594246261344259">"اشتراک کریں بذریعہ"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"کالعدم کریں"</string>
<string name="copy_preparing" msgid="3896202461003039386">"کاپی کیلئے تیار ہو رہا ہے…"</string>
<string name="move_preparing" msgid="2772219441375531410">"منتقلی کیلئے تیار ہو رہی ہیں…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"حذف کرنے کیلئے تیاری ہو رہی ہے…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلز کاپی نہیں کی جا سکیں</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل کاپی نہیں کی جا سکی</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلز منتقل نہیں ہو سکیں</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل منتقل نہیں ہو سکی</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"تفصیلات دیکھنے کیلئے ٹچ کریں"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلیں حذف نہیں ہو سکیں</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل حذف نہیں ہو سکی</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"دوبارہ کوشش کریں"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"یہ فائلز کاپی نہیں کی گئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"یہ فائلیں منتقل نہیں ہوئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل کلپ بورڈ پر کاپی کی گئی۔</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"منتخب کردہ فائلز کو اس مقام پر پیسٹ نہیں کیا جا سکتا۔"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
index 1b5ace4..e51cab8 100644
--- a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
+++ b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"Qurilmalar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Ko‘proq dasturlar"</string>
<string name="empty" msgid="7858882803708117596">"Hech narsa yo‘q"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"Fayl ochilmadi"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ba’zi hujjatlar o‘chirilmadi"</string>
<string name="share_via" msgid="8966594246261344259">"Quyidagi orqali ulashish"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"Bekor qilish"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Nuxsa olishga tayyorgarlik..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Ko‘chirishga tayyorgarlik…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"O‘chirishga tayyorlanmoqda…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayldan nusxa olinmadi</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayldan nusxa olinmadi</item>
@@ -92,7 +95,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl ko‘chirib o‘tkazilmadi</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl ko‘chirib o‘tkazilmadi</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Batafsil ma’lumot olish uchun bosing"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta faylni o‘chirib bo‘lmadi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta faylni o‘chirib bo‘lmadi</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"Qayta urinish"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Ushbu fayllardan nusxa olinmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Ushbu fayllar ko‘chirib o‘tkazilmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayldan vaqtinchalik xotiraga nusxa olindi.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tanlangan fayllarni bu yerga joylab bo‘lmadi."</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
index 287ca70..f418334 100644
--- a/packages/DocumentsUI/res/values-vi/strings.xml
+++ b/packages/DocumentsUI/res/values-vi/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Thiết bị"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Các ứng dụng khác"</string>
<string name="empty" msgid="7858882803708117596">"Không có mục nào"</string>
+ <string name="no_results" msgid="6622510343880730446">"Không có kết quả phù hợp trong %1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Không thể mở tệp"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Không thể xóa một số tài liệu"</string>
<string name="share_via" msgid="8966594246261344259">"Chia sẻ qua"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Hoàn tác"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Đang chuẩn bị sao chép…"</string>
<string name="move_preparing" msgid="2772219441375531410">"Đang chuẩn bị di chuyển…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Đang chuẩn bị xóa…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">Không thể sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
<item quantity="one">Không thể sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
@@ -92,7 +94,11 @@
<item quantity="other">Không thể di chuyển <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
<item quantity="one">Không thể di chuyển <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Chạm để xem chi tiết"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">Không thể xóa <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
+ <item quantity="one">Không thể xóa <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Nhấn để xem chi tiết"</string>
<string name="retry" msgid="7564024179122207376">"Thử lại"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Những tệp này chưa được sao chép: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Những tệp này chưa được di chuyển: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">Đã sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp vào khay nhớ tạm.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Không thể dán các tệp đã chọn vào vị trí này."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Đổi tên"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Không đổi được tên tài liệu"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
index 9901abf..7f8f2fd 100644
--- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
@@ -63,6 +63,8 @@
<string name="root_type_device" msgid="7121342474653483538">"设备"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多应用"</string>
<string name="empty" msgid="7858882803708117596">"无任何文件"</string>
+ <!-- no translation found for no_results (6622510343880730446) -->
+ <skip />
<string name="toast_no_application" msgid="1339885974067891667">"无法打开文件"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式"</string>
@@ -84,6 +86,7 @@
<string name="undo" msgid="7905788502491742328">"撤消"</string>
<string name="copy_preparing" msgid="3896202461003039386">"正在准备复制…"</string>
<string name="move_preparing" msgid="2772219441375531410">"正在准备移动…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"正在准备删除…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">无法复制 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件</item>
<item quantity="one">无法复制 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件</item>
@@ -92,7 +95,12 @@
<item quantity="other">无法移动 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件</item>
<item quantity="one">无法移动 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"触摸可查看详情"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">无法删除 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件</item>
+ <item quantity="one">无法删除 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件</item>
+ </plurals>
+ <!-- no translation found for notification_touch_for_details (6268189413228855582) -->
+ <skip />
<string name="retry" msgid="7564024179122207376">"重试"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"以下文件无法复制:<xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"以下文件无法移动:<xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +109,8 @@
<item quantity="one">已将 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件复制到剪贴板。</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"无法将所选文件粘贴到此位置。"</string>
+ <!-- no translation found for menu_rename (7678802479104285353) -->
+ <skip />
+ <!-- no translation found for rename_error (4203041674883412606) -->
+ <skip />
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
index 9cfba1d..1a4ffde 100644
--- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
<string name="empty" msgid="7858882803708117596">"沒有項目"</string>
+ <string name="no_results" msgid="6622510343880730446">"沒有與「%1$s」相符的結果"</string>
<string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"復原"</string>
<string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
<string name="move_preparing" msgid="2772219441375531410">"正在準備移動…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"正在準備刪除…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">無法複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
<item quantity="one">無法複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
@@ -92,7 +94,11 @@
<item quantity="other">未能移動 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
<item quantity="one">未能移動 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"輕觸即可查看詳情"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">無法刪除 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
+ <item quantity="one">無法刪除 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"輕按即可查看詳細資訊"</string>
<string name="retry" msgid="7564024179122207376">"重試"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"以下檔案未能複製:<xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"這些檔案並未移動:<xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">已複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案到剪貼簿。</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"無法在此位置貼上選取檔案。"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"重新命名"</string>
+ <string name="rename_error" msgid="4203041674883412606">"無法重新命名文件"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index b2cee9c..b48951f 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
<string name="empty" msgid="7858882803708117596">"沒有任何項目"</string>
+ <string name="no_results" msgid="6622510343880730446">"沒有與「%1$s」相符的結果"</string>
<string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"復原"</string>
<string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
<string name="move_preparing" msgid="2772219441375531410">"準備移動…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"正在準備刪除…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="other">無法複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
<item quantity="one">無法複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
@@ -92,7 +94,11 @@
<item quantity="other">無法移動 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
<item quantity="one">無法移動 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"輕觸即可查看詳細資料"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="other">無法刪除 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
+ <item quantity="one">無法刪除 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"輕按即可查看詳細資訊"</string>
<string name="retry" msgid="7564024179122207376">"重試"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"未複製這些檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"未移動以下檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="one">已將 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案複製到剪貼簿。</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"無法將所選檔案貼到這個位置。"</string>
+ <string name="menu_rename" msgid="7678802479104285353">"重新命名"</string>
+ <string name="rename_error" msgid="4203041674883412606">"無法重新命名文件"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
index 308a6f9..0e2d6fd 100644
--- a/packages/DocumentsUI/res/values-zu/strings.xml
+++ b/packages/DocumentsUI/res/values-zu/strings.xml
@@ -63,6 +63,7 @@
<string name="root_type_device" msgid="7121342474653483538">"Amadivayisi"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Izinhlelo zokusebenza eziningi"</string>
<string name="empty" msgid="7858882803708117596">"Azikho izinto"</string>
+ <string name="no_results" msgid="6622510343880730446">"Akukho okufanayo ku-%1$s"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Ayikwazi ukuvula ifayela"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ayikwazi ukususa amanye amadokhumenti"</string>
<string name="share_via" msgid="8966594246261344259">"Yabelana nge-"</string>
@@ -84,6 +85,7 @@
<string name="undo" msgid="7905788502491742328">"Hlehlisa"</string>
<string name="copy_preparing" msgid="3896202461003039386">"Ilungiselela ukukopisha..."</string>
<string name="move_preparing" msgid="2772219441375531410">"Ilungiselela ukuhambisa…"</string>
+ <string name="delete_preparing" msgid="5655813182533491992">"Ilungiselela ukususa…"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
<item quantity="one">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="other">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
@@ -92,7 +94,11 @@
<item quantity="one">Ayikwazanga ukuhambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="other">Ayikwazanga ukuhambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
</plurals>
- <string name="notification_touch_for_details" msgid="4483108577842961665">"Thinta ukuze ubuke imininingwane"</string>
+ <plurals name="delete_error_notification_title" formatted="false" msgid="7600379830348969563">
+ <item quantity="one">Ayikwazanga ukususa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Ayikwazanga ukususa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="6268189413228855582">"Thepha ukuze ubuke imininingwane"</string>
<string name="retry" msgid="7564024179122207376">"Zama futhi"</string>
<string name="copy_failure_alert_content" msgid="3715575000297709082">"Lawa mafayela awazange akopishwe: <xliff:g id="LIST">%1$s</xliff:g>"</string>
<string name="move_failure_alert_content" msgid="7151140279020481180">"Lawa mafayela awazange ahanjiswe: <xliff:g id="LIST">%1$s</xliff:g>"</string>
@@ -101,4 +107,6 @@
<item quantity="other">Kukopishwe amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g> kubhodi lokunamathisela.</item>
</plurals>
<string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ayikwazi ukunamathisela amafayela akhethiwe kule ndawo."</string>
+ <string name="menu_rename" msgid="7678802479104285353">"Qamba kabusha"</string>
+ <string name="rename_error" msgid="4203041674883412606">"Yehlulekile ukuqamba kabusha idokhumenti"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml
index 05c43b2..8ac228e 100644
--- a/packages/DocumentsUI/res/values/strings.xml
+++ b/packages/DocumentsUI/res/values/strings.xml
@@ -123,6 +123,8 @@
<!-- Text shown when a directory of documents is empty [CHAR LIMIT=24] -->
<string name="empty">No items</string>
+ <!-- Text shown when a file search returns no items [CHAR LIMIT=32] -->
+ <string name="no_results">No matches in %1$s</string>
<!-- Toast shown when no app can be found to open the selected document [CHAR LIMIT=48] -->
<string name="toast_no_application">Can\'t open file</string>
@@ -176,7 +178,7 @@
<item quantity="other">Couldn\'t delete <xliff:g id="count" example="2">%1$d</xliff:g> files</item>
</plurals>
<!-- Second line for notifications saying that more information will be shown after touching [CHAR LIMIT=48] -->
- <string name="notification_touch_for_details">Touch to view details</string>
+ <string name="notification_touch_for_details">Tap to view details</string>
<!-- Label of a dialog button for retrying a failed operation [CHAR LIMIT=24] -->
<string name="retry">Retry</string>
<!-- Contents of the copying failure alert dialog. [CHAR LIMIT=48] -->
@@ -190,4 +192,8 @@
</plurals>
<!-- Toast shown when a user tries to paste files into an unsupported location. -->
<string name="clipboard_files_cannot_paste">Cannot paste the selected files in this location.</string>
+ <!-- Menu item that renames the selected document [CHAR LIMIT=24] -->
+ <string name="menu_rename">Rename</string>
+ <!-- Toast shown when renaming document failed with an error [CHAR LIMIT=48] -->
+ <string name="rename_error">Failed to rename document</string>
</resources>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 0fb8daf..f43b81c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -437,7 +437,7 @@
DirectoryFragment.get(getFragmentManager()).onUserModeChanged();
}
- void setPending(boolean pending) {
+ public void setPending(boolean pending) {
final SaveFragment save = SaveFragment.get(getFragmentManager());
if (save != null) {
save.setPending(pending);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
index f3c3f2f..df036b9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -63,7 +63,7 @@
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
- final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false);
+ final View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
final EditText editText = (EditText) view.findViewById(android.R.id.text1);
builder.setTitle(R.string.menu_create_dir);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
index ba96b0e..809db31 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -28,6 +28,7 @@
import static com.android.internal.util.Preconditions.checkState;
import static com.google.common.base.Preconditions.checkArgument;
+import android.annotation.StringRes;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Fragment;
@@ -92,6 +93,7 @@
import com.android.documentsui.RecentLoader;
import com.android.documentsui.RecentsProvider;
import com.android.documentsui.RecentsProvider.StateColumns;
+import com.android.documentsui.dirlist.RenameDocumentFragment;
import com.android.documentsui.RootsCache;
import com.android.documentsui.Shared;
import com.android.documentsui.Snackbars;
@@ -131,6 +133,7 @@
private static final int LOADER_ID = 42;
private static final int DELETE_UNDO_TIMEOUT = 5000;
private static final int DELETE_JOB_DELAY = 5500;
+ private static final int EMPTY_REVEAL_DURATION = 250;
private static final String EXTRA_TYPE = "type";
private static final String EXTRA_ROOT = "root";
@@ -167,63 +170,6 @@
private MessageBar mMessageBar;
private View mProgressBar;
- public static void showDirectory(FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) {
- show(fm, TYPE_NORMAL, root, doc, null, anim);
- }
-
- public static void showSearch(FragmentManager fm, RootInfo root, String query, int anim) {
- show(fm, TYPE_SEARCH, root, null, query, anim);
- }
-
- public static void showRecentsOpen(FragmentManager fm, int anim) {
- show(fm, TYPE_RECENT_OPEN, null, null, null, anim);
- }
-
- private static void show(FragmentManager fm, int type, RootInfo root, DocumentInfo doc,
- String query, int anim) {
- final Bundle args = new Bundle();
- args.putInt(EXTRA_TYPE, type);
- args.putParcelable(EXTRA_ROOT, root);
- args.putParcelable(EXTRA_DOC, doc);
- args.putString(EXTRA_QUERY, query);
-
- final FragmentTransaction ft = fm.beginTransaction();
- switch (anim) {
- case ANIM_SIDE:
- args.putBoolean(EXTRA_IGNORE_STATE, true);
- break;
- case ANIM_DOWN:
- args.putBoolean(EXTRA_IGNORE_STATE, true);
- ft.setCustomAnimations(R.animator.dir_down, R.animator.dir_frozen);
- break;
- case ANIM_UP:
- ft.setCustomAnimations(R.animator.dir_frozen, R.animator.dir_up);
- break;
- }
-
- final DirectoryFragment fragment = new DirectoryFragment();
- fragment.setArguments(args);
-
- ft.replace(R.id.container_directory, fragment);
- ft.commitAllowingStateLoss();
- }
-
- private static String buildStateKey(RootInfo root, DocumentInfo doc) {
- final StringBuilder builder = new StringBuilder();
- builder.append(root != null ? root.authority : "null").append(';');
- builder.append(root != null ? root.rootId : "null").append(';');
- builder.append(doc != null ? doc.documentId : "null");
- return builder.toString();
- }
-
- public static @Nullable DirectoryFragment get(FragmentManager fm) {
- // TODO: deal with multiple directories shown at once
- Fragment fragment = fm.findFragmentById(R.id.container_directory);
- return fragment instanceof DirectoryFragment
- ? (DirectoryFragment) fragment
- : null;
- }
-
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -614,6 +560,7 @@
private Selection mSelected = new Selection();
private ActionMode mActionMode;
private int mNoDeleteCount = 0;
+ private int mNoRenameCount = -1;
private Menu mMenu;
@Override
@@ -637,6 +584,9 @@
if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) {
mNoDeleteCount += selected ? 1 : -1;
}
+ if ((docFlags & Document.FLAG_SUPPORTS_RENAME) != 0) {
+ mNoRenameCount += selected ? 1 : -1;
+ }
}
@Override
@@ -675,6 +625,7 @@
mSelectionManager.clearSelection();
mSelected.clear();
mNoDeleteCount = 0;
+ mNoRenameCount = -1;
}
@Override
@@ -692,10 +643,19 @@
return true;
}
+ boolean canRenameSelection() {
+ return mNoRenameCount == 0 && mSelectionManager.getSelection().size() == 1;
+ }
+
+ boolean canDeleteSelection() {
+ return mNoDeleteCount == 0;
+ }
+
private void updateActionMenu() {
checkNotNull(mMenu);
+
// Delegate update logic to our owning action, since specialized logic is desired.
- mTuner.updateActionMenu(mMenu, mType, mNoDeleteCount == 0);
+ mTuner.updateActionMenu(mMenu, mType, canDeleteSelection(), canRenameSelection());
Menus.disableHiddenItems(mMenu);
}
@@ -735,6 +695,7 @@
case R.id.menu_copy_to_clipboard:
if (!selection.isEmpty()) {
copySelectionToClipboard(selection);
+ mode.finish();
}
return true;
@@ -742,6 +703,11 @@
selectAllFiles();
return true;
+ case R.id.menu_rename:
+ renameDocuments(selection);
+ mode.finish();
+ return true;
+
default:
if (DEBUG) Log.d(TAG, "Unhandled menu item selected: " + item);
return false;
@@ -889,6 +855,19 @@
}.execute(selected);
}
+ private void renameDocuments(Selection selected) {
+ // Batch renaming not supported
+ // Rename option is only available in menu when 1 document selected
+ checkArgument(selected.size() == 1);
+
+ new GetDocumentsTask() {
+ @Override
+ void onDocumentsReady(List<DocumentInfo> docs) {
+ RenameDocumentFragment.show(getFragmentManager(), docs.get(0));
+ }
+ }.execute(selected);
+ }
+
@Override
public void initDocumentHolder(DocumentHolder holder) {
holder.addEventListener(mItemEventListener);
@@ -917,25 +896,43 @@
return mTuner.isDocumentEnabled(docMimeType, docFlags);
}
- void showEmptyView() {
- mEmptyView.setVisibility(View.VISIBLE);
- mRecView.setVisibility(View.GONE);
- TextView msg = (TextView) mEmptyView.findViewById(R.id.message);
- msg.setText(R.string.empty);
- // No retry button for the empty view.
- mEmptyView.findViewById(R.id.button_retry).setVisibility(View.GONE);
+ private void showEmptyDirectory() {
+ showEmptyView(R.string.empty);
}
- void showErrorView() {
- mEmptyView.setVisibility(View.VISIBLE);
- mRecView.setVisibility(View.GONE);
- TextView msg = (TextView) mEmptyView.findViewById(R.id.message);
- msg.setText(R.string.query_error);
- // TODO: Enable this once the retry button does something.
- mEmptyView.findViewById(R.id.button_retry).setVisibility(View.GONE);
+ private void showNoResults(RootInfo root) {
+ CharSequence msg = getContext().getResources().getText(R.string.no_results);
+ showEmptyView(String.format(String.valueOf(msg), root.title));
}
- void showRecyclerView() {
+ // Shows an error indicating documents couldn't be queried.
+ private void showQueryError() {
+ showEmptyView(R.string.query_error);
+ }
+
+ private void showEmptyView(@StringRes int id) {
+ showEmptyView(getContext().getResources().getText(id));
+ }
+
+ private void showEmptyView(CharSequence msg) {
+ View content = mEmptyView.findViewById(R.id.content);
+ TextView msgView = (TextView) mEmptyView.findViewById(R.id.message);
+ msgView.setText(msg);
+
+ content.animate().cancel(); // cancel any ongoing animations
+
+ content.setAlpha(0);
+ mEmptyView.setVisibility(View.VISIBLE);
+ mRecView.setVisibility(View.GONE);
+
+ // fade in the content, so it looks purdy like
+ content.animate()
+ .alpha(1f)
+ .setDuration(EMPTY_REVEAL_DURATION)
+ .setListener(null);
+ }
+
+ private void showDirectory() {
mEmptyView.setVisibility(View.GONE);
mRecView.setVisibility(View.VISIBLE);
}
@@ -1300,16 +1297,20 @@
mProgressBar.setVisibility(model.isLoading() ? View.VISIBLE : View.GONE);
if (model.isEmpty()) {
- showEmptyView();
+ if (getDisplayState().currentSearch != null) {
+ showNoResults(getDisplayState().stack.root);
+ } else {
+ showEmptyDirectory();
+ }
} else {
- showRecyclerView();
+ showDirectory();
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onModelUpdateFailed(Exception e) {
- showErrorView();
+ showQueryError();
}
}
@@ -1419,4 +1420,62 @@
}
}
}
+
+ public static void showDirectory(
+ FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) {
+ show(fm, TYPE_NORMAL, root, doc, null, anim);
+ }
+
+ public static void showSearch(FragmentManager fm, RootInfo root, String query, int anim) {
+ show(fm, TYPE_SEARCH, root, null, query, anim);
+ }
+
+ public static void showRecentsOpen(FragmentManager fm, int anim) {
+ show(fm, TYPE_RECENT_OPEN, null, null, null, anim);
+ }
+
+ private static void show(FragmentManager fm, int type, RootInfo root, DocumentInfo doc,
+ String query, int anim) {
+ final Bundle args = new Bundle();
+ args.putInt(EXTRA_TYPE, type);
+ args.putParcelable(EXTRA_ROOT, root);
+ args.putParcelable(EXTRA_DOC, doc);
+ args.putString(EXTRA_QUERY, query);
+
+ final FragmentTransaction ft = fm.beginTransaction();
+ switch (anim) {
+ case ANIM_SIDE:
+ args.putBoolean(EXTRA_IGNORE_STATE, true);
+ break;
+ case ANIM_DOWN:
+ args.putBoolean(EXTRA_IGNORE_STATE, true);
+ ft.setCustomAnimations(R.animator.dir_down, R.animator.dir_frozen);
+ break;
+ case ANIM_UP:
+ ft.setCustomAnimations(R.animator.dir_frozen, R.animator.dir_up);
+ break;
+ }
+
+ final DirectoryFragment fragment = new DirectoryFragment();
+ fragment.setArguments(args);
+
+ ft.replace(R.id.container_directory, fragment);
+ ft.commitAllowingStateLoss();
+ }
+
+ private static String buildStateKey(RootInfo root, DocumentInfo doc) {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(root != null ? root.authority : "null").append(';');
+ builder.append(root != null ? root.rootId : "null").append(';');
+ builder.append(doc != null ? doc.documentId : "null");
+ return builder.toString();
+ }
+
+ public static @Nullable DirectoryFragment get(FragmentManager fm) {
+ // TODO: deal with multiple directories shown at once
+ Fragment fragment = fm.findFragmentById(R.id.container_directory);
+ return fragment instanceof DirectoryFragment
+ ? (DirectoryFragment) fragment
+ : null;
+ }
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java
index ef6d2c9..a295ab2 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java
@@ -58,7 +58,8 @@
}
- public abstract void updateActionMenu(Menu menu, int dirType, boolean canDelete);
+ public abstract void updateActionMenu(Menu menu, int dirType, boolean canDelete,
+ boolean canRename);
// Subtly different from isDocumentEnabled. The reason may be illuminated as follows.
// A folder is enabled such that it may be double clicked, even in settings
@@ -129,7 +130,8 @@
}
@Override
- public void updateActionMenu(Menu menu, int dirType, boolean canDelete) {
+ public void updateActionMenu(Menu menu, int dirType, boolean canDelete,
+ boolean canRename) {
boolean copyEnabled = dirType != DirectoryFragment.TYPE_RECENT_OPEN;
boolean moveEnabled =
@@ -141,6 +143,7 @@
final MenuItem delete = menu.findItem(R.id.menu_delete);
final MenuItem copyTo = menu.findItem(R.id.menu_copy_to);
final MenuItem moveTo = menu.findItem(R.id.menu_move_to);
+ final MenuItem rename = menu.findItem(R.id.menu_rename);
open.setVisible(true);
share.setVisible(false);
@@ -149,6 +152,7 @@
copyTo.setEnabled(copyEnabled);
moveTo.setVisible(moveEnabled);
moveTo.setEnabled(moveEnabled);
+ rename.setVisible(false);
}
}
@@ -162,7 +166,8 @@
}
@Override
- public void updateActionMenu(Menu menu, int dirType, boolean canDelete) {
+ public void updateActionMenu(Menu menu, int dirType, boolean canDelete,
+ boolean canRename) {
checkArgument(dirType != DirectoryFragment.TYPE_RECENT_OPEN);
boolean moveEnabled =
@@ -174,6 +179,7 @@
final MenuItem delete = menu.findItem(R.id.menu_delete);
final MenuItem copyTo = menu.findItem(R.id.menu_copy_to);
final MenuItem moveTo = menu.findItem(R.id.menu_move_to);
+ final MenuItem rename = menu.findItem(R.id.menu_rename);
open.setVisible(false);
delete.setVisible(canDelete);
@@ -181,6 +187,7 @@
copyTo.setEnabled(true);
moveTo.setVisible(moveEnabled);
moveTo.setEnabled(moveEnabled);
+ rename.setVisible(false);
}
}
@@ -194,12 +201,17 @@
}
@Override
- public void updateActionMenu(Menu menu, int dirType, boolean canDelete) {
+ public void updateActionMenu(Menu menu, int dirType, boolean canDelete,
+ boolean canRename) {
MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard);
MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
copy.setEnabled(dirType != DirectoryFragment.TYPE_RECENT_OPEN);
+ MenuItem rename = menu.findItem(R.id.menu_rename);
+ rename.setVisible(true);
+ rename.setEnabled(canRename);
+
menu.findItem(R.id.menu_share).setVisible(true);
menu.findItem(R.id.menu_delete).setVisible(canDelete);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
new file mode 100644
index 0000000..71708c1
--- /dev/null
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui.dirlist;
+
+import static com.android.documentsui.Shared.TAG;
+import static com.android.internal.util.Preconditions.checkArgument;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.ContentProviderClient;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.provider.DocumentsContract;
+import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+import com.android.documentsui.BaseActivity;
+import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.R;
+import com.android.documentsui.Snackbars;
+/**
+ * Dialog to rename file or directory.
+ */
+class RenameDocumentFragment extends DialogFragment {
+ private static final String TAG_RENAME_DOCUMENT = "rename_document";
+ private DocumentInfo mDocument;
+
+ public static void show(FragmentManager fm, DocumentInfo document) {
+ final RenameDocumentFragment dialog = new RenameDocumentFragment();
+ dialog.mDocument = document;
+ dialog.show(fm, TAG_RENAME_DOCUMENT);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Context context = getActivity();
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
+ View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
+
+ final EditText editText = (EditText) view.findViewById(android.R.id.text1);
+ editText.setText(mDocument.displayName);
+
+ builder.setTitle(R.string.menu_rename);
+ builder.setView(view);
+
+ builder.setPositiveButton(
+ android.R.string.ok,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ renameDocuments(editText.getText().toString());
+ }
+ });
+
+ builder.setNegativeButton(android.R.string.cancel, null);
+
+ final AlertDialog dialog = builder.create();
+
+ editText.setOnEditorActionListener(
+ new OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(
+ TextView view, int actionId, @Nullable KeyEvent event) {
+ if (event != null
+ && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
+ && event.hasNoModifiers()) {
+ renameDocuments(editText.getText().toString());
+ dialog.dismiss();
+ return true;
+ }
+ return false;
+ }
+ });
+
+ return dialog;
+ }
+
+ private void renameDocuments(String newDisplayName) {
+ BaseActivity activity = (BaseActivity) getActivity();
+
+ new RenameDocumentsTask(activity, newDisplayName).execute(mDocument);
+ }
+
+ private class RenameDocumentsTask extends AsyncTask<DocumentInfo, Void, DocumentInfo> {
+ private final BaseActivity mActivity;
+ private final String mNewDisplayName;
+
+ public RenameDocumentsTask(BaseActivity activity, String newDisplayName) {
+ mActivity = activity;
+ mNewDisplayName = newDisplayName;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ mActivity.setPending(true);
+ }
+
+ @Override
+ protected DocumentInfo doInBackground(DocumentInfo... document) {
+ checkArgument(document.length == 1);
+ final ContentResolver resolver = mActivity.getContentResolver();
+ ContentProviderClient client = null;
+
+ try {
+ client = DocumentsApplication.acquireUnstableProviderOrThrow(
+ resolver, document[0].derivedUri.getAuthority());
+ Uri newUri = DocumentsContract.renameDocument(
+ client, document[0].derivedUri, mNewDisplayName);
+ return DocumentInfo.fromUri(resolver, newUri);
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to rename file", e);
+ return null;
+ } finally {
+ ContentProviderClient.releaseQuietly(client);
+ }
+ }
+
+ @Override
+ protected void onPostExecute(DocumentInfo result) {
+ if (result == null) {
+ Snackbars.makeSnackbar(mActivity, R.string.rename_error, Snackbar.LENGTH_SHORT)
+ .show();
+ }
+
+ mActivity.setPending(false);
+ }
+ }
+}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
index 83df18c..4b5499a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
@@ -239,6 +239,10 @@
return (flags & Document.FLAG_SUPPORTS_DELETE) != 0;
}
+ public boolean isRenameSupported() {
+ return (flags & Document.FLAG_SUPPORTS_RENAME) != 0;
+ }
+
public boolean isGridTitlesHidden() {
return (flags & Document.FLAG_DIR_HIDE_GRID_TITLES) != 0;
}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java
index 1b8bd4e..6c9c5d9 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java
@@ -223,7 +223,8 @@
assertFalse(mDocsList.exists());
assertTrue(mMessageTextView.exists());
- assertEquals(mContext.getString(R.string.empty), mMessageTextView.getText());
+ String msg = String.valueOf(mContext.getString(R.string.no_results));
+ assertEquals(String.format(msg, "TEST_ROOT_0"), mMessageTextView.getText());
assertSearchTextField(false, query);
}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
index a47d350..cc48786 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
@@ -660,7 +660,7 @@
this.documentId = getDocumentIdForFile(file);
this.mimeType = Document.MIME_TYPE_DIR;
this.streamTypes = new ArrayList<String>();
- this.flags = Document.FLAG_DIR_SUPPORTS_CREATE;
+ this.flags = Document.FLAG_DIR_SUPPORTS_CREATE | Document.FLAG_SUPPORTS_RENAME;
this.parentId = null;
this.rootInfo = rootInfo;
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
index 3a7e6d0..63dec8b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -117,8 +117,10 @@
return R.string.kg_prompt_reason_restart_password;
case PROMPT_REASON_TIMEOUT:
return R.string.kg_prompt_reason_timeout_password;
- default:
+ case PROMPT_REASON_NONE:
return 0;
+ default:
+ return R.string.kg_prompt_reason_timeout_password;
}
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
index 2a2f5a0..be2701d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
@@ -339,7 +339,11 @@
mSecurityMessageDisplay.setMessage(R.string.kg_prompt_reason_timeout_pattern,
true /* important */);
break;
+ case PROMPT_REASON_NONE:
+ break;
default:
+ mSecurityMessageDisplay.setMessage(R.string.kg_prompt_reason_timeout_pattern,
+ true /* important */);
break;
}
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
index f51e10f..cedd88d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
@@ -103,8 +103,10 @@
return R.string.kg_prompt_reason_restart_pin;
case PROMPT_REASON_TIMEOUT:
return R.string.kg_prompt_reason_timeout_pin;
- default:
+ case PROMPT_REASON_NONE:
return 0;
+ default:
+ return R.string.kg_prompt_reason_timeout_pin;
}
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index 409f6a7..c7d17dc 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
+import android.auditing.SecurityLog;
import android.content.Context;
import android.os.UserHandle;
import android.util.AttributeSet;
@@ -423,6 +424,11 @@
}
public void reportUnlockAttempt(int userId, boolean success, int timeoutMs) {
+ if (SecurityLog.isLoggingEnabled()) {
+ SecurityLog.writeEvent(SecurityLog.TAG_DEVICE_UNLOCK_ATTEMPT,
+ (success ? 1 : 0),
+ mCurrentSecuritySelection.name());
+ }
KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
if (success) {
monitor.clearFailedUnlockAttempts();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java
index 38302fb..aa74940 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityView.java
@@ -34,6 +34,26 @@
int PROMPT_REASON_TIMEOUT = 2;
/**
+ * Strong auth is required because a device admin requested it.
+ */
+ int PROMPT_REASON_DEVICE_ADMIN = 3;
+
+ /**
+ * Some auth is required because the user force locked.
+ */
+ int PROMPT_REASON_USER_REQUEST = 4;
+
+ /**
+ * Some auth is required because too many wrong credentials led to a lockout.
+ */
+ int PROMPT_REASON_AFTER_LOCKOUT = 5;
+
+ /**
+ * Some auth is required because a single wrong credential has been tried.
+ */
+ int PROMPT_REASON_WRONG_CREDENTIAL = 6;
+
+ /**
* Interface back to keyguard to tell it when security
* @param callback
*/
diff --git a/packages/MtpDocumentsProvider/res/values/strings.xml b/packages/MtpDocumentsProvider/res/values/strings.xml
index 7a4087b..43a420c 100644
--- a/packages/MtpDocumentsProvider/res/values/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values/strings.xml
@@ -16,9 +16,13 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Title of the external storage application [CHAR LIMIT=32] -->
- <string name="app_label">MTP Storage</string>
+ <string name="app_label">Files</string>
<!-- Name of MTP root shown in UI. Please align the two strings (device
model and storage name) in proper order in the language.
[CHAR LIMIT=32] -->
<string name="root_name"><xliff:g id="device_model" example="Nexus 9">%1$s</xliff:g> <xliff:g id="storage_name" example="Internal Storage">%2$s</xliff:g></string>
+ <!-- Title of notification showing Files app is accessing files in a MTP device. [CHAR LIMIT=60]-->
+ <string name="accessing_notification_title">Accessing files from <xliff:g id="device_model" example="Nexus 9">%1$s</xliff:g></string>
+ <!-- Description of notification showing Files app is accessing files in a MTP device. [CHAR LIMIT=60]-->
+ <string name="accessing_notification_description">Don\'t disconnect the device</string>
</resources>
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDeviceRecord.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDeviceRecord.java
index 02d07b9..fa99a38 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDeviceRecord.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDeviceRecord.java
@@ -16,19 +16,23 @@
package com.android.mtp;
+import android.annotation.Nullable;
+
class MtpDeviceRecord {
public final int deviceId;
public final String name;
public final boolean opened;
public final MtpRoot[] roots;
- public final int[] operationsSupported;
+ public final @Nullable int[] operationsSupported;
+ public final @Nullable int[] eventsSupported;
- MtpDeviceRecord(
- int deviceId, String name, boolean opened, MtpRoot[] roots, int[] operationsSupported) {
+ MtpDeviceRecord(int deviceId, String name, boolean opened, MtpRoot[] roots,
+ @Nullable int[] operationsSupported, @Nullable int[] eventsSupported) {
this.deviceId = deviceId;
this.name = name;
this.opened = opened;
this.roots = roots;
this.operationsSupported = operationsSupported;
+ this.eventsSupported = eventsSupported;
}
}
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
index b0cff83..5bede86 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
@@ -37,7 +37,6 @@
static final String ACTION_OPEN_DEVICE = "com.android.mtp.OPEN_DEVICE";
static final String ACTION_CLOSE_DEVICE = "com.android.mtp.CLOSE_DEVICE";
static final String EXTRA_DEVICE = "device";
- private static final int FOREGROUND_NOTIFICATION_ID = 1;
NotificationManager mNotificationManager;
@@ -67,6 +66,7 @@
break;
case ACTION_CLOSE_DEVICE:
+ mNotificationManager.cancel(device.getDeviceId());
provider.closeDevice(device.getDeviceId());
break;
@@ -90,36 +90,40 @@
private boolean updateForegroundState() {
final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance();
final int[] deviceIds = provider.getOpenedDeviceIds();
- String message = null;
- if (deviceIds.length != 0) {
- // TODO: Localize the message.
- // TODO: Add buttons "Open in Files" and "Open in Apps" if needed.
- if (deviceIds.length > 1) {
- message = deviceIds.length + " devices are being connected.";
- } else {
+ int notificationId = 0;
+ Notification notification = null;
+ for (final int deviceId : deviceIds) {
+ try {
+ final String title = getResources().getString(
+ R.string.accessing_notification_title,
+ provider.getDeviceName(deviceIds[0]));
+ final String description = getResources().getString(
+ R.string.accessing_notification_description);
+ notificationId = deviceId;
+ notification = new Notification.Builder(this)
+ .setLocalOnly(true)
+ .setContentTitle(title)
+ .setContentText(description)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_data_usb)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setPriority(Notification.PRIORITY_LOW)
+ .build();
+ mNotificationManager.notify(deviceId, notification);
+ } catch (IOException exp) {
+ logErrorMessage(exp);
+ // If we failed to obtain device name, it looks the device is unusable.
+ // Because this is the last device we opened, we should hide the notification
+ // for the case.
try {
- message = provider.getDeviceName(deviceIds[0]) + " is being connected.";
- } catch (IOException exp) {
- logErrorMessage(exp);
- // If we failed to obtain device name, it looks the device is unusable.
- // Because this is the last device we opened, we should hide the notification
- // for the case.
- try {
- provider.closeDevice(deviceIds[0]);
- } catch (IOException | InterruptedException closeError) {
- logErrorMessage(closeError);
- }
+ provider.closeDevice(deviceIds[0]);
+ } catch (IOException | InterruptedException closeError) {
+ logErrorMessage(closeError);
}
}
}
- if (message != null) {
- final Notification notification = new Notification.Builder(this)
- .setContentTitle(message)
- .setSmallIcon(android.R.drawable.ic_menu_camera)
- .setCategory(Notification.CATEGORY_SYSTEM)
- .setPriority(Notification.PRIORITY_LOW)
- .build();
- startForeground(FOREGROUND_NOTIFICATION_ID, notification);
+
+ if (notification != null) {
+ startForeground(notificationId, notification);
return true;
} else {
stopForeground(true /* removeNotification */);
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
index 0d81a30..efe5ff1 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
@@ -129,6 +129,7 @@
final String name = device.getProductName();
MtpRoot[] roots;
int[] operationsSupported = null;
+ int[] eventsSupported = null;
if (opened) {
try {
roots = getRoots(device.getDeviceId());
@@ -142,16 +143,14 @@
final MtpDeviceInfo info = mtpDevice.getDeviceInfo();
if (info != null) {
operationsSupported = mtpDevice.getDeviceInfo().getOperationsSupported();
- }
- if (operationsSupported == null) {
- operationsSupported = new int[0];
+ eventsSupported = mtpDevice.getDeviceInfo().getEventsSupported();
}
} else {
roots = new MtpRoot[0];
- operationsSupported = new int[0];
}
devices.add(new MtpDeviceRecord(
- device.getDeviceId(), name, opened, roots, operationsSupported));
+ device.getDeviceId(), name, opened, roots, operationsSupported,
+ eventsSupported));
}
return devices.toArray(new MtpDeviceRecord[devices.size()]);
}
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
index c39d5b3..97ea717 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
@@ -77,7 +77,7 @@
public void testPutSingleStorageDocuments() throws Exception {
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
mDatabase.getMapper().startAddingDocuments("1");
@@ -425,9 +425,9 @@
};
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device A", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device A", true, new MtpRoot[0], null, null));
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(1, "Device B", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(1, "Device B", true, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
mDatabase.getMapper().startAddingDocuments("1");
@@ -562,7 +562,7 @@
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device", false, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device", false, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
mDatabase.getMapper().startAddingDocuments("1");
@@ -640,7 +640,7 @@
public void testReplaceExistingRoots() {
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
// The client code should be able to replace existing rows with new information.
@@ -691,7 +691,7 @@
// Add one.
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device", true, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
mDatabase.getMapper().startAddingDocuments("1");
@@ -745,7 +745,7 @@
// Add device document.
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(0, "Device", false, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(0, "Device", false, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
// It the device does not have storages, it shows a device root.
@@ -895,7 +895,7 @@
public void testGetDocumentIdForDevice() {
mDatabase.getMapper().startAddingDocuments(null);
mDatabase.getMapper().putDeviceDocument(
- new MtpDeviceRecord(100, "Device", true, new MtpRoot[0], new int[0]));
+ new MtpDeviceRecord(100, "Device", true, new MtpRoot[0], null, null));
mDatabase.getMapper().stopAddingDocuments(null);
assertEquals("1", mDatabase.getDocumentIdForDevice(100));
}
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
index 44841af..b51cf71 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
@@ -69,7 +69,8 @@
2048 /* total space */,
"" /* no volume identifier */)
},
- new int[0]));
+ null,
+ null));
mProvider.openDevice(0);
mResolver.waitForNotification(ROOTS_URI, 1);
@@ -109,7 +110,8 @@
2048 /* total space */,
"" /* no volume identifier */)
},
- new int[0]));
+ null,
+ null));
mProvider.openDevice(0);
mResolver.waitForNotification(ROOTS_URI, 1);
}
@@ -130,7 +132,8 @@
2048 /* total space */,
"" /* no volume identifier */)
},
- new int[0]));
+ null,
+ null));
mMtpManager.addValidDevice(new MtpDeviceRecord(
1,
"Device",
@@ -145,7 +148,8 @@
4096 /* total space */,
"Identifier B" /* no volume identifier */)
},
- new int[0]));
+ null,
+ null));
{
mProvider.openDevice(0);
@@ -180,7 +184,7 @@
public void testQueryRoots_error() throws Exception {
setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
mMtpManager.addValidDevice(new MtpDeviceRecord(
- 0, "Device A", false /* unopened */, new MtpRoot[0], new int[0]));
+ 0, "Device A", false /* unopened */, new MtpRoot[0], null, null));
mMtpManager.addValidDevice(new MtpDeviceRecord(
1,
"Device",
@@ -195,7 +199,8 @@
4096 /* total space */,
"Identifier B" /* no volume identifier */)
},
- new int[0]));
+ null,
+ null));
{
mProvider.openDevice(0);
mProvider.openDevice(1);
@@ -438,7 +443,7 @@
throws InterruptedException, TimeoutException, IOException {
final int changeCount = mResolver.getChangeCount(ROOTS_URI);
mMtpManager.addValidDevice(
- new MtpDeviceRecord(deviceId, "Device", false /* unopened */, roots, new int[0]));
+ new MtpDeviceRecord(deviceId, "Device", false /* unopened */, roots, null, null));
mProvider.openDevice(deviceId);
mResolver.waitForNotification(ROOTS_URI, changeCount + 1);
return getStrings(mProvider.queryRoots(strings(DocumentsContract.Root.COLUMN_ROOT_ID)));
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
index 914a4af..9ebe4d1 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
@@ -87,6 +87,13 @@
getInstrumentation().show(Arrays.toString(records[0].operationsSupported));
}
+ public void testEventsSupported() {
+ final MtpDeviceRecord[] records = mManager.getDevices();
+ assertEquals(1, records.length);
+ assertNotNull(records[0].eventsSupported);
+ getInstrumentation().show(Arrays.toString(records[0].eventsSupported));
+ }
+
public void testEventObjectAdded() throws Exception {
while (true) {
getInstrumentation().show("Please take a photo by using connected MTP device.");
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
index 3934b88..a1732dc 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
@@ -76,7 +76,7 @@
result[i] = device;
} else {
result[i] = new MtpDeviceRecord(
- device.deviceId, device.name, device.opened, new MtpRoot[0], new int[0]);
+ device.deviceId, device.name, device.opened, new MtpRoot[0], null, null);
}
}
return result;
@@ -90,7 +90,7 @@
}
mDevices.put(
deviceId,
- new MtpDeviceRecord(device.deviceId, device.name, true, device.roots, new int[0]));
+ new MtpDeviceRecord(device.deviceId, device.name, true, device.roots, null, null));
}
@Override
@@ -101,7 +101,7 @@
}
mDevices.put(
deviceId,
- new MtpDeviceRecord(device.deviceId, device.name, false, device.roots, new int[0]));
+ new MtpDeviceRecord(device.deviceId, device.name, false, device.roots, null, null));
}
@Override
diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml
index 19c695b..19cbee7 100644
--- a/packages/PrintSpooler/res/values-es-rUS/strings.xml
+++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml
@@ -92,7 +92,7 @@
</string-array>
<string name="print_write_error_message" msgid="5787642615179572543">"No se pudo escribir en el archivo."</string>
<string name="print_error_default_message" msgid="8602678405502922346">"No funcionó. Vuelve a intentarlo."</string>
- <string name="print_error_retry" msgid="1426421728784259538">"Reintentar"</string>
+ <string name="print_error_retry" msgid="1426421728784259538">"Volver a intentar"</string>
<string name="print_error_printer_unavailable" msgid="8985614415253203381">"Esta impresora no está disponible en este momento."</string>
<string name="print_preparing_preview" msgid="3939930735671364712">"Preparando vista previa…"</string>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index e5aeb3c..d89abf42 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -235,23 +235,27 @@
// it means that the user has performed a global gesture to enable accessibility or set
// these settings in the Accessibility portion of the Setup Wizard, and definitely needs
// these features working after the restore.
- if (Settings.Secure.ACCESSIBILITY_ENABLED.equals(name)
- || Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION.equals(name)
- || Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD.equals(name)
- || Settings.Secure.TOUCH_EXPLORATION_ENABLED.equals(name)
- || Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED.equals(name)
- || Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED.equals(name)
- || Settings.Secure.UI_NIGHT_MODE.equals(name)) {
- return Settings.Secure.getInt(mContext.getContentResolver(), name, 0) != 0;
- } else if (Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES.equals(name)
- || Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES.equals(name)
- || Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX.equals(name)
- || Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER.equals(name)
- || Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE.equals(name)) {
- return !TextUtils.isEmpty(Settings.Secure.getString(
- mContext.getContentResolver(), name));
+ switch (name) {
+ case Settings.Secure.ACCESSIBILITY_ENABLED:
+ case Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION:
+ case Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD:
+ case Settings.Secure.TOUCH_EXPLORATION_ENABLED:
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED:
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED:
+ case Settings.Secure.UI_NIGHT_MODE:
+ return Settings.Secure.getInt(mContext.getContentResolver(), name, 0) != 0;
+ case Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES:
+ case Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES:
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX:
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER:
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE:
+ return !TextUtils.isEmpty(Settings.Secure.getString(
+ mContext.getContentResolver(), name));
+ case Settings.System.FONT_SCALE:
+ return Settings.System.getFloat(mContext.getContentResolver(), name, 1.0f) != 1.0f;
+ default:
+ return false;
}
- return false;
}
private void setAutoRestore(boolean enabled) {
diff --git a/packages/Shell/res/values-af/strings.xml b/packages/Shell/res/values-af/strings.xml
index d11a499..9d97e68 100644
--- a/packages/Shell/res/values-af/strings.xml
+++ b/packages/Shell/res/values-af/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Tuisskerm"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Foutverslag word tans gegenereer"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Foutverslag vasgevang"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swiep na links om jou foutverslag te deel"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Raak om jou foutverslag te deel"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Foutverslae bevat data van die stelsel se verskillende loglêers af, insluitend persoonlike en private inligting. Deel foutverslae net met programme en mense wat jy vertrou."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skermkiekie suksesvol geneem."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Kon nie skermkiekie neem nie."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Foutverslagbesonderhede"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Lêernaam"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titel"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Gedetailleerde beskrywing"</string>
</resources>
diff --git a/packages/Shell/res/values-am/strings.xml b/packages/Shell/res/values-am/strings.xml
index cfa22ff..7c5519e 100644
--- a/packages/Shell/res/values-am/strings.xml
+++ b/packages/Shell/res/values-am/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"ቀፎ"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"የሳንካ ሪፓርት እየመነጨ ነው"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"የሳንካ ሪፖርት ተይዟል"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"ዝርዝሮችን ወደ የሳንካ ሪፖርቱ በማከል ላይ"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"እባክዎ ይጠብቁ…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"የሳንካ ሪፖርትዎን ለማጋራት ወደ ግራ ያንሸራትቱ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"የሳንካ ሪፖርትዎን ለማጋራት ይንክኩ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"የሳንካ ሪፖርቶች የግል መረጃን ጨምሮ ከበርካታ የስርዓቱ ምዝግብ ማስታወሻዎች የመጣ ውሂብን ይዟል። የሳንካ ሪፖርቶች ለሚያምኗቸው መተግበሪያዎችን እና ሰዎችን ብቻ ያጋሩ።"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ቅጽበታዊ ገጽ እይታ በስኬት ተነስቷል።"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ቅጽበታዊ ገጽ እይታ ሊነሳ አይችልም"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"የሳንካ ሪፖርት ዝርዝሮች"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"የፋይል ስም"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ርዕስ"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"ዝርዝር መግለጫ"</string>
</resources>
diff --git a/packages/Shell/res/values-ar/strings.xml b/packages/Shell/res/values-ar/strings.xml
index dc8edba..b1079319 100644
--- a/packages/Shell/res/values-ar/strings.xml
+++ b/packages/Shell/res/values-ar/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"جارٍ إنشاء تقرير الخطأ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"تم الحصول على تقرير الأخطاء"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"إضافة تفاصيل إلى تقرير الخطأ"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"الرجاء الانتظار…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"مرر بسرعة لليمين لمشاركة تقرير الخطأ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"المس لمشاركة تقرير الأخطاء"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"تحتوي تقارير الأخطاء على بيانات من ملفات سجلات النظام المتنوعة، بما في ذلك معلومات شخصية وخاصة. لا تشارك تقارير الأخطاء إلا مع التطبيقات والأشخاص الموثوق بهم."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"تم التقاط لقطة الشاشة بنجاح."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"تعذر التقاط لقطة الشاشة."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"تفاصيل تقرير الخطأ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"اسم الملف"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"العنوان"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"وصف تفصيلي"</string>
</resources>
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az-rAZ/strings.xml
index b47edc8..d01ae2a 100644
--- a/packages/Shell/res/values-az-rAZ/strings.xml
+++ b/packages/Shell/res/values-az-rAZ/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug hesabat yaradıldı"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Baq raport alındı"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Detallar baq hesabatına əlavə olunur"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Lütfən, gözləyin..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Baq raportunu paylaşmaq üçün sola sürüşdürün"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Xətanı şikayətini paylaşmaq üçün toxunun"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Baq raportları sistemin müxtəlif jurnal fayllarından data içərir ki, buna şəxsi və konfidensial məlumatlar da aiddir. Yalnız inandığınız adamlarla baq raportlarını paylaşın."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Displey görüntüsü uğurla çəkildi."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Displey görüntüsü əlçatan deyil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Baq hesabat detalları"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Fayl adı"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Başlıq"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Ətraflı təsvir"</string>
</resources>
diff --git a/packages/Shell/res/values-b+sr+Latn/strings.xml b/packages/Shell/res/values-b+sr+Latn/strings.xml
index 16f1d28..afed746 100644
--- a/packages/Shell/res/values-b+sr+Latn/strings.xml
+++ b/packages/Shell/res/values-b+sr+Latn/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Izveštaj o grešci se generiše"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Izveštaj o grešci je snimljen"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Prevucite ulevo da biste delili izveštaj o greškama"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dodirnite da biste delili izveštaj o grešci"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Izveštaji o greškama sadrže podatke iz različitih sistemskih datoteka evidencije, uključujući lične i privatne podatke. Delite izveštaje o greškama samo sa aplikacijama i ljudima u koje imate poverenja."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snimanje ekrana je uspelo."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snimanje ekrana nije uspelo."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalji izveštaja o grešci"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Naziv datoteke"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Naslov"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaljni opis"</string>
</resources>
diff --git a/packages/Shell/res/values-bg/strings.xml b/packages/Shell/res/values-bg/strings.xml
index ae60f0b..068bcd3 100644
--- a/packages/Shell/res/values-bg/strings.xml
+++ b/packages/Shell/res/values-bg/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Команден ред"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Сигналът за програмна грешка се генерира"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Отчетът за програмни грешки е записан"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Подробностите се добавят към сигнала за пр. грешка"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Моля, изчакайте…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Прекарайте пръст наляво, за да споделите сигнала си за програмна грешка"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Докоснете, за да споделите отчета си за програмни грешки"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Отчетите за програмни грешки съдържат данни от различни регистрационни файлове на системата, включително лична и поверителна информация. Споделяйте ги само с приложения и хора, на които имате доверие."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Екранната снимка бе направена успешно."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Екранната снимка не можа да бъде направена."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Подробности за сигнала за програмна грешка"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Име на файла"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Заглавие"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Подробно описание"</string>
</resources>
diff --git a/packages/Shell/res/values-bn-rBD/strings.xml b/packages/Shell/res/values-bn-rBD/strings.xml
index 1192275..e484b47 100644
--- a/packages/Shell/res/values-bn-rBD/strings.xml
+++ b/packages/Shell/res/values-bn-rBD/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"শেল"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ত্রুটির প্রতিবেদন তৈরি করা হচ্ছে"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ত্রুটির প্রতিবেদন নেওয়া হয়েছে"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"ত্রুটির প্রতিবেদনে বিশদ বিবরণ যোগ করা হচ্ছে"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"অনুগ্রহ করে অপেক্ষা করুন..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"আপনার বাগ রিপোর্ট শেয়ার করতে বামে সোয়াইপ করুন"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"আপনার ত্রুটির প্রতিবেদন ভাগ করতে স্পর্শ করুন"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"ত্রুটির প্রতিবেদনগুলিতে থাকা ডেটা, সিস্টেমের বিভিন্ন লগ ফাইলগুলি থেকে আসে, যাতে ব্যক্তিগত এবং গোপনীয় তথ্য অন্তর্ভুক্ত থাকে৷ আপনি বিশ্বাস করেন শুধুমাত্র এমন অ্যাপ্লিকেশান এবং ব্যক্তিদের সাথে ত্রুটির প্রতিবেদনগুলি ভাগ করুন৷"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"স্ক্রীনশট সফলভাবে নেওয়া হয়েছে৷"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"স্ক্রীনশট নেওয়া যায়নি৷"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ত্রুটি প্রতিবেদনের বিবরণ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ফাইলের নাম"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"শীর্ষক"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"বিস্তারিত বিবরণ"</string>
</resources>
diff --git a/packages/Shell/res/values-ca/strings.xml b/packages/Shell/res/values-ca/strings.xml
index abf8a6d..14c21da 100644
--- a/packages/Shell/res/values-ca/strings.xml
+++ b/packages/Shell/res/values-ca/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Protecció"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"S\'està generant l\'informe d\'errors"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"S\'ha registrat l\'informe d\'error"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"S\'estan afegint detalls a l\'informe d\'errors"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Espera…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Llisca cap a l\'esquerra per compartir l\'informe d\'errors."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca aquí per compartir el teu informe d\'error."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Els informes d\'error contenen dades dels diferents fitxers de registre del sistema, inclosa informació privada i personal. Comparteix els informes d\'error només amb les aplicacions i amb les persones en qui confies."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La captura de pantalla s\'ha fet correctament."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No s\'ha pogut fer la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalls de l\'informe d\'errors"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nom del fitxer"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Títol"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descripció detallada"</string>
</resources>
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index b19f50a..24d705c 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Vytváří se zpráva o chybě"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bylo vytvořeno chybové hlášení"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Chcete-li hlášení chyby sdílet, přejeďte doleva."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Chybové hlášení můžete sdílet klepnutím."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Chybová hlášení obsahují data z různých souborů protokolů systému včetně osobních a soukromých informací. Chybová hlášení sdílejte pouze s aplikacemi a uživateli, kterým důvěřujete."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snímek obrazovky byl úspěšně pořízen."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snímek obrazovky se nepodařilo pořídit."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti zprávy o chybě"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Název souboru"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Název"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Podrobný popis"</string>
</resources>
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index df2ba6f..a03276a 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Fejlrapport genereres"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Fejlrapporten er registreret"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Tilføjelse af oplysninger til fejlrapporten"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Vent et øjeblik…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Stryg til venstre for at dele din fejlrapport"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tryk for at dele din fejlrapport"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, f.eks. personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Der blev taget et skærmbillede."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Der kunne ikke tages et skærmbillede."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Fejlrapportoplysninger"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filnavn"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titel"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaljeret beskrivelse"</string>
</resources>
diff --git a/packages/Shell/res/values-de/strings.xml b/packages/Shell/res/values-de/strings.xml
index b1dab44..85cad60 100644
--- a/packages/Shell/res/values-de/strings.xml
+++ b/packages/Shell/res/values-de/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Fehlerbericht wird generiert"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Fehlerbericht erfasst"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Wische nach links, um deinen Fehlerbericht zu teilen."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tippen, um Fehlerbericht zu teilen"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Fehlerberichte enthalten Daten aus verschiedenen Protokolldateien des Systems, darunter auch personenbezogene und private Daten. Teile Fehlerberichte nur mit Apps und Personen, denen du vertraust."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot wurde aufgenommen."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot konnte nicht aufgenommen werden."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Details des Fehlerberichts"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Dateiname"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titel"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaillierte Beschreibung"</string>
</resources>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index 700869b..71debd7 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Κέλυφος"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Δημιουργείται αναφορά σφάλματος"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Η λήψη της αναφοράς ήταν επιτυχής"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Προσθήκη λεπτομερειών στην αναφορά σφάλματος"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Περιμένετε…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Σύρετε προς τα αριστερά για κοινή χρήση της αναφοράς σφαλμάτων"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Αγγίξτε για να μοιραστείτε τη αναφορά σφαλμάτων"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Οι αναφορές σφαλμάτων περιέχουν δεδομένα από τα διάφορα αρχεία καταγραφής του συστήματος, συμπεριλαμβανομένων προσωπικών και ιδιωτικών πληροφοριών. Να μοιράζεστε αναφορές σφαλμάτων μόνο με εφαρμογές και άτομα που εμπιστεύεστε."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Η λήψη του στιγμιότυπου οθόνης ολοκληρώθηκε με επιτυχία."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Δεν ήταν δυνατή η λήψη του στιγμιότυπου οθόνης."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Λεπτομέρειες αναφοράς σφαλμάτων"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Όνομα αρχείου"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Τίτλος"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Αναλυτική περιγραφή"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rAU/strings.xml b/packages/Shell/res/values-en-rAU/strings.xml
index dd97cda3..46f1299 100644
--- a/packages/Shell/res/values-en-rAU/strings.xml
+++ b/packages/Shell/res/values-en-rAU/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filename"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Title"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detailed description"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rGB/strings.xml b/packages/Shell/res/values-en-rGB/strings.xml
index dd97cda3..46f1299 100644
--- a/packages/Shell/res/values-en-rGB/strings.xml
+++ b/packages/Shell/res/values-en-rGB/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filename"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Title"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detailed description"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rIN/strings.xml b/packages/Shell/res/values-en-rIN/strings.xml
index dd97cda3..46f1299 100644
--- a/packages/Shell/res/values-en-rIN/strings.xml
+++ b/packages/Shell/res/values-en-rIN/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filename"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Title"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detailed description"</string>
</resources>
diff --git a/packages/Shell/res/values-es-rUS/strings.xml b/packages/Shell/res/values-es-rUS/strings.xml
index 3fdf639..606b37f 100644
--- a/packages/Shell/res/values-es-rUS/strings.xml
+++ b/packages/Shell/res/values-es-rUS/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"El informe de errores se está generando"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de errores capturado"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Desliza el dedo hacia la izquierda para compartir el informe de errores."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca para compartir tu informe de errores."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Los informes de errores contienen datos de los distintos archivos de registro del sistema, incluida la información personal y privada. Comparte los informes de errores únicamente con aplicaciones y personas en las que confíes."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Se tomó la captura de pantalla correctamente."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No se pudo tomar la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles del informe de errores"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nombre del archivo"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descripción completa"</string>
</resources>
diff --git a/packages/Shell/res/values-es/strings.xml b/packages/Shell/res/values-es/strings.xml
index 2faa948..8f6cdeb 100644
--- a/packages/Shell/res/values-es/strings.xml
+++ b/packages/Shell/res/values-es/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Se está generando el informe de errores"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de error registrado"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Añadiendo detalles al informe de errores"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Espera…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Desliza el dedo hacia la izquierda para compartir el informe de error"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca para compartir tu informe de error"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Los informes de errores contienen datos de los distintos archivos de registro del sistema, incluida información personal y privada. Comparte los informes de errores únicamente con aplicaciones y usuarios en los que confíes."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La captura de pantalla se ha realizado correctamente."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No se puede realizar la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles del informe de errores"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nombre de archivo"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descripción completa"</string>
</resources>
diff --git a/packages/Shell/res/values-et-rEE/strings.xml b/packages/Shell/res/values-et-rEE/strings.xml
index 1d59b75..3ebd56d 100644
--- a/packages/Shell/res/values-et-rEE/strings.xml
+++ b/packages/Shell/res/values-et-rEE/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Kest"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Veaaruande loomine"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Veaaruanne jäädvustati"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Üksikasjade lisamine veaaruandesse"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Oodake …"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Veaaruande jagamiseks pühkige vasakule"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Veaaruande jagamiseks puudutage"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Veaaruanded sisaldavad andmeid erinevatest süsteemi logifailidest, sh isiklikku ja privaatset teavet. Jagage veaaruandeid ainult usaldusväärsete rakenduste ja inimestega."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekraanipildi tegemine õnnestus."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekraanipilti ei saanud teha."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Veaaruande üksikasjad"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Faili nimi"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Pealkiri"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Üksikasjalik kirjeldus"</string>
</resources>
diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu-rES/strings.xml
index e85b8cd..93fdb60 100644
--- a/packages/Shell/res/values-eu-rES/strings.xml
+++ b/packages/Shell/res/values-eu-rES/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell-interfazea"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Sortzen ari gara akatsen txostena"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Akatsen txostena jaso da"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Akatsen txostenean xehetasunak gehitzen"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Itxaron, mesedez…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Programa-akatsen txostena partekatzeko, pasatu hatza ezkerrera"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Akatsen txostena partekatzeko, ukitu"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Akatsen txostenek sistemaren erregistro-fitxategietako datuak dauzkate, informazio pertsonala eta pribatua barne. Akatsen txostenak partekatzen badituzu, partekatu soilik aplikazio eta pertsona fidagarriekin."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Atera da pantaila-argazkia."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ezin izan da atera pantaila-argazkia."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Akatsen txostenaren xehetasunak"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Fitxategi-izena"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Izena"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Azalpen xehatua"</string>
</resources>
diff --git a/packages/Shell/res/values-fa/strings.xml b/packages/Shell/res/values-fa/strings.xml
index 591ef0d..c4ec8b4 100644
--- a/packages/Shell/res/values-fa/strings.xml
+++ b/packages/Shell/res/values-fa/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"گزارش اشکال در حال ایجاد شدن است"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"گزارش اشکال دریافت شد"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"اضافه کردن جزئیات به گزارش اشکال"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"لطفاً منتظر بمانید..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"برای اشتراکگذاری گزارش اشکال، به تندی آن را به چپ بکشید"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"جهت اشتراکگذاری گزارش اشکال خود لمس کنید"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"گزارشهای اشکال حاوی دادههایی از فایلهای گزارش مختلف در سیستم هستند، شامل اطلاعات شخصی و خصوصی. گزارشهای اشکال را فقط با افراد و برنامههای مورد اعتماد خود به اشتراک بگذارید."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"عکس صفحهنمایش با موفقیت گرفته شد."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"نمیتوان عکس صفحهنمایش گرفت."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"جزئیات گزارش اشکال"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"نام فایل"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"عنوان"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"جزئیات دقیق"</string>
</resources>
diff --git a/packages/Shell/res/values-fi/strings.xml b/packages/Shell/res/values-fi/strings.xml
index 766ff23..18955bdd 100644
--- a/packages/Shell/res/values-fi/strings.xml
+++ b/packages/Shell/res/values-fi/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Komentotulkki"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Luodaan virheraporttia"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Virheraportti tallennettu"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Jaa virheraportti pyyhkäisemällä vasemmalle"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Jaa virheraportti koskettamalla tätä"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Virheraportit sisältävät järjestelmän lokitietoja, ja niihin voi sisältyä henkilökohtaisia ja yksityisiä tietoja. Jaa virheraportteja vain luotettaville sovelluksille ja käyttäjille."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Kuvakaappaus tallennettu."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Kuvakaappauksen tallentaminen epäonnistui."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Virheraportin tiedot"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Tiedostonimi"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Otsikko"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Yksityiskohtainen kuvaus"</string>
</resources>
diff --git a/packages/Shell/res/values-fr-rCA/strings.xml b/packages/Shell/res/values-fr-rCA/strings.xml
index 8bff08f..354eac3 100644
--- a/packages/Shell/res/values-fr-rCA/strings.xml
+++ b/packages/Shell/res/values-fr-rCA/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Le rapport de bogue est en cours de création"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Rapport de bogue enregistré"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Faites glisser le doigt vers la gauche pour partager votre rapport de bogue."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Appuyer ici pour partager votre rapport de bogue"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Les rapports de bogue contiennent des données des fichiers journaux du système, y compris des informations personnelles et privées. Ne partagez les rapports de bogue qu\'avec les applications et les personnes que vous estimez fiables."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La saisie d\'écran a réussi."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Une erreur s\'est produite lors de la saisie d\'écran."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Détails du rapport de bogue"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nom de fichier"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titre"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Description détaillée"</string>
</resources>
diff --git a/packages/Shell/res/values-fr/strings.xml b/packages/Shell/res/values-fr/strings.xml
index 4e5c3c1..192bbed 100644
--- a/packages/Shell/res/values-fr/strings.xml
+++ b/packages/Shell/res/values-fr/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Le rapport de bug est en cours de création."</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Rapport de bug enregistré"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Faites glisser le doigt vers la gauche pour partager votre rapport d\'erreur."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Appuyez ici pour partager le rapport de bug"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Les rapports de bug contiennent des données des fichiers journaux du système, y compris des informations personnelles et privées. Ne partagez les rapports de bug qu\'avec les applications et les personnes que vous estimez fiables."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La capture d\'écran a bien été effectuée."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Impossible d\'effectuer une capture d\'écran."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Détails du rapport de bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nom de fichier"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titre"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Description détaillée"</string>
</resources>
diff --git a/packages/Shell/res/values-gl-rES/strings.xml b/packages/Shell/res/values-gl-rES/strings.xml
index 099f92a..c07adb8 100644
--- a/packages/Shell/res/values-gl-rES/strings.xml
+++ b/packages/Shell/res/values-gl-rES/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Estase xerando o informe de erro"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de erros rexistrado"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Pasa o dedo á esquerda para compartir o teu informe de erros"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca aquí para compartir o teu informe de erros"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Os informes de erros conteñen datos dos distintos ficheiros de rexistro do sistema, incluída información persoal e privada. Comparte os informes de erros unicamente con aplicacións e persoas de confianza."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"A captura de pantalla realizouse correctamente."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Non se puido realizar a captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles do informe de erros"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nome do ficheiro"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descrición detallada"</string>
</resources>
diff --git a/packages/Shell/res/values-gu-rIN/strings.xml b/packages/Shell/res/values-gu-rIN/strings.xml
index 9943ffb..7baefe7 100644
--- a/packages/Shell/res/values-gu-rIN/strings.xml
+++ b/packages/Shell/res/values-gu-rIN/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"શેલ"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"બગ રિપોર્ટ જનરેટ કરવામાં આવી રહી છે"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"બગ રિપોર્ટ કેપ્ચર કરી"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"બગ રિપોર્ટમાં વિગતો ઉમેરવી"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"કૃપા કરીને રાહ જુઓ…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"તમારી બગ રિપોર્ટ શેર કરવા માટે ડાબે સ્વાઇપ કરો"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"તમારી બગ રિપોર્ટ શેર કરવા માટે ટચ કરો"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"બગ રિપોર્ટ્સ વ્યક્તિગત અને ખાનગી માહિતી સહિત, સિસ્ટમની વિભિન્ન લૉગ ફાઇલોનો ડેટા ધરાવે છે. બગ રિપોર્ટ્સ ફક્ત તમે વિશ્વાસ કરતા હો તે એપ્લિકેશનો અને લોકો સાથે જ શેર કરો."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"સ્ક્રીનશોટ સફળતાપૂર્વક લેવાયો."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"સ્ક્રીનશોટ લઇ શકાયો નથી."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"બગ રિપોર્ટની વિગતો"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ફાઇલનું નામ"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"શીર્ષક"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"વિગતવાર વર્ણન"</string>
</resources>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index cf871b6..c21213e 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"शेल"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"बग रिपोर्ट जेनरेट हो रही है"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"बग रिपोर्ट कैप्चर कर ली गई"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"बग रिपोर्ट में विवरण जोड़े जा रहे हैं"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा करें…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"अपनी बग रिपोर्ट साझा करने के लिए बाएं स्वाइप करें"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"अपनी बग रिपोर्ट साझा करने के लिए स्पर्श करें"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्ट में व्यक्तिगत और निजी जानकारी सहित, सिस्टम की विभिन्न लॉग फ़ाइलों का डेटा होता है. बग रिपोर्ट केवल विश्वसनीय ऐप्स और व्यक्तियों से ही साझा करें."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रीनशॉट सफलतापूर्वक लिया गया."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट नहीं लिया जा सका."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"बग रिपोर्ट के विवरण"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"फ़ाइल नाम"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"शीर्षक"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"विस्तृत वर्णन"</string>
</resources>
diff --git a/packages/Shell/res/values-hr/strings.xml b/packages/Shell/res/values-hr/strings.xml
index 5072b6b..36d2cce 100644
--- a/packages/Shell/res/values-hr/strings.xml
+++ b/packages/Shell/res/values-hr/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Ljuska"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generira se izvješće o programskoj pogrešci"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Prijava programske pogreške snimljena je"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Prijeđite prstom ulijevo da biste poslali izvješće o programskim pogreškama"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dodirnite za dijeljenje prijave programske pogreške"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Prijave programskih pogrešaka sadržavaju podatke iz različitih datoteka zapisnika sustava, uključujući osobne i privatne informacije. Prijave programskih pogrešaka dijelite samo s aplikacijama i osobama koje smatrate pouzdanima."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Zaslon je snimljen."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snimanje zaslona nije uspjelo."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Pojedinosti izvješća o programskoj pogrešci"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Naziv datoteke"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Naslov"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaljan opis"</string>
</resources>
diff --git a/packages/Shell/res/values-hu/strings.xml b/packages/Shell/res/values-hu/strings.xml
index 400cd18..b78fc61 100644
--- a/packages/Shell/res/values-hu/strings.xml
+++ b/packages/Shell/res/values-hu/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Héj"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Hibajelentés létrehozása folyamatban"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Programhiba-jelentés rögzítve"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Információk hozzáadása a hibajelentéshez"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Kérjük, várjon..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Húzza ujját balra a hibajelentés megosztásához"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Érintse meg a programhiba-jelentés megosztásához"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"A programhiba-jelentések a rendszer különféle naplófájljaiból származó adatokat tartalmaznak, köztük személyes és magánjellegű információkat is. Csak olyan alkalmazásokkal és személyekkel osszon meg programhiba-jelentéseket, amelyekben vagy akikben megbízik."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Sikerült elkészíteni a képernyőképet."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nem sikerült elkészíteni a képernyőképet."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Hibajelentés részletei"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Fájlnév"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Név"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Részletes leírás"</string>
</resources>
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy-rAM/strings.xml
index 2febc7d..0635d39 100644
--- a/packages/Shell/res/values-hy-rAM/strings.xml
+++ b/packages/Shell/res/values-hy-rAM/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Խեցի"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Վրիպակի զեկույցը ստեղծվում է"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Վրիպակի զեկույց է ստացվել"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Սահեցրեք ձախ՝ սխալի հաշվետվությունը համօգտագործելու համար"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Հպեք` ձեր վրիպակի մասին զեկույցը տարածելու համար"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Վրիպակի զեկույցները պարունակում են տվյալներ համակարգի տարբեր մուտքի ֆայլերից, այդ թվում նաև անհատական և գաղտնի տեղեկություններ: Վրիպակի զեկույցները կիսեք միայն այն հավելվածների և մարդկանց հետ, որոնց վստահում եք:"</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Էկրանի պատկերը հաջողությամբ ստացվեց:"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Չհաջողվեց ստանալ էկրանի պատկերը:"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Վրիպակի զեկույցի մանրամասները"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Ֆայլի անունը"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Անվանումը"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Մանրամասն նկարագրություն"</string>
</resources>
diff --git a/packages/Shell/res/values-in/strings.xml b/packages/Shell/res/values-in/strings.xml
index 400cb98..e774de9 100644
--- a/packages/Shell/res/values-in/strings.xml
+++ b/packages/Shell/res/values-in/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Kerangka"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Laporan bug sedang dibuat"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Laporan bug tercatat"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Menambahkan detail ke laporan bug"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Harap tunggu..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Gesek ke kiri untuk membagikan laporan bug Anda"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Sentuh untuk membagikan laporan bug Anda"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Laporan bug berisi data dari berbagai file log sistem, termasuk informasi pribadi dan rahasia. Hanya bagikan laporan bug dengan aplikasi dan orang yang Anda percaya."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tangkapan layar berhasil diambil."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Tangkapan layar tidak dapat diambil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detail laporan bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nama file"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Judul"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Deskripsi detail"</string>
</resources>
diff --git a/packages/Shell/res/values-is-rIS/strings.xml b/packages/Shell/res/values-is-rIS/strings.xml
index 1886d6e..a8fc182 100644
--- a/packages/Shell/res/values-is-rIS/strings.xml
+++ b/packages/Shell/res/values-is-rIS/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Skipanalína"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Verið er að búa til villutilkynningu"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Villutilkynning útbúin"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Strjúktu til vinstri til að deila villuskýrslunni"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Snertu til að deila villutilkynningunni"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Villutilkynningar innihalda gögn úr hinum ýmsu annálsskrám kerfisins, þ. á m. persónuleg gögn og trúnaðarupplýsingar. Deildu villutilkynningum eingöngu með forritum og fólki sem þú treystir."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tókst að taka skjámynd."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekki tókst að taka skjámynd."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Upplýsingar um villutilkynningu"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Skráarheiti"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titill"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Ítarleg lýsing"</string>
</resources>
diff --git a/packages/Shell/res/values-it/strings.xml b/packages/Shell/res/values-it/strings.xml
index 39532dc..a954b0c 100644
--- a/packages/Shell/res/values-it/strings.xml
+++ b/packages/Shell/res/values-it/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generazione segnalazione di bug in corso"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Segnalazione di bug acquisita"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Aggiunta di dettagli alla segnalazione di bug"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Attendi..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Scorri verso sinistra per condividere il rapporto sui bug"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tocca per condividere la segnalazione di bug"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Le segnalazioni di bug contengono dati da vari file di log del sistema, incluse informazioni personali e private. Condividi le segnalazioni di bug solo con app e persone attendibili."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot acquisito."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Impossibile acquisire lo screenshot."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Dettagli della segnalazione di bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nome file"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titolo"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descrizione dettagliata"</string>
</resources>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index c950b49..c869e01 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"מעטפת"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"מופק דוח על באג"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"דוח הבאגים צולם"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"החלק שמאלה כדי לשתף את דוח הבאגים"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"גע כדי לשתף את דוח הבאגים שלך"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, כולל מידע אישי ופרטי. שתף דוחות באגים רק עם אפליקציות ואנשים שאתה סומך עליהם."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"צילום המסך בוצע בהצלחה."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"לא ניתן היה לצלם מסך."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"פרטי דוח על באג"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"שם קובץ"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"כותרת"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"תיאור מפורט"</string>
</resources>
diff --git a/packages/Shell/res/values-ja/strings.xml b/packages/Shell/res/values-ja/strings.xml
index 5fb0abf..ba40614 100644
--- a/packages/Shell/res/values-ja/strings.xml
+++ b/packages/Shell/res/values-ja/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"シェル"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"バグレポートを生成しています"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"バグレポートが記録されました"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"バグレポートを共有するには左にスワイプ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"バグレポートを共有するにはタップします"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"バグレポートには、個人の非公開情報など、システムのさまざまなログファイルのデータが含まれます。共有する場合は信頼するアプリとユーザーのみを選択してください。"</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"スクリーンショットを撮影しました。"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"スクリーンショットを撮影できませんでした。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"バグレポートの詳細"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ファイル名"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"タイトル"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"詳細説明"</string>
</resources>
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka-rGE/strings.xml
index 34aa416..eb4d10a 100644
--- a/packages/Shell/res/values-ka-rGE/strings.xml
+++ b/packages/Shell/res/values-ka-rGE/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"გარეკანი"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"მიმდინარეობს ხარვეზის შესახებ ანგარიშის გენერირება"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ანგარიში ხარვეზების შესახებ შექმნილია"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"გაასრიალეთ მარცხნივ თქვენი ხარვეზის შეტყობინების გასაზიარებლად"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"შეეხეთ თქვენი ხარვეზების ანგარიშის გასაზიარებლად"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"ხარვეზის ანგარიშები მოიცავს მონაცემებს სხვადასხვა სისტემური ჟურნალის ფაილებიდან, მათ შორის პირად და კონფიდენციალურ ინფორმაციას."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ეკრანის ანაბეჭდი გადაღებულია წარმატებით."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ეკრანის ანაბეჭდის გადაღება ვერ მოხერხდა."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ხარვეზის შესახებ ანგარიშის დეტალები"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ფაილის სახელი"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"სათაური"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"დეტალური აღწერა"</string>
</resources>
diff --git a/packages/Shell/res/values-kk-rKZ/strings.xml b/packages/Shell/res/values-kk-rKZ/strings.xml
index a736dd8..995bc76 100644
--- a/packages/Shell/res/values-kk-rKZ/strings.xml
+++ b/packages/Shell/res/values-kk-rKZ/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Қабыршық"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Қате туралы есеп жасалып жатыр"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Вирус туралы баянат қабылданды"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Қате туралы есепті бөлісу үшін солға жанаңыз"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Бөліс үшін, вирус туралы баянатты түртіңіз."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Вирус туралы баянатта жүйеде тіркелген әртүрлі файлдар туралы деректер болады, оған жеке және құпия ақпарат та кіреді. Вирус баянаттарын сенімді қолданбалар және сенімді адамдармен ғана бөлісіңіз."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот сәтті түсірілді."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Скриншот түсіру мүмкін болмады."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Қате туралы есептің мәліметтері"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Файл атауы"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Атауы"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Егжей-тегжейлі сипаттама"</string>
</resources>
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km-rKH/strings.xml
index 128f6e0..844c317 100644
--- a/packages/Shell/res/values-km-rKH/strings.xml
+++ b/packages/Shell/res/values-km-rKH/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"សែល"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"របាយការណ៍កំហុសកំពុងត្រូវបានបង្កើត"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"បានចាប់យករបាយការណ៍កំហុស"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"កំពុងបន្ថែមព័ត៌មានលម្អិតទៅរបាយការណ៍កំហុស"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"សូមរង់ចាំ…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"អូសទៅឆ្វេង ដើម្បីចែករំលែករបាយការណ៍កំហុសរបស់អ្នក"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ប៉ះ ដើម្បីចែករំលែករបាយការណ៍កំហុសរបស់អ្នក"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"របាយការណ៍កំហុសរួមមានឯកសារកំណត់ហេតុផ្សេងៗរបស់ប្រព័ន្ធ រួមមានព័ត៌មានផ្ទាល់ខ្លួន និងឯកជន។ ចែករំលែករបាយការណ៍កំហុសជាមួយកម្មវិធី និងមនុស្សដែលអ្នកទុកចិត្ត។"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"បានថតរូបថតអេក្រង់ដោយជោគជ័យ"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"មិនអាចថតរូបថតអេក្រង់បានទេ"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ព័ត៌មានលម្អិតពីរបាយការណ៍កំហុស"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ឈ្មោះឯកសារ"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ចំណងជើង"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"ការពិពណ៌នាលម្អិត"</string>
</resources>
diff --git a/packages/Shell/res/values-kn-rIN/strings.xml b/packages/Shell/res/values-kn-rIN/strings.xml
index 876e1b4..880b279 100644
--- a/packages/Shell/res/values-kn-rIN/strings.xml
+++ b/packages/Shell/res/values-kn-rIN/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"ಶೆಲ್"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ದೋಷ ವರದಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ದೋಷದ ವರದಿಯನ್ನು ಸೆರೆಹಿಡಿಯಲಾಗಿದೆ"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ನಿಮ್ಮ ದೋಷ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ನಿಮ್ಮ ದೋಷದ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"ವೈಯಕ್ತಿಕ ಮತ್ತು ಖಾಸಗಿ ಮಾಹಿತಿಯು ಸೇರಿದಂತೆ, ಸಿಸ್ಟಂನ ಹಲವಾರು ಲಾಗ್ ಫೈಲ್ಗಳಿಂದ ಡೇಟಾವನ್ನು ದೋಷದ ವರದಿಗಳು ಒಳಗೊಂಡಿವೆ. ನೀವು ನಂಬುವಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಜನರೊಂದಿಗೆ ಮಾತ್ರ ದೋಷದ ವರದಿಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ಬಗ್ ವರದಿ ವಿವರಗಳು"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ಫೈಲ್ಹೆಸರು"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ಶೀರ್ಷಿಕೆ"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"ವಿವರವಾದ ವಿವರಣೆ"</string>
</resources>
diff --git a/packages/Shell/res/values-ko/strings.xml b/packages/Shell/res/values-ko/strings.xml
index 80dc6bb..912d940 100644
--- a/packages/Shell/res/values-ko/strings.xml
+++ b/packages/Shell/res/values-ko/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"셸"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"버그 신고 생성 중"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"버그 신고서 캡처됨"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"세부정보를 버그 보고서에 추가"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"잠시 기다려 주세요..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"왼쪽으로 스와이프하여 버그 신고서를 공유하세요."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"버그 신고서를 공유하려면 터치하세요."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"버그 신고서는 시스템의 다양한 로그 파일 데이터(예: 개인 및 비공개 정보)를 포함합니다. 신뢰할 수 있는 앱과 사용자에게만 버그 신고서를 공유하세요."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"스크린샷을 찍었습니다."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"스크린샷을 찍을 수 없습니다."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"버그 신고 세부정보"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"파일 이름"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"제목"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"자세한 설명"</string>
</resources>
diff --git a/packages/Shell/res/values-ky-rKG/strings.xml b/packages/Shell/res/values-ky-rKG/strings.xml
index 00be46b..42527cc 100644
--- a/packages/Shell/res/values-ky-rKG/strings.xml
+++ b/packages/Shell/res/values-ky-rKG/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Командалык кабык"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Мүчүлүштүктөр тууралуу билдирүү түзүлүүдө"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Ката тууралуу билдирүү түзүлдү"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Ката жөнүндө кабар менен бөлүшүү үчүн солго серпип коюңуз"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Ката тууралуу билдирүүңүздү жөнөтүш үчүн, тийиңиз"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Ката тууралуу билдирүүлөр системанын ар кандай лог файлдарынын берилиштерин камтыйт, аларга өздүк жана купуя маалыматтар дагы кирет. Ката тууралуу билдирүүлөрдү сиз ишенген колдонмолор жана адамдар менен гана бөлүшүңүз."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот ийгиликтүү тартылды."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Скриншот тартылбай койду."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Мүчүлүштүктөр жөнүндө кабардын чоо-жайы"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Файлдын аталышы"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Аталышы"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Кененирээк маалымат"</string>
</resources>
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo-rLA/strings.xml
index 58b3daf..ec278fb 100644
--- a/packages/Shell/res/values-lo-rLA/strings.xml
+++ b/packages/Shell/res/values-lo-rLA/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ກຳລັງສ້າງລາຍງານບັນຫາ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ລາຍງານຈຸດບົກພ່ອງຖືກເກັບກຳແລ້ວ"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ປັດໄປຊ້າຍເພື່ອສົ່ງລາຍງານຂໍ້ຜິດພາດຂອງທ່ານ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ແຕະເພື່ອສົ່ງການລາຍງານປັນຫາຂອງທ່ານ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"ການລາຍງານຂໍ້ຜິດພາດປະກອບມີ ຂໍ້ມູນຈາກໄຟລ໌ບັນທຶກຂອງລະບົບຫຼາຍໄຟລ໌, ຮວມທັງຂໍ້ມູນສ່ວນໂຕນຳ. ທ່ານຕ້ອງແບ່ງປັນລາຍງານຂໍ້ຜິດພາດໃຫ້ແອັບຯ ແລະຄົນທີ່ທ່ານເຊື່ອຖືໄດ້ເທົ່ານັ້ນ."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ຖ່າຍພາບໜ້າຈໍສຳເລັດແລ້ວ."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ບໍ່ສາມາດຖ່າຍພາບໜ້າຈໍໄດ້."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ລາຍລະອຽດການລາຍງານບັນຫາ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ຊື່ໄຟລ໌"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ຊື່"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"ຄຳອະທິບາຍແບບລະອຽດ"</string>
</resources>
diff --git a/packages/Shell/res/values-lt/strings.xml b/packages/Shell/res/values-lt/strings.xml
index 9419ad3..0c069c6 100644
--- a/packages/Shell/res/values-lt/strings.xml
+++ b/packages/Shell/res/values-lt/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Apvalkalas"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Pranešimas apie riktą generuojamas"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Riktų ataskaita užfiksuota"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Pridedama informacijos prie pranešimo apie riktą"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Palaukite…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Perbraukite kairėn, kad bendrintumėte rikto ataskaitą"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Palieskite, kad bendrintumėte riktų ataskaitą"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Riktų ataskaitose pateikiami duomenys iš įvairių sistemos žurnalo failų, įskaitant asmeninę ir privačią informaciją. Riktų ataskaitas bendrinkite tik su patikimomis programomis ir žmonėmis."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekrano kopija sėkmingai padaryta."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nepavyko padaryti ekrano kopijos."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Išsami pranešimo apie riktą informacija"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Failo pavadinimas"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Pavadinimas"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Išsamus aprašas"</string>
</resources>
diff --git a/packages/Shell/res/values-lv/strings.xml b/packages/Shell/res/values-lv/strings.xml
index 574fd0b..5212aaa 100644
--- a/packages/Shell/res/values-lv/strings.xml
+++ b/packages/Shell/res/values-lv/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Aizsargs"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Notiek kļūdas pārskata izveide"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Izveidots kļūdu pārskats"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Velciet pa kreisi, lai kopīgotu savu kļūdu ziņojumu."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Pieskarieties, lai kopīgotu kļūdu pārskatu."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Kļūdu pārskatā ir iekļauti dati no dažādiem sistēmas žurnālfailiem, tostarp personas dati un privāta informācija. Kļūdu pārskatus ieteicams kopīgot tikai ar uzticamām lietotnēm un lietotājiem."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekrānuzņēmums ir veikts sekmīgi."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nevarēja veikt ekrānuzņēmumu."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Kļūdas pārskata informācija"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Faila nosaukums"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Nosaukums"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detalizēts apraksts"</string>
</resources>
diff --git a/packages/Shell/res/values-mk-rMK/strings.xml b/packages/Shell/res/values-mk-rMK/strings.xml
index dc1f249..e13ce4c 100644
--- a/packages/Shell/res/values-mk-rMK/strings.xml
+++ b/packages/Shell/res/values-mk-rMK/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Обвивка"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Се генерира извештајот за грешки"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Извештајот за грешка е снимен"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Повлечете налево за да споделите пријава за грешка"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Допри да се сподели твојот извештај за грешка"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Извештаите за грешка содржат податоци од разни датотеки за евиденција на системот, вклучувајќи лични и приватни информации. Извештаите за грешка споделувајте ги само со апликации и луѓе на коишто им верувате."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Успешно е направена слика од екранот."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Не може да се направи слика од екранот."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детали на извештајот за грешка"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Име на датотека"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Наслов"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Детален опис"</string>
</resources>
diff --git a/packages/Shell/res/values-ml-rIN/strings.xml b/packages/Shell/res/values-ml-rIN/strings.xml
index 7f411a4..82cfd6d 100644
--- a/packages/Shell/res/values-ml-rIN/strings.xml
+++ b/packages/Shell/res/values-ml-rIN/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"ഷെൽ"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ബഗ് റിപ്പോർട്ട് സൃഷ്ടിച്ചുകൊണ്ടിരിക്കുന്നു"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ബഗ് റിപ്പോർട്ട് ക്യാപ്ചർ ചെയ്തു"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"ബഗ് റിപ്പോർട്ടിലേക്ക് വിശദാംശങ്ങൾ ചേർക്കുന്നു"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"കാത്തിരിക്കുക..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"നിങ്ങളുടെ ബഗ് റിപ്പോർട്ട് പങ്കിടുന്നതിന് ഇടത്തേയ്ക്ക് സ്വൈപ്പുചെയ്യുക"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"നിങ്ങളുടെ ബഗ് റിപ്പോർട്ട് പങ്കിടാൻ സ്പർശിക്കുക"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"വ്യക്തിഗതവും സ്വകാര്യവുമായ വിവരങ്ങൾ ഉൾപ്പെടെ, സിസ്റ്റത്തിന്റെ നിരവധി ലോഗ് ഫയലുകളിൽ നിന്നുള്ള ഡാറ്റ, ബഗ് റിപ്പോർട്ടുകളിൽ അടങ്ങിയിരിക്കുന്നു. നിങ്ങൾ വിശ്വസിക്കുന്ന അപ്ലിക്കേഷനുകൾക്കും ആളുകൾക്കും മാത്രം ബഗ് റിപ്പോർട്ടുകൾ പങ്കിടുക."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"സ്ക്രീൻഷോട്ട് എടുത്തു."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"സ്ക്രീൻഷോട്ട് എടുക്കാൻ കഴിഞ്ഞില്ല."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ബഗ് റിപ്പോർട്ട് വിശദാംശങ്ങൾ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ഫയല്നാമം"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"പേര്"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"വിശദമായ വിവരണം"</string>
</resources>
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn-rMN/strings.xml
index 1f47fbfe..856803d 100644
--- a/packages/Shell/res/values-mn-rMN/strings.xml
+++ b/packages/Shell/res/values-mn-rMN/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Шел"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Алдааны тайланг үүсгэсэн"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Алдааны мэдээлэл хүлээн авав"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Алдааны тайланд дэлгэрэнгүй мэдээлэл нэмж байна"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Түр хүлээнэ үү..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Өөрийн согог репортыг хуваалцахын тулд зүүн шудрана уу"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Та алдааны мэдэгдлийг хуваалцах бол хүрнэ үү"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Алдааны репорт нь хувийн болон нууц мэдээлэл зэргийг агуулсан системийн төрөл бүрийн лог файлын датаг агуулна. Алдааны репортыг зөвхөн итгэлтэй апп болон хүмүүст хуваалцана уу."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Дэлгэцийн зургийг амжилттай авлаа."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Дэлгэцийн зураг авах боломжгүй."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Алдааны дэлгэрэнгүй тайлан"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Файлын нэр"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Гарчиг"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Дэлгэрэнгүй тайлбар"</string>
</resources>
diff --git a/packages/Shell/res/values-mr-rIN/strings.xml b/packages/Shell/res/values-mr-rIN/strings.xml
index 89c9275..b621928 100644
--- a/packages/Shell/res/values-mr-rIN/strings.xml
+++ b/packages/Shell/res/values-mr-rIN/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"शेल"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"दोष अहवाल तयार केला जात आहे"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"दोष अहवाल कॅप्चर केला"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"आपला दोष अहवाल सामायिक करण्यासाठी डावीकडे स्वाइप करा"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"आपला दोष अहवाल सामायिक करण्यासाठी स्पर्श करा"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"दोष अहवालांमध्ये वैयक्तिक आणि खाजगी माहितीसह, सिस्टमच्या अनेक लॉग फायलींमधील डेटा असतो. केवळ आपला विश्वास असलेल्या अॅप्स आणि लोकांसह दोष अहवाल सामायिक करा."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रीनशॉट यशस्वीपणे घेतला."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट घेणे शक्य झाले नाही."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"दोष अहवाल तपशील"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"फाईलनाव"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"शीर्षक"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"तपशीलवार वर्णन"</string>
</resources>
diff --git a/packages/Shell/res/values-ms-rMY/strings.xml b/packages/Shell/res/values-ms-rMY/strings.xml
index c588a05..c14d3ed 100644
--- a/packages/Shell/res/values-ms-rMY/strings.xml
+++ b/packages/Shell/res/values-ms-rMY/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Laporan pepijat sedang dijana"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Laporan pepijat telah ditangkap"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Leret ke kiri untuk berkongsi laporan pepijat anda"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Sentuh untuk berkongsi laporan pepijat anda"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Laporan pepijat mengandungi data dari pelbagai fail log sistem, termasuk maklumat peribadi dan sulit. Kongsikan laporan pepijat hanya dengan apl dan orang yang anda percayai."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tangkapan skrin berjaya diambil."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Tangkapan skrin tidak dapat diambil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Butiran laporan pepijat"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nama fail"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Tajuk"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Perihalan terperinci"</string>
</resources>
diff --git a/packages/Shell/res/values-my-rMM/strings.xml b/packages/Shell/res/values-my-rMM/strings.xml
index 728eb98..e941111 100644
--- a/packages/Shell/res/values-my-rMM/strings.xml
+++ b/packages/Shell/res/values-my-rMM/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"အခွံ"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ချွတ်ယွင်းမှု အစီရင်ခံစာကို ထုတ်ပေးနေသည်"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"အမှားအယွင်းမှတ်တမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီး"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"ချွတ်ယွင်းချက်အစီရင်ခံချက်သို့ အသေးစိတ်များပေါင်းထည့်ရန်"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"ခေတ္တစောင့်ပါ..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"သင်၏ ဘာဂ် အစီရင်ခံစာကို မျှပေးရန် ဘယ်ဘက်သို့ ပွတ်ဆွဲရန်"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"အမှားအယွင်း မှတ်တမ်းကို မျှဝေရန် ထိလိုက်ပါ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"အမှားအယွင်း မှတ်တမ်းမှာ ပါရှိသော အချက်အလက်များမှာ ကိုယ်ရေးကိုယ်တာ နဲ့ လုံခြုံရေး အချက်အလက်များပါဝင်သော စနစ်မှ ပြုလုပ်မှု မှတ်တမ်းများ ဖြစ်ပါသည်၊ အမှားအယွင်း မှတ်တမ်းများကို ယုံကြည်ရသော အပလီကေးရှင်းများနဲ့ လူများကိုသာ ပေးဝေပြသမှု လုပ်ပါရန်။"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"မျက်နှာပြင် လျှပ်တစ်ပြက်ပုံကို အောင်မြင်စွာ ရိုက်ပြီးပြီ။"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"မျက်နှာပြင် လျှပ်တစ်ပြက်ပုံ မရိုက်နိုင်ပါ"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ချွတ်ယွင်းချက်အစီရင်ခံစာ အသေးစိတ်များ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ဖိုင်အမည်"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ခေါင်းစဉ်"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"အသေးစိတ် ဖော်ပြချက်"</string>
</resources>
diff --git a/packages/Shell/res/values-nb/strings.xml b/packages/Shell/res/values-nb/strings.xml
index dff2a83..5abb9dd 100644
--- a/packages/Shell/res/values-nb/strings.xml
+++ b/packages/Shell/res/values-nb/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Kommandoliste"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Feilrapporten blir generert"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Feilrapporten er lagret"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Sveip til venstre for å dele feilrapporten din"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Trykk for å dele feilrapporten din"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Feilrapporter inkluderer data fra systemets forskjellige loggfiler. Dette omfatter personlig og privat informasjon. Du bør bare dele feilrapporter med apper og folk du stoler på."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skjermdumpen er tatt."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Skjermdumpen kunne ikke tas."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detaljer om feilrapporten"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filnavn"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Tittel"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaljert beskrivelse"</string>
</resources>
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne-rNP/strings.xml
index ec87f35..5b68ece 100644
--- a/packages/Shell/res/values-ne-rNP/strings.xml
+++ b/packages/Shell/res/values-ne-rNP/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"सेल"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"बग रिपोर्ट उत्पन्न भइरहेको छ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"बग प्रतिवेदन समातियो"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"बग रिपोर्टमा विवरणहरू थप्दै"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा गर्नुहोला..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"तपाईँको बग रिपोर्ट साझेदारी गर्न बायाँ स्वाइप गर्नुहोस्"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"तपाईंको बग रिपोर्ट साझेदारी गर्न छुनुहोस्"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्टहरूमा प्रणालीका विभिन्न लग फाइलहरूबाट व्यक्तिगत तथा नीजि सूचनासहितको डेटा रहन्छ। बग रिपोर्टहरू अनुप्रयोगहरू र तपाईँले विश्वास गरेका व्यक्तिहरूसँग मात्र साझेदारी गर्नुहोस्।"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रिनशट सफलतापूर्वक लिइयो।"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रिनशट लिन सकिएन।"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"बग रिपोर्टको विवरण"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"फाइलको नाम"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"शीर्षक"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"विस्तृत विवरण"</string>
</resources>
diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml
index b700af5..dd67ccd 100644
--- a/packages/Shell/res/values-nl/strings.xml
+++ b/packages/Shell/res/values-nl/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bugrapport wordt gegenereerd"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Foutenrapport vastgelegd"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Details toevoegen aan het bugrapport"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Even geduld…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Veeg naar links om je bugmelding te delen"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Raak aan om je foutenrapport te delen"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Foutenrapporten bevatten gegevens uit de verschillende logbestanden van het systeem, waaronder persoonlijke en privégegevens. Deel foutenrapporten alleen met apps en mensen die u vertrouwt."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot is gemaakt."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot kan niet worden gemaakt."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Details van bugrapport"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Bestandsnaam"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titel"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Gedetailleerde beschrijving"</string>
</resources>
diff --git a/packages/Shell/res/values-pa-rIN/strings.xml b/packages/Shell/res/values-pa-rIN/strings.xml
index 15833be..96addbf 100644
--- a/packages/Shell/res/values-pa-rIN/strings.xml
+++ b/packages/Shell/res/values-pa-rIN/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"ਸ਼ੈਲ"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"ਬੱਗ ਰਿਪੋਰਟ ਸਿਰਜੀ ਜਾ ਰਹੀ ਹੈ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ਬਗ ਰਿਪੋਰਟ ਕੈਪਚਰ ਕੀਤੀ"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"ਬੱਗ ਰਿਪੋਰਟ ਵਿੱਚ ਵੇਰਵਿਆਂ ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ਤੁਹਾਡੀ ਬਗ ਰਿਪੋਰਟ ਸ਼ੇਅਰ ਕਰਨ ਲਈ ਖੱਬੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ਆਪਣੀ ਬਗ ਰਿਪੋਰਟ ਸ਼ੇਅਰ ਕਰਨ ਲਈ ਛੋਹਵੋ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"ਬਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਸਿਸਟਮ ਦੀਆਂ ਭਿੰਨ ਲੌਗ ਫਾਈਲਾਂ ਦਾ ਡਾਟਾ ਹੁੰਦਾ ਹੈ, ਨਿੱਜੀ ਅਤੇ ਪ੍ਰਾਈਵੇਟ ਜਾਣਕਾਰੀ ਸਮੇਤ। ਕੇਵਲ ਉਹਨਾਂ ਐਪਸ ਅਤੇ ਲੋਕਾਂ ਨਾਲ ਬਗ ਰਿਪੋਰਟਾਂ ਸ਼ੇਅਰ ਕਰੋ, ਜਿਹਨਾਂ ਤੇ ਤੁਸੀਂ ਭਰੋਸਾ ਕਰਦੇ ਹੋ।"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸਫਲਤਾਪੂਰਵਕ ਲਿਆ ਗਿਆ।"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਿਆ।"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ਬੱਗ ਰਿਪੋਰਟ ਵੇਰਵੇ"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ਫ਼ਾਈਲ ਨਾਮ"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ਸਿਰਲੇਖ"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"ਵਿਸਥਾਰ ਸਹਿਤ ਵਰਣਨ"</string>
</resources>
diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml
index 9985a91..2176ef1 100644
--- a/packages/Shell/res/values-pl/strings.xml
+++ b/packages/Shell/res/values-pl/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Powłoka"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Trwa generowanie raportu o błędzie"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raport o błędach został zapisany"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Przesuń palcem w lewo, by udostępnić swoje zgłoszenie błędu"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Kliknij, by udostępnić raport o błędach"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Raporty o błędach zawierają dane z różnych plików dzienników systemu, w tym dane osobowe i prywatne. Udostępniaj je tylko aplikacjom i osobom, którym ufasz."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Zrobiono zrzut ekranu."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nie udało się zrobić zrzutu ekranu."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Szczegóły zgłoszenia błędu"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nazwa pliku"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Tytuł"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Szczegółowy opis"</string>
</resources>
diff --git a/packages/Shell/res/values-pt-rBR/strings.xml b/packages/Shell/res/values-pt-rBR/strings.xml
index 745efb3..a215a16 100644
--- a/packages/Shell/res/values-pt-rBR/strings.xml
+++ b/packages/Shell/res/values-pt-rBR/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Um relatório do bug está sendo gerado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de bugs capturado"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslize para a esquerda para compartilhar seu relatório de bugs"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para compartilhar seu relatório de bugs"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de bugs contêm dados de diversos arquivos de registro do sistema, inclusive informações pessoais e particulares. Compartilhe relatórios de bugs somente com apps e pessoas nos quais você confia."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de tela concluída."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível fazer a captura de tela."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório do bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nome do arquivo"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descrição detalhada"</string>
</resources>
diff --git a/packages/Shell/res/values-pt-rPT/strings.xml b/packages/Shell/res/values-pt-rPT/strings.xml
index 9252068..a413172 100644
--- a/packages/Shell/res/values-pt-rPT/strings.xml
+++ b/packages/Shell/res/values-pt-rPT/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"O relatório de erro está a ser criado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de erros capturado"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslizar rapidamente para a esquerda para partilhar o seu relatório de erros"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para partilhar o relatório de erros"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de erros incluem dados de vários ficheiros de registo do sistema, nomeadamente informações pessoais e privadas. Partilhe relatórios de erros apenas com aplicações e pessoas fidedignas."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de ecrã tirada com êxito."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível tirar a captura de ecrã."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório de erro"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nome do ficheiro"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descrição detalhada"</string>
</resources>
diff --git a/packages/Shell/res/values-pt/strings.xml b/packages/Shell/res/values-pt/strings.xml
index 745efb3..a215a16 100644
--- a/packages/Shell/res/values-pt/strings.xml
+++ b/packages/Shell/res/values-pt/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Um relatório do bug está sendo gerado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de bugs capturado"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslize para a esquerda para compartilhar seu relatório de bugs"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para compartilhar seu relatório de bugs"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Os relatórios de bugs contêm dados de diversos arquivos de registro do sistema, inclusive informações pessoais e particulares. Compartilhe relatórios de bugs somente com apps e pessoas nos quais você confia."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de tela concluída."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível fazer a captura de tela."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório do bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Nome do arquivo"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Título"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descrição detalhada"</string>
</resources>
diff --git a/packages/Shell/res/values-ro/strings.xml b/packages/Shell/res/values-ro/strings.xml
index 77a6cfd..46c7924 100644
--- a/packages/Shell/res/values-ro/strings.xml
+++ b/packages/Shell/res/values-ro/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Se generează raportul de eroare"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raportul despre erori a fost creat"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Glisați la stânga pentru a trimite raportul de erori"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Atingeți pentru a permite accesul la raportul despre erori"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Rapoartele despre erori conțin date din diferite fișiere de jurnal ale sistemului, inclusiv informații private și personale. Permiteți accesul la rapoartele despre erori numai aplicațiilor și persoanelor în care aveți încredere."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de ecran a fost făcută."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Captura de ecran nu a putut fi făcută."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalii privind raportul de eroare"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Numele fișierului"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titlu"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Descriere detaliată"</string>
</resources>
diff --git a/packages/Shell/res/values-ru/strings.xml b/packages/Shell/res/values-ru/strings.xml
index 18502cf..ef60015 100644
--- a/packages/Shell/res/values-ru/strings.xml
+++ b/packages/Shell/res/values-ru/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Оболочка"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Создание отчета об ошибке…"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Отчет об ошибке сохранен"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Проведите влево, чтобы отправить отчет"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Нажмите, чтобы отправить отчет об ошибках"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Отчеты об ошибках содержат данные различных системных журналов и могут включать личную информацию. Рекомендуем открывать к ним доступ только лицам и приложениям, заслуживающим доверие."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот готов"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Не удалось сделать скриншот"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детали отчета об ошибке"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Название файла"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Название"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Подробное описание"</string>
</resources>
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si-rLK/strings.xml
index 25bef76..866c0f7 100644
--- a/packages/Shell/res/values-si-rLK/strings.xml
+++ b/packages/Shell/res/values-si-rLK/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"ෂෙල්"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"දෝෂ වාර්තාවක් ජනනය කරමින් පවතී"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"දෝෂ වාර්තාව ලබාගන්නා ලදි"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"දෝෂ වාර්තාව වෙත විස්තර එක් කිරීම"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"කරුණාකර රැඳී සිටින්න..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ඔබගේ දෝෂ වාර්තාව බෙදාගැනීමට වමට ස්වයිප් කරන්න"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ඔබගේ දෝෂ වාර්තාව බෙදා ගැනීමට ස්පර්ශ කරන්න"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව පද්ධතියේ විවිධ ලොග් ගොනු වල දත්ත දෝෂ වාර්තාවේ අඩංගු වේ. ඔබට විශ්වාසවන්ත යෙදුම් සහ පුද්ගලයින් සමඟ පමණක් දෝෂ වාර්තා බෙදා ගන්න."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"සාර්ථකව තිර රුවක් ගන්නා ලදී."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"තිර රුවක් ගත නොහැකි විය."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"දෝෂ වාර්තා විස්තර"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ගොනුවේ නම"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"මාතෘකාව"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"සවිස්තර විස්තරය"</string>
</resources>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index d874169..f207480 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Prostredie"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generuje sa hlásenie chyby"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Hlásenie o chybách bolo vytvorené"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Pridanie podrobností o hlásení chyby"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Čakajte prosím…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Ak chcete hlásenie o chybe zdieľať, prejdite prstom doľava."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Hlásenie o chybách môžete zdielať klepnutím"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Správy o chybách obsahujú údaje z rôznych súborov denníkov systému vrátane osobných a súkromných informácií. Zdieľajte ich iba s dôveryhodnými aplikáciami a ľuďmi."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snímka obrazovky bola zaznamenaná."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snímku obrazovky sa nepodarilo zaznamenať."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti hlásenia chyby"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Názov súboru"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Názov"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Podrobný popis"</string>
</resources>
diff --git a/packages/Shell/res/values-sl/strings.xml b/packages/Shell/res/values-sl/strings.xml
index f7ccc4b..606e797 100644
--- a/packages/Shell/res/values-sl/strings.xml
+++ b/packages/Shell/res/values-sl/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Lupina"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Poročilo o napakah se pripravlja"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Poročilo o napaki je posneto"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Povlecite v levo, če želite poslati sporočilo o napaki"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dotaknite se, če želite deliti sporočilo o napaki z drugimi"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Poročila o napakah vsebujejo podatke iz različnih dnevniških datotek sistema, vključno z osebnimi in zasebnimi podatki. Poročila o napakah delite samo z aplikacijami in ljudmi, ki jim zaupate."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Posnetek zaslon je bil uspešno ustvarjen."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Posnetka zaslon ni bilo mogoče ustvariti."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti o poročilu o napakah"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Ime datoteke"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Naslov"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Podroben opis"</string>
</resources>
diff --git a/packages/Shell/res/values-sq-rAL/strings.xml b/packages/Shell/res/values-sq-rAL/strings.xml
index 529caf8..ae30d68 100644
--- a/packages/Shell/res/values-sq-rAL/strings.xml
+++ b/packages/Shell/res/values-sq-rAL/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Guaska"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Po krijohet raporti i defekteve në kod"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raporti i defektit në kod u regjistrua"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Rrëshqit majtas për të ndarë raportin e defektit në kod"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Prek për të ndarë raportin e defektit në kod"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Raportet e gabimeve përmbajnë të dhëna nga skedarë të ndryshëm ditarësh sistemi, përfshi informacione personale dhe private. Shpërndaji publikisht raportet e gabimeve vetëm me aplikacionet dhe personat që iu beson."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Pamja e ekranit u realizua me sukses."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Pamja e ekranit nuk mund të realizohej."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detajet e raportimit të gabimeve në kod"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Emri i skedarit"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Titulli"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Përshkrimi i detajuar"</string>
</resources>
diff --git a/packages/Shell/res/values-sr/strings.xml b/packages/Shell/res/values-sr/strings.xml
index 740d2fb..d1646f4 100644
--- a/packages/Shell/res/values-sr/strings.xml
+++ b/packages/Shell/res/values-sr/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Извештај о грешци се генерише"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Извештај о грешци је снимљен"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Превуците улево да бисте делили извештај о грешкама"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Додирните да бисте делили извештај о грешци"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Извештаји о грешкама садрже податке из различитих системских датотека евиденције, укључујући личне и приватне податке. Делите извештаје о грешкама само са апликацијама и људима у које имате поверења."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Снимање екрана је успело."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Снимање екрана није успело."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детаљи извештаја о грешци"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Назив датотеке"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Наслов"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Детаљни опис"</string>
</resources>
diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml
index 1df2110..3a13837 100644
--- a/packages/Shell/res/values-sv/strings.xml
+++ b/packages/Shell/res/values-sv/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Skal"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Felrapporten genereras"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Felrapporten har skapats"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Svep åt vänster om du vill dela felrapporten"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tryck om du vill dela felrapporten"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Felrapporter innehåller data från systemets olika loggfiler, inklusive personliga och privata uppgifter. Dela bara felrapporter med personer du litar på."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"En skärmdump har tagits."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Det gick inte att ta skrämdump."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Information för felrapporten"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filnamn"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Namn"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detaljerad beskrivning"</string>
</resources>
diff --git a/packages/Shell/res/values-sw/strings.xml b/packages/Shell/res/values-sw/strings.xml
index bb7364d..de46414 100644
--- a/packages/Shell/res/values-sw/strings.xml
+++ b/packages/Shell/res/values-sw/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Ganda"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Inatayarisha ripoti ya hitilafu"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Ripoti ya hitilafu imenaswa"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Inaongeza maelezo kwenye ripoti ya hitilafu"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Tafadhali subiri…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Telezesha kidole kushoto ili ushiriki ripoti yako ya hitilafu"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Gusa ili ushiriki ripoti yako ya hitilafu"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Ripoti ya hitilafu ina data kutoka kwenye faili za kumbukumbu mbalimbali za mfumo, pamoja na maelezo ya kibinafsi na faragha. Shiriki ripoti ya hitilafu na programu na watu unaowaamini pekee."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Imepiga picha ya skrini."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Haikupiga picha ya skrini."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Maelezo kuhusu ripoti ya hitilafu"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Jina la faili"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Kichwa"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Maelezo ya kina"</string>
</resources>
diff --git a/packages/Shell/res/values-ta-rIN/strings.xml b/packages/Shell/res/values-ta-rIN/strings.xml
index 28e884f..77bec36 100644
--- a/packages/Shell/res/values-ta-rIN/strings.xml
+++ b/packages/Shell/res/values-ta-rIN/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"ஷெல்"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"பிழை அறிக்கை உருவாக்கப்படுகிறது"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"பிழை அறிக்கைகள் படமெடுக்கப்பட்டன"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"பிழை அறிக்கையைப் பகிர இடது புறமாகத் தேய்க்கவும்"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"உங்கள் பிழை அறிக்கையைப் பகிர, தொடவும்"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"பிழை அறிக்கைகளில், சொந்த வாழ்க்கை மற்றும் தனிப்பட்ட தகவல் உள்பட கணினியின் பல்வேறு பதிவுகளில் உள்ள தரவு இருக்கும். நீங்கள் நம்பும் பயன்பாடுகள் மற்றும் நபர்களுடன் மட்டும் பிழை அறிக்கைகளைப் பகிரவும்."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ஸ்கிரீன் ஷாட் எடுக்கப்பட்டது."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ஸ்கிரீன் ஷாட்டை எடுக்க முடியவில்லை."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"பிழை அறிக்கை விவரங்கள்"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"கோப்புப்பெயர்"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"தலைப்பு"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"விரிவான விளக்கம்"</string>
</resources>
diff --git a/packages/Shell/res/values-te-rIN/strings.xml b/packages/Shell/res/values-te-rIN/strings.xml
index 71e3838..c84ec9a 100644
--- a/packages/Shell/res/values-te-rIN/strings.xml
+++ b/packages/Shell/res/values-te-rIN/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"షెల్"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"బగ్ నివేదిక ఉత్పాదించబడుతోంది"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"బగ్ నివేదిక క్యాప్చర్ చేయబడింది"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"బగ్ నివేదికకు వివరాలను జోడిస్తోంది"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"దయచేసి వేచి ఉండండి..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎడమవైపుకు స్వైప్ చేయండి"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి తాకండి"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"బగ్ నివేదికలు వ్యక్తిగతమైన మరియు రహస్యమైన సమాచారంతో సహా సిస్టమ్ యొక్క విభిన్న లాగ్ ఫైల్ల్లోని డేటాను కలిగి ఉంటాయి. కనుక బగ్ నివేదికలను మీరు విశ్వసించే అనువర్తనాలు మరియు వ్యక్తులతో మాత్రమే భాగస్వామ్యం చేయండి."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"స్క్రీన్షాట్ విజయవంతంగా తీయబడింది."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"స్క్రీన్షాట్ను తీయడం సాధ్యపడలేదు."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"బగ్ నివేదిక వివరాలు"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ఫైల్ పేరు"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"శీర్షిక"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"సమగ్ర వివరణ"</string>
</resources>
diff --git a/packages/Shell/res/values-th/strings.xml b/packages/Shell/res/values-th/strings.xml
index fd2749d..cfad947 100644
--- a/packages/Shell/res/values-th/strings.xml
+++ b/packages/Shell/res/values-th/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"กำลังสร้างรายงานข้อบกพร่อง"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"จับภาพรายงานข้อบกพร่องแล้ว"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"กวาดไปทางซ้ายเพื่อแชร์รายงานข้อบกพร่อง"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"แตะเพื่อแชร์รายงานข้อบกพร่องของคุณ"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"รายงานข้อบกพร่องมีข้อมูลจากไฟล์บันทึกต่างๆ ของระบบ รวมถึงข้อมูลส่วนตัว แชร์รายงานข้อบกพร่องกับแอปและบุคคลที่คุณไว้ใจเท่านั้น"</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"จับภาพหน้าจอสำเร็จแล้ว"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ไม่สามารถจับภาพหน้าจอได้"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"รายละเอียดรายงานข้อบกพร่อง"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"ชื่อไฟล์"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"ชื่อ"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"คำอธิบายโดยละเอียด"</string>
</resources>
diff --git a/packages/Shell/res/values-tl/strings.xml b/packages/Shell/res/values-tl/strings.xml
index 3301113..c89fe56 100644
--- a/packages/Shell/res/values-tl/strings.xml
+++ b/packages/Shell/res/values-tl/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Binubuo na ang ulat ng bug"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Na-capture ang ulat ng bug"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Mag-swipe pakaliwa upang ibahagi ang iyong ulat ng bug"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Pindutin upang ibahagi ang iyong ulat ng bug"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Naglalaman ang mga ulat ng bug ng data mula sa iba\'t ibang file ng log ng system, kabilang ang personal at pribadong impormasyon. Magbahagi lang ng mga ulat ng bug sa apps at mga tao na pinagkakatiwalaan mo."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Nakunan ng screenshot."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Hindi makunan ng screenshot."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Mga detalye ng ulat ng bug"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Filename"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Pamagat"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Detalyadong paglalarawan"</string>
</resources>
diff --git a/packages/Shell/res/values-tr/strings.xml b/packages/Shell/res/values-tr/strings.xml
index 746458d..ac974d4 100644
--- a/packages/Shell/res/values-tr/strings.xml
+++ b/packages/Shell/res/values-tr/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Kabuk"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Hata raporu oluşturuluyor"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Hata raporu kaydedildi"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Hata raporunuzu paylaşmak için hızlıca sola kaydırın"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Hata raporunuzu paylaşmak için dokunun"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Hata raporları, kişisel ve özel bilgiler dahil olmak üzere sistemin çeşitli günlük dosyalarından veriler içerir. Hata raporlarını sadece güvendiğiniz uygulamalar ve kişilerle paylaşın."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekran görüntüsü başarıyla alındı."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekran görüntüsü alınamadı."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Hata raporu ayrıntıları"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Dosya adı"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Başlık"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Ayrıntılı açıklama"</string>
</resources>
diff --git a/packages/Shell/res/values-uk/strings.xml b/packages/Shell/res/values-uk/strings.xml
index 1f6210e..93e6511 100644
--- a/packages/Shell/res/values-uk/strings.xml
+++ b/packages/Shell/res/values-uk/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Оболонка"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Генерується повідомлення про помилку"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Звіт про помилки створено"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Додаються деталі до повідомлення про помилку"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Зачекайте…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Проведіть пальцем ліворуч, щоб надіслати звіт про помилки"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Торкніться, щоб надіслати звіт про помилки"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Звіти про помилки містять дані з різних файлів журналу системи, зокрема особисті та конфіденційні. Надсилайте звіт про помилки лише тим, кому довіряєте."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Знімок екрана зроблено."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Не вдалося зробити знімок екрана."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Деталі повідомлення про помилку"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Назва файлу"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Назва"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Детальний опис"</string>
</resources>
diff --git a/packages/Shell/res/values-ur-rPK/strings.xml b/packages/Shell/res/values-ur-rPK/strings.xml
index 1f09245..fd31369 100644
--- a/packages/Shell/res/values-ur-rPK/strings.xml
+++ b/packages/Shell/res/values-ur-rPK/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"شیل"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"بگ رپورٹ تخلیق ہو رہی ہے"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"بَگ رپورٹ کیپچر کر لی گئی"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"اپنی بگ رپورٹ کا اشتراک کرنے کیلئے بائیں سوائپ کریں"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"اپنی بَگ رپورٹ کا اشتراک کرنے کیلئے ٹچ کریں"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"بَگ رپورٹس میں سسٹم کی مختلف لاگ فائلوں سے ڈیٹا شامل ہوتا ہے، بشمول ذاتی اور نجی معلومات۔ بَگ رپورٹس کا اشتراک صرف اپنے بھروسے مند ایپس اور لوگوں کے ساتھ کریں۔"</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"اسکرین شاٹ کامیابی سے لے لیا گیا۔"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"سکرین شاٹ نہیں لیا جا سکا۔"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"بگ رپورٹ کی تفصیلات"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"فائل کا نام"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"عنوان"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"تفصیلی وضاحت"</string>
</resources>
diff --git a/packages/Shell/res/values-uz-rUZ/strings.xml b/packages/Shell/res/values-uz-rUZ/strings.xml
index 1cf320a..b0c5a20 100644
--- a/packages/Shell/res/values-uz-rUZ/strings.xml
+++ b/packages/Shell/res/values-uz-rUZ/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Terminal"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Xatoliklar hisoboti tayyorlanmoqda"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Xatolik hisobotini yozib olindi"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Xatolik hisobotini yuborish uchun barmog‘ingiz bilan chapga suring"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Xatolik hisobotini bo‘lishish uchun barmog‘ingizni tegizing."</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Xatolik hisobotlari tizimdagi har xil jurnal fayllardagi ma’lumotlarni, shuningdek, shaxsiy hamda maxfiy ma’lumotlarni o‘z ichiga oladi. Xatolik hisobotlarini faqat ishonchli dasturlar va odamlar bilan bo‘lishing."</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skrinshot tayyor."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Skrinshot olib bo‘lmadi."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Xatoliklar hisoboti tafsilotlari"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Fayl nomi"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Nomi"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Batafsil ta’rif"</string>
</resources>
diff --git a/packages/Shell/res/values-vi/strings.xml b/packages/Shell/res/values-vi/strings.xml
index 4d7a89f..2642b89 100644
--- a/packages/Shell/res/values-vi/strings.xml
+++ b/packages/Shell/res/values-vi/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Báo cáo lỗi đang được tạo"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Báo cáo lỗi đã được chụp"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Đang thêm thông tin chi tiết vào báo cáo lỗi"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Vui lòng đợi…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Vuốt sang trái để chia sẻ báo cáo lỗi của bạn"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Chạm để chia sẻ báo cáo lỗi của bạn"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Các báo cáo lỗi chứa dữ liệu từ nhiều tệp nhật ký khác nhau của hệ thống, bao gồm cả thông tin cá nhân và riêng tư. Chỉ chia sẻ báo cáo lỗi với các ứng dụng và những người mà bạn tin tưởng."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Đã chụp ảnh màn hình thành công."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Không thể chụp ảnh màn hình."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Chi tiết báo cáo lỗi"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Tên tệp"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Tiêu đề"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Mô tả chi tiết"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rCN/strings.xml b/packages/Shell/res/values-zh-rCN/strings.xml
index ec418b3..48ef30f 100644
--- a/packages/Shell/res/values-zh-rCN/strings.xml
+++ b/packages/Shell/res/values-zh-rCN/strings.xml
@@ -19,6 +19,10 @@
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在生成错误报告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已抓取错误报告"</string>
+ <!-- no translation found for bugreport_updating_title (4423539949559634214) -->
+ <skip />
+ <!-- no translation found for bugreport_updating_wait (3322151947853929470) -->
+ <skip />
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑动即可分享错误报告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"触摸即可分享您的错误报告"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"错误报告包含的数据来自于系统的各个日志文件,其中包含个人信息和隐私信息。请务必只与您信任的应用和用户分享错误报告。"</string>
@@ -31,9 +35,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"已成功截图。"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"无法截图。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"错误报告详细信息"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"文件名"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"标题"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"详细说明"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
index 7539755..7a35eef 100644
--- a/packages/Shell/res/values-zh-rHK/strings.xml
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"命令介面"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在產生錯誤報告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已擷取錯誤報告"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"正在新增錯誤報告詳細資訊"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"請稍候…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑動即可分享錯誤報告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"輕觸即可分享您的錯誤報告"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"錯誤報告中有來自系統各個記錄檔案的資料,包括個人和私人資料。請只與您信任的應用程式和使用者分享錯誤報告。"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"成功拍攝螢幕擷取畫面。"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"無法擷取螢幕畫面。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"錯誤報告詳情"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"檔案名稱"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"標題"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"詳細說明"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rTW/strings.xml b/packages/Shell/res/values-zh-rTW/strings.xml
index 6c2834f..ec66878 100644
--- a/packages/Shell/res/values-zh-rTW/strings.xml
+++ b/packages/Shell/res/values-zh-rTW/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"殼層"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在產生錯誤報告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已擷取錯誤報告"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"正在新增錯誤報告詳細資訊"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"請稍候…"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑動即可分享錯誤報告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"輕觸即可分享您的錯誤報告"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"錯誤報告的資料來自系統各個紀錄檔,包括個人和私密資訊。請務必只與您信任的應用程式和使用者分享錯誤報告。"</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"已成功拍攝螢幕擷取畫面。"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"無法拍攝螢幕擷取畫面。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"錯誤報告詳細資料"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"檔案名稱"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"標題"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"詳細說明"</string>
</resources>
diff --git a/packages/Shell/res/values-zu/strings.xml b/packages/Shell/res/values-zu/strings.xml
index 60592b5..c264224 100644
--- a/packages/Shell/res/values-zu/strings.xml
+++ b/packages/Shell/res/values-zu/strings.xml
@@ -19,6 +19,8 @@
<string name="app_label" msgid="3701846017049540910">"I-Shell"</string>
<string name="bugreport_in_progress_title" msgid="7409917338223386637">"Kukhiqizwa umbiko wesiphazamisi"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Umbiko wesiphazamisi uthwetshuliwe"</string>
+ <string name="bugreport_updating_title" msgid="4423539949559634214">"Ingeza imininingwane kumbiko wesiphazamisi"</string>
+ <string name="bugreport_updating_wait" msgid="3322151947853929470">"Sicela ulinde..."</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swayiphela kwesokunxele ukuze wabelane umbiko wesiphazamiso sakho"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Thinta ukuze wabelane ngombiko wakho wesiphazamisi"</string>
<string name="bugreport_confirm" msgid="5130698467795669780">"Imibiko yeziphazamisi iqukethe idatha yamafayela wokungena ahlukile wesistimu, afaka ulwazi lomuntu siqu noma lobumfihlo. Yabelana kuphela ngemibiko yeziphazamisi nezinhlelo zokusebenza nabantu obathembayo."</string>
@@ -31,9 +33,7 @@
<string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Isithombe-skrini sithathwe ngempumelelo."</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Isithombe-skrini asikwazanga ukuthathwa."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Imininingwane yombiko wesiphazamisi"</string>
- <!-- no translation found for bugreport_info_name (4414036021935139527) -->
- <skip />
- <!-- no translation found for bugreport_info_title (5599558206004371052) -->
- <skip />
+ <string name="bugreport_info_name" msgid="4414036021935139527">"Igama lefayela"</string>
+ <string name="bugreport_info_title" msgid="5599558206004371052">"Isihloko"</string>
<string name="bugreport_info_description" msgid="4117088998733546784">"Incazelo enemininingwane"</string>
</resources>
diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml
index 1459d53..d992bc3 100644
--- a/packages/Shell/res/values/strings.xml
+++ b/packages/Shell/res/values/strings.xml
@@ -21,6 +21,10 @@
<string name="bugreport_in_progress_title">Bug report is being generated</string>
<!-- Title of notification indicating a bugreport has been successfully captured. [CHAR LIMIT=50] -->
<string name="bugreport_finished_title">Bug report captured</string>
+ <!-- Title of notification indicating a bugreport is being updated before it can be shared. [CHAR LIMIT=50] -->
+ <string name="bugreport_updating_title">Adding details to the bug report</string>
+ <!-- Content notification indicating a bugreport is being updated before it can be shared, asking the user to wait [CHAR LIMIT=50] -->
+ <string name="bugreport_updating_wait">Please wait\u2026</string>
<!-- Text of notification indicating that swipe left will share the captured bugreport. [CHAR LIMIT=100] -->
<string name="bugreport_finished_text" product="watch">Swipe left to share your bug report</string>
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 874a946d..5b83796 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -464,6 +464,7 @@
+ info + ")");
return;
}
+ Log.v(TAG, "Sending 'Progress' notification for pid " + info.pid + ": " + percentText);
NotificationManager.from(mContext).notify(TAG, info.pid, notification);
}
@@ -852,7 +853,7 @@
}
/**
- * Sends a notitication indicating the bugreport has finished so use can share it.
+ * Sends a notification indicating the bugreport has finished so use can share it.
*/
private static void sendBugreportNotification(Context context, BugreportInfo info) {
final Intent shareIntent = new Intent(INTENT_BUGREPORT_SHARE);
@@ -878,10 +879,30 @@
builder.setContentInfo(info.name);
}
+ Log.v(TAG, "Sending 'Share' notification for pid " + info.pid + ": " + title);
NotificationManager.from(context).notify(TAG, info.pid, builder.build());
}
/**
+ * Sends a notification indicating the bugreport is being updated so the user can wait until it
+ * finishes - at this point there is nothing to be done other than waiting, hence it has no
+ * pending action.
+ */
+ private static void sendBugreportBeingUpdatedNotification(Context context, int pid) {
+ final String title = context.getString(R.string.bugreport_updating_title);
+ final Notification.Builder builder = new Notification.Builder(context)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
+ .setContentTitle(title)
+ .setTicker(title)
+ .setContentText(context.getString(R.string.bugreport_updating_wait))
+ .setLocalOnly(true)
+ .setColor(context.getColor(
+ com.android.internal.R.color.system_notification_accent_color));
+ Log.v(TAG, "Sending 'Updating zip' notification for pid " + pid + ": " + title);
+ NotificationManager.from(context).notify(TAG, pid, builder.build());
+ }
+
+ /**
* Sends a zipped bugreport notification.
*/
private static void sendZippedBugreportNotification(final Context context,
@@ -938,11 +959,13 @@
Log.d(TAG, "Not touching zip file since neither title nor description are set");
return;
}
+
// It's not possible to add a new entry into an existing file, so we need to create a new
// zip, copy all entries, then rename it.
+ sendBugreportBeingUpdatedNotification(mContext, info.pid); // ...and that takes time
final File dir = info.bugreportFile.getParentFile();
final File tmpZip = new File(dir, "tmp-" + info.bugreportFile.getName());
- Log.d(TAG, "Writing temporary zip file (" + tmpZip + ")");
+ Log.d(TAG, "Writing temporary zip file (" + tmpZip + ") with title and/or description");
try (ZipFile oldZip = new ZipFile(info.bugreportFile);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tmpZip))) {
diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk
index 61cad2f..e4d0fec 100644
--- a/packages/SystemUI/Android.mk
+++ b/packages/SystemUI/Android.mk
@@ -11,7 +11,8 @@
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
- android-support-v14-preference
+ android-support-v14-preference \
+ framework-protos
LOCAL_JAVA_LIBRARIES := telephony-common
diff --git a/packages/SystemUI/res/layout/notification_guts.xml b/packages/SystemUI/res/layout/notification_guts.xml
index 03451b4..e550d9c 100644
--- a/packages/SystemUI/res/layout/notification_guts.xml
+++ b/packages/SystemUI/res/layout/notification_guts.xml
@@ -99,7 +99,8 @@
android:src="@*android:drawable/ic_notification_block"
android:layout_gravity="center_vertical|start"
android:layout_width="24dp"
- android:layout_height="24dp" />
+ android:layout_height="24dp"
+ android:tint="@color/notification_guts_icon_tint"/>
<SeekBar
android:id="@+id/seekbar"
@@ -121,7 +122,8 @@
android:src="@*android:drawable/ic_notification_alert"
android:layout_gravity="center_vertical|end"
android:layout_width="24dp"
- android:layout_height="24dp"/>
+ android:layout_height="24dp"
+ android:tint="@color/notification_guts_icon_tint" />
</FrameLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index cb68c9d..2eaf988 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume en Moenie steur nie"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Aktiveer \'moenie steur nie\' met volume af"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Verlaat \'moenie steur nie\' met volume op"</string>
+ <string name="battery" msgid="7498329822413202973">"Battery"</string>
+ <string name="clock" msgid="7416090374234785905">"Horlosie"</string>
+ <string name="headset" msgid="4534219457597457353">"Kopstuk"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Oorfone is gekoppel"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kopstuk is gekoppel"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktiveer of deaktiveer ikone om op die statusbalk gewys te word."</string>
</resources>
diff --git a/packages/SystemUI/res/values-af/strings_car.xml b/packages/SystemUI/res/values-af/strings_car.xml
new file mode 100644
index 0000000..7c6f609
--- /dev/null
+++ b/packages/SystemUI/res/values-af/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Ry veilig"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Bly heeltemal bewus van bestuurtoestande en gehoorsaam toepaslike wette altyd. Rigtingaanwysings sal dalk onakkuraat, onvolledig, gevaarlik, ontoepaslik of verbode wees of behels dat administratiewe gebiede oorgesteek word. Besigheidsinligting sal dalk ook onakkuraat of onvolledig wees. Data is nie intyds nie en liggingakkuraatheid kan nie gewaarborg word nie. Moenie jou mobiele toestel hanteer of programme wat nie vir Android Auto bedoel is, gebruik terwyl jy bestuur nie."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 4d44de7..cedc061 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ድምጽ እና አትረብሽ"</string>
<string name="volume_down_silent" msgid="66962568467719591">"ድምጽ ሲቀነስ አትረብሽ አስገባ"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"ድምጽ ሲጨመር አትረብሽን ትተህ ውጣ"</string>
+ <string name="battery" msgid="7498329822413202973">"ባትሪ"</string>
+ <string name="clock" msgid="7416090374234785905">"ሰዓት"</string>
+ <string name="headset" msgid="4534219457597457353">"ጆሮ ማዳመጫ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"የጆር ማዳመጫዎች ተገናኝተዋል"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"የጆሮ ማዳመጫ ተገናኝቷል"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"አዶዎች በሁኔታ አሞሌ ላይ እንዲታዩ ወይም እንዳይታዩ ያንቁ ወይም ያሰናክሉ።"</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings_car.xml b/packages/SystemUI/res/values-am/strings_car.xml
new file mode 100644
index 0000000..8550c42
--- /dev/null
+++ b/packages/SystemUI/res/values-am/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ደህንነትዎን ጠብቀው ያሽከርክሩ"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"የመኪና አነዳድ ሁኔታዎችን በተመለከተ ሙሉ በሙሉ ግንዛቤ ይኑርዎት፣ እንዲሁም የሚመለከታቸውን ሕጎች ሁልጊዜ ያክብሩ። የሚሰጡ አቅጣጫዎች ምናልባት ትክክል ያልሆኑ፣ ያልተሟሉ፣ አደገኛ፣ አግባብ ያልሆኑ፣ የተከለከሉ ወይም አስተዳደራዊ አካባቢዎችን ማቋረጥን የሚያካትቱ ሊሆኑ ይችላሉ። በተጨማሪም የንግድ ሥራ መረጃ ትክክል ያልሆነ ወይም ያልተሟላ ሊሆን ይችላል። ውሂብ ቅጽበታዊ አይደለም፣ እና የአካባቢ ትክክለኛነት ዋስትና ሊሰጥበት አይችልም። መኪና በሚነዱበት ጊዜ የእርስዎን ተንቀሳቃሽ መሣሪያ አይነካኩ ወይም ለAndroid Auto የታለሙ መተግበሪያዎችን አይጠቀሙ።"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index f7128e4..b0c0719 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -336,8 +336,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"الأولوية \nفقط"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"التنبيهات\nفقط"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"الكل"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"الكل\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"جارٍ الشحن (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الامتلاء)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"جارٍ الشحن سريعًا (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الاكتمال)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"جارٍ الشحن ببطء (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الاكتمال)"</string>
@@ -487,14 +486,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"الشاشة الرئيسية"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"الأحدث"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"رجوع"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"إظهار خيار \"الرجاء عدم الإزعاج\" في مستوى الصوت"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"السماح بالتحكم الكامل في خيار \"الرجاء عدم الإزعاج\" ضمن مربع حوار مستوى الصوت."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"إعدادات مستوى الصوت و\"الرجاء عدم الإزعاج\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"تشغيل \"الرجاء عدم الإزعاج\" عند خفض مستوى الصوت"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"تعطيل \"الرجاء عدم الإزعاج\" عند رفع مستوى الصوت"</string>
+ <string name="battery" msgid="7498329822413202973">"البطارية"</string>
+ <string name="clock" msgid="7416090374234785905">"ساعة"</string>
+ <string name="headset" msgid="4534219457597457353">"سماعة الرأس"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"تم توصيل سماعات رأس"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"تم توصيل سماعات رأس"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"يمكنك تمكين أو تعطيل الرموز بحيث لا تظهر في شريط الحالة."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings_car.xml b/packages/SystemUI/res/values-ar/strings_car.xml
new file mode 100644
index 0000000..0f315a4
--- /dev/null
+++ b/packages/SystemUI/res/values-ar/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"القيادة بأمان"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"عليك التعرف بشكل تام على ظروف القيادة والالتزام بالقوانين السارية. ويمكن أن تكون الاتجاهات غير دقيقة أو غير مكتملة أو خطيرة أو غير مناسبة أو محظورة أو تتضمن عبور مناطق إدارية. ويمكن أن تكون معلومات الأنشطة التجارية أيضًا غير دقيقة أو غير مكتملة. ولا يتم نشر البيانات في الوقت الفعلي، كما لا يمكن ضمان دقة المواقع. ولا تتعامل مع جهازك الجوّال أو تستخدم تطبيقات ليست متوافقة مع Android Auto أثناء القيادة."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
index 71ced7c..b3aefb8 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Yalnız\nprioritet"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Yalnız\nalarmlar"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Bütün"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Bütün\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Sürətli qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Ləng qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Əsas səhifə"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Sonuncular"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Geri"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Səsdə \"narahat etməyin\" rejimini göstərin"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Səs dioloqunda \"narahat etməyin\" rejiminin tam nərarətinə icazə verin."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Səs və \"narahat etməyin\" rejimi"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Aşağı səsdə \"narahat etməyin\" rejimini daxil edin"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Yuxarı səsdə \"narahat etməyin\" rejimini daxil edin"</string>
+ <string name="battery" msgid="7498329822413202973">"Batareya"</string>
+ <string name="clock" msgid="7416090374234785905">"Saat"</string>
+ <string name="headset" msgid="4534219457597457353">"Qulaqlıq"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Qulaqlıq qoşulub"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Qulaqlıq qoşulub"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"İkonaların status panelində görünməsini aktiv və ya deaktiv edin."</string>
</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings_car.xml b/packages/SystemUI/res/values-az-rAZ/strings_car.xml
new file mode 100644
index 0000000..9ac7ce0
--- /dev/null
+++ b/packages/SystemUI/res/values-az-rAZ/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Təhlükəsiz sürün"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Yol şəraitindən tam xəbərdar olun və hər zaman tətbiq olunan qaydalara riayət edin. İstiqamətlər qeyri-dəqiq, natamam, təhlükəli, uyğun olmayan, qadağan edilmiş və ya inzibati sahələrə keçid ilə nəticələnə bilər. Biznes məlumatı da qeyri-dəqiq və ya natamam ola bilər. Data real vaxtda deyil və məkan dəqiqliyinə zəmanət verilmir. Avtomobil idarə edərkən mobil cihazınızı elinizə almayın və ya Android Avto üçün nəzərdə tutulmamış tətbiqlərdən istifadə etməyin."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index fd98abc..a4130da 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -333,8 +333,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\npriorit. prekidi"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Sve"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Svi\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (pun je za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Brzo se puni (napuniće se za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sporo se puni (napuniće se za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -484,14 +483,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Početni"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni sadržaj"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazad"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Prikaži podešavanje Ne uznemiravaj u dijalogu za jačinu zvuka"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Dozvoljava potpunu kontrolu podešavanja Ne uznemiravaj u dijalogu za jačinu zvuka."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Jačina zvuka i Ne uznemiravaj"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Uđi u režim Ne uznemiravaj kada je zvuk utišan"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Izađi iz režima Ne uznemiravaj kada je zvuk pojačan"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterija"</string>
+ <string name="clock" msgid="7416090374234785905">"Sat"</string>
+ <string name="headset" msgid="4534219457597457353">"Naglavne slušalice"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su povezane"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Naglavne slušalice su povezane"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogućite ili onemogućite prikazivanje ikona na statusnoj traci."</string>
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml b/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml
new file mode 100644
index 0000000..f45af7c
--- /dev/null
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Vozite bezbedno"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Uvek vodite računa o uslovima vožnje i uvek poštujte primenjive zakone. Uputstva mogu da budu netačna, nepotpuna, opasna, neprikladna ili zabranjena, odnosno da podrazumevaju prelazak između administrativnih oblasti. I podaci o preduzeću mogu da budu netačni ili nepotpuni. Podaci ne nastaju u realnom vremenu i ne možemo da garantujemo preciznost lokacije. Nemojte da upotrebljavate mobilni uređaj niti da koristite aplikacije koje nisu namenjene za Android Auto tokom vožnje."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index e8f7f23..6dd2fb4 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Само\nс приоритет"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Само\nбудилници"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Всички"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Всички\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарежда се (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Зарежда се бързо (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Зарежда се бавно (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Начало"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Скорошни"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показване на „Не безпокойте“ в прозореца за силата на звука"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Достъп до всички опции за управление на „Не безпокойте“ в диалоговия прозорец за силата на звука."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Сила на звука и „Не безпокойте“"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Вкл. на „Не безпокойте“ при намаляване на силата на звука"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Изкл. на „Не безпокойте“ при увеличаване на силата на звука"</string>
+ <string name="battery" msgid="7498329822413202973">"Батерия"</string>
+ <string name="clock" msgid="7416090374234785905">"Часовник"</string>
+ <string name="headset" msgid="4534219457597457353">"Слушалки"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалките (без микрофон) са свързани"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Слушалките са свързани"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Активиране или деактивиране на показването на икони в лентата на състоянието."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings_car.xml b/packages/SystemUI/res/values-bg/strings_car.xml
new file mode 100644
index 0000000..bd9fe79
--- /dev/null
+++ b/packages/SystemUI/res/values-bg/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Карайте внимателно"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Бъдете осведомени за условията при шофиране и винаги спазвайте приложимите закони. Упътванията може да са неточни, непълни, опасни, неподходящи, забранени или да включват преминаване през административни райони. Бизнес информацията може също да е неточна или непълна. Данните не са в реално време и точността на местоположението не може да се гарантира. Не работете с мобилното си устройство, нито използвайте приложения, които не са предназначени за Android Auto, докато шофирате."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index a49ab40..a836903 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"শুধুমাত্র\nঅগ্রাধিকার"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"শুধুমাত্র\nঅ্যালার্মগুলি"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"সমস্ত"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"সমস্ত\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"দ্রুত চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ধীরে ধীরে চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"হোম"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"সাম্প্রতিকগুলি"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"পিছনে"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"ভলিউমে \'বিরক্ত করবেন না\' দেখাবেন না"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ভলিউম ডায়লগে \"বিরক্ত করবেন না\" এর পূর্ণ নিয়ন্ত্রণের মঞ্জুরি দিন৷"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ভলিউম এবং \'বিরক্ত করবেন না\'"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ভলিউম কমানোর মাধ্যেমে \'বিরক্ত করবেন না\' চালু করুন"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ভলিউম বাড়ানোর মাধ্যেমে \'বিরক্ত করবেন না\' থেকে প্রস্থান করুন"</string>
+ <string name="battery" msgid="7498329822413202973">"ব্যাটারি"</string>
+ <string name="clock" msgid="7416090374234785905">"ঘড়ি"</string>
+ <string name="headset" msgid="4534219457597457353">"হেডসেট"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"হেডফোনগুলি সংযুক্ত হয়েছে"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"হেডসেট সংযুক্ত হয়েছে"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"স্থিতি দন্ডে দেখানোর জন্য আইকনগুলিকে সক্ষম বা অক্ষম করুন৷"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings_car.xml b/packages/SystemUI/res/values-bn-rBD/strings_car.xml
new file mode 100644
index 0000000..d8a8732
--- /dev/null
+++ b/packages/SystemUI/res/values-bn-rBD/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"সাবধানে চালান"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"গাড়ি চালানোর সময় সর্বদা সতর্ক থাকুন এবং প্রযোজ্য আইন মেনে চলুন৷ দিকনির্দেশ ভুল, অসম্পূর্ণ, বিপজ্জনক, অনুপযুক্ত, নিষিদ্ধ হতে পারে বা প্রশাসনিক এলাকাগুলি অতিক্রম করতে হতে পারে৷ বাণিজ্যিক তথ্য ভুল বা অসম্পূর্ণ হতে পারে৷ ডেটা প্রকৃত সময়ের নয় এবং অবস্থানের নির্ভুলতা নিশ্চিত করাও সম্ভব নয়৷ গাড়ি চালানোর সময় আপনার মোবাইল ডিভাইসটিকে বা Android Auto এর জন্য উপযুক্ত নয় এমন অ্যাপগুলিকে ব্যবহার করবেন না৷"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-bs-rBA/strings_car.xml b/packages/SystemUI/res/values-bs-rBA/strings_car.xml
new file mode 100644
index 0000000..1e95a03
--- /dev/null
+++ b/packages/SystemUI/res/values-bs-rBA/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Vozite sigurno"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Uvijek budite upoznati s uslovima za vožnju i poštujte važeće zakone. Upute za kretanje mogu biti netačne, nepotpune, opasne, neprikladne, zabranjene ili takve da obuhvataju suprotstavljene administrativne oblasti. Poslovne informacije mogu biti netačne ili nepotpune. Podaci nisu u realnom vremenu, a tačnost lokacije se ne može garantirati. U vožnji nemojte rukovati mobilnim uređajm ili koristiti aplikacije koje nisu namijenjene za Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 0fce766..51084e5 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Només\ninterr. prior."</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Només\nalarmes"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Totes"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Totes\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la càrrega)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Càrrega ràpida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Càrrega lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Inici"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recents"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Enrere"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostra el mode No molesteu al volum"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permet el control complet del mode No molesteu al quadre de diàleg de volum."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volum i mode No molesteu"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Activa el mode No molesteu abaixant el volum"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Desactiva el mode No molesteu apujant el volum"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Rellotge"</string>
+ <string name="headset" msgid="4534219457597457353">"Auriculars"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auricular connectat"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculars connectats"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activa o desactiva les icones a la barra d\'estat."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings_car.xml b/packages/SystemUI/res/values-ca/strings_car.xml
new file mode 100644
index 0000000..c5c4086
--- /dev/null
+++ b/packages/SystemUI/res/values-ca/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Condueix amb precaució"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Estigues al cas de la conducció i respecta sempre les normes de trànsit. Les indicacions poden ser inexactes, perilloses, inadequades o estar incompletes, o bé poden comportar maniobres prohibides o que creuis circumscripcions territorials. La informació de les empreses també pot ser inexacta o estar incompleta. No s\'ofereixen dades en temps real i no es pot garantir la precisió de les ubicacions. Mentre condueixes, no utilitzis el dispositiu mòbil ni cap aplicació que no estigui destinada a Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 6fff76b..491ec92 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Pouze\nprioritní"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Pouze\nbudíky"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Vše"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Všechna\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Rychlé nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Pomalé nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Plocha"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Poslední"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Zpět"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Zobrazovat panel Nerušit v dialogu Hlasitost"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Umožňuje povolit úplné ovládání režimu Nerušit v dialogu Hlasitost."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hlasitost a režim Nerušit"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Při snížení hlasitosti přejít do režimu Nerušit"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Při zvýšení hlasitosti ukončit režim Nerušit"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterie"</string>
+ <string name="clock" msgid="7416090374234785905">"Hodiny"</string>
+ <string name="headset" msgid="4534219457597457353">"Náhlavní souprava"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Sluchátka připojena"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Náhlavní souprava připojena"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Umožňuje aktivovat nebo deaktivovat zobrazení ikon na stavovém řádku."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings_car.xml b/packages/SystemUI/res/values-cs/strings_car.xml
new file mode 100644
index 0000000..d5e3324
--- /dev/null
+++ b/packages/SystemUI/res/values-cs/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Řiďte bezpečně"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Věnujte plnou pozornost řízení a dodržujte platné předpisy. Trasy mohou být nepřesné, neúplné, nebezpečné, nevhodné, zakázané nebo mohou zahrnovat překročení hranic. Informace o firmách mohou být také nepřesné nebo neúplné. Data se neaktualizují v reálném čase a přesnost polohy nelze zaručit. Mobilní zařízení ani aplikace určené pro Android Auto nepoužívejte za jízdy."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 2941927..932df2e 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kun\nprioritet"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kun\nalarmer"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Oplader (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hurtig opladning (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Langsom opladning (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Start"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Seneste"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tilbage"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Vis Forstyr ikke i Lydstyrke"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillad fuld kontrol over Forstyr ikke i dialogboksen Lydstyrke."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Lydstyrke og Forstyr ikke"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Aktivér Forstyr ikke med Lydstyrke ned"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Afslut Forstyr ikke med Lydstyrke op"</string>
+ <string name="battery" msgid="7498329822413202973">"Batteri"</string>
+ <string name="clock" msgid="7416090374234785905">"Ur"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hovedtelefoner er tilsluttet"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset er forbundet"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Slå visning af ikoner i statusbjælken til eller fra."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings_car.xml b/packages/SystemUI/res/values-da/strings_car.xml
new file mode 100644
index 0000000..6a421da
--- /dev/null
+++ b/packages/SystemUI/res/values-da/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Kør forsigtigt"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Vær opmærksom på køreforholdene, og overhold altid færdselsloven. Rutevejledningen kan være unøjagtig, ufuldstændig, farlig, upassende, forbudt eller involvere krydsning af forbudte områder. Virksomhedsoplysninger kan også være unøjagtige eller ufuldstændige. Data er ikke i realtid, og placeringers nøjagtighed kan ikke garanteres. Håndter ikke din mobilenhed, og brug ikke apps, der ikke er beregnet til Android Auto, mens du kører."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 9afa618..fcac6c8 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Nur\nwichtige"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Nur\nWecker"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Wird aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Wird schnell aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Wird langsam aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startseite"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Letzte"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Zurück"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"\"Bitte nicht stören\" bei der Lautstärkeregelung anzeigen"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Volle Kontrolle von \"Bitte nicht stören\" im kleinen Fenster zur Lautstärkeregelung erlauben."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Lautstärke und \"Bitte nicht stören\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"\"Bitte nicht stören\" bei \"Leiser\" aktivieren"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"\"Bitte nicht stören\" bei \"Lauter\" deaktivieren"</string>
+ <string name="battery" msgid="7498329822413202973">"Akku"</string>
+ <string name="clock" msgid="7416090374234785905">"Uhr"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Mit Kopfhörer verbunden"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mit Headset verbunden"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Symbole in der Statusleiste ein- bzw. ausblenden"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings_car.xml b/packages/SystemUI/res/values-de/strings_car.xml
new file mode 100644
index 0000000..5b5920e
--- /dev/null
+++ b/packages/SystemUI/res/values-de/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Sicher fahren"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Achte stets auf die Straßenverhältnisse und halte dich an die geltenden Gesetze. Routen können unter Umständen fehlerhaft, unvollständig, gefährlich, ungeeignet oder verboten sein oder das Überqueren von Verwaltungsgrenzen erfordern. Informationen zum Unternehmen können ebenfalls fehlerhaft oder unvollständig sein. Die Datenübertragung erfolgt nicht in Echtzeit und die Genauigkeit der Standortangaben kann nicht gewährleistet werden. Bediene während der Fahrt nicht dein Mobilgerät und verwende keine Apps, die du nicht über Android Auto steuern kannst."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index f128544..41c6cf3 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Μόνο\nπροτεραιότητας"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Μόνο\nειδοποιήσεις"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Όλα"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Όλες\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Γρήγορη φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Αργή φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Αρχική οθόνη"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Πρόσφατα"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Πίσω"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Εμφάνιση λειτουργίας \"Μην ενοχλείτε\" στην ένταση ήχου"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Να επιτρέπεται ο πλήρης έλεγχος της λειτουργίας \"Μην ενοχλείτε\" στο παράθυρο διαλόγου ελέγχου έντασης."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ένταση ήχου και λειτουργία \"Μην ενοχλείτε\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Ενεργοποίηση λειτουργίας \"Μην ενοχλείτε\" κατά τη μείωση της έντασης ήχου"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Απενεργοποίηση λειτουργίας \"Μην ενοχλείτε\" κατά την αύξηση της έντασης ήχου"</string>
+ <string name="battery" msgid="7498329822413202973">"Μπαταρία"</string>
+ <string name="clock" msgid="7416090374234785905">"Ρολόι"</string>
+ <string name="headset" msgid="4534219457597457353">"Ακουστικά"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Τα ακουστικά συνδέθηκαν"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Τα ακουστικά συνδέθηκαν"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ενεργοποίηση ή απενεργοποίηση εμφάνιση εικονιδίων στη γραμμή κατάστασης."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings_car.xml b/packages/SystemUI/res/values-el/strings_car.xml
new file mode 100644
index 0000000..e960713
--- /dev/null
+++ b/packages/SystemUI/res/values-el/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Οδηγείτε προσεκτικά"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Μείνετε πλήρως ενημερωμένοι για τις προϋποθέσεις οδήγησης και υπακούτε πάντα τους ισχύοντες νόμους. Οι οδηγίες μπορεί να είναι ανακριβείς, ελλιπείς, επικίνδυνες, ακατάλληλες, απαγορευμένες ή να ανήκουν σε άλλες διοικητικές περιοχές. Οι πληροφορίες επιχειρήσεων μπορεί επίσης να είναι ανακριβείς ή ελλιπείς. Τα δεδομένα δεν είναι σε πραγματικό χρόνο και η ακρίβεια των τοποθεσιών δεν είναι εγγυημένη. Μη χειρίζεστε την κινητή συσκευή σας και μη χρησιμοποιείτε εφαρμογές που δεν προορίζονται για το Android Auto ενώ οδηγείτε."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 38f3d38..a6e0a91 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string>
+ <string name="battery" msgid="7498329822413202973">"Battery"</string>
+ <string name="clock" msgid="7416090374234785905">"Clock"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings_car.xml b/packages/SystemUI/res/values-en-rAU/strings_car.xml
new file mode 100644
index 0000000..81089ba
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rAU/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Drive safely"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Stay fully aware of driving conditions and always obey applicable laws. Directions may be inaccurate, incomplete, dangerous, not suitable, prohibited or involve crossing administrative areas. Business information may also be inaccurate or incomplete. Data is not real time and location accuracy cannot be guaranteed. Do not handle your mobile device or use apps not intended for Android Auto while driving."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 38f3d38..a6e0a91 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string>
+ <string name="battery" msgid="7498329822413202973">"Battery"</string>
+ <string name="clock" msgid="7416090374234785905">"Clock"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings_car.xml b/packages/SystemUI/res/values-en-rGB/strings_car.xml
new file mode 100644
index 0000000..81089ba
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rGB/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Drive safely"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Stay fully aware of driving conditions and always obey applicable laws. Directions may be inaccurate, incomplete, dangerous, not suitable, prohibited or involve crossing administrative areas. Business information may also be inaccurate or incomplete. Data is not real time and location accuracy cannot be guaranteed. Do not handle your mobile device or use apps not intended for Android Auto while driving."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 38f3d38..a6e0a91 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string>
+ <string name="battery" msgid="7498329822413202973">"Battery"</string>
+ <string name="clock" msgid="7416090374234785905">"Clock"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings_car.xml b/packages/SystemUI/res/values-en-rIN/strings_car.xml
new file mode 100644
index 0000000..81089ba
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Drive safely"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Stay fully aware of driving conditions and always obey applicable laws. Directions may be inaccurate, incomplete, dangerous, not suitable, prohibited or involve crossing administrative areas. Business information may also be inaccurate or incomplete. Data is not real time and location accuracy cannot be guaranteed. Do not handle your mobile device or use apps not intended for Android Auto while driving."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index c521912..8a1da56 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo\nprioridad"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nalarmas"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Todo"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todo\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (faltan <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carga rápida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar la carga)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carga lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar la carga)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Pantalla principal"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recientes"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atrás"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar el panel de control de No interrumpir en el volumen"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir el control total del modo No interrumpir en el cuadro de diálogo de volumen."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumen y No interrumpir"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Activar el modo No interrumpir al bajar el volumen"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Desactivar el modo No interrumpir al subir el volumen"</string>
+ <string name="battery" msgid="7498329822413202973">"Batería"</string>
+ <string name="clock" msgid="7416090374234785905">"Reloj"</string>
+ <string name="headset" msgid="4534219457597457353">"Auriculares"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculares conectados"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculares conectados"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Habilitar o inhabilitar la visualización de los íconos en la barra de estado"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings_car.xml b/packages/SystemUI/res/values-es-rUS/strings_car.xml
new file mode 100644
index 0000000..647236a
--- /dev/null
+++ b/packages/SystemUI/res/values-es-rUS/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conducir de forma segura"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Permanece atento a la situación de conducción y cumple siempre con las leyes vigentes. Es posible que las indicaciones sean imprecisas, inadecuadas o peligrosas, que estén incompletas, que sugieran maniobras prohibidas o que impliquen atravesar áreas administrativas. La información de las empresas también puede ser imprecisa o estar incompleta. Los datos no se proporcionan en tiempo real ni se puede garantizar la precisión de las ubicaciones. No uses tu dispositivo móvil ni apps no diseñadas para Android Auto mientras conduces."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 8d98049..2926675 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumen y No molestar"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Activar No molestar al bajar el volumen"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Salir de No molestar al subir el volumen"</string>
+ <string name="battery" msgid="7498329822413202973">"Batería"</string>
+ <string name="clock" msgid="7416090374234785905">"Reloj"</string>
+ <string name="headset" msgid="4534219457597457353">"Auriculares"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculares conectados"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculares conectados"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Permite mostrar u ocultar iconos en la barra de estado"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings_car.xml b/packages/SystemUI/res/values-es/strings_car.xml
new file mode 100644
index 0000000..e19ca78
--- /dev/null
+++ b/packages/SystemUI/res/values-es/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conduce de forma segura"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Permanece atento a la conducción y respeta siempre las normas de tráfico. Las indicaciones pueden ser inexactas, incompletas, peligrosas o inadecuadas o dar lugar a maniobras prohibidas o al cruce de zonas regionales diferentes. La información sobre empresas también puede ser inexacta o estar incompleta. No se ofrecen datos en tiempo real ni se puede garantizar la exactitud de las ubicaciones. No utilices el dispositivo móvil ni aplicaciones que no estén destinadas a Android Auto mientras conduces."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index 126bc12..025d59c 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Helitugevus ja funktsioon Mitte segada"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Lülita helitugevuse vähendamisel sisse funkt. Mitte segada"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Lülita helitugevuse suurendamisel välja funkt. Mitte segada"</string>
+ <string name="battery" msgid="7498329822413202973">"Aku"</string>
+ <string name="clock" msgid="7416090374234785905">"Kell"</string>
+ <string name="headset" msgid="4534219457597457353">"Peakomplekt"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kõrvaklapid on ühendatud"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Peakomplekt on ühendatud"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Lubatakse või keelatakse ikoonide kuvamine olekuribal."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings_car.xml b/packages/SystemUI/res/values-et-rEE/strings_car.xml
new file mode 100644
index 0000000..c41385a
--- /dev/null
+++ b/packages/SystemUI/res/values-et-rEE/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Sõitke turvaliselt"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Olge teadlik sõidutingimustest ja järgige alati kohaldatavaid seadusi. Juhised võivad olla ebatäpsed, mittetäielikud, ohtlikud, sobimatud, keelatud või hõlmata kattuvaid administratiivpiirkondi. Ka ettevõtteteave võib olla ebatäpne või mittetäielik. Andmed pole reaalajas ja asukoha täpsust ei saa garanteerida. Ärge kasutage auto juhtimisel mobiilseadet ega rakendusi, mis pole mõeldud teenuse Android Auto jaoks."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index 54154ea..dc49fd1 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Lehentasunezkoak\nsoilik"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmak\nsoilik"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Guztiak"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Guztiak\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Bizkor kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mantso kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Hasierako pantaila"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Azkenak"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atzera"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Erakutsi \"Ez molestatu\" aukera bolumenaren leihoan"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Baimendu bolumenaren leihoan \"Ez molestatu\" aukera guztiz kontrolatzea."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Bolumena eta \"Ez molestatu\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Sartu \"Ez molestatu\" egoeran bolumena jaistean"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Irten \"Ez molestatu\" egoeratik bolumena igotzean"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Erlojua"</string>
+ <string name="headset" msgid="4534219457597457353">"Mikrofonodun entzungailua"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Aurikularrak konektatu dira"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mikrofonodun entzungailua konektatu da"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Gaitu edo desgaitu ikonoak egoera-barran erakusteko aukera."</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu-rES/strings_car.xml b/packages/SystemUI/res/values-eu-rES/strings_car.xml
new file mode 100644
index 0000000..c4371f7
--- /dev/null
+++ b/packages/SystemUI/res/values-eu-rES/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Gidatu zentzuz"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Egon erne errepidera begira eta gorde lege aplikagarri oro. Agian jarraibideak ez dira guztiz zehatzak, osatuak edo egokiak izango; arriskutsuak izan daitezke edo debekatuta dagoen zerbait egitea edo mugak zeharkatzea proposa diezazukete. Baliteke enpresei buruzko informazioa ere guztiz zehatza edo osatua ez izatea. Datuak ez dira une-unekoak eta ezin da bermatu kokapenaren zehaztasuna. Gidatu bitartean, ez erabili gailu mugikorrik edo Android Auto zerbitzuarekin erabiltzeko egina ez dagoen aplikaziorik."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index da13225..84d0e97 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"فقط\nاولویتدار"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"فقط\nهشدارها"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"همه"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"همه\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"در حال شارژ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"در حال شارژ سریع (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"در حال شارژ آهسته (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"صفحه اصلی"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"موارد اخیر"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"برگشت"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"نمایش «مزاحم نشوید» در میزان صدا"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"به حالت «مزاحم نشوید» اجازه داده میشود در کادر گفتگوی میزان صدا کنترل کامل داشته باشد."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"میزان صدا و «مزاحم نشوید»"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"وارد شدن به حالت «مزاحم نشوید» در میزان صدای پایین"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"خارج شدن از حالت «مزاحم نشوید» در میزان صدای بالا"</string>
+ <string name="battery" msgid="7498329822413202973">"باتری"</string>
+ <string name="clock" msgid="7416090374234785905">"ساعت"</string>
+ <string name="headset" msgid="4534219457597457353">"هدست"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"هدفون وصل شد"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"هدست وصل شد"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"فعال یا غیرفعال کردن نمایش نمادها در نوار وضعیت."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings_car.xml b/packages/SystemUI/res/values-fa/strings_car.xml
new file mode 100644
index 0000000..e8433fa
--- /dev/null
+++ b/packages/SystemUI/res/values-fa/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"با ایمنی برانید"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"کاملاً از شرایط رانندگی آگاه باشید و همیشه قوانین مربوطه را رعایت کنید. مسیرها ممکن است غیردقیق، ناقص، ناکامل، خطرناک، نامناسب، ممنوع یا مستلزم عبور از تقسیمات کشوری باشند. اطلاعات کسب و کار نیز ممکن است غیردقیق یا ناکامل باشند. دادهها بیدرنگ نیستند و دقت مکان نمیتواند تضمین شود. هنگام رانندگی دستگاه همراه را در دست نگیرید یا از برنامههایی که ویژه Android Auto نیستند استفاده نکنید."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 8e89737..35759ed 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Vain\ntärkeät"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Vain\nherätykset"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Kaikki"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Kaikki\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ladataan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kunnes täynnä)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Nopea lataus (latausaikaa jäljellä <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Hidas lataus (latausaikaa jäljellä <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Aloitusnäyttö"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Viimeaikaiset"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Takaisin"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Näytä Älä häiritse ‑valinnat äänenvoimakkuudessa"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Näytä kaikki Älä häiritse ‑tilan säädöt äänenvoimakkuusvalinnassa."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Äänenvoimakkuus ja Älä häiritse ‑tila"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Siirry Älä häiritse -tilaan, kun äänenvoimakkuutta lasketaan"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Poistu Älä häiritse -tilasta, kun äänenvoimakkuus nousee"</string>
+ <string name="battery" msgid="7498329822413202973">"Akku"</string>
+ <string name="clock" msgid="7416090374234785905">"Kello"</string>
+ <string name="headset" msgid="4534219457597457353">"Kuulokemikrofoni"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kuulokkeet liitetty"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kuulokemikrofoni liitetty"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ota tilapalkin kuvakkeet käyttöön tai poista ne käytöstä."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings_car.xml b/packages/SystemUI/res/values-fi/strings_car.xml
new file mode 100644
index 0000000..fc94b90
--- /dev/null
+++ b/packages/SystemUI/res/values-fi/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Aja varovasti"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Tarkkaile huolellisesti ajo-olosuhteita ja noudata aina voimassa olevia lakeja. Reittiohjeet saattavat olla epätarkkoja, epätäydellisiä, vaarallisia, epäsopivia, kiellettyjä tai kulkea hallintoalueiden läpi. Myös yritystiedot voivat olla epätarkkoja tai epätäydellisiä. Tietoja ei päivitetä reaaliajassa eikä sijaintien tarkkuutta taata. Älä käytä ajon aikana mobiililaitettasi tai sovelluksia, joita ei ole suunniteltu Android Autolle."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index b61a260..87e88d2 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorités\nuniquement"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tous"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tous\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours... (chargée à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charge rapide en cours... (chargé dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charge lente en cours... (chargé dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Accueil"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Récents"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Précédent"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Fonctionnalité Ne pas déranger dans boîte de dialogue volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Autoriser le contrôle de la fonctionnalité Ne pas déranger dans la boîte de dialogue de modification du volume"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume et fonctionnalité Ne pas déranger"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Activer fonctionnalité Ne pas déranger avec bouton Volume -"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Désactiver fonctionnalité Ne pas déranger avec bouton Volume +"</string>
+ <string name="battery" msgid="7498329822413202973">"Pile"</string>
+ <string name="clock" msgid="7416090374234785905">"Horloge"</string>
+ <string name="headset" msgid="4534219457597457353">"Écouteurs"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Écouteurs connectés"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Écouteurs connectés"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activer ou désactiver l\'affichage des icônes dans la barre d\'état"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings_car.xml b/packages/SystemUI/res/values-fr-rCA/strings_car.xml
new file mode 100644
index 0000000..209773b
--- /dev/null
+++ b/packages/SystemUI/res/values-fr-rCA/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conduire en toute sécurité"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Tenez compte des conditions de la route et respectez toujours les lois en vigueur. Les itinéraires peuvent être incorrects, incomplets, dangereux, inappropriés ou interdits, et ils peuvent traverser des zones administratives. Les renseignements sur les entreprises peuvent également être incorrects ou incomplets. Les données ne sont pas fournies en temps réel, et la précision de la localisation n\'est pas garantie. Ne manipulez pas votre appareil mobile et n\'utilisez pas d\'applications non conçues pour Android Auto lorsque vous conduisez."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 3d02297..99e9d4f 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorité\nuniquement"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Toujours"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Toutes\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charge rapide… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charge lente… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Accueil"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Récents"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Précédent"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Fonctionnalité Ne pas déranger dans boîte de dialogue volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Autoriser le contrôle de la fonctionnalité Ne pas déranger dans la boîte de dialogue de modification du volume"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume et fonctionnalité Ne pas déranger"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Activer fonctionnalité Ne pas déranger via le bouton Volume -"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Désactiver fonctionnalité Ne pas déranger via bouton Volume +"</string>
+ <string name="battery" msgid="7498329822413202973">"Batterie"</string>
+ <string name="clock" msgid="7416090374234785905">"Horloge"</string>
+ <string name="headset" msgid="4534219457597457353">"Casque"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Casque connecté"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Casque connecté"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activer ou désactiver l\'affichage des icônes dans la barre d\'état"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings_car.xml b/packages/SystemUI/res/values-fr/strings_car.xml
new file mode 100644
index 0000000..3d261d9
--- /dev/null
+++ b/packages/SystemUI/res/values-fr/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Soyez prudent sur la route"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Tenez compte des conditions de conduite et respectez toujours les lois en vigueur. Les itinéraires peuvent être incorrects, incomplets, dangereux, inappropriés ou interdits, et traverser des zones administratives. Les informations sur les établissements peuvent également être incorrectes ou incomplètes. Les données ne sont pas fournies en temps réel, et la précision de la localisation n\'est pas garantie. Ne manipulez pas votre appareil mobile et n\'utilisez pas d\'applications non conçues pour Android Auto lorsque vous conduisez."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index b69219b..b27b56c 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Só\nprioridade"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Só\nalarmas"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Todas"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para finalizar a carga)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Cargando rápido (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para rematar a carga)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Cargando lento (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para rematar a carga)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Inicio"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Volver"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar o modo Non molestar no cadro de diálogo de volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permite o control completo do modo Non molestar no cadro de diálogo de volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e modo Non molestar"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Activar o modo Non molestar ao baixar o volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Desactivar o modo Non molestar ao subir o volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Batería"</string>
+ <string name="clock" msgid="7416090374234785905">"Reloxo"</string>
+ <string name="headset" msgid="4534219457597457353">"Auriculares"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Conectáronse os auriculares"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Conectáronse os auriculares"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activa ou desactiva a visualización das iconas na barra de estado."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl-rES/strings_car.xml b/packages/SystemUI/res/values-gl-rES/strings_car.xml
new file mode 100644
index 0000000..043f5d8
--- /dev/null
+++ b/packages/SystemUI/res/values-gl-rES/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conduce de forma segura"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Ten moi en conta as condicións de condución e respecta sempre as leis aplicables. É posible que as indicacións sexan imprecisas, incompletas, perigosas, inadecuadas, estean prohibidas ou que impliquen atravesar áreas administrativas. A información de empresa tamén pode ser imprecisa ou estar incompleta. Os datos non se proporcionan en tempo real e non se garante a precisión da localización. Non manipules o teu dispositivo móbil nin utilices aplicacións que non estean deseñadas para Android Auto mentres conduces."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 1211e7b..6b317bc 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ફક્ત\nપ્રાધાન્યતા"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ફક્ત\nએલાર્મ્સ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"તમામ"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"બધી\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ચાર્જ થઈ રહ્યું છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ઝડપથી ચાર્જિંગ થઇ રહી છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ધીમેથી ચાર્જિંગ થઇ રહી છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"હોમ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"તાજેતરના"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"પાછળ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"વૉલ્યૂમમાં ખલેલ પાડશો નહીં બતાવો"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"વૉલ્યૂમ સંવાદમાં ખલેલ પાડશો નહીંના સંપૂર્ણ નિયંત્રણની મંજૂરી આપો."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"વૉલ્યૂમ અને ખલેલ પાડશો નહીં"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"વૉલ્યૂમ ઘટાડવા પર ખલેલ પાડશો નહીંમાં દાખલ થાઓ"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"વૉલ્યૂમ વધારવા પર ખલેલ પાડશો નહીંમાંથી બહાર નિકળો"</string>
+ <string name="battery" msgid="7498329822413202973">"બૅટરી"</string>
+ <string name="clock" msgid="7416090374234785905">"ઘડિયાળ"</string>
+ <string name="headset" msgid="4534219457597457353">"હેડસેટ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"હેડફોન કનેક્ટ કર્યાં"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"હેડસેટ કનેક્ટ કર્યો"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"સ્થિતિ બારમાં બતાવવામાં આવતા આઇકન્સને સક્ષમ અથવા અક્ષમ કરો."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings_car.xml b/packages/SystemUI/res/values-gu-rIN/strings_car.xml
new file mode 100644
index 0000000..b22b688
--- /dev/null
+++ b/packages/SystemUI/res/values-gu-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"સુરક્ષિત રીતે વાહન ચલાવો"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ડ્રાઇવિંગ સ્થિતિઓથી સંપૂર્ણપણે વાકેફ રહો અને હંમેશા લાગુ કાયદાઓનું પાલન કરો. દિશા નિર્દેશો અચોક્કસ, અપૂર્ણ, જોખમમકારક, બિન અનુકૂળ, પ્રતિબંધિત અથવા વહીવટી વિસ્તારોને ઓળંગવાનું સમાવતા હોઇ શકે છે. વ્યવસાય માહિતી પણ અચોક્કસ અથવા અપૂર્ણ હોઇ શકે છે. ડેટા રિઅલ-ટાઇમ નથી અને સ્થાન ચોકસાઈની ગેરંટી આપી શકતાં નથી. ડ્રાઇવિંગ કરતી વખતે Android Auto માટે તમારું મોબાઇલ સાધન હેન્ડલ કરવું અથવા ઍપ્લિકેશનનો ઉપયોગ કરવાનું કોઇ પ્રયોજન નથી."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 7e70dee..d208221 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"वॉल्यूम और परेशान न करें"</string>
<string name="volume_down_silent" msgid="66962568467719591">"वॉल्यूम कम करें पर परेशान न करें डालें"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"वॉल्यूम बढ़ाएं पर परेशान न करें से बाहर निकलें"</string>
+ <string name="battery" msgid="7498329822413202973">"बैटरी"</string>
+ <string name="clock" msgid="7416090374234785905">"घड़ी"</string>
+ <string name="headset" msgid="4534219457597457353">"हैडसेट"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफ़ोन कनेक्ट किए गए"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हैडसेट कनेक्ट किया गया"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"आइकन को स्थिति बार में दिखाए जाने से सक्षम या अक्षम करें."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings_car.xml b/packages/SystemUI/res/values-hi/strings_car.xml
new file mode 100644
index 0000000..a643bd8
--- /dev/null
+++ b/packages/SystemUI/res/values-hi/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"सुरक्षित ढंग से गाड़ी चलाएं"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"गाड़ी चलाने की स्थितियों के प्रति पूरी तरह से सतर्क रहें और हमेशा लागू कानूनों का पालन करें. दिशाएं गलत, अपूर्ण, खतरनाक, निषिद्ध हो सकती हैं या उनमें प्रशासनिक क्षेत्रों को पार करना शामिल हो सकता है. व्यावसायिक जानकारी भी गलत या अपूर्ण हो सकती है. डेटा रीयल-टाइम नहीं है और स्थान सटीकता की गारंटी नहीं दी जा सकती. गाड़ी चलाते समय अपने मोबाइल डिवाइस या फ़ोन या Android Auto के लिए अभिप्रेत न किए गए ऐप्स का उपयोग ना करें."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 23cb96b..fbc8094 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -333,8 +333,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprioritetno"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Sve"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Svi\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Brzo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sporo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string>
@@ -484,14 +483,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Početni zaslon"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Najnovije"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Natrag"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Prikaži \"Ne uznemiravaj\" u glasnoći"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Dopušta potpunu kontrolu nad načinom \"Ne uznemiravaj\" u dijaloškom okviru glasnoće."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Glasnoća i Ne uznemiravaj"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Pokreni \"Ne uznemiravaj\" kada je zvuk stišan"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Zaustavi \"Ne uznemiravaj\" kada je zvuk pojačan"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterija"</string>
+ <string name="clock" msgid="7416090374234785905">"Sat"</string>
+ <string name="headset" msgid="4534219457597457353">"Slušalice"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su povezane"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalice su povezane"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogućuje ili onemogućuje prikazivanje ikona na traci statusa."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings_car.xml b/packages/SystemUI/res/values-hr/strings_car.xml
new file mode 100644
index 0000000..034bd71d
--- /dev/null
+++ b/packages/SystemUI/res/values-hr/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Vozite sigurno"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Pažljivo pratite promet i uvijek se pridržavajte primjenjivih zakona. Upute mogu biti neprecizne, nepotpune, opasne, neprikladne, zabranjene ili mogu uključivati prelazak administrativnih granica. Podaci o tvrtkama također mogu biti neprecizni i nepotpuni. Podaci nisu u stvarnom vremenu i preciznost lokacije nije zajamčena. Tijekom vožnje ne rukujte mobilnim uređajem i ne upotrebljavajte aplikacije koje nisu namijenjene za Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 84454f6..fedbe86 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hangvezérlő és „Ne zavarjanak” funkció"</string>
<string name="volume_down_silent" msgid="66962568467719591">"„Ne zavarjanak” aktiválása hangerőcsökkentéskor"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"„Ne zavarjanak” deaktiválása hangerőnöveléskor"</string>
+ <string name="battery" msgid="7498329822413202973">"Akkumulátor"</string>
+ <string name="clock" msgid="7416090374234785905">"Óra"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fejhallgató csatlakoztatva"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset csatlakoztatva"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ikonok megjelenítése és elrejtése az állapotsoron."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings_car.xml b/packages/SystemUI/res/values-hu/strings_car.xml
new file mode 100644
index 0000000..688d88b
--- /dev/null
+++ b/packages/SystemUI/res/values-hu/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Vezessen óvatosan"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Mindig legyen teljes mértékben tisztában a vezetési körülményekkel, és a vonatkozó törvényeket tartsa be! Az útvonaltervek pontatlanok, hiányosak, veszélyesek, nem megfelelők vagy tiltottak lehetnek, illetve a közforgalom számára nem használható utakat érinthetnek. Az üzleti információk is pontatlanok vagy hiányosak lehetnek. Az adatok nem valós idejűek, ezért nem garantálhatjuk a helyadatok pontosságát. Vezetés közben ne kezelje mobileszközét, illetve ne használjon olyan alkalmazásokat az Android Auto rendszerrel, amelyeket nem ahhoz terveztek."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index 89045e1..57bd4b0 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Միայն\nկարևորները"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Միայն\nզարթուցիչ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Բոլորը"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Բոլորը\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> մինչև լրիվ լիցքավորումը)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Արագ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Դանդաղ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Գլխավոր էջ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Վերջինները"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Հետ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ցույց տալ Չխանգարել գործառույթը ձայնի կառավարման պատուհանում"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Թույլատրել Չխանգարել գործառույթի ամբողջական վերահսկումը ձայնի կառավարման պատուհանում:"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ձայնի ուժգնություն և Չխանգարել գործառույթ"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Մտնել Չխանգարել գործառույթ ձայնի նվազեցման կոճակը սեղմելիս"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Ելնել Չխանգարել գործառույթից ձայնի ավելացման կոճակը սեղմելիս"</string>
+ <string name="battery" msgid="7498329822413202973">"Մարտկոց"</string>
+ <string name="clock" msgid="7416090374234785905">"Ժամացույց"</string>
+ <string name="headset" msgid="4534219457597457353">"Ականջակալ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Ականջակալը կապակցված է"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ականջակալը կապակցված է"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Միացնել կամ անջատել պատկերակների ցուցադրումը կարգավիճակի գոտում:"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings_car.xml b/packages/SystemUI/res/values-hy-rAM/strings_car.xml
new file mode 100644
index 0000000..4f214f7
--- /dev/null
+++ b/packages/SystemUI/res/values-hy-rAM/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Վարեք ապահով"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Երթևեկության պայմաններին միշտ լավատեղյակ եղեք և կատարեք համապատասխան օրենքների պահանջները: Երթուղիները կարող են լինել սխալ, կիսատ, վտանգավոր, ոչ պատշաճ, արգելված կամ կարող են անցնել վարչական միավորների միջով: Բիզնես տվյալները նույնպես կարող են լինել սխալ կամ կիսատ: Տվյալներն իրական ժամանակում չեն թարմացվում, իսկ տեղադրության ճշգրտությունը չի կարող երաշխավորվել: Մեքենա վարելիս մի օգտագործեք ձեր շարժական սարքը, ինչպես նաև Android Auto-ի համար չնախատեսված հավելվածները:"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index b7ac86d..ae60ed6 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Hanya\nprioritas"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Hanya\nalarm"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Semua\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengisi daya (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mengisi daya dengan cepat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mengisi daya dengan lambat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Layar Utama"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Terbaru"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Kembali"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Tampilkan mode jangan ganggu di volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Izinkan kontrol penuh dari mode jangan mengganggu di dialog volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume dan mode Jangan ganggu"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Masukkan mode jangan ganggu di tombol kecilkan volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Keluar dari mode jangan ganggu di tombol keraskan volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterai"</string>
+ <string name="clock" msgid="7416090374234785905">"Jam"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphone terhubung"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset terhubung"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktifkan atau nonaktifkan ikon yang ditampilkan di bilah status."</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings_car.xml b/packages/SystemUI/res/values-in/strings_car.xml
new file mode 100644
index 0000000..cc23ecf
--- /dev/null
+++ b/packages/SystemUI/res/values-in/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Hati-hati saat berkendara"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Tetap perhatikan keadaan saat mengemudi dan selalu patuhi peraturan yang berlaku. Petunjuk arah mungkin tidak akurat, tidak lengkap, berbahaya, tidak cocok, terlarang, atau dapat melewati wilayah administratif. Informasi bisnis juga mungkin tidak akurat atau tidak lengkap. Data tidak dalam waktu nyata dan keakuratan lokasi tidak dijamin. Jangan menggunakan perangkat seluler atau aplikasi yang tidak berkaitan dengan Android Auto saat mengemudi."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index cb2a3bd..0d2518e 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Aðeins\nforgangur"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Aðeins\nvekjarar"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Allar"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Allar\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Í hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Í hraðri hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Í hægri hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Heim"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nýlegt"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Til baka"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Sýna „Ónáðið ekki“ í hljóðstyrksvali"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Leyfa fulla stjórn á stillingunni „Ónáðið ekki“ í hljóðstyrksglugganum."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hljóðstyrkur og „Ónáðið ekki“"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Kveikja á „Ónáðið ekki“ með því að lækka"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Slökkva á „Ónáðið ekki“ með því að hækka"</string>
+ <string name="battery" msgid="7498329822413202973">"Rafhlaða"</string>
+ <string name="clock" msgid="7416090374234785905">"Klukka"</string>
+ <string name="headset" msgid="4534219457597457353">"Höfuðtól"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Heyrnartól tengd"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Höfuðtól tengt"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Birtu eða feldu myndtákn í stöðustikunni."</string>
</resources>
diff --git a/packages/SystemUI/res/values-is-rIS/strings_car.xml b/packages/SystemUI/res/values-is-rIS/strings_car.xml
new file mode 100644
index 0000000..65117be
--- /dev/null
+++ b/packages/SystemUI/res/values-is-rIS/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Aktu varlega"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Vertu vakandi fyrir akstursskilyrðum hverju sinni og farðu ævinlega eftir gildandi lögum. Leiðarlýsing kann að vera ónákvæm, ófullkomin, ekki við hæfi, bönnuð eða fela í sér ferðir um opinber svæði. Upplýsingar um fyrirtæki kunna einnig að vera ónákvæmar eða ófullkomnar. Gögn eru ekki í rauntíma og ekki er hægt að tryggja nákvæmni staðsetningarupplýsinga. Ekki handleika fartækið þitt meðan á akstri stendur eða nota forrit sem ekki eru hugsuð fyrir Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 998230d..6ca9693 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo con\npriorità"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nsveglie"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tutte"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tutte\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"In carica (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Ricarica veloce (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Ricarica lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recenti"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Indietro"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostra Non disturbare nella finestra del volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Consenti il controllo totale della funzione Non disturbare nella finestra di dialogo del volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e Non disturbare"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Attiva Non disturbare all\'abbassamento del volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Disattiva Non disturbare all\'aumento del volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Batteria"</string>
+ <string name="clock" msgid="7416090374234785905">"Orologio"</string>
+ <string name="headset" msgid="4534219457597457353">"Auricolare"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Cuffie collegate"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auricolare collegato"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Consente di attivare o disattivare la visualizzazione delle icone nella barra di stato."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings_car.xml b/packages/SystemUI/res/values-it/strings_car.xml
new file mode 100644
index 0000000..ae26c9e
--- /dev/null
+++ b/packages/SystemUI/res/values-it/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Guida in modo sicuro"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"È necessario essere sempre pienamente coscienti delle condizioni di guida e rispettare le leggi vigenti. Le indicazioni stradali potrebbero essere imprecise, incomplete, pericolose, non adatte, vietate o implicare l\'attraversamento di confini. Anche le informazioni sulle attività commerciali potrebbero essere imprecise o incomplete. I dati non vengono forniti in tempo reale e non è possibile garantire la precisione della geolocalizzazione. Non maneggiare il dispositivo mobile e non utilizzare app non progettate per Android Auto durante la guida."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index af5edb4..1fd5248 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"התראות בעדיפות\nבלבד"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"התראות\nבלבד"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"הכל"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"הכל\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"טוען (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד לסיום)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"בטעינה מהירה (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד למילוי)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"בטעינה איטית (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד למילוי)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"דף הבית"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"אחרונים"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"הקודם"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"הצג את החלונית \'נא לא להפריע\' בעוצמת הקול"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"אפשר שליטה מלאה בחלונית \'נא לא להפריע\' בתיבת הדו-שיח של עוצמת הקול."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"עוצמת הקול והאפשרות \'נא לא להפריע\'"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"היכנס לאפשרות \'נא לא להפריע\' בהחלשת עוצמת הקול"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"צא מהאפשרות \'נא לא להפריע\' בהגברת עוצמת הקול"</string>
+ <string name="battery" msgid="7498329822413202973">"סוללה"</string>
+ <string name="clock" msgid="7416090374234785905">"שעון"</string>
+ <string name="headset" msgid="4534219457597457353">"אוזניות"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"אוזניות מחוברות"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"אוזניות מחוברות"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"הפעלה או השבתה של סמלים המוצגים בשורת הסטטוס."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings_car.xml b/packages/SystemUI/res/values-iw/strings_car.xml
new file mode 100644
index 0000000..8d62258
--- /dev/null
+++ b/packages/SystemUI/res/values-iw/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"נסיעה בטוחה"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"עליך להיות מודע לתנאי הנהיגה באופן מלא, ולציית תמיד לדינים החלים. ייתכן שהמסלול אינו מדויק, לא שלם, מסוכן, לא מתאים, אסור למעבר או כרוך בחציית אזורים מנהליים. ייתכן שגם מידע עסקי לא יהיה מדויק או שלם. הנתונים אינם מדווחים בזמן אמת ולא ניתן להבטיח דיוק במיקום. אל תתעסק במכשיר הנייד שלך ואל תשתמש באפליקציות שאינן מיועדות ל-Android Auto בזמן הנהיגה."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 5f448bf..b6a1386 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"重要な\n通知のみ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"アラーム\nのみ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"すべて"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"すべて\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中(フル充電まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"急速充電中(完了まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"低速充電中(完了まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ホーム"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"戻る"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"音量内に [通知を非表示] を表示"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"音量ダイアログでの [通知を非表示] の管理を許可します。"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量と [通知を非表示]"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"音量下げボタンで [通知を非表示] を ON にする"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンで [通知を非表示] を OFF にする"</string>
+ <string name="battery" msgid="7498329822413202973">"電池"</string>
+ <string name="clock" msgid="7416090374234785905">"時計"</string>
+ <string name="headset" msgid="4534219457597457353">"ヘッドセット"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ヘッドホンを接続しました"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ヘッドセットを接続しました"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ステータスバーでのアイコンの表示を有効または無効にします。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings_car.xml b/packages/SystemUI/res/values-ja/strings_car.xml
new file mode 100644
index 0000000..667de81
--- /dev/null
+++ b/packages/SystemUI/res/values-ja/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"安全運転を心がけましょう"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"道路状況に十分気を配り、適用される法律を遵守してください。経路は、不正確、不完全、危険、不適切である場合や、通行が禁止されている、管理区域を通行する必要があるなどの場合があります。ビジネス情報も不正確または不完全である可能性があります。データはリアルタイムではなく、場所の正確性は保証されません。運転中はモバイル端末を手に持って操作したり、Android Auto とは無関係のアプリを使用したりしないでください。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index 38fd4b3..bf4586ee 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"მხოლოდ\nპრიორიტეტულები"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"მხოლოდ\nგაფრთხილებები"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"ყველა"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ყველა\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>-ის შეცვლა დასრულებამდე)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"იტენება სწრაფად (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> სრულ დატენვამდე)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"იტენება ნელა (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> სრულ დატენვამდე)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"მთავარი"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ბოლოს გამოყენებული"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"უკან"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"ხმის დიალოგში „არ შემაწუხოთ“ რეჟიმის ჩვენება"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ხმის დიალოგში „არ შემაწუხოთ“ რეჟიმის სრული კონტროლის დაშვება."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ხმა და „არ შემაწუხოთ“"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ხმის დაწევისას „არ შემაწუხოთ“ რეჟიმზე გადასვლა"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ხმის აწევისას „არ შემაწუხოთ“ რეჟიმიდან გამოსვლა"</string>
+ <string name="battery" msgid="7498329822413202973">"ბატარეა"</string>
+ <string name="clock" msgid="7416090374234785905">"საათი"</string>
+ <string name="headset" msgid="4534219457597457353">"ყურსაცვამი"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ყურსასმენები დაკავშირებულია"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ყურსაცვამი დაკავშირებულია"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"სტატუსის ზოლში ხატულების ჩვენების ჩართვა ან გათიშვა."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings_car.xml b/packages/SystemUI/res/values-ka-rGE/strings_car.xml
new file mode 100644
index 0000000..c8e17dd
--- /dev/null
+++ b/packages/SystemUI/res/values-ka-rGE/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"უსაფრთხოდ მართვის წესები"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ყოველთვის გულდასმით გაეცანით მდგომარეობას გზებზე და დაიცავით მოქმედი კანონები. შეთავაზებული მიმართულებები შეიძლება იყოს უზუსტო, არასრული, სახიფათო, შეუფერებელი, აკრძალული, ან ადმინისტრაციული ერთეულების გადაკვეთას გულისხმობდეს. ბიზნეს-ინფორმაცია შეიძლება ასევე იყოს უზუსტო ან არასრული. მონაცემების განახლება რეალური დროის რეჟიმში არ ხდება და შესაბამისად, მდებარეობის სიზუსტე გარანტირებული ვერ იქნება. ავტომობილის მართვისას ნუ შეეცდებით თქვენი მობილური მოწყობილობით მანიპულირებას, ან ისეთი აპების გამოყენებას, რომლებიც Android Auto-სთვის შექმნილი არ არის."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index f1d96b2..41ac331 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Тек\nбасымдық"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Тек\nдабылдар"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Барлығы"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Барлығы\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Жылдам зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Баяу зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Негізгі бет"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Жақындағылар"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Артқа"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Дыбыс деңгейінде \"Мазаламау\" режимін көрсету"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дыбыс деңгейі диалогтық терезесінде \"Мазаламау\" режимін толық басқаруға рұқсат ету."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Дыбыс деңгейі және \"Мазаламау\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Дыбыс деңгейін төмендеткенде \"Мазаламау\" режиміне кіру"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Дыбыс деңгейін көтергенде \"Мазаламау\" режимінен шығу"</string>
+ <string name="battery" msgid="7498329822413202973">"Батарея"</string>
+ <string name="clock" msgid="7416090374234785905">"Сағат"</string>
+ <string name="headset" msgid="4534219457597457353">"Құлақаспап жинағы"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Құлақаспап қосылды"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Құлақаспап жинағы қосылды"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Белгішелердің күй жолағында көрсетілуін қосу немесе өшіру"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings_car.xml b/packages/SystemUI/res/values-kk-rKZ/strings_car.xml
new file mode 100644
index 0000000..056b75c
--- /dev/null
+++ b/packages/SystemUI/res/values-kk-rKZ/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Қауіпсіз жүргізу"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Жүргізу жағдайларын толығымен ұғыныңыз және тиісті заңдарды әрқашан сақтаңыз. Бағыттар дәл емес, толық емес, қауіпті, жарамсыз, тыйым салынған болуы немесе әкімшілік аумақтарды қиып өтуі мүмкін. Іскери ақпарат та дәл емес немесе толық емес болуы мүмкін. Деректер нақты уақыттағы деректер емес және орын дәлдігіне кепілдік берілмейді. Жүргізу кезінде мобильді құрылғыңызды ұстамаңыз немесе Android Auto қолданбасына арналмаған қолданбаларды пайдаланбаңыз."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 7f5b0d8..3fce8fa 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"អាទិភាព\nប៉ុណ្ណោះ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"សំឡេងរោទ៍\nប៉ុណ្ណោះ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"ទាំងអស់"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ទាំងអស់\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"កំពុងបញ្ចូលថ្ម (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ថ្មកំពុងសាកលឿន (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ថ្មកំពុងសាកយឺតៗ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ដើម"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ថ្មីៗ"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ថយក្រោយ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"បង្ហាញមុខងារកុំរំខាននៅក្នុងកម្រិតសំឡេង"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"អនុញ្ញាតឲ្យមានការគ្រប់គ្រងពេញលេញចំពោះមុខងារកុំរំខាននៅក្នុងប្រអប់កម្រិតសំឡេង។"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"កម្រិតសំឡេង និងមុនងារកុំរំខាន"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ចូលមុខងារកុំរំខាននៅពេលបន្ថយសំឡេង"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ចាកចេញពីមុខងារកុំរំខាននៅពេលបង្កើនសំឡេង"</string>
+ <string name="battery" msgid="7498329822413202973">"ថ្ម"</string>
+ <string name="clock" msgid="7416090374234785905">"នាឡិកា"</string>
+ <string name="headset" msgid="4534219457597457353">"កាស"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"បានភ្ជាប់កាស"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"បានភ្ជាប់កាស"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"បើក ឬបិទដំណើរការបង្ហាញរូបតំណាងនៅលើរបារស្ថានភាព"</string>
</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings_car.xml b/packages/SystemUI/res/values-km-rKH/strings_car.xml
new file mode 100644
index 0000000..9648a5fb
--- /dev/null
+++ b/packages/SystemUI/res/values-km-rKH/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"បើកបរដោយសុវត្ថិភាព"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ត្រូវមានការគ្រប់គ្រងពេញលេញលើស្ថានភាពបើកបរ និងគោរពច្បាប់ដែលត្រូវអនុវត្តជានិច្ច។ ទិសដៅអាចនឹងមិនមានភាពសុក្រិត មិនពេញលេញ គ្រោះថ្នាក់ មិនសមស្រប ឬពាក់ព័ន្ធនឹងការឆ្លងកាត់តំបន់រដ្ឋបាល។ ព័ត៌មានផ្នែកអាជីវកម្មក៏អាចនឹងមិនមានភាពសុក្រិត ឬមិនពេញលេញផងដែរ។ ទិន្នន័យគឺមិនមែនបញ្ជូនបន្តផ្ទាល់នោះទេ ហើយភាពសុក្រិតនៃទីតាំងក៏មិនអាចធានាបានផងដែរ។ កុំកាន់ឧបករណ៍ចល័តរបស់អ្នក ឬប្រើកម្មវិធីដែលមិនមែនសម្រាប់ Android Auto ខណៈពេលកំពុងបើកបរ។"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index e238e53..9c48579 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ಆದ್ಯತೆ\nಮಾತ್ರ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ಅಲಾರಮ್ಗಳು\nಮಾತ್ರ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"ಎಲ್ಲ"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ಎಲ್ಲಾ\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ( ಪೂರ್ತಿ ಆಗುವವರೆಗೆ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ವೇಗವಾಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ (ಪೂರ್ಣಗೊಳ್ಳಲು <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ನಿಧಾನ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ (ಪೂರ್ಣಗೊಳ್ಳಲು <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ಮುಖಪುಟ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ಇತ್ತೀಚಿನವುಗಳು"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ಹಿಂದೆ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"ವಾಲ್ಯೂಮ್ನಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\" ಅನ್ನು ತೋರಿಸಿ"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ವಾಲ್ಯೂಮ್ ಸಂವಾದದಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\"ಯ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಅನುಮತಿಸಿ."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ವಾಲ್ಯೂಮ್ ಮತ್ತು ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ವಾಲ್ಯೂಮ್ ಕಡಿಮೆಯಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\" ನಮೂದಿಸಿ"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚಳದಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\"ಯನ್ನು ತೊರೆಯಿರಿ"</string>
+ <string name="battery" msgid="7498329822413202973">"ಬ್ಯಾಟರಿ"</string>
+ <string name="clock" msgid="7416090374234785905">"ಗಡಿಯಾರ"</string>
+ <string name="headset" msgid="4534219457597457353">"ಹೆಡ್ಸೆಟ್"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ಹೆಡ್ಫೋನ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ಹೆಡ್ಸೆಟ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಐಕಾನ್ಗಳು ತೋರಿಸುವುದನ್ನು ಸಕ್ರಿಯ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings_car.xml b/packages/SystemUI/res/values-kn-rIN/strings_car.xml
new file mode 100644
index 0000000..e8e99c4
--- /dev/null
+++ b/packages/SystemUI/res/values-kn-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ಸುರಕ್ಷಿತವಾಗಿ ಚಾಲನೆ ಮಾಡಿ"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ಚಾಲನೆ ಸ್ಥಿತಿಗಳ ಕುರಿತು ಸಂಪೂರ್ಣವಾಗಿ ತಿಳಿದುಕೊಳ್ಳಿ ಮತ್ತು ಅನ್ವಯವಾಗುವ ಕಾನೂನುಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಸರಿಸಿ. ದಿಕ್ಕುಗಳು ಸರಿಯಾಗಿ ಇಲ್ಲದಿರಬಹುದು, ಅಪೂರ್ಣವಾಗಿರಬಹುದು, ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು, ಸೂಕ್ತವಾಗಿಲ್ಲದಿರಬಹುದು, ನಿಷೇಧಿಸಿರಬಹುದು ಅಥವಾ ನಿರ್ವಹಣೆ ಪ್ರದೇಶಗಳ ಮೂಲಕ ಹಾದು ಹೋಗಬೇಕಾಗಬಹುದು. ವ್ಯಾಪಾರ ಮಾಹಿತಿಯು ಸಹ ತಪ್ಪಾಗಿರಬಹುದು ಅಥವಾ ಅಪೂರ್ಣವಾಗಿರಬಹುದು. ಡೇಟಾ ನೈಜ ಸಮಯದ್ದಾಗಿರದಿರಬಹುದು ಮತ್ತು ಸ್ಥಳ ನಿಖರತೆಗೆ ಖಾತ್ರಿ ನೀಡಲಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮ ಮೊಬೈಲ್ ಸಾಧನವನ್ನು ನಿರ್ವಹಿಸಬೇಡಿ ಅಥವಾ ಚಾಲನೆ ಮಾಡುತ್ತಿರುವಾಗ Android Auto ಗೆ ಅಲ್ಲದಿರುವ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬಳಸಬೇಡಿ."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 725bd18..f22e903 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"중요 알림만\n허용"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"알람만\n"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"모두 수신"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"모두\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"고속 충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"저속 충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"홈"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"최근"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"뒤로"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"볼륨에 알림 일시중지 표시"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"볼륨 대화상자에서 알림 일시중지에 대한 전체 컨트롤을 허용합니다."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"볼륨 및 알림 일시중지"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"볼륨 작게 시 알림 일시중지 사용"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"볼륨 크게 시 알림 일시중지 종료"</string>
+ <string name="battery" msgid="7498329822413202973">"배터리"</string>
+ <string name="clock" msgid="7416090374234785905">"시계"</string>
+ <string name="headset" msgid="4534219457597457353">"헤드셋"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"헤드폰 연결됨"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"헤드셋 연결됨"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"아이콘이 상태 표시줄에 표시되도록 사용 설정 또는 중지합니다."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings_car.xml b/packages/SystemUI/res/values-ko/strings_car.xml
new file mode 100644
index 0000000..e18e587
--- /dev/null
+++ b/packages/SystemUI/res/values-ko/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"안전 운전"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"도로 상황에 주의를 기울이고 관련 법규를 항상 준수하세요. 길찾기는 부정확하거나 불완전하거나 위험하거나 부적당하거나 금지되거나 여러 행정구역에 걸친 지역을 지나도록 안내할 수 있습니다. 비즈니스 정보 또한 부정확하거나 불완전할 수 있습니다. 데이터는 실시간이 아니며 위치의 정확도를 보증할 수 없습니다. 운전 중에 휴대기기를 조작하거나 Android Auto가 지원되지 않는 앱을 사용해서는 안 됩니다."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index 539cc7e..2718417 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Артыкчылыктуу\nгана"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ойготкучтар\nгана"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Бардыгы"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Бардык\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Кубатталууда (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> толгонго чейин)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Тез кубатталууда (толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> калды)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Жай кубатталууда (толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> калды)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Башкы бет"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Акыркылар"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Артка"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"\"Тынчымды алба\" режимин үн көзөмөлдөгүчүндө көрсөтүү"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Үндү катуулатып/акырындатуу диалогунда \"Тынчымды алба\" режимин толук көзөмөлдөөгө уруксат берүү."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Үн көзөмөлдөгүчү жана \"Тынчымды алба\" режими"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Үн акырындатылганда \"Тынчымды алба\" режимине кирүү"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Үн катуулатылганда \"Тынчымды алба\" режиминен чыгуу"</string>
+ <string name="battery" msgid="7498329822413202973">"Батарея"</string>
+ <string name="clock" msgid="7416090374234785905">"Саат"</string>
+ <string name="headset" msgid="4534219457597457353">"Гарнитура"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Гарнитуралар туташкан"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнитура туташты"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Абал тилкесиндеги сүрөтчөнү иштетүү же өчүрүү."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings_car.xml b/packages/SystemUI/res/values-ky-rKG/strings_car.xml
new file mode 100644
index 0000000..730f53d
--- /dev/null
+++ b/packages/SystemUI/res/values-ky-rKG/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Коопсуз айдаңыз"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Унаа айдоо шарттарына толук көңүл буруп, бардык колдонулган эрежелерди аткарыңыз. Багыттар так эмес, толук эмес, коркунучтуу, ылайыксыз болушу же административдик аймактарды кесип өтүшү мүмкүн. Ишкердик тууралуу маалымат да так эмес же толук эмес болушу мүмкүн. Дайындар анык убакта эмес жана жайгашкан жердин тактыгына кепилдик жок. Унаа айдоо учурунда мобилдик түзмөгүңүздү же Android Auto үчүн дайындалбаган колдонмолорду пайдаланбаңыз."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index b75e398..9f075d0 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ບຸລິມະສິດ\nເທົ່ານັ້ນ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ໂມງປຸກ\nເທົ່ານັ້ນ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"ທັງໝົດ"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ທັງໝົດ\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ໜ້າຫຼັກ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ຫາກໍໃຊ້"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ກັບຄືນ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"ສະແດງ ຫ້າມລົບກວນ ໃນລະດັບສຽງ"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ອະນຸຍາດການຄວບຄຸມເຕັມສ່ວນຂອງ ຫ້າມລົບກວນ ໃນກ່ອງປັບລະດັບສຽງ."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ລະດັບສຽງ ແລະ ຫ້າມລົບກວນ"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ເປີດໃຊ້ໂໝດ ຫ້າມລົບກວນ ເມື່ອປັບສຽງໃຫ້ຄ່ອຍລົງ"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ອອກຈາກໂໝດ ຫ້າມລົບກວນ ເມື່ອປັບສຽງໃຫ້ດັງຂຶ້ນ"</string>
+ <string name="battery" msgid="7498329822413202973">"ແບັດເຕີຣີ"</string>
+ <string name="clock" msgid="7416090374234785905">"ໂມງ"</string>
+ <string name="headset" msgid="4534219457597457353">"ຊຸດຫູຟັງ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ເຊື່ອມຕໍ່ຊຸດຫູຟັງແລ້ວ"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ເຊື່ອມຕໍ່ຊຸດຫູຟັງແລ້ວ"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ເປີດ ຫຼື ປິດໄອຄອນຕ່າງໆຈາກການສະແດງໃນແຖບສະຖານະ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings_car.xml b/packages/SystemUI/res/values-lo-rLA/strings_car.xml
new file mode 100644
index 0000000..3388f54
--- /dev/null
+++ b/packages/SystemUI/res/values-lo-rLA/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ຂັບຂີ່ຢ່າງປອດໄພ"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ຮູ້ຈັກສະພາບການຂັບຂີ່ຢ່າງຄົບຖ້ວນ ແລະ ປະຕິບັດຕາມກົດໝາຍທີ່ນຳໃຊ້ສະເໝີ. ຄຳແນະນຳເສັ້ນທາງອາດຈະບໍ່ຖືກຕ້ອງ, ບໍ່ຄົບຖ້ວນ, ອັນຕະລາຍ, ບໍ່ເໝາະສົມ, ຖືກຫ້າມ ຫຼື ກ່ຽວຂ້ອງກັບການຂ້າມເຂດປົກຄອງ. ຂໍ້ມູນທຸລະກິດອາດຈະບໍ່ຖືກຕ້ອງ ຫຼື ບໍ່ຄົບຖ້ວນ. ຂໍ້ມູນບໍ່ແມ່ນຂໍ້ມູນສົດ ແລະ ບໍ່ສາມາດຮັບປະກັນຄວາມຖືກຕ້ອງຂອງສະຖານທີ່ໄດ້. ຢ່າໃຊ້ອຸປະກອນມືຖືຂອງທ່ານ ຫຼື ໃຊ້ແອັບທີ່ບໍ່ມີໄວ້ສຳລັບ Android Auto ໃນຂະນະທີ່ຂັບຂີ່."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index e79e6d3..69e7832 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tik\nprioritetiniai"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tik\nsignalai"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Visi\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Greitai kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lėtai kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Pagrindinis ekranas"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Naujausios veiklos ekranas"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atgal"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Rodyti netrukdymo režimą garsumo dialogo lange"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Leisti visiškai valdyti netrukdymo režimą garsumo dialogo lange."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Garsumas ir netrukdymo režimas"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Įjungti netrukdymo režimą mažinant garsumą"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Išjungti netrukdymo režimą didinant garsumą"</string>
+ <string name="battery" msgid="7498329822413202973">"Akumuliatorius"</string>
+ <string name="clock" msgid="7416090374234785905">"Laikrodis"</string>
+ <string name="headset" msgid="4534219457597457353">"Ausinės"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Ausinės prijungtos"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ausinės prijungtos"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Įgalinti arba išjungti piktogramų rodymą būsenos juostoje."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings_car.xml b/packages/SystemUI/res/values-lt/strings_car.xml
new file mode 100644
index 0000000..03d656a
--- /dev/null
+++ b/packages/SystemUI/res/values-lt/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Vairuokite saugiai"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Visada atsižvelkite į vairavimo sąlygas ir laikykitės galiojančių įstatymų. Nuorodos gali būti netikslios, neužbaigtos, pavojingos, netinkamos, draudžiamos ar nukreipiančios per administracines sritis. Įmonių informacija taip pat gali būti netiksli ar neužbaigta. Duomenys nėra teikiami realiuoju laiku ir vietovių tikslumo negalima garantuoti. Vairuodami nenaudokite mobiliojo įrenginio ar programų, kurios nėra skirtos „Android Auto“."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 3b27424..2ef7865 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -333,8 +333,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tikai\nprioritārie"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tikai\nsignāli"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Visi\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Notiek uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Ātra uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lēna uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string>
@@ -484,14 +483,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Sākums"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Pēdējie"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atpakaļ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Rādīt režīmu “Netraucēt” skaļuma regulēšanas dialoglodziņā"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Atļaujiet pilnu režīma “Netraucēt” kontroli skaļuma regulēšanas dialoglodziņā."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Skaļums un režīms “Netraucēt”"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Ieslēgt režīmu “Netraucēt”, samazinot skaļumu"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Izslēgt režīmu “Netraucēt”, palielinot skaļumu"</string>
+ <string name="battery" msgid="7498329822413202973">"Akumulators"</string>
+ <string name="clock" msgid="7416090374234785905">"Pulkstenis"</string>
+ <string name="headset" msgid="4534219457597457353">"Austiņas"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Austiņas ir pievienotas"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Austiņas ar mikrofonu ir pievienotas"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Iespējojiet vai atspējojiet ikonu rādīšanu statusa joslā."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings_car.xml b/packages/SystemUI/res/values-lv/strings_car.xml
new file mode 100644
index 0000000..0171624
--- /dev/null
+++ b/packages/SystemUI/res/values-lv/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Droša braukšana"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Pievērsiet visu uzmanību braukšanas apstākļiem un vienmēr ievērojiet piemērojamos tiesību aktus. Norādes var būt neprecīzas, nepilnīgas, bīstamas, nepiemērotas, aizliegtas vai var ietvert administratīvo teritoriju šķērsošanu. Arī uzņēmumu informācija var būt neprecīza vai nepilnīga. Dati netiek nodrošināti reāllaikā, un netiek garantēta atrašanās vietu precizitāte. Vadot transportlīdzekli, nelietojiet mobilo ierīci rokās un neizmantojiet lietotnes, kas nav paredzētas pakalpojumam Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 85832df..aa8019e 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Јачина на звук и „Не вознемирувај“"</string>
<string name="volume_down_silent" msgid="66962568467719591">"Премини во „Не вознемирувај“ при намалена јачина на звукот"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Излези од „Не вознемирувај“ при зголемена јачина на звукот"</string>
+ <string name="battery" msgid="7498329822413202973">"Батерија"</string>
+ <string name="clock" msgid="7416090374234785905">"Часовник"</string>
+ <string name="headset" msgid="4534219457597457353">"Слушалки"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалките се поврзани"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Слушалките се поврзани"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Овозможете или оневозможете прикажување на иконите во статусната лента."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings_car.xml b/packages/SystemUI/res/values-mk-rMK/strings_car.xml
new file mode 100644
index 0000000..f5ed824
--- /dev/null
+++ b/packages/SystemUI/res/values-mk-rMK/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Возете безбедно"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Секогаш бидете известени за условите за возење и почитувајте ги важечките закони. Насоките може да бидат неточни, нецелосни, опасни, несоодветни, забранети или да вклучуваат премин преку административни области. Бизнис информациите исто така може да бидат неточни или нецелосни. Податоците не се даваат во реално време и не може да се гарантира точноста на локацијата. Не ракувајте со вашиот мобилен уред и не користете апликации што не се наменети за Android Auto додека возите."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index b2d7b9d..d22a7f9 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"മുൻഗണന\nമാത്രം"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"അലാറങ്ങൾ\nമാത്രം"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"എല്ലാം"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"എല്ലാം\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ചാർജ്ജുചെയ്യുന്നു (പൂർണ്ണമാകുന്നതിന്, <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"വേഗത്തിൽ ചാർജുചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"പതുക്കെ ചാർജുചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"വീട്"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"പുതിയവ"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"മടങ്ങുക"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"വോളിയത്തിൽ \'ശല്യപ്പെടുത്തരുത്\' കാണിക്കുക"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"വോളിയം ഡയലോഗിൽ \'ശല്യപ്പെടുത്തരുത്\' എന്നത് പൂർണ്ണമായി നിയന്ത്രിക്കാൻ അനുവദിക്കുക."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"വോളിയവും \'ശല്യപ്പെടുത്തരുത്\' എന്നതും"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"വോളിയം താഴുമ്പോൾ \'ശല്യപ്പെടുത്തരുത്\' പ്രവർത്തിപ്പിക്കുക"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"വോളിയം ഉയരുമ്പോൾ \'ശല്യപ്പെടുത്തരുത്\' നിർത്തുക"</string>
+ <string name="battery" msgid="7498329822413202973">"ബാറ്ററി"</string>
+ <string name="clock" msgid="7416090374234785905">"ക്ലോക്ക്"</string>
+ <string name="headset" msgid="4534219457597457353">"ഹെഡ്സെറ്റ്"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ഹെഡ്ഫോണുകൾ കണക്റ്റുചെയ്തു"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ഹെഡ്സെറ്റ് കണക്റ്റുചെയ്തു"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"സ്റ്റാറ്റസ് ബാറിൽ കാണിക്കുന്നതിൽ നിന്ന് ഐക്കണുകളെ പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings_car.xml b/packages/SystemUI/res/values-ml-rIN/strings_car.xml
new file mode 100644
index 0000000..b53029c
--- /dev/null
+++ b/packages/SystemUI/res/values-ml-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"സുരക്ഷിതമായി ഡ്രൈവ് ചെയ്യുക"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ഡ്രൈവിംഗ് സാഹചര്യങ്ങളെ കുറിച്ച് നല്ലവണ്ണം അറിഞ്ഞുവയ്ക്കുക, എല്ലായ്പ്പോഴും ബാധകമായ നിയമങ്ങൾ അനുസരിക്കുക. ദിശാസൂചനകൾ കൃത്യമല്ലാത്തതും അപൂർണ്ണവും അപകടകരവും അനുയോജ്യമല്ലാത്തതും നിരോധിക്കപ്പെട്ടതും അഡ്മിനിസ്ട്രേറ്റീവ് ഏരിയകൾ അതിലംഘിച്ച് പോകേണ്ടതുമായിരിക്കാം. വിവരങ്ങൾ തത്സമയം എടുത്തിട്ടുള്ളതല്ല, അതിനാൽ ലൊക്കേഷൻ കൃത്യത ഉറപ്പാക്കാൻ കഴിയില്ല. ഡ്രൈവ് ചെയ്യുന്ന സമയത്ത് മൊബൈൽ ഉപകരണങ്ങളോ Android Auto-യ്ക്കായി ഉദ്ദേശിക്കപ്പെട്ടിട്ടില്ലാത്ത ആപ്സോ കൈകാര്യം ചെയ്യരുത്"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 2e8126e..1bd8d98 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -330,8 +330,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Зөвхөн\nхамгийн чухлыг"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Зөвхөн\nсэрүүлэг"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Бүгд"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Бүх\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> шаардлагатай)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> шаардлагатай)"</string>
@@ -481,14 +480,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Нүүр хуудас"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Саяхны"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Буцах"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Бүү саад бол тохиргоог дууны түвшинд харуулах"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Бүү саад бол тохиргооны бүрэн хяналтыг дууны түвшний харилцах цонхонд зөвшөөрнө үү."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Дууны түвшин болон бүү саад бол тохиргоо"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Бүү саад бол тохиргоог оруулахын тулд дууны түвшинг бууруулах"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Бүү саад бол тохиргооноос гарахын тулд дууны түвшинг нэмэх"</string>
+ <string name="battery" msgid="7498329822413202973">"Зай"</string>
+ <string name="clock" msgid="7416090374234785905">"Цаг"</string>
+ <string name="headset" msgid="4534219457597457353">"Чихэвч"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Чихэвч холбогдсон"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Чихэвч холбогдсон"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Статусын самбарт харагдах дүрс тэмдгийг идэвхжүүлэх эсвэл идэвхгүй болгоно уу."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings_car.xml b/packages/SystemUI/res/values-mn-rMN/strings_car.xml
new file mode 100644
index 0000000..d48580f
--- /dev/null
+++ b/packages/SystemUI/res/values-mn-rMN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Жолооны аюулгүй байдал"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Жолоодох нөхцөлийн талаар бүрэн ойлгож, холбогдох дүрэм журмыг мөрдөөрэй. Чиглэл нь тодорхой бус, гүйцэт бус, аюултай, тохиромжгүй, хориглосон эсвэл тусгай хамгаалалттай газар нутагт нэвтэрсэн байж болзошгүй. Бизнесийн мэдээлэл мөн адил тохиромжгүй эсвэл гүйцэт бус байна. Өгөгдөл нь тухайн цаг хугацааных биш учир байршлыг зөв тодорхойлсон эсэхийг батлах боломжгүй. Жолоодож байхдаа гар утсаа болон Android Автод зориулаагүй апп-г бүү ашиглаарай."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index 846e7ee..e404c2d 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"केवळ\nप्राधान्य"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"केवळ\nअलार्म"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"सर्व"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"सर्व\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) चार्ज होत आहे"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) वेगाने चार्ज होत आहे"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) हळूहळू चार्ज होत आहे"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"मुख्यपृष्ठ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"अलीकडील"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"परत"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"आवाजामध्ये व्यत्यय आणू नका दर्शवा"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"आवाज संवादामधील व्यत्यय आणू नका च्या पूर्ण नियंत्रणास अनुमती द्या."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"आवाज आणि व्यत्यय आणू नका"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"आवाज कमी केल्यावर व्यत्यय आणू नका प्रविष्ट करा"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"आवाज वाढविल्यावर व्यत्यय आणू नका मधून बाहेर पडा"</string>
+ <string name="battery" msgid="7498329822413202973">"बॅटरी"</string>
+ <string name="clock" msgid="7416090374234785905">"घड्याळ"</string>
+ <string name="headset" msgid="4534219457597457353">"हेडसेट"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफोन कनेक्ट केले"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हेडसेट कनेक्ट केला"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"चिन्हे स्टेटस बारमध्ये दर्शविले जाण्यापासून प्रतिबंधित करण्यासाठी ती सक्षम किंवा अक्षम करा."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings_car.xml b/packages/SystemUI/res/values-mr-rIN/strings_car.xml
new file mode 100644
index 0000000..7dc5d17
--- /dev/null
+++ b/packages/SystemUI/res/values-mr-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"सुरक्षितपणे वाहन चालवा"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"वाहन चालविण्याच्या शर्तींची पूर्णपणे माहिती असू द्या आणि नेहमी लागू असलेल्या कायद्यांचे पालन करा. दिशानिर्देश कदाचित चुकीचे, अपूर्ण, धोकादायक, अनुकूल नसलेले, प्रतिबंधित किंवा प्रशासकीय क्षेत्रांना ओलांडणारे असू शकतात. व्यवसाय माहिती देखील चुकीची किंवा अपूर्ण असू शकते. डेटा हा रिअल-टाइम नसतो आणि स्थान अचूकतेची हमी दिली जाऊ शकत नाही. वाहन चालविताना Android Auto च्या उद्देशासाठी नसलेले आपले मोबाईल डिव्हाइस हाताळू नका किंवा अॅप्स वापरू नका."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index dd5f767..2bc9c51 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Keutamaan\nsahaja"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Penggera\nsahaja"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Semua\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengecas (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mengecas cepat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mengecas perlahan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Skrin Utama"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Terbaharu"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Kembali"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Tunjukkan jangan ganggu dalam kelantangan"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Benarkan kawalan penuh jangan ganggu dalam dialog kelantangan."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Kelantangan dan Jangan Ganggu"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Masuki mod jangan ganggu apabila kelantangan direndahkan"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Keluar drp mod jangan ganggu apabila kelantangan ditinggikan"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateri"</string>
+ <string name="clock" msgid="7416090374234785905">"Jam"</string>
+ <string name="headset" msgid="4534219457597457353">"Set Kepala"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fon kepala disambungkan"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Set kepala disambungkan"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Dayakan atau lumpuhkan ikon daripada dipaparkan dalam bar status."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings_car.xml b/packages/SystemUI/res/values-ms-rMY/strings_car.xml
new file mode 100644
index 0000000..392530a
--- /dev/null
+++ b/packages/SystemUI/res/values-ms-rMY/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Pandu dengan selamat"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Pastikan anda sentiasa sedar sepenuhnya akan keadaan pemanduan dan mematuhi undang-undang yang dikenakan pada sepanjang masa. Arah mungkin tidak tepat, tidak lengkap, berbahaya, tidak sesuai, dilarang atau melibatkan lintasan kawasan pentadbiran. Maklumat perniagaan juga mungkin tidak tepat atau tidak lengkap. Data bukan masa sebenar dan ketepatan lokasi tidak dapat dijamin. Jangan kendalikan peranti mudah alih anda atau gunakan apl yang bukan untuk Android Auto semasa memandu."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 4bb3a45..e119686 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ဦးစားပေးမှု\nသာ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"နှိုးစက်များ\nသာ"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"အားလုံး"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"အားလုံး\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> အပြည့် အထိ) အားသွင်းနေ"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"လျှင်မြန်စွာအားသွင်းခြင်း (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ပြည့်သည်အထိ)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"နှေးကွေးစွာ အားသွင်းခြင်း (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ပြည့်သည်အထိ)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ပင်မ"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"မကြာသေးခင်က"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"နောက်သို့"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"အသံအတိုးအလျှော့တွင် မနှောက်ယှက်ရကို ပြပါ"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"အသံအတိုးအလျှော့အကွက်ထဲတွင် မနှောက်ယှက်ရကို အပြည့်အဝထိန်းချုပ်ခွင့် ပြုပါ။"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"အသံအတိုးအလျှော့နှင့် မနှောက်ယှက်ရ"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"အသံလျှော့သည်နှင့် မနှောက်ယှက်ရသို့ ပြောင်းလဲပါ"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"အသံချဲ့သည်နှင့် မနှောက်ယှက်ရမှ ထွက်ပါ"</string>
+ <string name="battery" msgid="7498329822413202973">"ဘတ်ထရီ"</string>
+ <string name="clock" msgid="7416090374234785905">"နာရီ"</string>
+ <string name="headset" msgid="4534219457597457353">"မိုက်ခွက်ပါနားကြပ်"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"နားကြပ်တပ်ဆင်ပြီးပါပြီ"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"မိုက်ခွက်ပါနားကြပ်တပ်ဆင်ပြီးပါပြီ"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"အခြေအနေဘားတန်းတွင် သင်္ကေတပုံပြခြင်းကို ဖွင့်ရန် သို့မဟုတ် ပိတ်ရန်"</string>
</resources>
diff --git a/packages/SystemUI/res/values-my-rMM/strings_car.xml b/packages/SystemUI/res/values-my-rMM/strings_car.xml
new file mode 100644
index 0000000..dd41713
--- /dev/null
+++ b/packages/SystemUI/res/values-my-rMM/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ဘေးကင်းလုံခြုံစွာ မောင်းနှင်ပါ"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ယာဉ်မောင်းမှုအခြေအနေများကို အပြည့်အဝအာရုံစိုက်ပြီး သက်ဆိုင်ရာဥပဒေများကို အမြဲတမ်းလိုက်နာပါ။ လမ်းညွှန်ချက်များသည် မှန်ကန်မှုမရှိခြင်း၊ မပြည့်စုံခြင်း၊ အန္တရာယ်ရှိခြင်း၊ ကိုက်ညီမှုမရှိခြင်း၊ တားမြစ်ထားခြင်း၊ သို့မဟုတ် လမ်းဖြတ်ကူးခြင်း ကြီးကြပ်ထားသည့်နေရာများ ဖြစ်နေနိုင်ပါသည်။ စီးပွားရေးအချက်အလက်များသည်လည်း မမှန်ကန်ခြင်း သို့မဟုတ် မပြည့်စုံခြင်းများ ရှိနိုင်ပါသည်။ ဒေတာသည် အချိန်နှင့်တစ်ပြေးညီ မဟုတ်ပါ၊ တည်နေရာမှန်ကန်မှုကိုလည်း အာမ မခံနိုင်ပါ။ ယာဉ်မောင်းနှင်နေစဉ် Android Auto အတွက်ရည်ရွယ်ထားခြင်းမဟုတ်သည့် မိုဘိုင်းစက်ပစ္စည်း ကိုမကိုင်တွယ်ပါနှင့် သို့မဟုတ် အက်ပ်များကို အသုံးမပြုပါနှင့်။ိ"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 87b2b54..61da224 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Bare\nPrioritet"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Bare\nalarmer"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Lader (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Lader raskt (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lader sakte (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startside"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nylige"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tilbake"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Vis «Ikke forstyrr» i volumkontrollene"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillat full kontroll over «Ikke forstyrr» i volumdialogen."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volum og «Ikke forstyrr»"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Åpne «Ikke forstyrr» med volum ned-knappen"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Lukk «Ikke forstyrr» med volum opp-knappen"</string>
+ <string name="battery" msgid="7498329822413202973">"Batteri"</string>
+ <string name="clock" msgid="7416090374234785905">"Klokke"</string>
+ <string name="headset" msgid="4534219457597457353">"Hodetelefoner"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Øretelefoner er tilkoblet"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Hodetelefoner er tilkoblet"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Vis eller skjul ikoner i statusfeltet."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings_car.xml b/packages/SystemUI/res/values-nb/strings_car.xml
new file mode 100644
index 0000000..421420e
--- /dev/null
+++ b/packages/SystemUI/res/values-nb/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Kjør forsiktig"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Ha full oversikt over kjøreforhold, og følg alltid gjeldende lov og rett. Veibeskrivelser kan være unøyaktige, ufullstendige, farlige, upassende, forbudte eller de kan involvere kjøring på administrative områder. Bedriftsinformasjon kan også være unøyaktig eller ufullstendig. Data er ikke i sanntid, og posisjonsnøyaktighet kan ikke garanteres. Ikke bruk mobilenheten din eller apper som ikke er ment for Android Auto, mens du kjører."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index a56a701..db638c0 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"प्राथमिकता \nमात्र"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"अलार्महरू \nमात्र"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"सबै"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"सबै\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण भएसम्म)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"छिटो चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण नभएसम्म)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"बिस्तारै चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण नभएसम्म)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"गृह"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"हालैका"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"पछाडि"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"भोल्युममा बाधा नपुर्याउनुहोस् देखाउनुहोस्"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"भोल्युमको संवादमा बाधा नपुर्याउनुहोस् को पूर्ण नियन्त्रणलाई अनुमति दिनुहोस्"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"भोल्युम र बाधा नपुर्याउनुहोस्"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"भोल्युम कम गर्नेमा बाधा नपुर्याउनुहोस् प्रविष्ट गर्नुहोस्"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"भोल्युम बढाउनेमा बाधा नपुर्याउनुहोस् प्रविष्ट गर्नुहोस्"</string>
+ <string name="battery" msgid="7498329822413202973">"ब्याट्री"</string>
+ <string name="clock" msgid="7416090374234785905">"घडी"</string>
+ <string name="headset" msgid="4534219457597457353">"हेडसेट"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफोनहरू जडान गरियो"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हेडसेट जडान गरियो"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"वस्तुस्थिति पट्टीमा देखाउने हुनबाट आइकनहरूलाई सक्रिय वा निष्क्रिय गर्नुहोस्।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings_car.xml b/packages/SystemUI/res/values-ne-rNP/strings_car.xml
new file mode 100644
index 0000000..0b22d4ac
--- /dev/null
+++ b/packages/SystemUI/res/values-ne-rNP/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"सुरक्षित तरिकाले सवारी चलाउनुहोस्"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ड्राइभिङ सर्तहरूको पूर्ण सजग रहनुहोस् र जहिले पनि लागू हुने नियमहरूको पालना गर्नुहोस्। दिशा निर्देशनहरू अशुद्ध, अपूर्ण, खतरनाक, उपयुक्त नभएको, निषेधित वा प्रशासनिक क्षेत्र पार गरेको हुन सक्छ। व्यवसाय जानकारी अशुद्ध वा अपूर्ण पनि हुन सक्छ। डेटा वास्तविक समयको होइन र स्थान सटीकताको ग्यारेन्टी गर्न सकिँदैन। आफ्नो मोबाइल यन्त्र ह्याण्डल गर्ने वा सवारी चलाएको बेलामा Android स्वतःको लागि अभिप्रेत नभएको अनुप्रयोगहरूको प्रयोग गर्ने नगर्नुहोस्।"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index a811db3..55285d8 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume en \'Niet storen\'"</string>
<string name="volume_down_silent" msgid="66962568467719591">"\'Niet storen\' activeren bij volume omlaag"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"\'Niet storen\' afsluiten bij volume omhoog"</string>
+ <string name="battery" msgid="7498329822413202973">"Accu"</string>
+ <string name="clock" msgid="7416090374234785905">"Klok"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hoofdtelefoon aangesloten"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset aangesloten"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"De weergave van pictogrammen in de statusbalk in- of uitschakelen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings_car.xml b/packages/SystemUI/res/values-nl/strings_car.xml
new file mode 100644
index 0000000..be66e01
--- /dev/null
+++ b/packages/SystemUI/res/values-nl/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Rijd veilig"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Blijf je volledig bewust van de rijomstandigheden en houd je altijd aan de wet. Aanwijzingen kunnen onnauwkeurig, onvolledig, gevaarlijk, ongeschikt of verboden zijn of het doorkruisen van overheidszones vereisen. Bedrijfsinformatie kan ook onnauwkeurg of onvolledig zijn. De gegevens worden niet in realtime verstrekt en de nauwkeurigheid van een locatie kan niet worden gegarandeerd. Bedien tijdens het rijden je mobiele apparaat niet en gebruik geen apps die niet bedoeld zijn voor Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index f3c85eb..0217781 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ਵੌਲਯੂਮ ਅਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
<string name="volume_down_silent" msgid="66962568467719591">"ਵੌਲਯੂਮ ਘੱਟ ਹੋਣ \'ਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਵਿੱਚ ਦਾਖਲ ਹੋਵੋ"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"ਵੌਲਯੂਮ ਉੱਚੀ ਹੋਣ \'ਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string>
+ <string name="battery" msgid="7498329822413202973">"ਬੈਟਰੀ"</string>
+ <string name="clock" msgid="7416090374234785905">"ਘੜੀ"</string>
+ <string name="headset" msgid="4534219457597457353">"ਹੈੱਡਸੈੱਟ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ਹੈੱਡਫੋਨਾਂ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ਹੈੱਡਸੈੱਟ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ਚਿੰਨ੍ਹਾਂ ਦੇ ਸਥਿਤੀ ਪੱਟੀ ਵਿੱਚ ਵਿਖਾਏ ਜਾਣ ਨੂੰ ਯੋਗ ਜਾਂ ਅਯੋਗ ਬਣਾਓ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings_car.xml b/packages/SystemUI/res/values-pa-rIN/strings_car.xml
new file mode 100644
index 0000000..ac38625d
--- /dev/null
+++ b/packages/SystemUI/res/values-pa-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਗੱਡੀ ਚਲਾਓ"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"ਗੱਡੀ ਚਲਾਉਣ ਦੇ ਹਾਲਾਤਾਂ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਜਾਣੂ ਰਹੋ ਅਤੇ ਸਦਾ ਲਾਗੂ ਕਾਨੂੰਨਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ। ਦਿਸ਼ਾਵਾਂ ਗਲਤ, ਅਧੂਰੀਆਂ, ਖ਼ਤਰਨਾਕ, ਢੁੱਕਵੀਆਂ ਨਹੀਂ, ਪ੍ਰਤਿਬੰਧਿਤ ਹੋ ਸਕਦੀਆਂ ਹਨ ਜਾਂ ਪ੍ਰਸ਼ਾਸਕੀ ਖੇਤਰਾਂ ਵਿੱਚੋਂ ਲੰਘਣਾ ਸ਼ਾਮਲ ਹੋ ਸਕਦਾ ਹੈ। ਵਪਾਰਕ ਜਾਣਕਾਰੀ ਵੀ ਗਲਤ ਜਾਂ ਅਧੂਰੀ ਹੋ ਸਕਦੀ ਹੈ। ਡੈਟਾ ਰੀਅਲ-ਟਾਈਮ ਨਹੀਂ ਹੈ ਅਤੇ ਟਿਕਾਣਾ ਸਟੀਕਤਾ ਗਾਰੰਟੀਸ਼ੁਦਾ ਨਹੀਂ ਹੋ ਸਕਦੀ ਹੈ। ਗੱਡੀ ਚਲਾਉਣ ਦੌਰਾਨ ਆਪਣੀ ਮੋਬਾਈਲ ਡੀਵਾਈਸ ਜਾਂ ਉਹਨਾਂ ਐਪਾਂ ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ ਜੋ ਕਿ Android Auto ਲਈ ਨਹੀਂ ਬਣੀਆਂ ਹਨ।"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 4224730..db685be 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tylko\npriorytetowe"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tylko\nalarmy"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Wszystkie"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Wszystkie\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ładuje się (pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Szybkie ładowanie (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do końca)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Wolne ładowanie (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do końca)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ekran główny"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Ostatnie"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Wstecz"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Pokaż panel Nie przeszkadzać w oknie sterowania głośnością"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Pokaż cały panel Nie przeszkadzać w oknie sterowania głośnością."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Głośność i tryb Nie przeszkadzać"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Włącz tryb Nie przeszkadzać przy zmniejszaniu głośności"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Wyłącz tryb Nie przeszkadzać przy zwiększaniu głośności"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Zegar"</string>
+ <string name="headset" msgid="4534219457597457353">"Zestaw słuchawkowy"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Słuchawki są podłączone"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Zestaw słuchawkowy jest podłączony"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Włącz lub wyłącz wyświetlanie ikon na pasku stanu."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings_car.xml b/packages/SystemUI/res/values-pl/strings_car.xml
new file mode 100644
index 0000000..d6e02d6
--- /dev/null
+++ b/packages/SystemUI/res/values-pl/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Jedź bezpiecznie"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Uważnie obserwuj warunki na drodze i zawsze przestrzegaj obowiązującego prawa. Wskazówki mogą być niedokładne, niekompletne, niebezpieczne, nieprzydatne lub niezgodne z prawem, mogą też obejmować przekraczanie obszarów administracyjnych. Informacje o firmach również mogą być niedokładne lub niekompletne. Dane nie są podawane w czasie rzeczywistym. Nie ma gwarancji, że dane o lokalizacji są dokładne. Podczas prowadzenia samochodu nie obsługuj urządzenia mobilnego ani nie używaj aplikacji nieprzeznaczonych na Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index d81fd8a..56d1209 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Somente\nprioridade"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Somente\nalarmes"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carregando rapidamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carregando lentamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Início"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Voltar"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar \"Não perturbe\" nas opções de volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir controle total do recurso \"Não perturbe\" na caixa de diálogo de volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e \"Não perturbe\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Entre no modo \"Não perturbe\" abaixando o volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Saia do modo \"Não perturbe\" aumentando o volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Relógio"</string>
+ <string name="headset" msgid="4534219457597457353">"Fone de ouvido"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fones de ouvido conectados"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Fone de ouvido conectado"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a exibição de ícones na barra de status."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings_car.xml b/packages/SystemUI/res/values-pt-rBR/strings_car.xml
new file mode 100644
index 0000000..072f614
--- /dev/null
+++ b/packages/SystemUI/res/values-pt-rBR/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Dirija com segurança"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Mantenha-se atento às condições de direção e sempre obedeça às leis aplicáveis. As instruções podem ser imprecisas, incompletas, perigosas, inadequadas, proibidas ou envolver o cruzamento de áreas administrativas. As informações comerciais também podem ser imprecisas ou incompletas. Os dados não são exibidos em tempo real, e a precisão da localização não pode ser garantida. Enquanto dirige, não manuseie seu dispositivo móvel nem use apps que não tenham sido criados para o Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index bfaf659..9f9a12b 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Apenas\nprioridade"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Apenas\nalarmes"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"A carregar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"A carregar rapid. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"A carregar lentam. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Página inicial"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Anterior"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar Não incomodar no volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir o controlo total de Não incomodar na caixa de diálogo do volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e Não incomodar"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Ativar Não incomodar ao diminuir o volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Desativar Não incomodar ao aumentar o volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Relógio"</string>
+ <string name="headset" msgid="4534219457597457353">"Ausc. com microfone integrado"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auscultadores ligados"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auscultadores com microfone integrado ligados"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a apresentação de ícones na barra de estado."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings_car.xml b/packages/SystemUI/res/values-pt-rPT/strings_car.xml
new file mode 100644
index 0000000..e53774b7
--- /dev/null
+++ b/packages/SystemUI/res/values-pt-rPT/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conduza com segurança"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Mantenha-se completamente atento às condições de condução e respeite sempre as leis aplicáveis. As direções podem ser imprecisas, incompletas, perigosas, inadequadas, proibidas ou envolver a travessia de zonas administrativas. Os dados das empresas também podem ser imprecisos ou incompletos. Os dados não são fornecidos em tempo real e não é possível garantir a precisão da localização. Não manuseie o dispositivo móvel nem utilize aplicações não destinadas ao Android Auto durante a condução."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings_tv.xml b/packages/SystemUI/res/values-pt-rPT/strings_tv.xml
index 5b4567e..e0ca35d 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings_tv.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings_tv.xml
@@ -24,5 +24,5 @@
<string name="pip_play" msgid="674145557658227044">"Reproduzir"</string>
<string name="pip_pause" msgid="8412075640017218862">"Interromper"</string>
<string name="pip_cancel" msgid="5173898361050559462">"Cancelar"</string>
- <string name="pip_hold_home" msgid="883546189749854120">"Prima sem soltar HOME para controlar o PIP"</string>
+ <string name="pip_hold_home" msgid="883546189749854120">"Prima sem soltar a tecla HOME para controlar o PIP"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index d81fd8a..56d1209 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Somente\nprioridade"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Somente\nalarmes"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carregando rapidamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carregando lentamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Início"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Voltar"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar \"Não perturbe\" nas opções de volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir controle total do recurso \"Não perturbe\" na caixa de diálogo de volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e \"Não perturbe\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Entre no modo \"Não perturbe\" abaixando o volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Saia do modo \"Não perturbe\" aumentando o volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Relógio"</string>
+ <string name="headset" msgid="4534219457597457353">"Fone de ouvido"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fones de ouvido conectados"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Fone de ouvido conectado"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a exibição de ícones na barra de status."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings_car.xml b/packages/SystemUI/res/values-pt/strings_car.xml
new file mode 100644
index 0000000..072f614
--- /dev/null
+++ b/packages/SystemUI/res/values-pt/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Dirija com segurança"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Mantenha-se atento às condições de direção e sempre obedeça às leis aplicáveis. As instruções podem ser imprecisas, incompletas, perigosas, inadequadas, proibidas ou envolver o cruzamento de áreas administrativas. As informações comerciais também podem ser imprecisas ou incompletas. Os dados não são exibidos em tempo real, e a precisão da localização não pode ser garantida. Enquanto dirige, não manuseie seu dispositivo móvel nem use apps que não tenham sido criados para o Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 484a1b8..796c261 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -333,8 +333,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Numai\ncu prioritate"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Numai\nalarme"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Toate"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Toate\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Se încarcă (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Se încarcă rapid (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Se încarcă lent (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string>
@@ -484,14 +483,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ecran de pornire"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recente"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Înapoi"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Afișați opțiunile pentru Nu deranjați în dialogul de volum"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permiteți controlul complet al modului Nu deranjați din dialogul pentru volum."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumul și Nu deranjați"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Accesați Nu deranjați la reducerea volumului"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Ieșiți din Nu deranjați la creșterea volumului"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterie"</string>
+ <string name="clock" msgid="7416090374234785905">"Ceas"</string>
+ <string name="headset" msgid="4534219457597457353">"Set căști-microfon"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Căștile sunt conectate"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Setul căști-microfon este conectat"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activați sau dezactivați afișarea pictogramelor în bara de stare."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings_car.xml b/packages/SystemUI/res/values-ro/strings_car.xml
new file mode 100644
index 0000000..54d8585
--- /dev/null
+++ b/packages/SystemUI/res/values-ro/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Conduceți atent"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Aflați mereu condițiile de trafic și respectați întotdeauna legislația aplicabilă. Indicațiile de orientare pot fi inexacte, incomplete, periculoase, neadecvate, interzise sau pot implica trecerea prin zone administrative. Informațiile despre companii pot fi, de asemenea, inexacte sau incomplete. Datele nu sunt în timp real și nu se poate garanta exactitatea locației. Nu manipulați dispozitivul mobil și nu folosiți aplicații neconcepute pentru Android Auto când sunteți la volan."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 0876366..bd16a82 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Только\nважные"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Только\nбудильник"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Все"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Все\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядка батареи (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Быстрая зарядка (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Медленная зарядка (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Главный экран"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Недавние"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показать панель \"Не беспокоить\" в окне регулировки звука"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Позволяет управлять режимом \"Не беспокоить\" в окне регулировки громкости."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Регулировка громкости и режим \"Не беспокоить\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Включать режим \"Не беспокоить\" при уменьшении громкости"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Отключать режим \"Не беспокоить\" при увеличении громкости"</string>
+ <string name="battery" msgid="7498329822413202973">"Батарея"</string>
+ <string name="clock" msgid="7416090374234785905">"Часы"</string>
+ <string name="headset" msgid="4534219457597457353">"Гарнитура"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Наушники подключены"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнитура подключена"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Включение и отключение показа значков в строке состояния"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings_car.xml b/packages/SystemUI/res/values-ru/strings_car.xml
new file mode 100644
index 0000000..cbdb8d7
--- /dev/null
+++ b/packages/SystemUI/res/values-ru/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Безопасность движения"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Всегда учитывайте дорожную обстановку и соблюдайте правила. Маршруты могут быть неточными, неполными, проходить по опасным, неподходящим или запрещенным для движения участкам или пересекать границы. Сведения об организациях также могут быть неточными и неполными. Данные не обновляются в режиме реального времени, и точность определения местоположения не гарантируется. Не пользуйтесь мобильным устройством и не используйте приложения, не предназначенные для Android Auto, управляя автомобилем."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 4520aef..ddd95b4 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ප්රමුඛතා\nපමණි"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ඇඟවීම්\nපමණි"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"සියලු"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"සියලු\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ඉක්මනින් ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"සෙමින් ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"මුල් පිටුව"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"මෑත"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ආපසු"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"හඩ පරිමාව තුළ බාධා නොකරන්න පුවරුව පෙන්වන්න"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"හඬ පරිමා සංවාදය තුළ බාධා නොකරන්න පුවරුවට පූර්ණ පාලනය ඉඩ දෙන්න."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"හඬ පරිමාව සහ බාධා නොකරන්න"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"හඬ පරිමාව අඩු කරන්න මත බාධා නොකරන්න වෙත ඇතුළු වන්න"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"හඬ පරිමාව වැඩි කරන්න මත බාධා නොකරන්න වෙතින් ඉවත් වන්න"</string>
+ <string name="battery" msgid="7498329822413202973">"බැටරිය"</string>
+ <string name="clock" msgid="7416090374234785905">"ඔරලෝසුව"</string>
+ <string name="headset" msgid="4534219457597457353">"හෙඩ්සෙට්"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"හෙඩ්ෆෝන් සම්බන්ධ කළ"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"හෙඩ්සෙට් සම්බන්ධ කළ"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"තත්ත්ව තීරුව මත අයිකන පෙන්වීම සබල හෝ අබල කරන්න."</string>
</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings_car.xml b/packages/SystemUI/res/values-si-rLK/strings_car.xml
new file mode 100644
index 0000000..549e89b
--- /dev/null
+++ b/packages/SystemUI/res/values-si-rLK/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ආරක්ෂිතව රිය පදවන්න"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"රිය පැදවීම් තත්ත්වයන් ගැන පූර්ණ අවධානයෙන් සිටින්න, සැම විටම අදාළ සියලු නීතිවලට ගරු කරන්න. මග පෙන්වීම් නිවැරදි නොවීමට, අසම්පූර්ණ වීමට, භයානක වීමට, නුසුදුසු වීමට, තහනම් ඒවා වීමට, හෝ පරිපාලන ප්රදේශ තරණයට අදාළ ඒවා වීමට හැකිය. දත්ත තථ්ය කාල නොවීමට හැකි අතර, ස්ථාන නිරවද්යතාව සහතික කළ නොහැකිය. රිය පදවන අතරතුර ඔබේ ජංගම උපාංගය භාවිත කිරීම හෝ Android Auto සඳහා නිපදවා නැති යෙදුම් භාවිත කිරීම නොකරන්න."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings_tv.xml b/packages/SystemUI/res/values-si-rLK/strings_tv.xml
index fe51cc8..b3beef3 100644
--- a/packages/SystemUI/res/values-si-rLK/strings_tv.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings_tv.xml
@@ -20,7 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="pip_exit" msgid="6423523158795119008">"PIP වසන්න"</string>
- <string name="pip_fullscreen" msgid="8604643018538487816">"පූර්ණ තිරය"</string>
+ <string name="pip_fullscreen" msgid="8604643018538487816">"සම්පූර්ණ තිරය"</string>
<string name="pip_play" msgid="674145557658227044">"ධාවනය කරන්න"</string>
<string name="pip_pause" msgid="8412075640017218862">"විරාමය"</string>
<string name="pip_cancel" msgid="5173898361050559462">"අවලංගු කරන්න"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 7458212..b149fcb 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Iba\nprioritné"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Iba\nbudíky"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Všetky"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Všetky\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíja sa (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Nabíja sa rýchlo (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Nabíja sa pomaly (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Domovská stránka"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedávne"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Späť"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Zobrazovať panel Nerušiť v dialógu Hlasitosť"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Umožňuje povoliť úplné ovládanie režimu nerušiť v dialógu Hlasitosť."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hlasitosť a režim Nerušiť"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Pri znížení hlasitosti prejsť do režimu Nerušiť"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim Nerušiť"</string>
+ <string name="battery" msgid="7498329822413202973">"Batéria"</string>
+ <string name="clock" msgid="7416090374234785905">"Hodiny"</string>
+ <string name="headset" msgid="4534219457597457353">"Náhlavná súprava"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slúchadlá pripojené"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Náhlavná súprava pripojená"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Umožňuje aktivovať alebo deaktivovať zobrazenie ikon v stavovom riadku."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings_car.xml b/packages/SystemUI/res/values-sk/strings_car.xml
new file mode 100644
index 0000000..bd9410d
--- /dev/null
+++ b/packages/SystemUI/res/values-sk/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Jazdite bezpečne"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Zachovajte si úplný prehľad o jazdných podmienkach a vždy dodržiavajte príslušné zákony. Trasy môžu byť nepresné, neúplné, nebezpečné, nevhodné, zakázané alebo môžu zahŕňať cestu cez rôzne správne oblasti. Obchodné informácie môžu byť tiež nepresné alebo neúplné. Údaje nie sú aktualizované v reálnom čase a presnosť polohy nemôžeme zaručiť. Počas jazdy nemanipulujte s mobilným zariadením ani nepoužívajte aplikácie, ktoré nie sú určené pre funkciu Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 59037a8..bf6078e 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprednostno"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Vse"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Vse\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hitro polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Počasno polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Začetni zaslon"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazaj"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Pokaži način »ne moti« v nadzoru glasnosti"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Omogoča popoln nadzor načina »ne moti« v pogovornem oknu za glasnost."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Nadzor glasnosti in način »ne moti«"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Odpiranje načina »ne moti« pri zmanjšanju glasnosti"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Zapustitev načina »ne moti« pri povečanju glasnosti"</string>
+ <string name="battery" msgid="7498329822413202973">"Akumulator"</string>
+ <string name="clock" msgid="7416090374234785905">"Ura"</string>
+ <string name="headset" msgid="4534219457597457353">"Slušalke z mikrofonom"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalke priključene"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalke z mikrofonom priključene"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogoči ali onemogoči prikaz ikon v vrstici stanja."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings_car.xml b/packages/SystemUI/res/values-sl/strings_car.xml
new file mode 100644
index 0000000..0102799
--- /dev/null
+++ b/packages/SystemUI/res/values-sl/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Varna vožnja"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Bodite pozorni na vozne razmere in vselej upoštevajte veljavno zakonodajo. Navodila za pot so morda nenatančna, nepopolna, nevarna, neprimerna ali prepovedana oziroma vključujejo prečkanje upravnih območij. Prav tako nenatančni ali nepopolni so lahko podatki o podjetjih. Podatki niso sprotni in natančnosti lociranja ni mogoče zagotoviti. Med vožnjo ne uporabljajte mobilne naprave ali aplikacij, ki niso namenjene za Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index 7dcad4e..0014b33 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumi dhe \"Mos shqetëso\""</string>
<string name="volume_down_silent" msgid="66962568467719591">"Vendos \"Mos shqetëso\" me volumin poshtë"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"Dil nga \"Mos shqetëso\" me volumin lart"</string>
+ <string name="battery" msgid="7498329822413202973">"Bateria"</string>
+ <string name="clock" msgid="7416090374234785905">"Ora"</string>
+ <string name="headset" msgid="4534219457597457353">"Kufjet me mikrofon"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kufjet u lidhën"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kufjet me mikrofon u lidhën"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktivizo ose çaktivizo shfaqjen e ikonave në shiritin e statusit."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings_car.xml b/packages/SystemUI/res/values-sq-rAL/strings_car.xml
new file mode 100644
index 0000000..2e63877
--- /dev/null
+++ b/packages/SystemUI/res/values-sq-rAL/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Drejtoje makinën në mënyrë të sigurt"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Ji plotësisht i vetëdijshëm për kushtet e lëvizjes me makinë dhe respekto gjithmonë ligjet përkatëse. Udhëzimet mund të jenë të pasakta, jo të plota, të rrezikshme, të papërshtatshme, të ndaluara ose mund të përfshijnë kalimin në zona administrative. Informacionet e biznesit mund të jenë po ashtu të pasakta ose jo të plota. Të dhënat nuk janë në kohë reale dhe saktësia e vendndodhjes nuk mund të garantohet. Gjatë drejtimit të makinës mos e përdor pajisjen celulare ose mos përdor aplikacionet që nuk janë të planifikuara për Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index d6a4359..15b01dc 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -333,8 +333,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Само\nприорит. прекиди"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Само\nаларми"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Све"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Сви\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Пуњење (пун је за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Брзо се пуни (напуниће се за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Споро се пуни (напуниће се за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -484,14 +483,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Почетни"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Недавни садржај"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Прикажи подешавање Не узнемиравај у дијалогу за јачину звука"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дозвољава потпуну контролу подешавања Не узнемиравај у дијалогу за јачину звука."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Јачина звука и Не узнемиравај"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Уђи у режим Не узнемиравај када је звук утишан"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Изађи из режима Не узнемиравај када је звук појачан"</string>
+ <string name="battery" msgid="7498329822413202973">"Батерија"</string>
+ <string name="clock" msgid="7416090374234785905">"Сат"</string>
+ <string name="headset" msgid="4534219457597457353">"Наглавне слушалице"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалице су повезане"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Наглавне слушалице су повезане"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Омогућите или онемогућите приказивање икона на статусној траци."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings_car.xml b/packages/SystemUI/res/values-sr/strings_car.xml
new file mode 100644
index 0000000..7f99120
--- /dev/null
+++ b/packages/SystemUI/res/values-sr/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Возите безбедно"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Увек водите рачуна о условима вожње и увек поштујте примењиве законе. Упутства могу да буду нетачна, непотпуна, опасна, неприкладна или забрањена, односно да подразумевају прелазак између административних области. И подаци о предузећу могу да буду нетачни или непотпуни. Подаци не настају у реалном времену и не можемо да гарантујемо прецизност локације. Немојте да употребљавате мобилни уређај нити да користите апликације које нису намењене за Android Auto током вожње."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 4d8a0e3..d786e64 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Endast\nprioriterade"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Endast\nalarm"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Alla"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alla\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laddar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tills batteriet är fulladdat)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Laddas snabbt (batteriet fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Laddas sakta (batteriet fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startsida"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Senaste"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tillbaka"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Visa Stör ej i volymkontrollen"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillåt full kontroll över Stör ej i volymkontrollen"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volym och Stör ej"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Aktivera Stör ej när volymen sänks"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Inaktivera Stör ej när volymen höjs"</string>
+ <string name="battery" msgid="7498329822413202973">"Batteri"</string>
+ <string name="clock" msgid="7416090374234785905">"Klocka"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hörlurar anslutna"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset anslutet"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Visa eller dölj ikoner i statusfältet."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings_car.xml b/packages/SystemUI/res/values-sv/strings_car.xml
new file mode 100644
index 0000000..0c03fb6
--- /dev/null
+++ b/packages/SystemUI/res/values-sv/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Kör försiktigt"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Håll koll på trafik- och körförhållanden och följ gällande lagar. Det kan hända att vägbeskrivningen inte stämmer, att den är ofullständig, farlig, olämplig, förbjuden eller att den innebär att du måste korsa en administrativ enhet. Det kan även hända att företagsuppgifter är felaktiga eller ofullständiga. Uppgifter visas inte i realtid och det går inte att garantera att platsen är korrekt. Hantera inte din mobila enhet och använd inte appar som inte är ämnade för Android Auto medan du kör."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 97b1a3d..b2d8362 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kipaumbele\npekee"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kengele\npekee"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Zote"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Zote\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Inachaji (Imebakisha <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ijae)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Inachaji kwa kasi (itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Inachaji pole pole (itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Mwanzo"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Zilizotumika majuzi"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nyuma"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Onyesha hali ya usinisumbue katika sauti"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ruhusu udhibiti kamili wa hali ya usinisumbue katika kidirisha cha sauti."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Sauti na Usinisumbue"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Weka hali ya usinisumbue sauti inapopunguzwa"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Ondoa hali ya usinisumbue sauti inapoongezwa"</string>
+ <string name="battery" msgid="7498329822413202973">"Betri"</string>
+ <string name="clock" msgid="7416090374234785905">"Saa"</string>
+ <string name="headset" msgid="4534219457597457353">"Vifaa vya sauti"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Imeunganisha spika za masikioni"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Imeunganisha vifaa vya sauti"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Washa au uzime aikoni ili zisionekane kwenye sehemu ya arifa"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings_car.xml b/packages/SystemUI/res/values-sw/strings_car.xml
new file mode 100644
index 0000000..e4bb25c
--- /dev/null
+++ b/packages/SystemUI/res/values-sw/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Endesha gari kwa usalama"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Jifahamishe kikamilifu kuhusu masharti ya kuendesha gari na utii kila wakati sheria zilizopo. Huenda maelekezo yasiwe sahihi, hayajakamilika, ni hatari, hayafai, hayaruhusiwi au yanahusisha kuvuka maeneo ya kiutawala. Huenda pia maelezo ya biashara yasiwe sahihi au hayajakamilika. Data si ya wakati halisi na hatuwezi kukupa hakikisho kuhusu usahihi wa mahali. Usitumie kifaa chako cha mkononi au programu zisizo za Android Auto wakati unapoendesha gari."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index 6efa264..aa1da9a 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"முன்னுரிமைகள்\nமட்டும்"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"அலாரங்கள்\nமட்டும்"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"எல்லாம்"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"எல்லாம்\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"சார்ஜாகிறது (முழு சார்ஜிற்கு <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ஆகும்)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"வேகமாக சார்ஜாகிறது (முழு சார்ஜிற்கு: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"மெதுவாக சார்ஜாகிறது (முழு சார்ஜிற்கு: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"முகப்பு"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"சமீபத்தியவை"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"முந்தையது"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"ஒலி உரையாடலில் தொந்தரவு செய்ய வேண்டாம் என்பதைக் காட்டு"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ஒலி உரையாடலில் தொந்தரவு செய்ய வேண்டாம் என்பதன் முழுக் கட்டுப்பாட்டையும் அனுமதி."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ஒலி மற்றும் தொந்தரவு செய்ய வேண்டாம்"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"ஒலி குறைக்கும் போது தொந்தரவு செய்ய வேண்டாம் என்பதை இயக்கு"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ஒலி அதிகரிக்கும் போது தொந்தரவு செய்ய வேண்டாம் என்பதை முடக்கு"</string>
+ <string name="battery" msgid="7498329822413202973">"பேட்டரி"</string>
+ <string name="clock" msgid="7416090374234785905">"கடிகாரம்"</string>
+ <string name="headset" msgid="4534219457597457353">"ஹெட்செட்"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ஹெட்ஃபோன்கள் இணைக்கப்பட்டன"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ஹெட்செட் இணைக்கப்பட்டது"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"நிலைப் பட்டியில் ஐகான்களைக் காட்டுவதை இயக்கும் அல்லது முடக்கும்."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings_car.xml b/packages/SystemUI/res/values-ta-rIN/strings_car.xml
new file mode 100644
index 0000000..b40ba76
--- /dev/null
+++ b/packages/SystemUI/res/values-ta-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"பாதுகாப்பாக ஓட்டவும்"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"வாகனம் ஓட்டுவதற்கான சூழ்நிலைகளை முழுவதுமாகத் தெரிந்து வைத்திருக்கவும் மற்றும் பொருந்தும் விதிகளை எப்போதும் பின்பற்றவும். வழிகள் துல்லியமற்றதாக, முழுமையற்றதாக, ஆபத்துக்குரியதாக, பொருத்தமில்லாததாக, தடைசெய்யப்பட்டதாக அல்லது அரசின் கட்டுப்பாட்டில் உள்ள எல்லைகளைக் கடப்பதாக இருக்கலாம். வணிகத் தகவலும் துல்லியமற்றதாக அல்லது முழுமையற்றதாக இருக்கலாம். தரவு நிகழ்நேர அடிப்படையிலானது அல்ல மற்றும் இருப்பிடத் துல்லியத்திற்கு உத்தரவாதம் வழங்க முடியாது. வாகனம் ஓட்டும் போது மொபைல் சாதனத்தையோ அல்லது Android Auto மூலம் கட்டுப்படுத்த முடியாத பயன்பாடுகளையோ பயன்படுத்த வேண்டாம்."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index 2d30739..eb3feac 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -487,4 +487,10 @@
<string name="volume_and_do_not_disturb" msgid="3114580364524650941">"వాల్యూమ్ మరియు అంతరాయం కలిగించవద్దు"</string>
<string name="volume_down_silent" msgid="66962568467719591">"వాల్యూమ్ తగ్గిస్తే అంతరాయం కలిగించవద్దులోకి ప్రవేశిస్తుంది"</string>
<string name="volume_up_silent" msgid="7141255269783588286">"వాల్యూమ్ పెంచితే అంతరాయం కలిగించవద్దు నుండి నిష్క్రమిస్తుంది"</string>
+ <string name="battery" msgid="7498329822413202973">"బ్యాటరీ"</string>
+ <string name="clock" msgid="7416090374234785905">"గడియారం"</string>
+ <string name="headset" msgid="4534219457597457353">"హెడ్సెట్"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"హెడ్ఫోన్లు కనెక్ట్ చేయబడ్డాయి"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"హెడ్సెట్ కనెక్ట్ చేయబడింది"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"స్థితి పట్టీలో చిహ్నాలు ప్రదర్శించడాన్ని ప్రారంభించండి లేదా నిలిపివేయండి."</string>
</resources>
diff --git a/packages/SystemUI/res/values-te-rIN/strings_car.xml b/packages/SystemUI/res/values-te-rIN/strings_car.xml
new file mode 100644
index 0000000..6f60b3a
--- /dev/null
+++ b/packages/SystemUI/res/values-te-rIN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"సురక్షితంగా డ్రైవ్ చేయండి"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"డ్రైవింగ్ షరతులపై పూర్తి అవగాహనను కలిగి ఉండండి మరియు ఎల్లప్పుడూ వర్తించే చట్టాలకు అనుగుణంగా నడుచుకోండి. దిశలు నిర్దిష్టంగా ఉండకపోవచ్చు, అసంపూర్ణంగా ఉండవచ్చు, ప్రమాదకరంగా ఉండవచ్చు, అనుకూలంగా ఉండకపోవచ్చు, నిషేధించబడి ఉండవచ్చు లేదా పాలనా ప్రాంతాల మీదుగా వెళ్లే విధంగా ఉండవచ్చు. వ్యాపార సమాచారం కూడా నిర్దిష్టంగా లేదా సంపూర్ణంగా ఉండకపోవచ్చు. డేటా నిజ-సమయానికి సంబంధించినది కాదు మరియు స్థాన ఖచ్చితత్వానికి ఎలాంటి హామీ ఉండకపోవచ్చు. డ్రైవింగ్ చేస్తున్నప్పుడు మీ మొబైల్ పరికరాన్ని ఉపయోగించవద్దు లేదా Android Auto కోసం ఉద్దేశించబడని అనువర్తనాలను ఉపయోగించవద్దు."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 9ac8c16..fba1efc 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"เฉพาะเรื่อง\nสำคัญ"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"เฉพาะปลุก\nเท่านั้น"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"ทั้งหมด"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ทั้งหมด\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"กำลังชาร์จ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> เต็ม)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"กำลังชาร์จอย่างรวดเร็ว (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> จะเต็ม)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"กำลังชาร์จอย่างช้าๆ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> จะเต็ม)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"หน้าแรก"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ล่าสุด"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"กลับ"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"แสดงโหมดห้ามรบกวนในระดับเสียง"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"อนุญาตให้ควบคุมโหมดห้ามรบกวนได้อย่างสมบูรณ์ในกล่องโต้ตอบระดับเสียง"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ระดับเสียงและโหมดห้ามรบกวน"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"เข้าสู่โหมดห้ามรบกวนเมื่อลดระดับเสียง"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"ออกจากโหมดห้ามรบกวนเมื่อเพิ่มระดับเสียง"</string>
+ <string name="battery" msgid="7498329822413202973">"แบตเตอรี่"</string>
+ <string name="clock" msgid="7416090374234785905">"นาฬิกา"</string>
+ <string name="headset" msgid="4534219457597457353">"ชุดหูฟัง"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"เชื่อมต่อหูฟังแล้ว"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"เชื่อมต่อชุดหูฟังแล้ว"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"เปิดหรือปิดไอคอนจากการแสดงในแถบสถานะ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings_car.xml b/packages/SystemUI/res/values-th/strings_car.xml
new file mode 100644
index 0000000..b40584a
--- /dev/null
+++ b/packages/SystemUI/res/values-th/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"ขับขี่อย่างปลอดภัย"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"มีสติรู้ตัวเต็มที่ในสภาพการขับขี่ต่างๆ เและปฏิบัติตามกฎหมายที่บังคับใช้เสมอ ทั้งนี้เส้นทางอาจไม่ถูกต้อง ไม่ครบถ้วน เป็นอันตราย ไม่เหมาะสม ห้ามใช้ หรือมีการข้ามเขตปกครอง นอกจากนี้ข้อมูลทางธุรกิจอาจไม่ถูกต้องหรือไม่สมบูรณ์ ข้อมูลไม่ใช่แบบเรียลไทม์ และไม่สามารถรับประกันความถูกต้องของตำแหน่ง อย่าใช้งานอุปกรณ์เคลื่อนที่หรือใช้แอปที่ไม่ได้ออกแบบมาสำหรับ Android Auto ขณะขับรถ"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 1d5a3b4..082cc28 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priyoridad\nlang"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Mga alarm\nlang"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Lahat"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Lahat\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nagtsa-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang mapuno)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mabilis mag-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang sa mapuno)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mabagal mag-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang sa mapuno)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Mga Kamakailang Ginamit"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Bumalik"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ipakita ang huwag istorbohin sa volume"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Payagang ganap na makontrol ang huwag istorbohin sa dialog ng volume."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume at Huwag istorbohin"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Gamitin ang huwag istorbohin nang mahina ang volume"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Umalis sa huwag istorbohin nang malakas ang volume"</string>
+ <string name="battery" msgid="7498329822413202973">"Baterya"</string>
+ <string name="clock" msgid="7416090374234785905">"Orasan"</string>
+ <string name="headset" msgid="4534219457597457353">"Headset"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Nakakonekta ang mga headphone"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Nakakonekta ang headset"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"I-enable o i-disable ang pagpapakita sa mga icon sa status bar."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings_car.xml b/packages/SystemUI/res/values-tl/strings_car.xml
new file mode 100644
index 0000000..6bb04ab
--- /dev/null
+++ b/packages/SystemUI/res/values-tl/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Magmaneho nang ligtas"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Manatiling lubos na nakakaalam sa mga kundisyon sa pagmamaneho at palaging sumunod sa mga naaangkop na batas. Ang mga direksyon ay maaaring hindi tumpak, hindi kumpleto, mapanganib, hindi naaangkop, ipinagbabawal o kinasasangkutan ng pagtawid sa mga administratibong lugar. Maaari ding hindi tumpak o hindi kumpleto ang impormasyon ng negosyo. Hindi real-time ang data at hindi magagarantiya ang katumpakan ng lokasyon. Huwag gamitin ang iyong mobile device o gumamit ng mga app na hindi ginawa para sa Android Auto habang nagmamaneho."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 22108b5..62639d0 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Yalnızca\nöncelik"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Yalnızca\nalarmlar"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tümü"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tümü\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Şarj oluyor (tamamen dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hızlı şarj oluyor (tam dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Yavaş şarj oluyor (tam dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ana ekran"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Son çağrılar"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Geri"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ses iletişim kutusunda rahatsız etmeyin modunu göster"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ses iletişim kutusunda rahatsız etmeyin modunu tam olarak denetlemeye izin ver."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ses ve Rahatsız etmeyin"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Ses kısıldığında rahatsız etmeyin moduna geç"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Ses açıldığında rahatsız etmeyin modundan çık"</string>
+ <string name="battery" msgid="7498329822413202973">"Pil"</string>
+ <string name="clock" msgid="7416090374234785905">"Saat"</string>
+ <string name="headset" msgid="4534219457597457353">"Mikrofonlu kulaklık"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Mikrofonlu kulaklık bağlı"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mikrofonlu kulaklık bağlı"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Simgelerin durum çubuğunda görüntülenmesini etkinleştir veya devre dışı bırak"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings_car.xml b/packages/SystemUI/res/values-tr/strings_car.xml
new file mode 100644
index 0000000..72018e2
--- /dev/null
+++ b/packages/SystemUI/res/values-tr/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Güvenli bir şekilde sürün"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Sürüş koşullarına karşı dikkatli olun ve geçerli yasalara her zaman uyun. Yol tarifi yanlış, eksik, tehlikeli, uygunsuz, yasak olabilir veya idari bölgelerden geçişleri içerebilir. İşletme bilgileri de yanlış veya eksik olabilir. Veriler gerçek zamanlı değildir ve konum doğruluğu garanti edilemez. Sürüş sırasında mobil cihazınızı veya Android Auto için geliştirilmemiş uygulamaları kullanmayın."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 615a4c4..d9c9b7f 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -334,8 +334,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Лише\nприорітетні"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Лише\nсигнали"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Усі"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Усі\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного зарядження)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Швидке заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного заряду)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Повільне заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного заряду)"</string>
@@ -485,14 +484,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Головний екран"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Останні"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показувати режим \"Не турбувати\" у вікні регулятора гучності"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дозволити керувати режимом \"Не турбувати\" у вікні регулятора гучності."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Регулятор гучності та режим \"Не турбувати\""</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Вмикати режим \"Не турбувати\" під час зменшення гучності"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Вимикати режим \"Не турбувати\" під час збільшення гучності"</string>
+ <string name="battery" msgid="7498329822413202973">"Акумулятор"</string>
+ <string name="clock" msgid="7416090374234785905">"Годинник"</string>
+ <string name="headset" msgid="4534219457597457353">"Гарнітура"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Навушники під’єднано"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнітуру під’єднано"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Показати або сховати значки в рядку стану."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings_car.xml b/packages/SystemUI/res/values-uk/strings_car.xml
new file mode 100644
index 0000000..4fda0ab
--- /dev/null
+++ b/packages/SystemUI/res/values-uk/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Будьте уважні за кермом"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Стежте умовами дорожнього руху та завжди дотримуйтеся відповідних законів. Маршрути можуть бути неточними, неповними, небезпечними, непридатними або перетинати межі адміністративних одиниць. Інформація про компанії також може бути неточною або неповною. Дані надаються не в реальному часі. Точність визначення місцезнаходжень не гарантується. Коли ви за кермом, не користуйтеся мобільним пристроєм або додатками, не призначеними для Android Auto."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index a789eec..5bf8210 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"صرف\nترجیحی"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"صرف\nالارمز"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"سبھی"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"تمام\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"چارج ہو رہا ہے (مکمل ہونے تک <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی ہیں)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"تیزی سے چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"آہستہ چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ہوم"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"حالیہ"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"پیچھے"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"والیوم میں ڈسٹرب نہ کریں دکھائیں"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"والیوم ڈائیلاگ میں ڈسٹرب نہ کریں کے مکمل کنٹرول کی اجازت دیں۔"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"والیوم اور ڈسٹرب نہ کریں"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"کم والیوم پر \'ڈسٹرب نہ کریں\' میں داخل ہوں"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"زیادہ والیوم پر \'ڈسٹرب نہ کریں\' سے خارج ہوں"</string>
+ <string name="battery" msgid="7498329822413202973">"بیٹری"</string>
+ <string name="clock" msgid="7416090374234785905">"گھڑی"</string>
+ <string name="headset" msgid="4534219457597457353">"ہیڈ سیٹ"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ہیڈ فونز منسلک ہیں"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ہیڈ سیٹ منسلک ہے"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"اسٹیٹس بار میں دکھائے جانے کیلئے آئیکنز فعال یا غیر فعال کریں۔"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings_car.xml b/packages/SystemUI/res/values-ur-rPK/strings_car.xml
new file mode 100644
index 0000000..151ca09
--- /dev/null
+++ b/packages/SystemUI/res/values-ur-rPK/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"احتیاط سے گاڑی چلائیں"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"گاڑی چلاتے وقت اپنے گردونواح سے مکمل طور پر باخبر رہیں اور ہمیشہ قابل اطلاق قوانین کی پابندی کریں۔ ہدایات غلط، نامکمل، خطرناک، موزوں نہیں، ممنوع یا انتظامی علاقوں میں سے گزرنے کے متعلق ہو سکتی ہیں۔ کاروباری معلومات بھی غلط یا نامکمل ہو سکتی ہے۔ گاڑی چلاتے وقت اپنا موبائل آلہ یا وہ ایپس استعمال نہ کریں جو Android Auto کیلئے نہیں ہیں۔"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index 4f32c34..1c642b0 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Faqat\nmuhimlar"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Faqat\nsignallar"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Barchasi"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Barcha\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>da to‘ladi)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Tez quvvat olmoqda (to‘lishiga <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sekin quvvat olmoqda (to‘lishiga <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Bosh ekran"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"So‘nggi ishlatilganlar"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Orqaga"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ovoz boshqarish oynasida “Bezovta qilinmasin” panelini ko‘rsatish"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ovoz balandligini boshqarish oynasida “Bezovta qilinmasin” rejimini to‘liq boshqarishga ruxsat beradi."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ovoz balandligini boshqarish va “Bezovta qilinmasin” rejimi"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Ovozni pasaytirganda “Bezovta qilinmasin” rejimini yoqish"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Ovozni ko‘targanda “Bezovta qilinmasin” rejimini o‘chirish"</string>
+ <string name="battery" msgid="7498329822413202973">"Batareya"</string>
+ <string name="clock" msgid="7416090374234785905">"Soat"</string>
+ <string name="headset" msgid="4534219457597457353">"Audio moslama"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Quloqchinlar ulandi"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Audio moslama ulandi"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Holat qatorida begilarning ko‘rsatilishini yoqish yoki o‘chirish."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings_car.xml b/packages/SystemUI/res/values-uz-rUZ/strings_car.xml
new file mode 100644
index 0000000..610dc1f
--- /dev/null
+++ b/packages/SystemUI/res/values-uz-rUZ/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Xavfsiz haydash"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Harakat xavfsizligi va amaldagi qonunchilikka doim rioya qiling. Yo‘l ko‘rsatmalari noaniq, chala, xavfli, mos emas, taqiqlangan yoki ma’muriy hududlarni kesib o‘tadigan bo‘lishi mumkin. Biznes ma’lumotlari ham noaniq yoki chala bo‘lishi mumkin. Ma’lumotlar real vaqt rejimida bo‘lmasligi hamda joylashuv ma’lumotining aniqligi kafolatlanmaydi. Avtomobilni haydash mobaynida Android Auto xizmati bilan bog‘liq bo‘lmagan hollarda mobil qurilma yoki ilovalardan foydalanmang."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 8108810..55154ac 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Chỉ\nưu tiên"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Chỉ\nbáo thức"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Tất cả"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tất cả\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Đang sạc (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho đến khi đầy)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Sạc nhanh (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho tới khi đầy)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sạc chậm (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho tới khi đầy)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Màn hình chính"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Gần đây"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Quay lại"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Hiển thị không làm phiền theo âm lượng"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Cho phép kiểm soát toàn bộ tính năng không làm phiền trong hộp thoại âm lượng."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Âm lượng và Không làm phiền"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Truy cập không làm phiền khi giảm âm lượng"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Thoát không làm phiền khi tăng âm lượng"</string>
+ <string name="battery" msgid="7498329822413202973">"Pin"</string>
+ <string name="clock" msgid="7416090374234785905">"Đồng hồ"</string>
+ <string name="headset" msgid="4534219457597457353">"Tai nghe"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Đã kết nối tai nghe"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Đã kết nối tai nghe"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Bật hoặc tắt biểu tượng hiển thị trong thanh trạng thái."</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings_car.xml b/packages/SystemUI/res/values-vi/strings_car.xml
new file mode 100644
index 0000000..2aee7d5
--- /dev/null
+++ b/packages/SystemUI/res/values-vi/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Lái xe an toàn"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Luôn biết rõ điều kiện lái xe và luôn tuân thủ luật pháp hiện hành. Chỉ đường có thể không chính xác, không hoàn chỉnh, nguy hiểm, không thích hợp, bị cấm hoặc bao gồm tuyến đường giao các khu vực hành chính. Thông tin doanh nghiệp cũng có thể không chính xác hoặc không hoàn chỉnh. Dữ liệu không ở thời gian thực và không thể đảm bảo độ chính xác của vị trí. Không sử dụng thiết bị di động của bạn hoặc sử dụng ứng dụng không dành cho Android Auto trong khi lái xe."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 1829519..8bbd41c 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"仅限\n优先打扰"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"仅限\n闹钟"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"全部"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"正在充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"正在快速充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"正在慢速充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主屏幕"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量对话框中显示“请勿打扰”模式"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"允许在音量对话框中完全控制“请勿打扰”模式。"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和“请勿打扰”设置"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"按音量调低键时进入“请勿打扰”模式"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"按音量调高键时退出“请勿打扰”模式"</string>
+ <string name="battery" msgid="7498329822413202973">"电池"</string>
+ <string name="clock" msgid="7416090374234785905">"时钟"</string>
+ <string name="headset" msgid="4534219457597457353">"耳机"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已连接到耳机"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已连接到耳机"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"指定在状态栏中显示或隐藏图标。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings_car.xml b/packages/SystemUI/res/values-zh-rCN/strings_car.xml
new file mode 100644
index 0000000..6a5a4e8
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rCN/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"安全驾驶"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"请充分了解驾驶条件并务必遵守适用的法律。路线指示可能不准确,不完整,也可能包含危险、不适合通行、禁止通行或跨越行政区域的路段。商家信息也可能不准确或不完整。数据并非实时提供,因此无法保证位置信息的精确度。请勿在驾驶过程中操作您的移动设备或使用不支持 Android Auto 的应用。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 5d268e8..1ec4205 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"僅限\n優先"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"僅限\n鬧鐘"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"全部"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"正在快速充電 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"正在緩慢充電 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主畫面"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近的活動"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量對話框中顯示「請勿騷擾」設定"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"允許在音量對話框中全面控制「請勿騷擾」功能。"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和「請勿騷擾」設定"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"調低音量時啟用「請勿騷擾」模式"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"調高音量時停用「請勿騷擾」模式"</string>
+ <string name="battery" msgid="7498329822413202973">"電池"</string>
+ <string name="clock" msgid="7416090374234785905">"時鐘"</string>
+ <string name="headset" msgid="4534219457597457353">"耳機"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已連接至耳機"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已連接至耳機"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"顯示或隱藏狀態列上的圖示。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings_car.xml b/packages/SystemUI/res/values-zh-rHK/strings_car.xml
new file mode 100644
index 0000000..18f9e50
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rHK/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"請安全駕駛"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"請隨時留意路面情況,並遵守適用的交通規則。系統提供的路線可能不準確、不完整、存在危險、不適合、禁止通行,或涉及跨越行政區域的路段。此外,商家資訊也可能不準確或不完整。路況資料並非即時更新,也無法保證定位資訊的準確性。駕駛時請勿操作流動裝置,或使用不適用於 Android Auto 的應用程式。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 676e003..ab0a713 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"僅允許\n優先通知"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"僅允許\n鬧鐘"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"全部"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後充飽)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"快速充電中 (充飽需要 <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"慢速充電中 (充飽需要 <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主畫面"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"近期活動"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量對話方塊中顯示「零打擾」設定"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"在音量對話方塊中顯示完整的「零打擾」設定。"</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和「零打擾」設定"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"按下調低音量鍵時啟用「零打擾」模式"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"按下調高音量鍵時停用「零打擾」模式"</string>
+ <string name="battery" msgid="7498329822413202973">"電池"</string>
+ <string name="clock" msgid="7416090374234785905">"時鐘"</string>
+ <string name="headset" msgid="4534219457597457353">"耳機"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已與耳機連線"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已與耳機連線"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"指定在狀態列中顯示或隱藏圖示。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings_car.xml b/packages/SystemUI/res/values-zh-rTW/strings_car.xml
new file mode 100644
index 0000000..5e18309
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rTW/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"安全駕駛"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"請隨時注意周遭路況並遵守交通規則。系統所提供的路線可能有誤、不完整,或包含危險、不合適、禁止通行或管制區域的路段;此外,商家資訊也可能有誤或不完整。路況資料並非即時更新,也無法保證定位資訊必然準確無誤。駕駛時請勿操作您的行動裝置,或使用不適用於 Android Auto 的應用程式。"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 94b9081..2820a2e 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -332,8 +332,7 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Okubalulekile\nkuphela"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ama-alamu\nkuphela"</string>
<string name="interruption_level_all" msgid="1330581184930945764">"Konke"</string>
- <!-- no translation found for interruption_level_all_twoline (3719402899156124780) -->
- <skip />
+ <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Konke\n"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Iyashaja (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
<string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Iyashaja ngokushesha (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Iyashaja kancane (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string>
@@ -483,14 +482,15 @@
<string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ekhaya"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Okwakamuva"</string>
<string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Emuva"</string>
- <!-- no translation found for tuner_full_zen_title (5905081395132280054) -->
- <skip />
- <!-- no translation found for tuner_full_zen_summary (6883568374520596402) -->
- <skip />
- <!-- no translation found for volume_and_do_not_disturb (3114580364524650941) -->
- <skip />
- <!-- no translation found for volume_down_silent (66962568467719591) -->
- <skip />
- <!-- no translation found for volume_up_silent (7141255269783588286) -->
- <skip />
+ <string name="tuner_full_zen_title" msgid="5905081395132280054">"Bonisa ukungaphazamisi kuvolumu"</string>
+ <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Vumela ulawulo olugcwele lokungaphazamisi kungxoxo yevolumu."</string>
+ <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ivolumu nokungaphazamisi"</string>
+ <string name="volume_down_silent" msgid="66962568467719591">"Faka ukungaphazamisi ekwehliseni ivolumu"</string>
+ <string name="volume_up_silent" msgid="7141255269783588286">"Phuma kokuthi ungaphazamisi ekukhuphuleni ivolumu"</string>
+ <string name="battery" msgid="7498329822413202973">"Ibhethri"</string>
+ <string name="clock" msgid="7416090374234785905">"Iwashi"</string>
+ <string name="headset" msgid="4534219457597457353">"Ama-earphone"</string>
+ <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Amahedfoni axhunyiwe"</string>
+ <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ama-earphone axhunyiwe"</string>
+ <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Nika amandla noma khubaza izithonjana kusukela ekubonisweni kubha yesimo."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings_car.xml b/packages/SystemUI/res/values-zu/strings_car.xml
new file mode 100644
index 0000000..83301ac
--- /dev/null
+++ b/packages/SystemUI/res/values-zu/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Shayela ngokuqophelela"</string>
+ <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"Hlala wazi ngokugcwele izimo zokushayela uphinde uthobele yonke imithetho esebenzayo. Izikhombisi-ndlela kungenzeka azilungile, aziphelele, ziyingozi, azifanelekile, zivinjiwe, noma zifaka ukweqa izindawo zokulawula. Ulwazi lwebhizinisi kungenzeka lungalungi noma lungapheleli. Idatha akuyona isikhathi sangempela, futhi ukunemba kwendawo akukwazi ukuqinisekiswa. Ungaphathi idivayisi yakho yeselula noma usebenzise izinhlelo zokusebenza ezihloselwe i-Android Auto ngenkathi ushayela."</string>
+</resources>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index e7fd295..b2190ec 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -100,9 +100,11 @@
<color name="current_user_border_color">@color/system_accent_color</color>
<!-- The "inside" of a notification, reached via longpress -->
- <color name="notification_guts_bg_color">@*android:color/material_grey_50</color>
+ <color name="notification_guts_bg_color">#eeeeee</color>
<color name="notification_guts_slider_color">@*android:color/material_deep_teal_500</color>
<color name="notification_guts_secondary_slider_color">#858383</color>
+ <color name="notification_guts_icon_tint">#8a000000</color>
+ <color name="notification_guts_disabled_icon_tint">#4d000000</color>
<color name="assist_orb_color">#ffffff</color>
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 9a00b4b..0475c72 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -24,6 +24,7 @@
import android.app.SearchManager;
import android.app.StatusBarManager;
import android.app.trust.TrustManager;
+import android.auditing.SecurityLog;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -83,6 +84,10 @@
import java.util.List;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_WRONG_CREDENTIAL;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
/**
* Mediates requests related to the keyguard. This includes queries about the
@@ -549,14 +554,28 @@
@Override
public int getBouncerPromptReason() {
int currentUser = ActivityManager.getCurrentUser();
- if ((mUpdateMonitor.getUserTrustIsManaged(currentUser)
- || mUpdateMonitor.isUnlockWithFingerprintPossible(currentUser))
- && !mUpdateMonitor.getStrongAuthTracker().hasUserAuthenticatedSinceBoot()) {
+ boolean trust = mTrustManager.isTrustUsuallyManaged(currentUser);
+ boolean fingerprint = mUpdateMonitor.isUnlockWithFingerprintPossible(currentUser);
+ boolean any = trust || fingerprint;
+ KeyguardUpdateMonitor.StrongAuthTracker strongAuthTracker =
+ mUpdateMonitor.getStrongAuthTracker();
+ int strongAuth = strongAuthTracker.getStrongAuthForUser(currentUser);
+
+ if (any && !strongAuthTracker.hasUserAuthenticatedSinceBoot()) {
return KeyguardSecurityView.PROMPT_REASON_RESTART;
- } else if (mUpdateMonitor.isUnlockWithFingerprintPossible(currentUser)
- && mUpdateMonitor.hasFingerprintUnlockTimedOut(currentUser)) {
+ } else if (fingerprint && mUpdateMonitor.hasFingerprintUnlockTimedOut(currentUser)) {
return KeyguardSecurityView.PROMPT_REASON_TIMEOUT;
+ } else if (any && (strongAuth & STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW) != 0) {
+ return KeyguardSecurityView.PROMPT_REASON_DEVICE_ADMIN;
+ } else if (trust && (strongAuth & SOME_AUTH_REQUIRED_AFTER_USER_REQUEST) != 0) {
+ return KeyguardSecurityView.PROMPT_REASON_USER_REQUEST;
+ } else if (any && (strongAuth & STRONG_AUTH_REQUIRED_AFTER_LOCKOUT) != 0) {
+ return KeyguardSecurityView.PROMPT_REASON_AFTER_LOCKOUT;
+ } else if (trust && (strongAuth & SOME_AUTH_REQUIRED_AFTER_WRONG_CREDENTIAL) != 0) {
+ return KeyguardSecurityView.PROMPT_REASON_WRONG_CREDENTIAL;
}
+
+
return KeyguardSecurityView.PROMPT_REASON_NONE;
}
};
@@ -1352,6 +1371,11 @@
* @see #KEYGUARD_DONE
*/
private void handleKeyguardDone(boolean authenticated) {
+ if (SecurityLog.isLoggingEnabled()
+ && mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser())) {
+ SecurityLog.writeEvent(SecurityLog.TAG_DEVICE_UNLOCK_ATTEMPT,
+ (authenticated ? 1 : 0), "Unknown");
+ }
if (DEBUG) Log.d(TAG, "handleKeyguardDone");
synchronized (this) {
resetKeyguardDonePendingLocked();
@@ -1463,6 +1487,10 @@
* @see #SHOW
*/
private void handleShow(Bundle options) {
+ if (SecurityLog.isLoggingEnabled()
+ && mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser())) {
+ SecurityLog.writeEvent(SecurityLog.TAG_DEVICE_LOCKED, "");
+ }
synchronized (KeyguardViewMediator.this) {
if (!mSystemReady) {
if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready.");
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index b5f146b..8979023 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -34,7 +34,9 @@
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+
import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile.DetailAdapter;
@@ -245,7 +247,7 @@
public void setExpanded(boolean expanded) {
if (mExpanded == expanded) return;
mExpanded = expanded;
- MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, mExpanded);
+ MetricsLogger.visibility(mContext, MetricsEvent.QS_PANEL, mExpanded);
if (!mExpanded) {
closeDetail();
} else {
@@ -498,7 +500,7 @@
int newVis = visible ? VISIBLE : INVISIBLE;
mQsContainer.setVisibility(newVis);
if (mGridContentVisible != visible) {
- MetricsLogger.visibility(mContext, MetricsLogger.QS_PANEL, newVis);
+ MetricsLogger.visibility(mContext, MetricsEvent.QS_PANEL, newVis);
}
mGridContentVisible = visible;
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 3eee087..f8cbf65 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -651,7 +651,7 @@
mDummyStackView.updateLayoutForStack(stack);
final Task toTask = new Task();
final TaskViewTransform toTransform = getThumbnailTransitionTransform(stack, stackView,
- topTask.id, toTask);
+ toTask);
ForegroundThread.getHandler().postAtFrontOfQueue(new Runnable() {
@Override
public void run() {
@@ -721,7 +721,7 @@
// Update the destination rect
Task toTask = new Task();
TaskViewTransform toTransform = getThumbnailTransitionTransform(stack, stackView,
- topTask.id, toTask);
+ toTask);
RectF toTaskRect = toTransform.rect;
Bitmap thumbnail = getThumbnailBitmap(topTask, toTask, toTransform);
if (thumbnail != null) {
@@ -754,14 +754,14 @@
* Returns the transition rect for the given task id.
*/
private TaskViewTransform getThumbnailTransitionTransform(TaskStack stack,
- TaskStackView stackView, int runningTaskId, Task runningTaskOut) {
+ TaskStackView stackView, Task runningTaskOut) {
// Find the running task in the TaskStack
Task launchTask = stack.getLaunchTarget();
if (launchTask != null) {
runningTaskOut.copyFrom(launchTask);
} else {
// If no task is specified or we can not find the task just use the front most one
- launchTask = stack.getStackFrontMostTask();
+ launchTask = stack.getStackFrontMostTask(true /* includeFreeform */);
runningTaskOut.copyFrom(launchTask);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
index c73273e..de1daa8 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
@@ -527,9 +527,9 @@
*/
public void removeTask(Task t, TaskViewAnimation animation) {
if (mStackTaskList.contains(t)) {
- boolean wasFrontMostTask = (getStackFrontMostTask() == t);
+ boolean wasFrontMostTask = (getStackFrontMostTask(false /* includeFreeform */) == t);
removeTaskImpl(mStackTaskList, t);
- Task newFrontMostTask = getStackFrontMostTask();
+ Task newFrontMostTask = getStackFrontMostTask(false /* includeFreeform */);
if (mCb != null) {
// Notify that a task has been removed
mCb.onStackTaskRemoved(this, t, wasFrontMostTask, newFrontMostTask, animation);
@@ -616,14 +616,14 @@
/**
* Gets the front-most task in the stack.
*/
- public Task getStackFrontMostTask() {
+ public Task getStackFrontMostTask(boolean includeFreeformTasks) {
ArrayList<Task> stackTasks = mStackTaskList.getTasks();
if (stackTasks.isEmpty()) {
return null;
}
for (int i = stackTasks.size() - 1; i >= 0; i--) {
Task task = stackTasks.get(i);
- if (!task.isFreeformTask()) {
+ if (!task.isFreeformTask() || includeFreeformTasks) {
return task;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
index e99509c..93849dc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
@@ -110,6 +110,10 @@
public static final float STATE_FOCUSED = 1f;
public static final float STATE_UNFOCUSED = 0f;
+ public interface TaskStackLayoutAlgorithmCallbacks {
+ void onFocusStateChanged(float prevFocusState, float curFocusState);
+ }
+
/**
* The various stack/freeform states.
*/
@@ -210,6 +214,7 @@
Context mContext;
private Interpolator mLinearOutSlowInInterpolator;
private StackState mState = StackState.SPLIT;
+ private TaskStackLayoutAlgorithmCallbacks mCb;
// The task bounds (untransformed) for layout. This rect is anchored at mTaskRoot.
public Rect mTaskRect = new Rect();
@@ -279,8 +284,10 @@
TaskViewTransform mBackOfStackTransform = new TaskViewTransform();
TaskViewTransform mFrontOfStackTransform = new TaskViewTransform();
- public TaskStackLayoutAlgorithm(Context context) {
+ public TaskStackLayoutAlgorithm(Context context, TaskStackLayoutAlgorithmCallbacks cb) {
Resources res = context.getResources();
+ mContext = context;
+ mCb = cb;
mFocusedRange = new Range(res.getFloat(R.integer.recents_layout_focused_range_min),
res.getFloat(R.integer.recents_layout_focused_range_max));
@@ -291,7 +298,6 @@
mMinTranslationZ = res.getDimensionPixelSize(R.dimen.recents_task_view_z_min);
mMaxTranslationZ = res.getDimensionPixelSize(R.dimen.recents_task_view_z_max);
- mContext = context;
mFreeformLayoutAlgorithm = new FreeformWorkspaceLayoutAlgorithm(context);
mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
com.android.internal.R.interpolator.linear_out_slow_in);
@@ -315,8 +321,12 @@
* Sets the focused state.
*/
public void setFocusState(float focusState) {
+ float prevFocusState = mFocusState;
mFocusState = focusState;
updateFrontBackTransforms();
+ if (mCb != null) {
+ mCb.onFocusStateChanged(prevFocusState, focusState);
+ }
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 809d4ee..fe9c68e 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -88,6 +88,7 @@
/* The visual representation of a task stack view */
public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCallbacks,
TaskView.TaskViewCallbacks, TaskStackViewScroller.TaskStackViewScrollerCallbacks,
+ TaskStackLayoutAlgorithm.TaskStackLayoutAlgorithmCallbacks,
ViewPool.ViewPoolConsumer<TaskView, Task> {
private final static String KEY_SAVED_STATE_SUPER = "saved_instance_state_super";
@@ -192,9 +193,8 @@
setStack(stack);
mViewPool = new ViewPool<>(context, this);
mInflater = LayoutInflater.from(context);
- mLayoutAlgorithm = new TaskStackLayoutAlgorithm(context);
- mStackScroller = new TaskStackViewScroller(context, mLayoutAlgorithm);
- mStackScroller.setCallbacks(this);
+ mLayoutAlgorithm = new TaskStackLayoutAlgorithm(context, this);
+ mStackScroller = new TaskStackViewScroller(context, this, mLayoutAlgorithm);
mTouchHandler = new TaskStackViewTouchHandler(context, this, mStackScroller);
mAnimationHelper = new TaskStackAnimationHelper(context, this);
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
@@ -623,7 +623,7 @@
*/
void relayoutTaskViewsOnNextFrame(TaskViewAnimation animation) {
mDeferredTaskViewLayoutAnimation = animation;
- postInvalidateOnAnimation();
+ invalidate();
}
/**
@@ -852,17 +852,17 @@
};
if (scrollToTask) {
+ // Cancel any running enter animations at this point when we scroll or change focus
+ if (!mEnterAnimationComplete) {
+ cancelAllTaskViewAnimations();
+ }
+
// TODO: Center the newly focused task view, only if not freeform
float newScroll = mLayoutAlgorithm.getStackScrollForTask(newFocusedTask);
if (Float.compare(newScroll, mStackScroller.getStackScroll()) != 0) {
mStackScroller.animateScroll(mStackScroller.getStackScroll(), newScroll,
focusTaskRunnable);
willScroll = true;
-
- // Cancel any running enter animations at this point when we scroll as well
- if (!mEnterAnimationComplete) {
- cancelAllTaskViewAnimations();
- }
} else {
focusTaskRunnable.run();
}
@@ -902,7 +902,7 @@
*/
public void setRelativeFocusedTask(boolean forward, boolean stackTasksOnly, boolean animated,
boolean cancelWindowAnimations) {
- setRelativeFocusedTask(forward, stackTasksOnly, animated, false, false);
+ setRelativeFocusedTask(forward, stackTasksOnly, animated, cancelWindowAnimations, false);
}
/**
@@ -1427,7 +1427,8 @@
}
// Restore the action button visibility if it is the front most task view
- if (mScreenPinningEnabled && tv.getTask() == mStack.getStackFrontMostTask()) {
+ if (mScreenPinningEnabled && tv.getTask() ==
+ mStack.getStackFrontMostTask(false /* includeFreeform */)) {
tv.showActionButton(false /* fadeIn */, 0 /* fadeInDuration */);
}
}
@@ -1447,6 +1448,16 @@
}
}
+ /**** TaskStackLayoutAlgorithm.TaskStackLayoutAlgorithmCallbacks ****/
+
+ @Override
+ public void onFocusStateChanged(float prevFocusState, float curFocusState) {
+ if (mDeferredTaskViewLayoutAnimation == null) {
+ mUIDozeTrigger.poke();
+ relayoutTaskViewsOnNextFrame(TaskViewAnimation.IMMEDIATE);
+ }
+ }
+
/**** TaskStackViewScroller.TaskStackViewScrollerCallbacks ****/
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
index 5335b14..4ec051f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
@@ -20,7 +20,9 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
+import android.util.FloatProperty;
import android.util.Log;
+import android.util.Property;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.OverScroller;
@@ -37,6 +39,24 @@
void onScrollChanged(float prevScroll, float curScroll, TaskViewAnimation animation);
}
+ /**
+ * A Property wrapper around the <code>stackScroll</code> functionality handled by the
+ * {@link #setStackScroll(float)} and
+ * {@link #getStackScroll()} methods.
+ */
+ private static final Property<TaskStackViewScroller, Float> STACK_SCROLL =
+ new FloatProperty<TaskStackViewScroller>("stackScroll") {
+ @Override
+ public void setValue(TaskStackViewScroller object, float value) {
+ object.setStackScroll(value);
+ }
+
+ @Override
+ public Float get(TaskStackViewScroller object) {
+ return object.getStackScroll();
+ }
+ };
+
Context mContext;
TaskStackLayoutAlgorithm mLayoutAlgorithm;
TaskStackViewScrollerCallbacks mCb;
@@ -51,8 +71,10 @@
private Interpolator mLinearOutSlowInInterpolator;
- public TaskStackViewScroller(Context context, TaskStackLayoutAlgorithm layoutAlgorithm) {
+ public TaskStackViewScroller(Context context, TaskStackViewScrollerCallbacks cb,
+ TaskStackLayoutAlgorithm layoutAlgorithm) {
mContext = context;
+ mCb = cb;
mScroller = new OverScroller(context);
mLayoutAlgorithm = layoutAlgorithm;
mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
@@ -64,11 +86,6 @@
mStackScrollP = 0f;
}
- /** Sets the callbacks */
- void setCallbacks(TaskStackViewScrollerCallbacks cb) {
- mCb = cb;
- }
-
/** Gets the current stack scroll */
public float getStackScroll() {
return mStackScrollP;
@@ -172,7 +189,7 @@
stopBoundScrollAnimation();
mFinalAnimatedScroll = newScroll;
- mScrollAnimator = ObjectAnimator.ofFloat(this, "stackScroll", curScroll, newScroll);
+ mScrollAnimator = ObjectAnimator.ofFloat(this, STACK_SCROLL, curScroll, newScroll);
mScrollAnimator.setDuration(mContext.getResources().getInteger(
R.integer.recents_animate_task_stack_scroll_duration));
mScrollAnimator.setInterpolator(mLinearOutSlowInInterpolator);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 52e6a9c..93be009 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -652,8 +652,8 @@
@Override
public void setClipToActualHeight(boolean clipToActualHeight) {
- super.setClipToActualHeight(clipToActualHeight);
- getShowingLayout().setClipToActualHeight(clipToActualHeight);
+ super.setClipToActualHeight(clipToActualHeight || isUserLocked());
+ getShowingLayout().setClipToActualHeight(clipToActualHeight || isUserLocked());
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
index 52326e3..e4cd7d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGuts.java
@@ -29,6 +29,7 @@
import android.service.notification.StatusBarNotification;
import android.util.AttributeSet;
import android.view.View;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.SeekBar;
@@ -133,6 +134,10 @@
} catch (PackageManager.NameNotFoundException e) {
// unlikely.
}
+ if (systemApp) {
+ ((ImageView) row.findViewById(R.id.low_importance)).getDrawable().setTint(
+ mContext.getColor(R.color.notification_guts_disabled_icon_tint));
+ }
final int minProgress = systemApp ?
NotificationListenerService.Ranking.IMPORTANCE_LOW
: NotificationListenerService.Ranking.IMPORTANCE_NONE;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index b2c03c4..ffc836c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -293,7 +293,7 @@
Display mDisplay;
Point mCurrentDisplaySize = new Point();
- StatusBarWindowView mStatusBarWindow;
+ protected StatusBarWindowView mStatusBarWindow;
PhoneStatusBarView mStatusBarView;
private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
protected StatusBarWindowManager mStatusBarWindowManager;
@@ -673,8 +673,7 @@
updateDisplaySize(); // populates mDisplayMetrics
updateResources();
- mStatusBarWindow = (StatusBarWindowView) View.inflate(context,
- R.layout.super_status_bar, null);
+ inflateStatusBarWindow(context);
mStatusBarWindow.setService(this);
mStatusBarWindow.setOnTouchListener(new View.OnTouchListener() {
@Override
@@ -935,6 +934,11 @@
return mStatusBarView;
}
+ protected void inflateStatusBarWindow(Context context) {
+ mStatusBarWindow = (StatusBarWindowView) View.inflate(context,
+ R.layout.super_status_bar, null);
+ }
+
protected void createNavigationBarView(Context context) {
inflateNavigationBarView(context);
mNavigationBarView.setDisabledFlags(mDisabled1);
diff --git a/proto/Android.mk b/proto/Android.mk
new file mode 100644
index 0000000..a13a780
--- /dev/null
+++ b/proto/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := framework-protos
+
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_SRC_FILES:= $(call all-proto-files-under, src)
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj core-libart
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk $(LOCAL_PATH)/jarjar-rules.txt
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/proto/jarjar-rules.txt b/proto/jarjar-rules.txt
new file mode 100644
index 0000000..0c77c2a
--- /dev/null
+++ b/proto/jarjar-rules.txt
@@ -0,0 +1 @@
+rule com.google.** com.android.@1
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
new file mode 100644
index 0000000..88e55dd
--- /dev/null
+++ b/proto/src/metrics_constants.proto
@@ -0,0 +1,343 @@
+// 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.
+
+syntax = "proto2";
+
+option java_package = "com.android.internal.logging";
+option java_outer_classname = "MetricsProto";
+
+package com_android_internal_logging;
+
+// Wrapper for System UI log events
+message MetricsEvent {
+
+ // Known visual elements: views or controls.
+ enum View {
+ VIEW_UNKNOWN = 0;
+ MAIN_SETTINGS = 1;
+ ACCESSIBILITY = 2;
+ ACCESSIBILITY_CAPTION_PROPERTIES = 3;
+ ACCESSIBILITY_SERVICE = 4;
+ ACCESSIBILITY_TOGGLE_DALTONIZER = 5;
+ ACCESSIBILITY_TOGGLE_GLOBAL_GESTURE = 6;
+ ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION = 7;
+ ACCOUNT = 8;
+ ACCOUNTS_ACCOUNT_SYNC = 9;
+ ACCOUNTS_CHOOSE_ACCOUNT_ACTIVITY = 10;
+ ACCOUNTS_MANAGE_ACCOUNTS = 11;
+ APN = 12;
+ APN_EDITOR = 13;
+ APP_OPS_DETAILS = 14;
+ APP_OPS_SUMMARY = 15;
+ APPLICATION = 16;
+ APPLICATIONS_APP_LAUNCH = 17;
+ APPLICATIONS_APP_PERMISSION = 18;
+ APPLICATIONS_APP_STORAGE = 19;
+ APPLICATIONS_INSTALLED_APP_DETAILS = 20;
+ APPLICATIONS_PROCESS_STATS_DETAIL = 21;
+ APPLICATIONS_PROCESS_STATS_MEM_DETAIL = 22;
+ APPLICATIONS_PROCESS_STATS_UI = 23;
+ BLUETOOTH = 24;
+ BLUETOOTH_DEVICE_PICKER = 25;
+ BLUETOOTH_DEVICE_PROFILES = 26;
+ CHOOSE_LOCK_GENERIC = 27;
+ CHOOSE_LOCK_PASSWORD = 28;
+ CHOOSE_LOCK_PATTERN = 29;
+ CONFIRM_LOCK_PASSWORD = 30;
+ CONFIRM_LOCK_PATTERN = 31;
+ CRYPT_KEEPER = 32;
+ CRYPT_KEEPER_CONFIRM = 33;
+ DASHBOARD_SEARCH_RESULTS = 34;
+ DASHBOARD_SUMMARY = 35;
+ DATA_USAGE = 36;
+ DATA_USAGE_SUMMARY = 37;
+ DATE_TIME = 38;
+ DEVELOPMENT = 39;
+ DEVICEINFO = 40;
+ DEVICEINFO_IMEI_INFORMATION = 41;
+ DEVICEINFO_STORAGE = 42;
+ DEVICEINFO_SIM_STATUS = 43;
+ DEVICEINFO_STATUS = 44;
+ DEVICEINFO_USB = 45;
+ DISPLAY = 46;
+ DREAM = 47;
+ ENCRYPTION = 48;
+ FINGERPRINT = 49;
+ FINGERPRINT_ENROLL = 50;
+ FUELGAUGE_BATTERY_HISTORY_DETAIL = 51;
+ FUELGAUGE_BATTERY_SAVER = 52;
+ FUELGAUGE_POWER_USAGE_DETAIL = 53;
+ FUELGAUGE_POWER_USAGE_SUMMARY = 54;
+ HOME = 55;
+ ICC_LOCK = 56;
+ INPUTMETHOD_LANGUAGE = 57;
+ INPUTMETHOD_KEYBOARD = 58;
+ INPUTMETHOD_SPELL_CHECKERS = 59;
+ INPUTMETHOD_SUBTYPE_ENABLER = 60;
+ INPUTMETHOD_USER_DICTIONARY = 61;
+ INPUTMETHOD_USER_DICTIONARY_ADD_WORD = 62;
+ LOCATION = 63;
+ LOCATION_MODE = 64;
+ MANAGE_APPLICATIONS = 65;
+ MASTER_CLEAR = 66;
+ MASTER_CLEAR_CONFIRM = 67;
+ NET_DATA_USAGE_METERED = 68;
+ NFC_BEAM = 69;
+ NFC_PAYMENT = 70;
+ NOTIFICATION = 71;
+ NOTIFICATION_APP_NOTIFICATION = 72;
+ NOTIFICATION_OTHER_SOUND = 73;
+ NOTIFICATION_REDACTION = 74;
+ NOTIFICATION_STATION = 75;
+ NOTIFICATION_ZEN_MODE = 76;
+ OWNER_INFO = 77;
+ PRINT_JOB_SETTINGS = 78;
+ PRINT_SERVICE_SETTINGS = 79;
+ PRINT_SETTINGS = 80;
+ PRIVACY = 81;
+ PROXY_SELECTOR = 82;
+ RESET_NETWORK = 83;
+ RESET_NETWORK_CONFIRM = 84;
+ RUNNING_SERVICE_DETAILS = 85;
+ SCREEN_PINNING = 86;
+ SECURITY = 87;
+ SIM = 88;
+ TESTING = 89;
+ TETHER = 90;
+ TRUST_AGENT = 91;
+ TRUSTED_CREDENTIALS = 92;
+ TTS_ENGINE_SETTINGS = 93;
+ TTS_TEXT_TO_SPEECH = 94;
+ USAGE_ACCESS = 95;
+ USER = 96;
+ USERS_APP_RESTRICTIONS = 97;
+ USER_DETAILS = 98;
+ VOICE_INPUT = 99;
+ VPN = 100;
+ WALLPAPER_TYPE = 101;
+ WFD_WIFI_DISPLAY = 102;
+ WIFI = 103;
+ WIFI_ADVANCED = 104;
+ WIFI_CALLING = 105;
+ WIFI_SAVED_ACCESS_POINTS = 106;
+ WIFI_APITEST = 107;
+ WIFI_INFO = 108;
+ WIFI_P2P = 109;
+ WIRELESS = 110;
+ QS_PANEL = 111;
+ QS_AIRPLANEMODE = 112;
+ QS_BLUETOOTH = 113;
+ QS_CAST = 114;
+ QS_CELLULAR = 115;
+ QS_COLORINVERSION = 116;
+ QS_DATAUSAGEDETAIL = 117;
+ QS_DND = 118;
+ QS_FLASHLIGHT = 119;
+ QS_HOTSPOT = 120;
+ QS_INTENT = 121;
+ QS_LOCATION = 122;
+ QS_ROTATIONLOCK = 123;
+ QS_USERDETAILITE = 124;
+ QS_USERDETAIL = 125;
+ QS_WIFI = 126;
+ NOTIFICATION_PANEL = 127;
+ NOTIFICATION_ITEM = 128;
+ NOTIFICATION_ITEM_ACTION = 129;
+ APPLICATIONS_ADVANCED = 130;
+ LOCATION_SCANNING = 131;
+ MANAGE_APPLICATIONS_ALL = 132;
+ MANAGE_APPLICATIONS_NOTIFICATIONS = 133;
+ ACTION_WIFI_ADD_NETWORK = 134;
+ ACTION_WIFI_CONNECT = 135;
+ ACTION_WIFI_FORCE_SCAN = 136;
+ ACTION_WIFI_FORGET = 137;
+ ACTION_WIFI_OFF = 138;
+ ACTION_WIFI_ON = 139;
+ MANAGE_PERMISSIONS = 140;
+ NOTIFICATION_ZEN_MODE_PRIORITY = 141;
+ NOTIFICATION_ZEN_MODE_AUTOMATION = 142;
+ MANAGE_DOMAIN_URLS = 143;
+ NOTIFICATION_ZEN_MODE_SCHEDULE_RULE = 144;
+ NOTIFICATION_ZEN_MODE_EXTERNAL_RULE = 145;
+ NOTIFICATION_ZEN_MODE_EVENT_RULE = 146;
+ ACTION_BAN_APP_NOTES = 147;
+ ACTION_DISMISS_ALL_NOTES = 148;
+ QS_DND_DETAILS = 149;
+ QS_BLUETOOTH_DETAILS = 150;
+ QS_CAST_DETAILS = 151;
+ QS_WIFI_DETAILS = 152;
+ QS_WIFI_TOGGLE = 153;
+ QS_BLUETOOTH_TOGGLE = 154;
+ QS_CELLULAR_TOGGLE = 155;
+ QS_SWITCH_USER = 156;
+ QS_CAST_SELECT = 157;
+ QS_CAST_DISCONNECT = 158;
+ ACTION_BLUETOOTH_TOGGLE = 159;
+ ACTION_BLUETOOTH_SCAN = 160;
+ ACTION_BLUETOOTH_RENAME = 161;
+ ACTION_BLUETOOTH_FILES = 162;
+ QS_DND_TIME = 163;
+ QS_DND_CONDITION_SELECT = 164;
+ QS_DND_ZEN_SELECT = 165;
+ QS_DND_TOGGLE = 166;
+ ACTION_ZEN_ALLOW_REMINDERS = 167;
+ ACTION_ZEN_ALLOW_EVENTS = 168;
+ ACTION_ZEN_ALLOW_MESSAGES = 169;
+ ACTION_ZEN_ALLOW_CALLS = 170;
+ ACTION_ZEN_ALLOW_REPEAT_CALLS = 171;
+ ACTION_ZEN_ADD_RULE = 172;
+ ACTION_ZEN_ADD_RULE_OK = 173;
+ ACTION_ZEN_DELETE_RULE = 174;
+ ACTION_ZEN_DELETE_RULE_OK = 175;
+ ACTION_ZEN_ENABLE_RULE = 176;
+ ACTION_AIRPLANE_TOGGLE = 177;
+ ACTION_CELL_DATA_TOGGLE = 178;
+ NOTIFICATION_ACCESS = 179;
+ NOTIFICATION_ZEN_MODE_ACCESS = 180;
+ APPLICATIONS_DEFAULT_APPS = 181;
+ APPLICATIONS_STORAGE_APPS = 182;
+ APPLICATIONS_USAGE_ACCESS_DETAIL = 183;
+ APPLICATIONS_HIGH_POWER_APPS = 184;
+ FUELGAUGE_HIGH_POWER_DETAILS = 185;
+ ACTION_LS_UNLOCK = 186;
+ ACTION_LS_SHADE = 187;
+ ACTION_LS_HINT = 188;
+ ACTION_LS_CAMERA = 189;
+ ACTION_LS_DIALER = 190;
+ ACTION_LS_LOCK = 191;
+ ACTION_LS_NOTE = 192;
+ ACTION_LS_QS = 193;
+ ACTION_SHADE_QS_PULL = 194;
+ ACTION_SHADE_QS_TAP = 195;
+ LOCKSCREEN = 196;
+ BOUNCER = 197;
+ SCREEN = 198;
+ NOTIFICATION_ALERT = 199;
+ ACTION_EMERGENCY_CALL = 200;
+ APPLICATIONS_MANAGE_ASSIST = 201;
+ PROCESS_STATS_SUMMARY = 202;
+ ACTION_ROTATION_LOCK = 203;
+ ACTION_NOTE_CONTROLS = 204;
+ ACTION_NOTE_INFO = 205;
+ ACTION_APP_NOTE_SETTINGS = 206;
+ VOLUME_DIALOG = 207;
+ VOLUME_DIALOG_DETAILS = 208;
+ ACTION_VOLUME_SLIDER = 209;
+ ACTION_VOLUME_STREAM = 210;
+ ACTION_VOLUME_KEY = 211;
+ ACTION_VOLUME_ICON = 212;
+ ACTION_RINGER_MODE = 213;
+ ACTION_ACTIVITY_CHOOSER_SHOWN = 214;
+ ACTION_ACTIVITY_CHOOSER_PICKED_APP_TARGET = 215;
+ ACTION_ACTIVITY_CHOOSER_PICKED_SERVICE_TARGET = 216;
+ ACTION_ACTIVITY_CHOOSER_PICKED_STANDARD_TARGET = 217;
+ ACTION_BRIGHTNESS = 218;
+ ACTION_BRIGHTNESS_AUTO = 219;
+ BRIGHTNESS_DIALOG = 220;
+ SYSTEM_ALERT_WINDOW_APPS = 221;
+ DREAMING = 222;
+ DOZING = 223;
+ OVERVIEW_ACTIVITY = 224;
+ ABOUT_LEGAL_SETTINGS = 225;
+ ACTION_SEARCH_RESULTS = 226;
+ TUNER = 227;
+ TUNER_QS = 228;
+ TUNER_DEMO_MODE = 229;
+ TUNER_QS_REORDER = 230;
+ TUNER_QS_ADD = 231;
+ TUNER_QS_REMOVE = 232;
+ TUNER_STATUS_BAR_ENABLE = 233;
+ TUNER_STATUS_BAR_DISABLE = 234;
+ TUNER_DEMO_MODE_ENABLED = 235;
+ TUNER_DEMO_MODE_ON = 236;
+ TUNER_BATTERY_PERCENTAGE = 237;
+ FUELGAUGE_INACTIVE_APPS = 238;
+ ACTION_ASSIST_LONG_PRESS = 239;
+ FINGERPRINT_ENROLLING = 240;
+ FINGERPRINT_FIND_SENSOR = 241;
+ FINGERPRINT_ENROLL_FINISH = 242;
+ FINGERPRINT_ENROLL_INTRO = 243;
+ FINGERPRINT_ENROLL_ONBOARD = 244;
+ FINGERPRINT_ENROLL_SIDECAR = 245;
+ FINGERPRINT_ENROLLING_SETUP = 246;
+ FINGERPRINT_FIND_SENSOR_SETUP = 247;
+ FINGERPRINT_ENROLL_FINISH_SETUP = 248;
+ FINGERPRINT_ENROLL_INTRO_SETUP = 249;
+ FINGERPRINT_ENROLL_ONBOARD_SETUP = 250;
+ ACTION_FINGERPRINT_ENROLL = 251;
+ ACTION_FINGERPRINT_AUTH = 252;
+ ACTION_FINGERPRINT_DELETE = 253;
+ ACTION_FINGERPRINT_RENAME = 254;
+ ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE = 255;
+ ACTION_WIGGLE_CAMERA_GESTURE = 256;
+ QS_WORKMODE = 257;
+ BACKGROUND_CHECK_SUMMARY = 258;
+ QS_LOCK_TILE = 259;
+ QS_USER_TILE = 260;
+ QS_BATTERY_TILE = 261;
+ NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 262;
+ ACTION_ZEN_ALLOW_PEEK = 263;
+ ACTION_ZEN_ALLOW_LIGHTS = 264;
+ NOTIFICATION_TOPIC_NOTIFICATION = 265;
+ ACTION_DEFAULT_SMS_APP_CHANGED = 266;
+ QS_COLOR_MATRIX = 267;
+ QS_CUSTOM = 268;
+ ACTION_ZEN_ALLOW_SCREEN_ON = 269;
+
+ // Logged when the user docks a window from recents by
+ // longpressing a task and dragging it to the dock area.
+ ACTION_WINDOW_DOCK_DRAG_DROP = 270;
+
+ // Logged when the user docks a fullscreen window by long pressing
+ // recents which also opens recents on the lower/right side.
+ ACTION_WINDOW_DOCK_LONGPRESS = 271;
+
+ // Logged when the user docks a window by dragging from the navbar
+ // which also opens recents on the lower/right side.
+ ACTION_WINDOW_DOCK_SWIPE = 272;
+
+ // Logged when the user launches a profile-specific app and we
+ // intercept it with the confirm credentials UI.
+ PROFILE_CHALLENGE = 273;
+
+ QS_BATTERY_DETAIL = 274;
+
+ // Logged when the user goes into the overview history.
+ OVERVIEW_HISTORY = 275;
+
+ // Logged when the user pages through overview.
+ ACTION_OVERVIEW_PAGE = 276;
+
+ // Logged when the user launches a task from overview.
+ ACTION_OVERVIEW_SELECT = 277;
+
+ // Logged when the user views the emergency info.
+ ACTION_VIEW_EMERGENCY_INFO = 278;
+
+ // Logged when the user views the edit emergency info activity.
+ ACTION_EDIT_EMERGENCY_INFO = 279;
+
+ // Logged when the user edits an emergency info field.
+ ACTION_EDIT_EMERGENCY_INFO_FIELD = 280;
+
+ // Logged when the user adds a new emergency contact.
+ ACTION_ADD_EMERGENCY_CONTACT = 281;
+
+ // Logged when the user deletes an emergency contact.
+ ACTION_DELETE_EMERGENCY_CONTACT = 282;
+
+ // Logged when the user calls an emergency contact.
+ ACTION_CALL_EMERGENCY_CONTACT = 283;
+ }
+}
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java
index 7eb8005..3668ddd 100644
--- a/rs/java/android/renderscript/RenderScript.java
+++ b/rs/java/android/renderscript/RenderScript.java
@@ -751,6 +751,14 @@
rsnScriptReduce(mContext, id, slot, ain, aout, limits);
}
+ native void rsnScriptReduceNew(long con, long id, int slot, long[] ains,
+ long aout, int[] limits);
+ synchronized void nScriptReduceNew(long id, int slot, long ains[], long aout,
+ int[] limits) {
+ validate();
+ rsnScriptReduceNew(mContext, id, slot, ains, aout, limits);
+ }
+
native void rsnScriptInvokeV(long con, long id, int slot, byte[] params);
synchronized void nScriptInvokeV(long id, int slot, byte[] params) {
validate();
diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java
index ed4c6c7..84f980d 100644
--- a/rs/java/android/renderscript/Script.java
+++ b/rs/java/android/renderscript/Script.java
@@ -284,7 +284,7 @@
}
/**
- * Only intended for use by generated reflected code.
+ * Only intended for use by generated reflected code. (Simple reduction)
*
* @hide
*/
@@ -312,6 +312,46 @@
mRS.nScriptReduce(getID(mRS), slot, in_id, out_id, limits);
}
+ /**
+ * Only intended for use by generated reflected code. (General reduction)
+ *
+ * @hide
+ */
+ protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) {
+ mRS.validate();
+ if (ains == null || ains.length < 1) {
+ throw new RSIllegalArgumentException(
+ "At least one input is required.");
+ }
+ if (aout == null) {
+ throw new RSIllegalArgumentException(
+ "aout is required to be non-null.");
+ }
+ for (Allocation ain : ains) {
+ mRS.validateObject(ain);
+ }
+
+ long[] in_ids = new long[ains.length];
+ for (int index = 0; index < ains.length; ++index) {
+ in_ids[index] = ains[index].getID(mRS);
+ }
+ long out_id = aout.getID(mRS);
+
+ int[] limits = null;
+ if (sc != null) {
+ limits = new int[6];
+
+ limits[0] = sc.xstart;
+ limits[1] = sc.xend;
+ limits[2] = sc.ystart;
+ limits[3] = sc.yend;
+ limits[4] = sc.zstart;
+ limits[5] = sc.zend;
+ }
+
+ mRS.nScriptReduceNew(getID(mRS), slot, in_ids, out_id, limits);
+ }
+
long[] mInIdsBuffer;
Script(long id, RenderScript rs) {
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index 113241d..3954070 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -1988,7 +1988,6 @@
if (sizeof(RsAllocation) == sizeof(jlong)) {
in_allocs = (RsAllocation*)in_ptr;
-
} else {
// Convert from 64-bit jlong types to the native pointer type.
@@ -2127,6 +2126,101 @@
}
}
+static void
+nScriptReduceNew(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
+ jlongArray ains, jlong aout, jintArray limits)
+{
+ if (kLogApi) {
+ ALOGD("nScriptReduceNew, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout);
+ }
+
+ if (ains == nullptr) {
+ ALOGE("At least one input required.");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ return;
+ }
+ jint in_len = _env->GetArrayLength(ains);
+ if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) {
+ ALOGE("Too many arguments in kernel launch.");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ return;
+ }
+
+ jlong *in_ptr = _env->GetLongArrayElements(ains, nullptr);
+ if (in_ptr == nullptr) {
+ ALOGE("Failed to get Java array elements");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ return;
+ }
+
+ RsAllocation *in_allocs = nullptr;
+ if (sizeof(RsAllocation) == sizeof(jlong)) {
+ in_allocs = (RsAllocation*)in_ptr;
+ } else {
+ // Convert from 64-bit jlong types to the native pointer type.
+
+ in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
+ if (in_allocs == nullptr) {
+ ALOGE("Failed launching kernel for lack of memory.");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
+ return;
+ }
+
+ for (int index = in_len; --index >= 0;) {
+ in_allocs[index] = (RsAllocation)in_ptr[index];
+ }
+ }
+
+ RsScriptCall sc, *sca = nullptr;
+ uint32_t sc_size = 0;
+
+ jint limit_len = 0;
+ jint *limit_ptr = nullptr;
+
+ if (limits != nullptr) {
+ limit_len = _env->GetArrayLength(limits);
+ limit_ptr = _env->GetIntArrayElements(limits, nullptr);
+ if (limit_ptr == nullptr) {
+ ALOGE("Failed to get Java array elements");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ return;
+ }
+
+ assert(limit_len == 6);
+ UNUSED(limit_len); // As the assert might not be compiled.
+
+ sc.xStart = limit_ptr[0];
+ sc.xEnd = limit_ptr[1];
+ sc.yStart = limit_ptr[2];
+ sc.yEnd = limit_ptr[3];
+ sc.zStart = limit_ptr[4];
+ sc.zEnd = limit_ptr[5];
+ sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
+ sc.arrayStart = 0;
+ sc.arrayEnd = 0;
+ sc.array2Start = 0;
+ sc.array2End = 0;
+ sc.array3Start = 0;
+ sc.array3End = 0;
+ sc.array4Start = 0;
+ sc.array4End = 0;
+
+ sca = ≻
+ sc_size = sizeof(sc);
+ }
+
+ rsScriptReduceNew((RsContext)con, (RsScript)script, slot,
+ in_allocs, in_len, (RsAllocation)aout,
+ sca, sc_size);
+
+ _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
+
+ if (limits != nullptr) {
+ _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
+ }
+}
+
// -----------------------------------
static jlong
@@ -2755,6 +2849,7 @@
{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach },
{"rsnScriptReduce", "(JJIJJ[I)V", (void*)nScriptReduce },
+{"rsnScriptReduceNew", "(JJI[JJ[I)V", (void*)nScriptReduceNew },
{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index dbbb189..03809c0 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1204,8 +1204,13 @@
}
builder.append(componentName.flattenToShortString());
}
- Settings.Secure.putStringForUser(mContext.getContentResolver(),
- settingName, builder.toString(), userId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putStringForUser(mContext.getContentResolver(),
+ settingName, builder.toString(), userId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
private void manageServicesLocked(UserState userState) {
@@ -1250,8 +1255,13 @@
if (isEnabled && userState.mBoundServices.isEmpty()
&& userState.mBindingServices.isEmpty()) {
userState.mIsAccessibilityEnabled = false;
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED, 0, userState.mUserId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED, 0, userState.mUserId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
@@ -1342,9 +1352,14 @@
// Enable touch exploration.
UserState userState = getUserStateLocked(service.mUserId);
userState.mIsTouchExplorationEnabled = true;
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1,
- service.mUserId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1,
+ service.mUserId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
onUserStateChangedLocked(userState);
}
})
@@ -1613,9 +1628,14 @@
}
if (enabled != userState.mIsTouchExplorationEnabled) {
userState.mIsTouchExplorationEnabled = enabled;
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.TOUCH_EXPLORATION_ENABLED, enabled ? 1 : 0,
- userState.mUserId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.TOUCH_EXPLORATION_ENABLED, enabled ? 1 : 0,
+ userState.mUserId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
@@ -1666,9 +1686,14 @@
}
if (enabled != userState.mIsEnhancedWebAccessibilityEnabled) {
userState.mIsEnhancedWebAccessibilityEnabled = enabled;
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, enabled ? 1 : 0,
- userState.mUserId);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, enabled ? 1 : 0,
+ userState.mUserId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index df20704..9927fd6 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -171,6 +171,7 @@
private static final boolean VDBG = false;
private static final boolean LOGD_RULES = false;
+ private static final boolean LOGD_BLOCKED_NETWORKINFO = true;
// TODO: create better separation between radio types and network types
@@ -955,6 +956,21 @@
}
}
+ private void maybeLogBlockedNetworkInfo(NetworkInfo ni, int uid) {
+ if (ni == null || !LOGD_BLOCKED_NETWORKINFO) return;
+ boolean removed = false;
+ boolean added = false;
+ synchronized (mBlockedAppUids) {
+ if (ni.getDetailedState() == DetailedState.BLOCKED && mBlockedAppUids.add(uid)) {
+ added = true;
+ } else if (ni.isConnected() && mBlockedAppUids.remove(uid)) {
+ removed = true;
+ }
+ }
+ if (added) log("Returning blocked NetworkInfo to uid=" + uid);
+ else if (removed) log("Returning unblocked NetworkInfo to uid=" + uid);
+ }
+
/**
* Return a filtered {@link NetworkInfo}, potentially marked
* {@link DetailedState#BLOCKED} based on
@@ -965,10 +981,6 @@
// network is blocked; clone and override state
info = new NetworkInfo(info);
info.setDetailedState(DetailedState.BLOCKED, null, null);
- if (VDBG) {
- log("returning Blocked NetworkInfo for ifname=" +
- lp.getInterfaceName() + ", uid=" + uid);
- }
}
if (info != null && mLockdownTracker != null) {
info = mLockdownTracker.augmentNetworkInfo(info);
@@ -989,7 +1001,9 @@
enforceAccessPermission();
final int uid = Binder.getCallingUid();
NetworkState state = getUnfilteredActiveNetworkState(uid);
- return getFilteredNetworkInfo(state.networkInfo, state.linkProperties, uid);
+ NetworkInfo ni = getFilteredNetworkInfo(state.networkInfo, state.linkProperties, uid);
+ maybeLogBlockedNetworkInfo(ni, uid);
+ return ni;
}
@Override
@@ -3974,6 +3988,9 @@
private final HashMap<Messenger, NetworkAgentInfo> mNetworkAgentInfos =
new HashMap<Messenger, NetworkAgentInfo>();
+ @GuardedBy("mBlockedAppUids")
+ private final HashSet<Integer> mBlockedAppUids = new HashSet();
+
// Note: if mDefaultRequest is changed, NetworkMonitor needs to be updated.
private final NetworkRequest mDefaultRequest;
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 798a04a..4a123df 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -742,6 +742,31 @@
}
}
+ public static final class Lifecycle extends SystemService {
+ private InputMethodManagerService mService;
+
+ public Lifecycle(Context context) {
+ super(context);
+ mService = new InputMethodManagerService(context);
+ }
+
+ @Override
+ public void onStart() {
+ LocalServices.addService(InputMethodManagerInternal.class,
+ new LocalServiceImpl(mService.mHandler));
+ publishBinderService(Context.INPUT_METHOD_SERVICE, mService);
+ }
+
+ @Override
+ public void onBootPhase(int phase) {
+ if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
+ StatusBarManagerService statusBarService = (StatusBarManagerService) ServiceManager
+ .getService(Context.STATUS_BAR_SERVICE);
+ mService.systemRunning(statusBarService);
+ }
+ }
+ }
+
public InputMethodManagerService(Context context) {
mIPackageManager = AppGlobals.getPackageManager();
mContext = context;
@@ -894,7 +919,6 @@
}
}
}, filter);
- LocalServices.addService(InputMethodManagerInternal.class, new LocalServiceImpl(mHandler));
}
private void resetDefaultImeLocked(Context context) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index adb11a4..1434e5e 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -141,6 +141,7 @@
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
@@ -187,6 +188,7 @@
import android.os.storage.StorageManager;
import android.provider.Settings;
import android.service.voice.IVoiceInteractionSession;
+import android.service.voice.VoiceInteractionManagerInternal;
import android.service.voice.VoiceInteractionSession;
import android.text.format.DateUtils;
import android.text.format.Time;
@@ -269,6 +271,7 @@
import static android.provider.Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES;
import static android.provider.Settings.Global.DEVELOPMENT_FORCE_RTL;
import static android.provider.Settings.Global.WAIT_FOR_DEBUGGER;
+import static android.provider.Settings.System.FONT_SCALE;
import static com.android.internal.util.XmlUtils.readBooleanAttribute;
import static com.android.internal.util.XmlUtils.readIntAttribute;
import static com.android.internal.util.XmlUtils.readLongAttribute;
@@ -533,6 +536,7 @@
// default actuion automatically. Important for devices without direct input
// devices.
private boolean mShowDialogs = true;
+ private boolean mInVrMode = false;
BroadcastQueue mFgBroadcastQueue;
BroadcastQueue mBgBroadcastQueue;
@@ -1014,6 +1018,25 @@
CoreSettingsObserver mCoreSettingsObserver;
+ FontScaleSettingObserver mFontScaleSettingObserver;
+
+ private final class FontScaleSettingObserver extends ContentObserver {
+ private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE);
+
+ public FontScaleSettingObserver() {
+ super(mHandler);
+ ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(mFontScaleUri, false, this, UserHandle.USER_ALL);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ if (mFontScaleUri.equals(uri)) {
+ updateFontScaleIfNeeded();
+ }
+ }
+ }
+
/**
* Thread-local storage used to carry caller permissions over through
* indirect content-provider access.
@@ -2182,7 +2205,15 @@
} break;
case VR_MODE_CHANGE_MSG: {
VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class);
- vrService.setVrMode(msg.arg1 != 0);
+ final boolean vrMode = msg.arg1 != 0;
+ vrService.setVrMode(vrMode);
+
+ if (mInVrMode != vrMode) {
+ synchronized (ActivityManagerService.this) {
+ mInVrMode = vrMode;
+ mShowDialogs = shouldShowDialogs(mConfiguration, mInVrMode);
+ }
+ }
} break;
}
}
@@ -2803,16 +2834,21 @@
} else {
r.appTimeTracker = null;
}
+ // TODO: VI Maybe r.task.voiceInteractor || r.voiceInteractor != null
+ // TODO: Probably not, because we don't want to resume voice on switching
+ // back to this activity
if (r.task.voiceInteractor != null) {
startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid);
} else {
finishRunningVoiceLocked();
- if (last != null && last.task.voiceSession != null) {
+ IVoiceInteractionSession session;
+ if (last != null && ((session = last.task.voiceSession) != null
+ || (session = last.voiceSession) != null)) {
// We had been in a voice interaction session, but now focused has
// move to something different. Just finish the session, we can't
// return to it and retain the proper state and synchronization with
// the voice interaction service.
- finishVoiceTask(last.task.voiceSession);
+ finishVoiceTask(session);
}
}
if (mStackSupervisor.moveActivityStackToFront(r, reason + " setFocusedActivity")) {
@@ -4256,6 +4292,66 @@
}
@Override
+ public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
+ throws RemoteException {
+ Slog.i(TAG, "Activity tried to startVoiceInteraction");
+ synchronized (this) {
+ ActivityRecord activity = getFocusedStack().topActivity();
+ if (ActivityRecord.forTokenLocked(callingActivity) != activity) {
+ throw new SecurityException("Only focused activity can call startVoiceInteraction");
+ }
+ if (mRunningVoice != null || activity.task.voiceSession != null
+ || activity.voiceSession != null) {
+ Slog.w(TAG, "Already in a voice interaction, cannot start new voice interaction");
+ return;
+ }
+ if (activity.pendingVoiceInteractionStart) {
+ Slog.w(TAG, "Pending start of voice interaction already.");
+ return;
+ }
+ activity.pendingVoiceInteractionStart = true;
+ }
+ LocalServices.getService(VoiceInteractionManagerInternal.class)
+ .startLocalVoiceInteraction(callingActivity, options);
+ }
+
+ @Override
+ public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
+ LocalServices.getService(VoiceInteractionManagerInternal.class)
+ .stopLocalVoiceInteraction(callingActivity);
+ }
+
+ @Override
+ public boolean supportsLocalVoiceInteraction() throws RemoteException {
+ return LocalServices.getService(VoiceInteractionManagerInternal.class)
+ .supportsLocalVoiceInteraction();
+ }
+
+ void onLocalVoiceInteractionStartedLocked(IBinder activity,
+ IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor) {
+ ActivityRecord activityToCallback = ActivityRecord.forTokenLocked(activity);
+ if (activityToCallback == null) return;
+ activityToCallback.setVoiceSessionLocked(voiceSession);
+
+ // Inform the activity
+ try {
+ activityToCallback.app.thread.scheduleLocalVoiceInteractionStarted(activity,
+ voiceInteractor);
+ long token = Binder.clearCallingIdentity();
+ try {
+ startRunningVoiceLocked(voiceSession, activityToCallback.appInfo.uid);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ // TODO: VI Should we cache the activity so that it's easier to find later
+ // rather than scan through all the stacks and activities?
+ } catch (RemoteException re) {
+ activityToCallback.clearVoiceSessionLocked();
+ // TODO: VI Should this terminate the voice session?
+ }
+ }
+
+ @Override
public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake) {
synchronized (this) {
if (mRunningVoice != null && mRunningVoice.asBinder() == session.asBinder()) {
@@ -4747,9 +4843,11 @@
@Override
public void finishVoiceTask(IVoiceInteractionSession session) {
- synchronized(this) {
+ synchronized (this) {
final long origId = Binder.clearCallingIdentity();
try {
+ // TODO: VI Consider treating local voice interactions and voice tasks
+ // differently here
mStackSupervisor.finishVoiceTask(session);
} finally {
Binder.restoreCallingIdentity(origId);
@@ -10848,6 +10946,7 @@
}
mCoreSettingsObserver = new CoreSettingsObserver(this);
+ mFontScaleSettingObserver = new FontScaleSettingObserver();
//mUsageStatsService.monitorPackages();
}
@@ -11107,6 +11206,7 @@
}
void finishRunningVoiceLocked() {
+ Slog.d(TAG, "finishRunningVoiceLocked() >>>>");
if (mRunningVoice != null) {
mRunningVoice = null;
mVoiceWakeLock.release();
@@ -11250,6 +11350,7 @@
}
void startRunningVoiceLocked(IVoiceInteractionSession session, int targetUid) {
+ Slog.d(TAG, "<<< startRunningVoiceLocked()");
mVoiceWakeLock.setWorkSource(new WorkSource(targetUid));
if (mRunningVoice == null || mRunningVoice.asBinder() != session.asBinder()) {
boolean wasRunningVoice = mRunningVoice != null;
@@ -18218,6 +18319,20 @@
}
}
+ private void updateFontScaleIfNeeded() {
+ final int currentUserId;
+ synchronized(this) {
+ currentUserId = mUserController.getCurrentUserIdLocked();
+ }
+ final float scaleFactor = Settings.System.getFloatForUser(mContext.getContentResolver(),
+ FONT_SCALE, 1.0f, currentUserId);
+ if (mConfiguration.fontScale != scaleFactor) {
+ final Configuration configuration = mWindowManager.computeNewConfiguration();
+ configuration.fontScale = scaleFactor;
+ updatePersistentConfiguration(configuration);
+ }
+ }
+
private void enforceWriteSettingsPermission(String func) {
int uid = Binder.getCallingUid();
if (uid == Process.ROOT_UID) {
@@ -18333,7 +18448,7 @@
// TODO: If our config changes, should we auto dismiss any currently
// showing dialogs?
- mShowDialogs = shouldShowDialogs(newConfig);
+ mShowDialogs = shouldShowDialogs(newConfig, mInVrMode);
AttributeCache ac = AttributeCache.instance();
if (ac != null) {
@@ -18422,13 +18537,13 @@
* A thought: SystemUI might also want to get told about this, the Power
* dialog / global actions also might want different behaviors.
*/
- private static final boolean shouldShowDialogs(Configuration config) {
+ private static final boolean shouldShowDialogs(Configuration config, boolean inVrMode) {
final boolean inputMethodExists = !(config.keyboard == Configuration.KEYBOARD_NOKEYS
&& config.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH
&& config.navigation == Configuration.NAVIGATION_NONAV);
final boolean uiIsNotCarType = !((config.uiMode & Configuration.UI_MODE_TYPE_MASK)
== Configuration.UI_MODE_TYPE_CAR);
- return inputMethodExists && uiIsNotCarType;
+ return inputMethodExists && uiIsNotCarType && !inVrMode;
}
@Override
@@ -20899,7 +21014,9 @@
}
public boolean isUserStopped(int userId) {
- return mUserController.getStartedUserStateLocked(userId) == null;
+ synchronized (this) {
+ return mUserController.getStartedUserStateLocked(userId) == null;
+ }
}
ActivityInfo getActivityInfoForUser(ActivityInfo aInfo, int userId) {
@@ -21057,6 +21174,15 @@
ActivityManagerService.this.onUserStoppedLocked(userId);
}
}
+
+ @Override
+ public void onLocalVoiceInteractionStarted(IBinder activity,
+ IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor) {
+ synchronized (ActivityManagerService.this) {
+ ActivityManagerService.this.onLocalVoiceInteractionStartedLocked(activity,
+ voiceSession, voiceInteractor);
+ }
+ }
}
private final class SleepTokenImpl extends SleepToken {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index b16bd2b..71008a9 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -54,6 +54,7 @@
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
+import android.service.voice.IVoiceInteractionSession;
import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
@@ -209,6 +210,9 @@
private int[] mHorizontalSizeConfigurations;
private int[] mSmallestSizeConfigurations;
+ boolean pendingVoiceInteractionStart; // Waiting for activity-invoked voice session
+ IVoiceInteractionSession voiceSession; // Voice interaction session for this activity
+
void dump(PrintWriter pw, String prefix) {
final long now = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("packageName="); pw.print(packageName);
@@ -1274,6 +1278,16 @@
taskDescription = _taskDescription;
}
+ void setVoiceSessionLocked(IVoiceInteractionSession session) {
+ voiceSession = session;
+ pendingVoiceInteractionStart = false;
+ }
+
+ void clearVoiceSessionLocked() {
+ voiceSession = null;
+ pendingVoiceInteractionStart = false;
+ }
+
void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException {
out.attribute(null, ATTR_ID, String.valueOf(createTime));
out.attribute(null, ATTR_LAUNCHEDFROMUID, String.valueOf(launchedFromUid));
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 10b4ba7..4bac2d6 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1567,7 +1567,7 @@
behindTranslucentActivity = true;
}
} else {
- if (DEBUG_VISIBILITY || true) Slog.v(TAG_VISIBILITY, "Make invisible? " + r
+ if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Make invisible? " + r
+ " finishing=" + r.finishing + " state=" + r.state + " stackInvisible="
+ stackInvisible + " behindFullscreenActivity="
+ behindFullscreenActivity + " mLaunchTaskBehind="
@@ -3093,8 +3093,29 @@
didOne = true;
}
}
+ } else {
+ // Check if any of the activities are using voice
+ for (int activityNdx = tr.mActivities.size() - 1; activityNdx >= 0; --activityNdx) {
+ ActivityRecord r = tr.mActivities.get(activityNdx);
+ if (r.voiceSession != null
+ && r.voiceSession.asBinder() == sessionBinder) {
+ // Inform of cancellation
+ r.clearVoiceSessionLocked();
+ try {
+ r.app.thread.scheduleLocalVoiceInteractionStarted((IBinder) r.appToken,
+ null);
+ } catch (RemoteException re) {
+ // Ok
+ }
+ // TODO: VI This is redundant in some cases
+ mService.finishRunningVoiceLocked();
+ break;
+ }
+ }
}
}
+ Slog.d(TAG, "ActivityStack.finishVoiceTask()");
+
if (didOne) {
mService.updateOomAdjLocked();
}
@@ -4686,6 +4707,7 @@
updateTaskMovement(task, true);
if (!moving && task.mActivities.isEmpty()) {
+ // TODO: VI what about activity?
final boolean isVoiceSession = task.voiceSession != null;
if (isVoiceSession) {
try {
@@ -4790,6 +4812,7 @@
void addConfigOverride(ActivityRecord r, TaskRecord task) {
final Rect bounds = task.updateOverrideConfigurationFromLaunchBounds();
+ // TODO: VI deal with activity
mWindowManager.addAppToken(task.mActivities.indexOf(r), r.appToken,
r.task.taskId, mStackId, r.info.screenOrientation, r.fullscreen,
(r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0, r.userId, r.info.configChanges,
diff --git a/services/core/java/com/android/server/am/ActivityStartInterceptor.java b/services/core/java/com/android/server/am/ActivityStartInterceptor.java
new file mode 100644
index 0000000..1ed749f
--- /dev/null
+++ b/services/core/java/com/android/server/am/ActivityStartInterceptor.java
@@ -0,0 +1,180 @@
+package com.android.server.am;
+
+import static android.app.ActivityManager.INTENT_SENDER_ACTIVITY;
+import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
+import static android.app.PendingIntent.FLAG_IMMUTABLE;
+import static android.app.PendingIntent.FLAG_ONE_SHOT;
+import static android.content.Context.KEYGUARD_SERVICE;
+import static android.content.Intent.EXTRA_INTENT;
+import static android.content.Intent.EXTRA_PACKAGE_NAME;
+import static android.content.Intent.EXTRA_TASK_ID;
+import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
+
+import android.app.KeyguardManager;
+import android.content.IIntentSender;
+import android.content.Intent;
+import android.content.IntentSender;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
+import android.os.Binder;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import com.android.internal.app.UnlaunchableAppActivity;
+
+/**
+ * A class that contains activity intercepting logic for {@link ActivityStarter#startActivityLocked}
+ * It's initialized
+ */
+class ActivityStartInterceptor {
+
+ private final ActivityManagerService mService;
+ private UserManager mUserManager;
+ private final ActivityStackSupervisor mSupervisor;
+
+ /*
+ * Per-intent states loaded from ActivityStarter than shouldn't be changed by any
+ * interception routines.
+ */
+ private int mRealCallingPid;
+ private int mRealCallingUid;
+ private int mUserId;
+ private int mStartFlags;
+ private String mCallingPackage;
+
+ /*
+ * Per-intent states that were load from ActivityStarter and are subject to modifications
+ * by the interception routines. After calling {@link #intercept} the caller should assign
+ * these values back to {@link ActivityStarter#startActivityLocked}'s local variables.
+ */
+ Intent mIntent;
+ int mCallingPid;
+ int mCallingUid;
+ ResolveInfo mRInfo;
+ ActivityInfo mAInfo;
+ String mResolvedType;
+ TaskRecord mInTask;
+
+ ActivityStartInterceptor(ActivityManagerService service, ActivityStackSupervisor supervisor) {
+ mService = service;
+ mSupervisor = supervisor;
+ }
+
+ void setStates(int userId, int realCallingPid, int realCallingUid, int startFlags,
+ String callingPackage) {
+ mRealCallingPid = realCallingPid;
+ mRealCallingUid = realCallingUid;
+ mUserId = userId;
+ mStartFlags = startFlags;
+ mCallingPackage = callingPackage;
+ }
+
+ void intercept(Intent intent, ResolveInfo rInfo, ActivityInfo aInfo, String resolvedType,
+ TaskRecord inTask, int callingPid, int callingUid) {
+ mUserManager = UserManager.get(mService.mContext);
+ mIntent = intent;
+ mCallingPid = callingPid;
+ mCallingUid = callingUid;
+ mRInfo = rInfo;
+ mAInfo = aInfo;
+ mResolvedType = resolvedType;
+ mInTask = inTask;
+ interceptQuietProfileIfNeeded();
+ interceptSuspendPackageIfNeed();
+ interceptWorkProfileChallengeIfNeeded();
+ }
+
+ private void interceptQuietProfileIfNeeded() {
+ // Do not intercept if the user has not turned off the profile
+ if (!mUserManager.isQuietModeEnabled(UserHandle.of(mUserId))) {
+ return;
+ }
+ mIntent = UnlaunchableAppActivity.createInQuietModeDialogIntent(mUserId);
+ mCallingPid = mRealCallingPid;
+ mCallingUid = mRealCallingUid;
+ mResolvedType = null;
+
+ final UserInfo parent = mUserManager.getProfileParent(mUserId);
+ mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, parent.id);
+ mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags,
+ null /*profilerInfo*/);
+ }
+
+ private void interceptSuspendPackageIfNeed() {
+ // Do not intercept if the admin did not suspend the package
+ if (mAInfo == null || mAInfo.applicationInfo == null ||
+ (mAInfo.applicationInfo.flags & FLAG_SUSPENDED) == 0) {
+ return;
+ }
+ mIntent = UnlaunchableAppActivity.createPackageSuspendedDialogIntent(mAInfo.packageName,
+ mUserId);
+ mCallingPid = mRealCallingPid;
+ mCallingUid = mRealCallingUid;
+ mResolvedType = null;
+
+ final UserInfo parent = mUserManager.getProfileParent(mUserId);
+ if (parent != null) {
+ mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, parent.id);
+ } else {
+ mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, mUserId);
+ }
+ mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags,
+ null /*profilerInfo*/);
+ }
+
+ private void interceptWorkProfileChallengeIfNeeded() {
+ final Intent interceptingIntent = interceptWithConfirmCredentialsIfNeeded(mIntent,
+ mResolvedType, mAInfo, mCallingPackage, mUserId);
+ if (interceptingIntent == null) {
+ return;
+ }
+ mIntent = interceptingIntent;
+ mCallingPid = mRealCallingPid;
+ mCallingUid = mRealCallingUid;
+ mResolvedType = null;
+ // If we are intercepting and there was a task, convert it into an extra for the
+ // ConfirmCredentials intent and unassign it, as otherwise the task will move to
+ // front even if ConfirmCredentials is cancelled.
+ if (mInTask != null) {
+ mIntent.putExtra(EXTRA_TASK_ID, mInTask.taskId);
+ mInTask = null;
+ }
+
+ final UserInfo parent = mUserManager.getProfileParent(mUserId);
+ mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, parent.id);
+ mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags,
+ null /*profilerInfo*/);
+ }
+
+ /**
+ * Creates an intent to intercept the current activity start with Confirm Credentials if needed.
+ *
+ * @return The intercepting intent if needed.
+ */
+ private Intent interceptWithConfirmCredentialsIfNeeded(Intent intent, String resolvedType,
+ ActivityInfo aInfo, String callingPackage, int userId) {
+ if (!mService.mUserController.shouldConfirmCredentials(userId)) {
+ return null;
+ }
+ final IIntentSender target = mService.getIntentSenderLocked(
+ INTENT_SENDER_ACTIVITY, callingPackage,
+ Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ intent },
+ new String[]{ resolvedType },
+ FLAG_CANCEL_CURRENT | FLAG_ONE_SHOT | FLAG_IMMUTABLE, null);
+ final int flags = intent.getFlags();
+ final KeyguardManager km = (KeyguardManager) mService.mContext
+ .getSystemService(KEYGUARD_SERVICE);
+ final Intent newIntent = km.createConfirmDeviceCredentialIntent(null, null, userId);
+ if (newIntent == null) {
+ return null;
+ }
+ newIntent.setFlags(flags | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ newIntent.putExtra(EXTRA_PACKAGE_NAME, aInfo.packageName);
+ newIntent.putExtra(EXTRA_INTENT, new IntentSender(target));
+ return newIntent;
+ }
+
+}
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index d847824..23dc0f6 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -1,11 +1,9 @@
package com.android.server.am;
import static android.app.Activity.RESULT_CANCELED;
-import static android.app.ActivityManager.INTENT_SENDER_ACTIVITY;
import static android.app.ActivityManager.START_CLASS_NOT_FOUND;
import static android.app.ActivityManager.START_DELIVERED_TO_TOP;
import static android.app.ActivityManager.START_FLAG_ONLY_IF_NEEDED;
-import static android.app.ActivityManager.START_PERMISSION_DENIED;
import static android.app.ActivityManager.START_RETURN_INTENT_TO_CALLER;
import static android.app.ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
import static android.app.ActivityManager.START_SUCCESS;
@@ -17,16 +15,8 @@
import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
-import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
-import static android.app.PendingIntent.FLAG_IMMUTABLE;
-import static android.app.PendingIntent.FLAG_ONE_SHOT;
-import static android.content.Context.KEYGUARD_SERVICE;
-import static android.content.Intent.EXTRA_INTENT;
-import static android.content.Intent.EXTRA_PACKAGE_NAME;
-import static android.content.Intent.EXTRA_TASK_ID;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
-import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_LAUNCH_TO_SIDE;
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
@@ -43,7 +33,6 @@
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP;
-import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FOCUS;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PERMISSIONS_REVIEW;
@@ -76,7 +65,6 @@
import android.app.IActivityContainer;
import android.app.IActivityManager;
import android.app.IApplicationThread;
-import android.app.KeyguardManager;
import android.app.PendingIntent;
import android.app.ProfilerInfo;
import android.content.ComponentName;
@@ -86,7 +74,6 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
-import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Binder;
@@ -96,7 +83,6 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
-import android.os.UserManager;
import android.service.voice.IVoiceInteractionSession;
import android.util.EventLog;
import android.util.Slog;
@@ -124,6 +110,7 @@
private final ActivityManagerService mService;
private final ActivityStackSupervisor mSupervisor;
+ private ActivityStartInterceptor mInterceptor;
private WindowManagerService mWindowManager;
final ArrayList<PendingActivityLaunch> mPendingActivityLaunches = new ArrayList<>();
@@ -204,6 +191,7 @@
ActivityStarter(ActivityManagerService service, ActivityStackSupervisor supervisor) {
mService = service;
mSupervisor = supervisor;
+ mInterceptor = new ActivityStartInterceptor(mService, mSupervisor);
}
final int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent,
@@ -230,17 +218,6 @@
}
}
- if (aInfo != null) {
- if ((aInfo.applicationInfo.flags & FLAG_SUSPENDED) != 0) {
- Slog.w(TAG, "Application \"" + aInfo.applicationInfo.packageName
- + "\" is suspended. Refusing to start: " + intent.toString());
- // TODO: show a dialog/activity informing the user that the application is suspended
- // and redirect the launch to it. Do not return START_PERMISSION_DENIED because
- // it is wrong.
- err = ActivityManager.START_PERMISSION_DENIED;
- }
- }
-
final int userId = aInfo != null ? UserHandle.getUserId(aInfo.applicationInfo.uid) : 0;
if (err == ActivityManager.START_SUCCESS) {
@@ -381,26 +358,15 @@
}
}
- final Intent interceptingIntent = interceptWithConfirmCredentialsIfNeeded(intent,
- resolvedType, aInfo, callingPackage, userId);
- if (interceptingIntent != null) {
- intent = interceptingIntent;
- callingPid = realCallingPid;
- callingUid = realCallingUid;
- resolvedType = null;
- // If we are intercepting and there was a task, convert it into an extra for the
- // ConfirmCredentials intent and unassign it, as otherwise the task will move to
- // front even if ConfirmCredentials is cancelled.
- if (inTask != null) {
- intent.putExtra(EXTRA_TASK_ID, inTask.taskId);
- inTask = null;
- }
-
- final UserInfo parent = UserManager.get(mService.mContext).getProfileParent(userId);
- rInfo = mSupervisor.resolveIntent(intent, resolvedType, parent.id);
- aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags,
- null /*profilerInfo*/);
- }
+ mInterceptor.setStates(userId, realCallingPid, realCallingUid, startFlags, callingPackage);
+ mInterceptor.intercept(intent, rInfo, aInfo, resolvedType, inTask, callingPid, callingUid);
+ intent = mInterceptor.mIntent;
+ rInfo = mInterceptor.mRInfo;
+ aInfo = mInterceptor.mAInfo;
+ resolvedType = mInterceptor.mResolvedType;
+ inTask = mInterceptor.mInTask;
+ callingPid = mInterceptor.mCallingPid;
+ callingUid = mInterceptor.mCallingUid;
if (abort) {
if (resultRecord != null) {
@@ -552,34 +518,6 @@
return err;
}
- /**
- * Creates an intent to intercept the current activity start with Confirm Credentials if needed.
- *
- * @return The intercepting intent if needed.
- */
- private Intent interceptWithConfirmCredentialsIfNeeded(Intent intent, String resolvedType,
- ActivityInfo aInfo, String callingPackage, int userId) {
- if (!mService.mUserController.shouldConfirmCredentials(userId)) {
- return null;
- }
- final IIntentSender target = mService.getIntentSenderLocked(
- INTENT_SENDER_ACTIVITY, callingPackage,
- Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ intent },
- new String[]{ resolvedType },
- FLAG_CANCEL_CURRENT | FLAG_ONE_SHOT | FLAG_IMMUTABLE, null);
- final int flags = intent.getFlags();
- final KeyguardManager km = (KeyguardManager) mService.mContext
- .getSystemService(KEYGUARD_SERVICE);
- final Intent newIntent = km.createConfirmDeviceCredentialIntent(null, null, userId);
- if (newIntent == null) {
- return null;
- }
- newIntent.setFlags(flags | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- newIntent.putExtra(EXTRA_PACKAGE_NAME, aInfo.packageName);
- newIntent.putExtra(EXTRA_INTENT, new IntentSender(target));
- return newIntent;
- }
-
void startHomeActivityLocked(Intent intent, ActivityInfo aInfo, String reason) {
mSupervisor.moveHomeStackTaskToTop(HOME_ACTIVITY_TYPE, reason);
startActivityLocked(null /*caller*/, intent, null /*ephemeralIntent*/,
diff --git a/services/core/java/com/android/server/am/RecentTasks.java b/services/core/java/com/android/server/am/RecentTasks.java
index a3c26cb..3f0674d 100644
--- a/services/core/java/com/android/server/am/RecentTasks.java
+++ b/services/core/java/com/android/server/am/RecentTasks.java
@@ -77,8 +77,8 @@
}
/**
- * Loads the persistent recentTasks for {@code userId} into {@link #mRecentTasks} from
- * persistent storage. Does nothing if they are already loaded.
+ * Loads the persistent recentTasks for {@code userId} into this list from persistent storage.
+ * Does nothing if they are already loaded.
*
* @param userId the user Id
*/
@@ -405,6 +405,8 @@
int recentsCount = size();
// Quick case: never add voice sessions.
+ // TODO: VI what about if it's just an activity?
+ // Probably nothing to do here
if (task.voiceSession != null) {
if (DEBUG_RECENTS) Slog.d(TAG_RECENTS,
"addRecent: not adding voice interaction " + task);
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 8c16872..a21570ce 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -525,7 +525,7 @@
List<UserInfo> profilesToStart = new ArrayList<>(profiles.size());
for (UserInfo user : profiles) {
if ((user.flags & UserInfo.FLAG_INITIALIZED) == UserInfo.FLAG_INITIALIZED
- && user.id != mCurrentUserId) {
+ && user.id != mCurrentUserId && !user.isQuietModeEnabled()) {
profilesToStart.add(user);
}
}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index ee91b63..573afd6 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -18,6 +18,7 @@
import android.annotation.Nullable;
import android.view.Display;
+import com.android.internal.inputmethod.InputMethodSubtypeHandle;
import com.android.internal.os.SomeArgs;
import com.android.internal.R;
import com.android.internal.util.XmlUtils;
@@ -67,6 +68,8 @@
import android.os.MessageQueue;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ShellCommand;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
@@ -97,6 +100,7 @@
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -157,8 +161,7 @@
private final ArrayList<InputDevice>
mTempFullKeyboards = new ArrayList<InputDevice>(); // handler thread only
private boolean mKeyboardLayoutNotificationShown;
- private PendingIntent mKeyboardLayoutIntent;
- private Toast mSwitchedKeyboardLayoutToast;
+ private InputMethodSubtypeHandle mCurrentImeHandle;
// State for vibrator tokens.
private Object mVibratorLock = new Object();
@@ -1297,6 +1300,82 @@
}
@Override // Binder call
+ @Nullable
+ public KeyboardLayout getKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,
+ InputMethodInfo imeInfo, InputMethodSubtype imeSubtype) {
+ InputMethodSubtypeHandle handle = new InputMethodSubtypeHandle(imeInfo, imeSubtype);
+ String key = getLayoutDescriptor(identifier);
+ final String keyboardLayoutDescriptor;
+ synchronized (mDataStore) {
+ keyboardLayoutDescriptor = mDataStore.getKeyboardLayout(key, handle);
+ }
+
+ if (keyboardLayoutDescriptor == null) {
+ return null;
+ }
+
+ final KeyboardLayout[] result = new KeyboardLayout[1];
+ visitKeyboardLayout(keyboardLayoutDescriptor, new KeyboardLayoutVisitor() {
+ @Override
+ public void visitKeyboardLayout(Resources resources,
+ int keyboardLayoutResId, KeyboardLayout layout) {
+ result[0] = layout;
+ }
+ });
+ if (result[0] == null) {
+ Slog.w(TAG, "Could not get keyboard layout with descriptor '"
+ + keyboardLayoutDescriptor + "'.");
+ }
+ return result[0];
+ }
+
+ @Override
+ public void setKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,
+ InputMethodInfo imeInfo, InputMethodSubtype imeSubtype,
+ String keyboardLayoutDescriptor) {
+ if (!checkCallingPermission(android.Manifest.permission.SET_KEYBOARD_LAYOUT,
+ "setKeyboardLayoutForInputDevice()")) {
+ throw new SecurityException("Requires SET_KEYBOARD_LAYOUT permission");
+ }
+ if (keyboardLayoutDescriptor == null) {
+ throw new IllegalArgumentException("keyboardLayoutDescriptor must not be null");
+ }
+ if (imeInfo == null || imeSubtype == null) {
+ throw new IllegalArgumentException("imeInfo and imeSubtype must not be null");
+ }
+ InputMethodSubtypeHandle handle = new InputMethodSubtypeHandle(imeInfo, imeSubtype);
+ setKeyboardLayoutForInputDeviceInner(identifier, handle, keyboardLayoutDescriptor);
+ }
+
+ private void setKeyboardLayoutForInputDeviceInner(InputDeviceIdentifier identifier,
+ InputMethodSubtypeHandle imeHandle, String keyboardLayoutDescriptor) {
+ String key = getLayoutDescriptor(identifier);
+ synchronized (mDataStore) {
+ try {
+ if (mDataStore.setKeyboardLayout(key, imeHandle, keyboardLayoutDescriptor)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Set keyboard layout " + keyboardLayoutDescriptor +
+ " for subtype " + imeHandle + " and device " + identifier +
+ " using key " + key);
+ }
+ if (imeHandle.equals(mCurrentImeHandle)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Layout for current subtype changed, switching layout");
+ }
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = identifier;
+ args.arg2 = imeHandle;
+ mHandler.obtainMessage(MSG_SWITCH_KEYBOARD_LAYOUT, args).sendToTarget();
+ }
+ mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
+ }
+ } finally {
+ mDataStore.saveIfNeeded();
+ }
+ }
+ }
+
+ @Override // Binder call
public void addKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier,
String keyboardLayoutDescriptor) {
if (!checkCallingPermission(android.Manifest.permission.SET_KEYBOARD_LAYOUT,
@@ -1315,8 +1394,7 @@
oldLayout = mDataStore.getCurrentKeyboardLayout(identifier.getDescriptor());
}
if (mDataStore.addKeyboardLayout(key, keyboardLayoutDescriptor)
- && !Objects.equal(oldLayout,
- mDataStore.getCurrentKeyboardLayout(key))) {
+ && !Objects.equal(oldLayout, mDataStore.getCurrentKeyboardLayout(key))) {
mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
}
} finally {
@@ -1366,45 +1444,44 @@
Slog.i(TAG, "InputMethodSubtype changed: userId=" + userId
+ " ime=" + inputMethodInfo + " subtype=" + subtype);
}
- }
-
- public void switchKeyboardLayout(int deviceId, int direction) {
- mHandler.obtainMessage(MSG_SWITCH_KEYBOARD_LAYOUT, deviceId, direction).sendToTarget();
+ if (inputMethodInfo == null) {
+ Slog.d(TAG, "No InputMethod is running, ignoring change");
+ return;
+ }
+ if (subtype != null && !"keyboard".equals(subtype.getMode())) {
+ Slog.d(TAG, "InputMethodSubtype changed to non-keyboard subtype, ignoring change");
+ return;
+ }
+ InputMethodSubtypeHandle handle = new InputMethodSubtypeHandle(inputMethodInfo, subtype);
+ if (!handle.equals(mCurrentImeHandle)) {
+ mCurrentImeHandle = handle;
+ handleSwitchKeyboardLayout(null, handle);
+ }
}
// Must be called on handler.
- private void handleSwitchKeyboardLayout(int deviceId, int direction) {
- final InputDevice device = getInputDevice(deviceId);
- if (device != null) {
- final boolean changed;
- final String keyboardLayoutDescriptor;
-
- String key = getLayoutDescriptor(device.getIdentifier());
- synchronized (mDataStore) {
- try {
- changed = mDataStore.switchKeyboardLayout(key, direction);
- keyboardLayoutDescriptor = mDataStore.getCurrentKeyboardLayout(
- key);
- } finally {
- mDataStore.saveIfNeeded();
+ private void handleSwitchKeyboardLayout(@Nullable InputDeviceIdentifier identifier,
+ InputMethodSubtypeHandle handle) {
+ synchronized (mInputDevicesLock) {
+ for (InputDevice device : mInputDevices) {
+ if (identifier != null && !device.getIdentifier().equals(identifier) ||
+ !device.isFullKeyboard()) {
+ continue;
}
- }
-
- if (changed) {
- if (mSwitchedKeyboardLayoutToast != null) {
- mSwitchedKeyboardLayoutToast.cancel();
- mSwitchedKeyboardLayoutToast = null;
- }
- if (keyboardLayoutDescriptor != null) {
- KeyboardLayout keyboardLayout = getKeyboardLayout(keyboardLayoutDescriptor);
- if (keyboardLayout != null) {
- mSwitchedKeyboardLayoutToast = Toast.makeText(
- mContext, keyboardLayout.getLabel(), Toast.LENGTH_SHORT);
- mSwitchedKeyboardLayoutToast.show();
+ String key = getLayoutDescriptor(device.getIdentifier());
+ boolean changed = false;
+ synchronized (mDataStore) {
+ try {
+ if (mDataStore.switchKeyboardLayout(key, handle)) {
+ changed = true;
+ }
+ } finally {
+ mDataStore.saveIfNeeded();
}
}
-
- reloadKeyboardLayouts();
+ if (changed) {
+ reloadKeyboardLayouts();
+ }
}
}
}
@@ -1616,7 +1693,7 @@
}
@Override
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
pw.println("Permission Denial: can't dump InputManager from from pid="
@@ -1630,8 +1707,48 @@
if (dumpStr != null) {
pw.println(dumpStr);
}
+ pw.println(" Keyboard Layouts:");
+ visitAllKeyboardLayouts(new KeyboardLayoutVisitor() {
+ @Override
+ public void visitKeyboardLayout(Resources resources,
+ int keyboardLayoutResId, KeyboardLayout layout) {
+ pw.println(" \"" + layout + "\": " + layout.getDescriptor());
+ }
+ });
+ pw.println();
+ synchronized(mDataStore) {
+ mDataStore.dump(pw, " ");
+ }
}
+ @Override
+ public void onShellCommand(FileDescriptor in, FileDescriptor out,
+ FileDescriptor err, String[] args, ResultReceiver resultReceiver) {
+ (new Shell()).exec(this, in, out, err, args, resultReceiver);
+ }
+
+ public int onShellCommand(Shell shell, String cmd) {
+ if (TextUtils.isEmpty(cmd)) {
+ shell.onHelp();
+ return 1;
+ }
+ if (cmd.equals("setlayout")) {
+ if (!checkCallingPermission(android.Manifest.permission.SET_KEYBOARD_LAYOUT,
+ "onShellCommand()")) {
+ throw new SecurityException("Requires SET_KEYBOARD_LAYOUT permission");
+ }
+ InputMethodSubtypeHandle handle = new InputMethodSubtypeHandle(
+ shell.getNextArgRequired(), Integer.parseInt(shell.getNextArgRequired()));
+ String descriptor = shell.getNextArgRequired();
+ int vid = Integer.decode(shell.getNextArgRequired());
+ int pid = Integer.decode(shell.getNextArgRequired());
+ InputDeviceIdentifier id = new InputDeviceIdentifier(descriptor, vid, pid);
+ setKeyboardLayoutForInputDeviceInner(id, handle, shell.getNextArgRequired());
+ }
+ return 0;
+ }
+
+
private boolean checkCallingPermission(String permission, String func) {
// Quick check: if the calling permission is me, it's all okay.
if (Binder.getCallingPid() == Process.myPid()) {
@@ -1937,9 +2054,12 @@
case MSG_DELIVER_INPUT_DEVICES_CHANGED:
deliverInputDevicesChanged((InputDevice[])msg.obj);
break;
- case MSG_SWITCH_KEYBOARD_LAYOUT:
- handleSwitchKeyboardLayout(msg.arg1, msg.arg2);
+ case MSG_SWITCH_KEYBOARD_LAYOUT: {
+ SomeArgs args = (SomeArgs)msg.obj;
+ handleSwitchKeyboardLayout((InputDeviceIdentifier)args.arg1,
+ (InputMethodSubtypeHandle)args.arg2);
break;
+ }
case MSG_RELOAD_KEYBOARD_LAYOUTS:
reloadKeyboardLayouts();
break;
@@ -2106,6 +2226,25 @@
}
}
+ private class Shell extends ShellCommand {
+ @Override
+ public int onCommand(String cmd) {
+ return onShellCommand(this, cmd);
+ }
+
+ @Override
+ public void onHelp() {
+ final PrintWriter pw = getOutPrintWriter();
+ pw.println("Input manager commands:");
+ pw.println(" help");
+ pw.println(" Print this help text.");
+ pw.println("");
+ pw.println(" setlayout IME_ID IME_SUPTYPE_HASH_CODE"
+ + " DEVICE_DESCRIPTOR VENDOR_ID PRODUCT_ID KEYBOARD_DESCRIPTOR");
+ pw.println(" Sets a keyboard layout for a given IME subtype and input device pair");
+ }
+ }
+
private final class LocalService extends InputManagerInternal {
@Override
public void setDisplayViewports(
diff --git a/services/core/java/com/android/server/input/PersistentDataStore.java b/services/core/java/com/android/server/input/PersistentDataStore.java
index f6d7244..e97aca8 100644
--- a/services/core/java/com/android/server/input/PersistentDataStore.java
+++ b/services/core/java/com/android/server/input/PersistentDataStore.java
@@ -16,6 +16,7 @@
package com.android.server.input;
+import com.android.internal.inputmethod.InputMethodSubtypeHandle;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.XmlUtils;
@@ -26,6 +27,8 @@
import android.view.Surface;
import android.hardware.input.TouchCalibration;
+import android.text.TextUtils;
+import android.util.ArrayMap;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.Xml;
@@ -37,10 +40,13 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -131,9 +137,26 @@
}
return state.getKeyboardLayouts();
}
+ public String getKeyboardLayout(String inputDeviceDescriptor,
+ InputMethodSubtypeHandle imeHandle) {
+ InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, false);
+ if (state == null) {
+ return null;
+ }
+ return state.getKeyboardLayout(imeHandle);
+ }
- public boolean addKeyboardLayout(String inputDeviceDescriptor,
- String keyboardLayoutDescriptor) {
+ public boolean setKeyboardLayout(String inputDeviceDescriptor,
+ InputMethodSubtypeHandle imeHandle, String keyboardLayoutDescriptor) {
+ InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, true);
+ if (state.setKeyboardLayout(imeHandle, keyboardLayoutDescriptor)) {
+ setDirty();
+ return true;
+ }
+ return false;
+ }
+
+ public boolean addKeyboardLayout(String inputDeviceDescriptor, String keyboardLayoutDescriptor) {
InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, true);
if (state.addKeyboardLayout(keyboardLayoutDescriptor)) {
setDirty();
@@ -152,9 +175,10 @@
return false;
}
- public boolean switchKeyboardLayout(String inputDeviceDescriptor, int direction) {
+ public boolean switchKeyboardLayout(String inputDeviceDescriptor,
+ InputMethodSubtypeHandle imeHandle) {
InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, false);
- if (state != null && state.switchKeyboardLayout(direction)) {
+ if (state != null && state.switchKeyboardLayout(imeHandle)) {
setDirty();
return true;
}
@@ -301,13 +325,26 @@
serializer.endDocument();
}
+ public void dump(PrintWriter pw, String prefix) {
+ pw.println(prefix + "PersistentDataStore");
+ pw.println(prefix + " mLoaded=" + mLoaded);
+ pw.println(prefix + " mDirty=" + mDirty);
+ pw.println(prefix + " InputDeviceStates:");
+ int i = 0;
+ for (Map.Entry<String, InputDeviceState> entry : mInputDevices.entrySet()) {
+ pw.println(prefix + " " + i++ + ": " + entry.getKey());
+ entry.getValue().dump(pw, prefix + " ");
+ }
+ }
+
private static final class InputDeviceState {
private static final String[] CALIBRATION_NAME = { "x_scale",
"x_ymix", "x_offset", "y_xmix", "y_scale", "y_offset" };
private TouchCalibration[] mTouchCalibration = new TouchCalibration[4];
private String mCurrentKeyboardLayout;
- private ArrayList<String> mKeyboardLayouts = new ArrayList<String>();
+ private List<String> mUnassociatedKeyboardLayouts = new ArrayList<>();
+ private ArrayMap<InputMethodSubtypeHandle, String> mKeyboardLayouts = new ArrayMap<>();
public TouchCalibration getTouchCalibration(int surfaceRotation) {
try {
@@ -345,18 +382,34 @@
}
public String[] getKeyboardLayouts() {
- if (mKeyboardLayouts.isEmpty()) {
+ if (mUnassociatedKeyboardLayouts.isEmpty()) {
return (String[])ArrayUtils.emptyArray(String.class);
}
- return mKeyboardLayouts.toArray(new String[mKeyboardLayouts.size()]);
+ return mUnassociatedKeyboardLayouts.toArray(
+ new String[mUnassociatedKeyboardLayouts.size()]);
+ }
+
+ public String getKeyboardLayout(InputMethodSubtypeHandle handle) {
+ return mKeyboardLayouts.get(handle);
+ }
+
+ public boolean setKeyboardLayout(InputMethodSubtypeHandle imeHandle,
+ String keyboardLayout) {
+ String existingLayout = mKeyboardLayouts.get(imeHandle);
+ if (TextUtils.equals(existingLayout, keyboardLayout)) {
+ return false;
+ }
+ mKeyboardLayouts.put(imeHandle, keyboardLayout);
+ return true;
}
public boolean addKeyboardLayout(String keyboardLayout) {
- int index = Collections.binarySearch(mKeyboardLayouts, keyboardLayout);
+ int index = Collections.binarySearch(
+ mUnassociatedKeyboardLayouts, keyboardLayout);
if (index >= 0) {
return false;
}
- mKeyboardLayouts.add(-index - 1, keyboardLayout);
+ mUnassociatedKeyboardLayouts.add(-index - 1, keyboardLayout);
if (mCurrentKeyboardLayout == null) {
mCurrentKeyboardLayout = keyboardLayout;
}
@@ -364,11 +417,11 @@
}
public boolean removeKeyboardLayout(String keyboardLayout) {
- int index = Collections.binarySearch(mKeyboardLayouts, keyboardLayout);
+ int index = Collections.binarySearch(mUnassociatedKeyboardLayouts, keyboardLayout);
if (index < 0) {
return false;
}
- mKeyboardLayouts.remove(index);
+ mUnassociatedKeyboardLayouts.remove(index);
updateCurrentKeyboardLayoutIfRemoved(keyboardLayout, index);
return true;
}
@@ -376,41 +429,34 @@
private void updateCurrentKeyboardLayoutIfRemoved(
String removedKeyboardLayout, int removedIndex) {
if (Objects.equal(mCurrentKeyboardLayout, removedKeyboardLayout)) {
- if (!mKeyboardLayouts.isEmpty()) {
+ if (!mUnassociatedKeyboardLayouts.isEmpty()) {
int index = removedIndex;
- if (index == mKeyboardLayouts.size()) {
+ if (index == mUnassociatedKeyboardLayouts.size()) {
index = 0;
}
- mCurrentKeyboardLayout = mKeyboardLayouts.get(index);
+ mCurrentKeyboardLayout = mUnassociatedKeyboardLayouts.get(index);
} else {
mCurrentKeyboardLayout = null;
}
}
}
- public boolean switchKeyboardLayout(int direction) {
- final int size = mKeyboardLayouts.size();
- if (size < 2) {
- return false;
+ public boolean switchKeyboardLayout(InputMethodSubtypeHandle imeHandle) {
+ final String layout = mKeyboardLayouts.get(imeHandle);
+ if (layout != null && !TextUtils.equals(mCurrentKeyboardLayout, layout)) {
+ mCurrentKeyboardLayout = layout;
+ return true;
}
- int index = Collections.binarySearch(mKeyboardLayouts, mCurrentKeyboardLayout);
- assert index >= 0;
- if (direction > 0) {
- index = (index + 1) % size;
- } else {
- index = (index + size - 1) % size;
- }
- mCurrentKeyboardLayout = mKeyboardLayouts.get(index);
- return true;
+ return false;
}
public boolean removeUninstalledKeyboardLayouts(Set<String> availableKeyboardLayouts) {
boolean changed = false;
- for (int i = mKeyboardLayouts.size(); i-- > 0; ) {
- String keyboardLayout = mKeyboardLayouts.get(i);
+ for (int i = mUnassociatedKeyboardLayouts.size(); i-- > 0; ) {
+ String keyboardLayout = mUnassociatedKeyboardLayouts.get(i);
if (!availableKeyboardLayouts.contains(keyboardLayout)) {
Slog.i(TAG, "Removing uninstalled keyboard layout " + keyboardLayout);
- mKeyboardLayouts.remove(i);
+ mUnassociatedKeyboardLayouts.remove(i);
updateCurrentKeyboardLayoutIfRemoved(keyboardLayout, i);
changed = true;
}
@@ -428,13 +474,8 @@
throw new XmlPullParserException(
"Missing descriptor attribute on keyboard-layout.");
}
- String current = parser.getAttributeValue(null, "current");
- if (mKeyboardLayouts.contains(descriptor)) {
- throw new XmlPullParserException(
- "Found duplicate keyboard layout.");
- }
- mKeyboardLayouts.add(descriptor);
+ String current = parser.getAttributeValue(null, "current");
if (current != null && current.equals("true")) {
if (mCurrentKeyboardLayout != null) {
throw new XmlPullParserException(
@@ -442,6 +483,32 @@
}
mCurrentKeyboardLayout = descriptor;
}
+
+ String inputMethodId = parser.getAttributeValue(null, "input-method-id");
+ String inputMethodSubtypeId =
+ parser.getAttributeValue(null, "input-method-subtype-id");
+ if (inputMethodId == null && inputMethodSubtypeId != null
+ || inputMethodId != null && inputMethodSubtypeId == null) {
+ throw new XmlPullParserException(
+ "Found an incomplete input method description");
+ }
+
+ if (inputMethodSubtypeId != null) {
+ InputMethodSubtypeHandle handle = new InputMethodSubtypeHandle(
+ inputMethodId, Integer.parseInt(inputMethodSubtypeId));
+ if (mKeyboardLayouts.containsKey(handle)) {
+ throw new XmlPullParserException(
+ "Found duplicate subtype to keyboard layout mapping: "
+ + handle);
+ }
+ mKeyboardLayouts.put(handle, descriptor);
+ } else {
+ if (mUnassociatedKeyboardLayouts.contains(descriptor)) {
+ throw new XmlPullParserException(
+ "Found duplicate unassociated keyboard layout: " + descriptor);
+ }
+ mUnassociatedKeyboardLayouts.add(descriptor);
+ }
} else if (parser.getName().equals("calibration")) {
String format = parser.getAttributeValue(null, "format");
String rotation = parser.getAttributeValue(null, "rotation");
@@ -492,19 +559,31 @@
}
// Maintain invariant that layouts are sorted.
- Collections.sort(mKeyboardLayouts);
+ Collections.sort(mUnassociatedKeyboardLayouts);
// Maintain invariant that there is always a current keyboard layout unless
// there are none installed.
- if (mCurrentKeyboardLayout == null && !mKeyboardLayouts.isEmpty()) {
- mCurrentKeyboardLayout = mKeyboardLayouts.get(0);
+ if (mCurrentKeyboardLayout == null && !mUnassociatedKeyboardLayouts.isEmpty()) {
+ mCurrentKeyboardLayout = mUnassociatedKeyboardLayouts.get(0);
}
}
public void saveToXml(XmlSerializer serializer) throws IOException {
- for (String layout : mKeyboardLayouts) {
+ for (String layout : mUnassociatedKeyboardLayouts) {
serializer.startTag(null, "keyboard-layout");
serializer.attribute(null, "descriptor", layout);
+ serializer.endTag(null, "keyboard-layout");
+ }
+
+ final int N = mKeyboardLayouts.size();
+ for (int i = 0; i < N; i++) {
+ final InputMethodSubtypeHandle handle = mKeyboardLayouts.keyAt(i);
+ final String layout = mKeyboardLayouts.valueAt(i);
+ serializer.startTag(null, "keyboard-layout");
+ serializer.attribute(null, "descriptor", layout);
+ serializer.attribute(null, "input-method-id", handle.getInputMethodId());
+ serializer.attribute(null, "input-method-subtype-id",
+ Integer.toString(handle.getSubtypeId()));
if (layout.equals(mCurrentKeyboardLayout)) {
serializer.attribute(null, "current", "true");
}
@@ -529,6 +608,22 @@
}
}
+ private void dump(final PrintWriter pw, final String prefix) {
+ pw.println(prefix + "CurrentKeyboardLayout=" + mCurrentKeyboardLayout);
+ pw.println(prefix + "UnassociatedKeyboardLayouts=" + mUnassociatedKeyboardLayouts);
+ pw.println(prefix + "TouchCalibration=" + Arrays.toString(mTouchCalibration));
+ pw.println(prefix + "Subtype to Layout Mappings:");
+ final int N = mKeyboardLayouts.size();
+ if (N != 0) {
+ for (int i = 0; i < N; i++) {
+ pw.println(prefix + " " + mKeyboardLayouts.keyAt(i) + ": "
+ + mKeyboardLayouts.valueAt(i));
+ }
+ } else {
+ pw.println(prefix + " <none>");
+ }
+ }
+
private static String surfaceRotationToString(int surfaceRotation) {
switch (surfaceRotation) {
case Surface.ROTATION_0: return "0";
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 38ebc80..1d7d24b 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -31,6 +31,9 @@
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIMAX;
+import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED;
+import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED;
+import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED;
import static android.net.ConnectivityManager.isNetworkTypeMobile;
import static android.net.NetworkPolicy.CYCLE_NONE;
import static android.net.NetworkPolicy.LIMIT_DISABLED;
@@ -124,6 +127,7 @@
import android.os.INetworkManagementService;
import android.os.IPowerManager;
import android.os.Message;
+import android.os.ResultReceiver;
import android.os.MessageQueue.IdleHandler;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
@@ -1873,6 +1877,20 @@
}
@Override
+ public int getRestrictBackgroundByCaller() {
+ mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
+ final int uid = Binder.getCallingUid();
+ synchronized (mRulesLock) {
+ if (!mRestrictBackground) {
+ return RESTRICT_BACKGROUND_STATUS_DISABLED;
+ }
+ return mRestrictBackgroundWhitelistUids.get(uid)
+ ? RESTRICT_BACKGROUND_STATUS_WHITELISTED
+ : RESTRICT_BACKGROUND_STATUS_ENABLED;
+ }
+ }
+
+ @Override
public boolean getRestrictBackground() {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
@@ -2102,6 +2120,13 @@
}
@Override
+ public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
+ String[] args, ResultReceiver resultReceiver) throws RemoteException {
+ (new NetworkPolicyManagerShellCommand(this)).exec(
+ this, in, out, err, args, resultReceiver);
+ }
+
+ @Override
public boolean isUidForeground(int uid) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
new file mode 100644
index 0000000..7b1acca
--- /dev/null
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.net;
+
+import java.io.PrintWriter;
+
+import android.content.Intent;
+import android.net.INetworkPolicyManager;
+import android.os.RemoteException;
+import android.os.ShellCommand;
+
+public class NetworkPolicyManagerShellCommand extends ShellCommand {
+
+ final INetworkPolicyManager mInterface;
+
+ NetworkPolicyManagerShellCommand(NetworkPolicyManagerService service) {
+ mInterface = service;
+ }
+
+ @Override
+ public int onCommand(String cmd) {
+ if (cmd == null) {
+ return handleDefaultCommands(cmd);
+ }
+ final PrintWriter pw = getOutPrintWriter();
+ try {
+ switch(cmd) {
+ case "get":
+ return runGet();
+ case "set":
+ return runSet();
+ case "list":
+ return runList();
+ case "add":
+ return runAdd();
+ case "remove":
+ return runRemove();
+ default:
+ return handleDefaultCommands(cmd);
+ }
+ } catch (RemoteException e) {
+ pw.println("Remote exception: " + e);
+ }
+ return -1;
+ }
+
+ @Override
+ public void onHelp() {
+ final PrintWriter pw = getOutPrintWriter();
+ pw.println("Network policy manager (netpolicy) commands:");
+ pw.println(" help");
+ pw.println(" Print this help text.");
+ pw.println("");
+ pw.println(" get restrict-background");
+ pw.println(" Gets the global restrict background usage status.");
+ pw.println(" set restrict-background BOOLEAN");
+ pw.println(" Sets the global restrict background usage status.");
+ pw.println(" list restrict-background-whitelist");
+ pw.println(" Prints UID that are whitelisted for restrict background usage.");
+ pw.println(" add restrict-background-whitelist UID");
+ pw.println(" Adds a UID to the whitelist for restrict background usage.");
+ pw.println(" remove restrict-background-whitelist UID");
+ pw.println(" Removes a UID from the whitelist for restrict background usage.");
+ }
+
+ private int runGet() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final String type = getNextArg();
+ if (type == null) {
+ pw.println("Error: didn't specify type of data to get");
+ return -1;
+ }
+ switch(type) {
+ case "restrict-background":
+ return getRestrictBackgroundWhitelist();
+ }
+ pw.println("Error: unknown get type '" + type + "'");
+ return -1;
+ }
+
+ private int runSet() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final String type = getNextArg();
+ if (type == null) {
+ pw.println("Error: didn't specify type of data to set");
+ return -1;
+ }
+ switch(type) {
+ case "restrict-background":
+ return setRestrictBackgroundWhitelist();
+ }
+ pw.println("Error: unknown set type '" + type + "'");
+ return -1;
+ }
+
+ private int runList() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final String type = getNextArg();
+ if (type == null) {
+ pw.println("Error: didn't specify type of data to list");
+ return -1;
+ }
+ switch(type) {
+ case "restrict-background-whitelist":
+ return runListRestrictBackgroundWhitelist();
+ }
+ pw.println("Error: unknown list type '" + type + "'");
+ return -1;
+ }
+
+ private int runAdd() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final String type = getNextArg();
+ if (type == null) {
+ pw.println("Error: didn't specify type of data to add");
+ return -1;
+ }
+ switch(type) {
+ case "restrict-background-whitelist":
+ return addRestrictBackgroundWhitelist();
+ }
+ pw.println("Error: unknown add type '" + type + "'");
+ return -1;
+ }
+
+ private int runRemove() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final String type = getNextArg();
+ if (type == null) {
+ pw.println("Error: didn't specify type of data to remove");
+ return -1;
+ }
+ switch(type) {
+ case "restrict-background-whitelist":
+ return removeRestrictBackgroundWhitelist();
+ }
+ pw.println("Error: unknown remove type '" + type + "'");
+ return -1;
+ }
+
+ private int runListRestrictBackgroundWhitelist() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final int[] uids = mInterface.getRestrictBackgroundWhitelistedUids();
+ pw.print("Restrict background whitelisted UIDs: ");
+ if (uids.length == 0) {
+ pw.println("none");
+ } else {
+ for (int i = 0; i < uids.length; i++) {
+ int uid = uids[i];
+ pw.print(uid);
+ pw.print(' ');
+ }
+ }
+ pw.println();
+ return 0;
+ }
+
+ private int getRestrictBackgroundWhitelist() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ pw.print("Restrict background status: ");
+ pw.println(mInterface.getRestrictBackground() ? "enabled" : "disabled");
+ return 0;
+ }
+
+ private int setRestrictBackgroundWhitelist() throws RemoteException {
+ final int enabled = getNextBooleanArg();
+ if (enabled < 0) {
+ return enabled;
+ }
+ mInterface.setRestrictBackground(enabled > 0);
+ return 0;
+ }
+
+ private int addRestrictBackgroundWhitelist() throws RemoteException {
+ final int uid = getUidFromNextArg();
+ if (uid < 0) {
+ return uid;
+ }
+ mInterface.addRestrictBackgroundWhitelistedUid(uid);
+ return 0;
+ }
+
+ private int removeRestrictBackgroundWhitelist() throws RemoteException {
+ final int uid = getUidFromNextArg();
+ if (uid < 0) {
+ return uid;
+ }
+ mInterface.removeRestrictBackgroundWhitelistedUid(uid);
+ return 0;
+ }
+
+ private int getNextBooleanArg() {
+ final PrintWriter pw = getOutPrintWriter();
+ final String arg = getNextArg();
+ if (arg == null) {
+ pw.println("Error: didn't specify BOOLEAN");
+ return -1;
+ }
+ return Boolean.valueOf(arg) ? 1 : 0;
+ }
+
+ private int getUidFromNextArg() {
+ final PrintWriter pw = getOutPrintWriter();
+ final String arg = getNextArg();
+ if (arg == null) {
+ pw.println("Error: didn't specify UID");
+ return -1;
+ }
+ try {
+ return Integer.parseInt(arg);
+ } catch (NumberFormatException e) {
+ pw.println("Error: UID (" + arg + ") should be a number");
+ return -2;
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index f360dc2..f5da52e 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -297,7 +297,6 @@
checkType(guest.service);
if (registerServiceImpl(guest) != null) {
onServiceAdded(guest);
- onServiceAdded(guest);
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index b1fe68c..2ee74db 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -223,6 +223,8 @@
private WorkerHandler mHandler;
private final HandlerThread mRankingThread = new HandlerThread("ranker",
Process.THREAD_PRIORITY_BACKGROUND);
+ private final HandlerThread mAssistantThread = new HandlerThread("assistant",
+ Process.THREAD_PRIORITY_BACKGROUND);
private Light mNotificationLight;
Light mAttentionLight;
@@ -295,6 +297,7 @@
private static final int MY_UID = Process.myUid();
private static final int MY_PID = Process.myPid();
private RankingHandler mRankingHandler;
+ private Handler mAssistantHandler;
private static class Archive {
final int mBufferSize;
@@ -878,6 +881,7 @@
mHandler = new WorkerHandler();
mRankingThread.start();
+ mAssistantThread.start();
String[] extractorNames;
try {
extractorNames = resources.getStringArray(R.array.config_notificationSignalExtractors);
@@ -886,6 +890,7 @@
}
mUsageStats = new NotificationUsageStats(getContext());
mRankingHandler = new RankingHandlerWorker(mRankingThread.getLooper());
+ mAssistantHandler = new Handler(mAssistantThread.getLooper());
mRankingHelper = new RankingHelper(getContext(),
mRankingHandler,
mUsageStats,
@@ -1957,7 +1962,7 @@
@Override
public void setImportanceFromAssistant(INotificationListener token, String key,
- int importance, CharSequence explanation) {
+ int importance, CharSequence explanation) throws RemoteException {
final long identity = Binder.clearCallingIdentity();
try {
synchronized (mNotificationList) {
@@ -2249,115 +2254,145 @@
+ " id=" + id + " notification=" + notification);
}
- mHandler.post(new Runnable() {
- @Override
- public void run() {
+ // Sanitize inputs
+ notification.priority = clamp(notification.priority, Notification.PRIORITY_MIN,
+ Notification.PRIORITY_MAX);
- synchronized (mNotificationList) {
-
- // Sanitize inputs
- notification.priority = clamp(notification.priority, Notification.PRIORITY_MIN,
- Notification.PRIORITY_MAX);
-
- // setup local book-keeping
- final StatusBarNotification n = new StatusBarNotification(
- pkg, opPkg, id, tag, callingUid, callingPid, 0, notification,
- user);
- NotificationRecord r = new NotificationRecord(getContext(), n);
- NotificationRecord old = mNotificationsByKey.get(n.getKey());
- if (old != null) {
- // Retain ranking information from previous record
- r.copyRankingInformation(old);
- }
-
- // Handle grouped notifications and bail out early if we
- // can to avoid extracting signals.
- handleGroupedNotificationLocked(r, old, callingUid, callingPid);
- boolean ignoreNotification =
- removeUnusedGroupedNotificationLocked(r, old, callingUid, callingPid);
-
- // This conditional is a dirty hack to limit the logging done on
- // behalf of the download manager without affecting other apps.
- if (!pkg.equals("com.android.providers.downloads")
- || Log.isLoggable("DownloadManager", Log.VERBOSE)) {
- int enqueueStatus = EVENTLOG_ENQUEUE_STATUS_NEW;
- if (ignoreNotification) {
- enqueueStatus = EVENTLOG_ENQUEUE_STATUS_IGNORED;
- } else if (old != null) {
- enqueueStatus = EVENTLOG_ENQUEUE_STATUS_UPDATE;
- }
- EventLogTags.writeNotificationEnqueue(callingUid, callingPid,
- pkg, id, tag, userId, notification.toString(),
- enqueueStatus);
- }
-
- if (ignoreNotification) {
- return;
- }
-
- mRankingHelper.extractSignals(r);
- savePolicyFile();
-
- // blocked apps/topics
- if (r.getImportance() == NotificationListenerService.Ranking.IMPORTANCE_NONE
- || !noteNotificationOp(pkg, callingUid)) {
- if (!isSystemNotification) {
- Slog.e(TAG, "Suppressing notification from package " + pkg
- + " by user request.");
- mUsageStats.registerBlocked(r);
- return;
- }
- }
-
- int index = indexOfNotificationLocked(n.getKey());
- if (index < 0) {
- mNotificationList.add(r);
- mUsageStats.registerPostedByApp(r);
- } else {
- old = mNotificationList.get(index);
- mNotificationList.set(index, r);
- mUsageStats.registerUpdatedByApp(r, old);
- // Make sure we don't lose the foreground service state.
- notification.flags |=
- old.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE;
- r.isUpdate = true;
- }
-
- mNotificationsByKey.put(n.getKey(), r);
-
- // Ensure if this is a foreground service that the proper additional
- // flags are set.
- if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
- notification.flags |= Notification.FLAG_ONGOING_EVENT
- | Notification.FLAG_NO_CLEAR;
- }
-
- applyZenModeLocked(r);
- mRankingHelper.sort(mNotificationList);
-
- if (notification.getSmallIcon() != null) {
- StatusBarNotification oldSbn = (old != null) ? old.sbn : null;
- mListeners.notifyPostedLocked(n, oldSbn);
- } else {
- Slog.e(TAG, "Not posting notification without small icon: " + notification);
- if (old != null && !old.isCanceled) {
- mListeners.notifyRemovedLocked(n);
- }
- // ATTENTION: in a future release we will bail out here
- // so that we do not play sounds, show lights, etc. for invalid
- // notifications
- Slog.e(TAG, "WARNING: In a future release this will crash the app: "
- + n.getPackageName());
- }
-
- buzzBeepBlinkLocked(r);
- }
- }
- });
+ // setup local book-keeping
+ final StatusBarNotification n = new StatusBarNotification(
+ pkg, opPkg, id, tag, callingUid, callingPid, 0, notification,
+ user);
+ final NotificationRecord r = new NotificationRecord(getContext(), n);
+ mHandler.post(new EnqueueNotificationRunnable(userId, r));
idOut[0] = id;
}
+ private class EnqueueNotificationRunnable implements Runnable {
+ private final NotificationRecord r;
+ private final int userId;
+
+ EnqueueNotificationRunnable(int userId, NotificationRecord r) {
+ this.userId = userId;
+ this.r = r;
+ };
+
+ @Override
+ public void run() {
+
+ synchronized (mNotificationList) {
+ final StatusBarNotification n = r.sbn;
+ Slog.d(TAG, "EnqueueNotificationRunnable.run for: " + n.getKey());
+ NotificationRecord old = mNotificationsByKey.get(n.getKey());
+ if (old != null) {
+ // Retain ranking information from previous record
+ r.copyRankingInformation(old);
+ }
+
+ final int callingUid = n.getUid();
+ final int callingPid = n.getInitialPid();
+ final Notification notification = n.getNotification();
+ final String pkg = n.getPackageName();
+ final int id = n.getId();
+ final String tag = n.getTag();
+ final boolean isSystemNotification = isUidSystem(callingUid) ||
+ ("android".equals(pkg));
+
+ // Handle grouped notifications and bail out early if we
+ // can to avoid extracting signals.
+ handleGroupedNotificationLocked(r, old, callingUid, callingPid);
+ boolean ignoreNotification =
+ removeUnusedGroupedNotificationLocked(r, old, callingUid, callingPid);
+ Slog.d(TAG, "ignoreNotification is " + ignoreNotification);
+
+ // This conditional is a dirty hack to limit the logging done on
+ // behalf of the download manager without affecting other apps.
+ if (!pkg.equals("com.android.providers.downloads")
+ || Log.isLoggable("DownloadManager", Log.VERBOSE)) {
+ int enqueueStatus = EVENTLOG_ENQUEUE_STATUS_NEW;
+ if (ignoreNotification) {
+ enqueueStatus = EVENTLOG_ENQUEUE_STATUS_IGNORED;
+ } else if (old != null) {
+ enqueueStatus = EVENTLOG_ENQUEUE_STATUS_UPDATE;
+ }
+ EventLogTags.writeNotificationEnqueue(callingUid, callingPid,
+ pkg, id, tag, userId, notification.toString(),
+ enqueueStatus);
+ }
+
+ if (ignoreNotification) {
+ return;
+ }
+
+ mRankingHelper.extractSignals(r);
+
+ // why is this here?
+ savePolicyFile();
+
+ // blocked apps/topics
+ if (r.getImportance() == NotificationListenerService.Ranking.IMPORTANCE_NONE
+ || !noteNotificationOp(pkg, callingUid)) {
+ if (!isSystemNotification) {
+ Slog.e(TAG, "Suppressing notification from package " + pkg
+ + " by user request.");
+ mUsageStats.registerBlocked(r);
+ return;
+ }
+ }
+
+ // tell the assistant about the notification
+ if (mAssistant.isEnabled()) {
+ mAssistant.onNotificationEnqueued(r);
+ // TODO delay the code below here for 100ms or until there is an answer
+ }
+
+
+ int index = indexOfNotificationLocked(n.getKey());
+ if (index < 0) {
+ mNotificationList.add(r);
+ mUsageStats.registerPostedByApp(r);
+ } else {
+ old = mNotificationList.get(index);
+ mNotificationList.set(index, r);
+ mUsageStats.registerUpdatedByApp(r, old);
+ // Make sure we don't lose the foreground service state.
+ notification.flags |=
+ old.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE;
+ r.isUpdate = true;
+ }
+
+ mNotificationsByKey.put(n.getKey(), r);
+
+ // Ensure if this is a foreground service that the proper additional
+ // flags are set.
+ if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
+ notification.flags |= Notification.FLAG_ONGOING_EVENT
+ | Notification.FLAG_NO_CLEAR;
+ }
+
+ applyZenModeLocked(r);
+ mRankingHelper.sort(mNotificationList);
+
+ if (notification.getSmallIcon() != null) {
+ StatusBarNotification oldSbn = (old != null) ? old.sbn : null;
+ mListeners.notifyPostedLocked(n, oldSbn);
+ } else {
+ Slog.e(TAG, "Not posting notification without small icon: " + notification);
+ if (old != null && !old.isCanceled) {
+ mListeners.notifyRemovedLocked(n);
+ }
+ // ATTENTION: in a future release we will bail out here
+ // so that we do not play sounds, show lights, etc. for invalid
+ // notifications
+ Slog.e(TAG, "WARNING: In a future release this will crash the app: "
+ + n.getPackageName());
+ }
+
+ buzzBeepBlinkLocked(r);
+ }
+ }
+ }
+
/**
* Ensures that grouped notification receive their special treatment.
*
@@ -3391,6 +3426,30 @@
return true;
}
+ private class TrimCache {
+ StatusBarNotification heavy;
+ StatusBarNotification sbnClone;
+ StatusBarNotification sbnCloneLight;
+
+ TrimCache(StatusBarNotification sbn) {
+ heavy = sbn;
+ }
+
+ StatusBarNotification ForListener(ManagedServiceInfo info) {
+ if (mListeners.getOnNotificationPostedTrim(info) == TRIM_LIGHT) {
+ if (sbnCloneLight == null) {
+ sbnCloneLight = heavy.cloneLight();
+ }
+ return sbnCloneLight;
+ } else {
+ if (sbnClone == null) {
+ sbnClone = heavy.clone();
+ }
+ return sbnClone;
+ }
+ }
+ }
+
public class NotificationAssistant extends ManagedServices {
public NotificationAssistant() {
@@ -3428,6 +3487,46 @@
protected void onServiceRemovedLocked(ManagedServiceInfo removed) {
mListeners.unregisterService(removed.service, removed.userid);
}
+
+ public void onNotificationEnqueued(final NotificationRecord r) {
+ final StatusBarNotification sbn = r.sbn;
+ TrimCache trimCache = new TrimCache(sbn);
+
+ // mServices is the list inside ManagedServices of all the assistants,
+ // There should be only one, but it's a list, so while we enforce
+ // singularity elsewhere, we keep it general here, to avoid surprises.
+ for (final ManagedServiceInfo info : NotificationAssistant.this.mServices) {
+ boolean sbnVisible = isVisibleToListener(sbn, info);
+ if (!sbnVisible) {
+ continue;
+ }
+
+ final int importance = r.getImportance();
+ final boolean fromUser = r.isImportanceFromUser();
+ final StatusBarNotification sbnToPost = trimCache.ForListener(info);
+ mAssistantHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ notifyEnqueued(info, sbnToPost, importance, fromUser);
+ }
+ });
+ }
+ }
+
+ private void notifyEnqueued(final ManagedServiceInfo info,
+ final StatusBarNotification sbn, int importance, boolean fromUser) {
+ final INotificationListener assistant = (INotificationListener) info.service;
+ StatusBarNotificationHolder sbnHolder = new StatusBarNotificationHolder(sbn);
+ try {
+ assistant.onNotificationEnqueued(sbnHolder, importance, fromUser);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex);
+ }
+ }
+
+ public boolean isEnabled() {
+ return !mServices.isEmpty();
+ }
}
public class NotificationListeners extends ManagedServices {
@@ -3476,7 +3575,6 @@
}
}
-
@Override
protected void onServiceRemovedLocked(ManagedServiceInfo removed) {
if (mListenersDisablingEffects.remove(removed)) {
@@ -3508,8 +3606,7 @@
*/
public void notifyPostedLocked(StatusBarNotification sbn, StatusBarNotification oldSbn) {
// Lazily initialized snapshots of the notification.
- StatusBarNotification sbnClone = null;
- StatusBarNotification sbnCloneLight = null;
+ TrimCache trimCache = new TrimCache(sbn);
for (final ManagedServiceInfo info : mServices) {
boolean sbnVisible = isVisibleToListener(sbn, info);
@@ -3532,16 +3629,7 @@
continue;
}
- final int trim = mListeners.getOnNotificationPostedTrim(info);
-
- if (trim == TRIM_LIGHT && sbnCloneLight == null) {
- sbnCloneLight = sbn.cloneLight();
- } else if (trim == TRIM_FULL && sbnClone == null) {
- sbnClone = sbn.clone();
- }
- final StatusBarNotification sbnToPost =
- (trim == TRIM_FULL) ? sbnClone : sbnCloneLight;
-
+ final StatusBarNotification sbnToPost = trimCache.ForListener(info);
mHandler.post(new Runnable() {
@Override
public void run() {
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index 0be2edd..490e890 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -15,6 +15,7 @@
*/
package com.android.server.notification;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_DEFAULT;
import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_HIGH;
import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_LOW;
@@ -88,8 +89,8 @@
private int mAuthoritativeRank;
private String mGlobalSortKey;
private int mPackageVisibility;
- private int mTopicImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
- private int mImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
+ private int mTopicImportance = IMPORTANCE_UNSPECIFIED;
+ private int mImportance = IMPORTANCE_UNSPECIFIED;
private CharSequence mImportanceExplanation = null;
private int mSuppressedVisualEffects = 0;
@@ -510,4 +511,8 @@
public String getGroupKey() {
return sbn.getGroupKey();
}
+
+ public boolean isImportanceFromUser() {
+ return mImportance == mTopicImportance;
+ }
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index f05e45f..d11da79 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3517,7 +3517,7 @@
/**
* Checks if the request is from the system or an app that has INTERACT_ACROSS_USERS
* or INTERACT_ACROSS_USERS_FULL permissions, if the userid is not for the caller.
- * @param checkShell TODO(yamasani):
+ * @param checkShell whether to prevent shell from access if there's a debugging restriction
* @param message the message to log on security exception
*/
void enforceCrossUserPermission(int callingUid, int userId, boolean requireFullPermission,
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 1e057aa..fc79849 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -109,7 +109,7 @@
*/
public class UserManagerService extends IUserManager.Stub {
private static final String LOG_TAG = "UserManagerService";
- static final boolean DBG = true; // DO NOT SUBMIT WITH TRUE
+ static final boolean DBG = false; // DO NOT SUBMIT WITH TRUE
private static final boolean DBG_WITH_STACKTRACE = false; // DO NOT SUBMIT WITH TRUE
private static final String TAG_NAME = "name";
@@ -552,22 +552,13 @@
}
private void broadcastProfileAvailabilityChanges(UserHandle profileHandle,
- UserHandle parentHandle, Bundle extras) {
- // Send intent to profile
- Intent intent = new Intent(Intent.ACTION_AVAILABILITY_CHANGED);
+ UserHandle parentHandle, boolean inQuietMode) {
+ Intent intent = new Intent(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED);
+ intent.putExtra(Intent.EXTRA_QUIET_MODE, inQuietMode);
+ intent.putExtra(Intent.EXTRA_USER, profileHandle);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, profileHandle.getIdentifier());
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
- intent.putExtras(extras);
- mContext.sendBroadcastAsUser(intent, profileHandle);
-
- // Send intent to parent
- if (parentHandle != null) {
- intent = new Intent(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED);
- intent.putExtra(Intent.EXTRA_USER, profileHandle);
- intent.putExtra(Intent.EXTRA_USER_HANDLE, profileHandle.getIdentifier());
- intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
- intent.putExtras(extras);
- mContext.sendBroadcastAsUser(intent, parentHandle);
- }
+ mContext.sendBroadcastAsUser(intent, parentHandle);
}
@Override
@@ -591,10 +582,21 @@
}
}
if (changed) {
- Bundle extras = new Bundle();
- extras.putBoolean(Intent.EXTRA_QUIET_MODE, enableQuietMode);
- broadcastProfileAvailabilityChanges(profile.getUserHandle(),
- parent != null ? parent.getUserHandle() : null, extras);
+ long identity = Binder.clearCallingIdentity();
+ try {
+ if (enableQuietMode) {
+ ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null);
+ } else {
+ ActivityManagerNative.getDefault().startUserInBackground(userHandle);
+ }
+ } catch (RemoteException e) {
+ Slog.e(LOG_TAG, "fail to start/stop user for quiet mode", e);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+
+ broadcastProfileAvailabilityChanges(profile.getUserHandle(), parent.getUserHandle(),
+ enableQuietMode);
}
}
@@ -606,7 +608,7 @@
info = getUserInfoLU(userHandle);
}
if (info == null || !info.isManagedProfile()) {
- throw new IllegalArgumentException("User " + userHandle + " is not a profile");
+ return false;
}
return info.isQuietModeEnabled();
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 3b61817..0b1354a 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -3136,15 +3136,6 @@
hideRecentApps(true, false);
}
- // Handle keyboard layout switching.
- // TODO: Deprecate this behavior when we fully migrate to IME subtype-based layout rotation.
- if (down && repeatCount == 0 && keyCode == KeyEvent.KEYCODE_SPACE
- && ((metaState & KeyEvent.META_CTRL_MASK) != 0)) {
- int direction = (metaState & KeyEvent.META_SHIFT_MASK) != 0 ? -1 : 1;
- mWindowManagerFuncs.switchKeyboardLayout(event.getDeviceId(), direction);
- return -1;
- }
-
// Handle input method switching.
if (down && repeatCount == 0
&& (keyCode == KeyEvent.KEYCODE_LANGUAGE_SWITCH
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 1d498e1..3452f41 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -60,7 +60,6 @@
import android.util.Log;
import android.util.Slog;
import android.util.SparseBooleanArray;
-import android.util.SparseIntArray;
import android.util.Xml;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;
@@ -103,6 +102,9 @@
private static final int MSG_CLEANUP_USER = 8;
private static final int MSG_SWITCH_USER = 9;
private static final int MSG_SET_DEVICE_LOCKED = 10;
+ private static final int MSG_FLUSH_TRUST_USUALLY_MANAGED = 11;
+
+ public static final int TRUST_USUALLY_MANAGED_FLUSH_DELAY = 2 * 60 * 1000;
private final ArraySet<AgentInfo> mActiveAgents = new ArraySet<>();
private final ArrayList<ITrustListener> mTrustListeners = new ArrayList<>();
@@ -120,6 +122,9 @@
@GuardedBy("mDeviceLockedForUser")
private final SparseBooleanArray mDeviceLockedForUser = new SparseBooleanArray();
+ @GuardedBy("mDeviceLockedForUser")
+ private final SparseBooleanArray mTrustUsuallyManagedForUser = new SparseBooleanArray();
+
private boolean mTrustAgentsCanRun = false;
private int mCurrentUser = UserHandle.USER_SYSTEM;
@@ -187,7 +192,12 @@
}
public void updateTrust(int userId, int flags) {
- dispatchOnTrustManagedChanged(aggregateIsTrustManaged(userId), userId);
+ boolean managed = aggregateIsTrustManaged(userId);
+ dispatchOnTrustManagedChanged(managed, userId);
+ if (mStrongAuthTracker.isTrustAllowedForUser(userId)
+ && isTrustUsuallyManagedInternal(userId) != managed) {
+ updateTrustUsuallyManaged(userId, managed);
+ }
boolean trusted = aggregateIsTrusted(userId);
boolean changed;
synchronized (mUserIsTrusted) {
@@ -200,6 +210,18 @@
}
}
+ private void updateTrustUsuallyManaged(int userId, boolean managed) {
+ synchronized (mTrustUsuallyManagedForUser) {
+ mTrustUsuallyManagedForUser.put(userId, managed);
+ }
+ // Wait a few minutes before committing to flash, in case the trust agent is transiently not
+ // managing trust (crashed, needs to acknowledge DPM restrictions, etc).
+ mHandler.removeMessages(MSG_FLUSH_TRUST_USUALLY_MANAGED);
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MSG_FLUSH_TRUST_USUALLY_MANAGED),
+ TRUST_USUALLY_MANAGED_FLUSH_DELAY);
+ }
+
void refreshAgentList(int userId) {
if (DEBUG) Slog.d(TAG, "refreshAgentList()");
if (!mTrustAgentsCanRun) {
@@ -787,8 +809,37 @@
mHandler.obtainMessage(MSG_SET_DEVICE_LOCKED, value ? 1 : 0, userId)
.sendToTarget();
}
+
+ @Override
+ public boolean isTrustUsuallyManaged(int userId) {
+ mContext.enforceCallingPermission(Manifest.permission.TRUST_LISTENER,
+ "query trust state");
+ return isTrustUsuallyManagedInternal(userId);
+ }
};
+ private boolean isTrustUsuallyManagedInternal(int userId) {
+ synchronized (mTrustUsuallyManagedForUser) {
+ int i = mTrustUsuallyManagedForUser.indexOfKey(userId);
+ if (i >= 0) {
+ return mTrustUsuallyManagedForUser.valueAt(i);
+ }
+ }
+ // It's not in memory yet, get the value from persisted storage instead
+ boolean persistedValue = mLockPatternUtils.isTrustUsuallyManaged(userId);
+ synchronized (mTrustUsuallyManagedForUser) {
+ int i = mTrustUsuallyManagedForUser.indexOfKey(userId);
+ if (i >= 0) {
+ // Someone set the trust usually managed in the mean time. Better use that.
+ return mTrustUsuallyManagedForUser.valueAt(i);
+ } else {
+ // .. otherwise it's safe to cache the fetched value now.
+ mTrustUsuallyManagedForUser.put(userId, persistedValue);
+ return persistedValue;
+ }
+ }
+ }
+
private int resolveProfileParent(int userId) {
long identity = Binder.clearCallingIdentity();
try {
@@ -834,6 +885,19 @@
case MSG_SET_DEVICE_LOCKED:
setDeviceLockedForUser(msg.arg2, msg.arg1 != 0);
break;
+ case MSG_FLUSH_TRUST_USUALLY_MANAGED:
+ SparseBooleanArray usuallyManaged;
+ synchronized (mTrustUsuallyManagedForUser) {
+ usuallyManaged = mTrustUsuallyManagedForUser.clone();
+ }
+
+ for (int i = 0; i < usuallyManaged.size(); i++) {
+ int userId = usuallyManaged.keyAt(i);
+ boolean value = usuallyManaged.valueAt(i);
+ if (value != mLockPatternUtils.isTrustUsuallyManaged(userId)) {
+ mLockPatternUtils.setTrustUsuallyManaged(value, userId);
+ }
+ }
}
}
};
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java
index 9a55e7f..2deb0d5 100644
--- a/services/core/java/com/android/server/vr/VrManagerService.java
+++ b/services/core/java/com/android/server/vr/VrManagerService.java
@@ -34,7 +34,6 @@
*/
public class VrManagerService extends SystemService {
- public static final boolean DEBUG = false;
public static final String TAG = "VrManagerService";
private final Object mLock = new Object();
@@ -88,7 +87,8 @@
synchronized (mLock) {
if (mVrModeEnabled != enabled) {
mVrModeEnabled = enabled;
- if (DEBUG) Slog.d(TAG, "VR mode " + ((mVrModeEnabled) ? "enabled" : "disabled"));
+ // Log mode change event.
+ Slog.i(TAG, "VR mode " + ((mVrModeEnabled) ? "enabled" : "disabled"));
onVrModeChangedLocked();
}
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 87d0700..39983dd 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -92,6 +92,8 @@
import com.android.internal.R;
import com.android.server.EventLogTags;
+import libcore.io.IoUtils;
+
public class WallpaperManagerService extends IWallpaperManager.Stub {
static final String TAG = "WallpaperManagerService";
static final boolean DEBUG = false;
@@ -170,6 +172,12 @@
WallpaperData mLastWallpaper;
/**
+ * ID of the current wallpaper, changed every time anything sets a wallpaper.
+ * This is used for external detection of wallpaper update activity.
+ */
+ int mWallpaperId;
+
+ /**
* Name of the component used to display bitmap wallpapers from either the gallery or
* built-in wallpapers.
*/
@@ -205,6 +213,11 @@
*/
ComponentName nextWallpaperComponent;
+ /**
+ * The ID of this wallpaper
+ */
+ int wallpaperId;
+
WallpaperConnection connection;
long lastDiedTime;
boolean wallpaperUpdating;
@@ -227,6 +240,13 @@
}
}
+ int makeWallpaperIdLocked() {
+ do {
+ ++mWallpaperId;
+ } while (mWallpaperId == 0);
+ return mWallpaperId;
+ }
+
class WallpaperConnection extends IWallpaperConnection.Stub
implements ServiceConnection {
final WallpaperInfo mInfo;
@@ -333,7 +353,7 @@
public ParcelFileDescriptor setWallpaper(String name) {
synchronized (mLock) {
if (mWallpaper.connection == this) {
- return updateWallpaperBitmapLocked(name, mWallpaper);
+ return updateWallpaperBitmapLocked(name, mWallpaper, null);
}
return null;
}
@@ -848,18 +868,26 @@
}
}
- public ParcelFileDescriptor setWallpaper(String name, String callingPackage) {
+ @Override
+ public ParcelFileDescriptor setWallpaper(String name, String callingPackage, Bundle extras,
+ int which) {
checkPermission(android.Manifest.permission.SET_WALLPAPER);
+
+ if (which == 0) {
+ return null;
+ }
+
if (!isWallpaperSupported(callingPackage)) {
return null;
}
+
synchronized (mLock) {
if (DEBUG) Slog.v(TAG, "setWallpaper");
int userId = UserHandle.getCallingUserId();
WallpaperData wallpaper = getWallpaperSafeLocked(userId);
final long ident = Binder.clearCallingIdentity();
try {
- ParcelFileDescriptor pfd = updateWallpaperBitmapLocked(name, wallpaper);
+ ParcelFileDescriptor pfd = updateWallpaperBitmapLocked(name, wallpaper, extras);
if (pfd != null) {
wallpaper.imageWallpaperPending = true;
}
@@ -870,7 +898,8 @@
}
}
- ParcelFileDescriptor updateWallpaperBitmapLocked(String name, WallpaperData wallpaper) {
+ ParcelFileDescriptor updateWallpaperBitmapLocked(String name, WallpaperData wallpaper,
+ Bundle extras) {
if (name == null) name = "";
try {
File dir = getWallpaperDir(wallpaper.userId);
@@ -888,6 +917,14 @@
return null;
}
wallpaper.name = name;
+ wallpaper.wallpaperId = makeWallpaperIdLocked();
+ if (extras != null) {
+ extras.putInt(WallpaperManager.EXTRA_NEW_WALLPAPER_ID, wallpaper.wallpaperId);
+ }
+ if (DEBUG) {
+ Slog.v(TAG, "updateWallpaperBitmapLocked() : id=" + wallpaper.wallpaperId
+ + " name=" + name);
+ }
return fd;
} catch (FileNotFoundException e) {
Slog.w(TAG, "Error setting wallpaper", e);
@@ -1156,6 +1193,7 @@
out.startDocument(null, true);
out.startTag(null, "wp");
+ out.attribute(null, "id", Integer.toString(wallpaper.wallpaperId));
out.attribute(null, "width", Integer.toString(wallpaper.width));
out.attribute(null, "height", Integer.toString(wallpaper.height));
if (wallpaper.padding.left != 0) {
@@ -1184,13 +1222,7 @@
stream.close();
journal.commit();
} catch (IOException e) {
- try {
- if (stream != null) {
- stream.close();
- }
- } catch (IOException ex) {
- // Ignore
- }
+ IoUtils.closeQuietly(stream);
journal.rollback();
}
}
@@ -1259,6 +1291,16 @@
if (type == XmlPullParser.START_TAG) {
String tag = parser.getName();
if ("wp".equals(tag)) {
+ final String idString = parser.getAttributeValue(null, "id");
+ if (idString != null) {
+ final int id = wallpaper.wallpaperId = Integer.parseInt(idString);
+ if (id > mWallpaperId) {
+ mWallpaperId = id;
+ }
+ } else {
+ wallpaper.wallpaperId = makeWallpaperIdLocked();
+ }
+
wallpaper.width = Integer.parseInt(parser.getAttributeValue(null, "width"));
wallpaper.height = Integer.parseInt(parser
.getAttributeValue(null, "height"));
@@ -1301,19 +1343,21 @@
} catch (IndexOutOfBoundsException e) {
Slog.w(TAG, "failed parsing " + file + " " + e);
}
- try {
- if (stream != null) {
- stream.close();
- }
- } catch (IOException e) {
- // Ignore
- }
+ IoUtils.closeQuietly(stream);
if (!success) {
wallpaper.width = -1;
wallpaper.height = -1;
wallpaper.padding.set(0, 0, 0, 0);
wallpaper.name = "";
+ } else {
+ if (wallpaper.wallpaperId <= 0) {
+ wallpaper.wallpaperId = makeWallpaperIdLocked();
+ if (DEBUG) {
+ Slog.w(TAG, "Didn't set wallpaper id in loadSettingsLocked(" + userId
+ + "); now " + wallpaper.wallpaperId);
+ }
+ }
}
// We always want to have some reasonable width hint.
@@ -1346,6 +1390,7 @@
synchronized (mLock) {
loadSettingsLocked(0);
wallpaper = mWallpaperMap.get(0);
+ wallpaper.wallpaperId = makeWallpaperIdLocked(); // always bump id at restore
if (wallpaper.nextWallpaperComponent != null
&& !wallpaper.nextWallpaperComponent.equals(mImageWallpaper)) {
if (!bindWallpaperComponentLocked(wallpaper.nextWallpaperComponent, false, false,
@@ -1366,7 +1411,8 @@
if (DEBUG) Slog.v(TAG, "settingsRestored: attempting to restore named resource");
success = restoreNamedResourceLocked(wallpaper);
}
- if (DEBUG) Slog.v(TAG, "settingsRestored: success=" + success);
+ if (DEBUG) Slog.v(TAG, "settingsRestored: success=" + success
+ + " id=" + wallpaper.wallpaperId);
if (success) {
bindWallpaperComponentLocked(wallpaper.nextWallpaperComponent, false, false,
wallpaper, null);
@@ -1442,16 +1488,10 @@
} catch (IOException e) {
Slog.e(TAG, "IOException while restoring wallpaper ", e);
} finally {
- if (res != null) {
- try {
- res.close();
- } catch (IOException ex) {}
- }
+ IoUtils.closeQuietly(res);
if (fos != null) {
FileUtils.sync(fos);
- try {
- fos.close();
- } catch (IOException ex) {}
+ IoUtils.closeQuietly(fos);
}
}
}
@@ -1474,7 +1514,8 @@
pw.println("Current Wallpaper Service state:");
for (int i = 0; i < mWallpaperMap.size(); i++) {
WallpaperData wallpaper = mWallpaperMap.valueAt(i);
- pw.println(" User " + wallpaper.userId + ":");
+ pw.print(" User "); pw.print(wallpaper.userId);
+ pw.print(": id="); pw.println(wallpaper.wallpaperId);
pw.print(" mWidth=");
pw.print(wallpaper.width);
pw.print(" mHeight=");
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 0622fad..552af03 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -732,7 +732,8 @@
float scaleW = appWidth / thumbWidth;
float unscaledHeight = thumbHeight * scaleW;
getNextAppTransitionStartRect(taskId, mTmpRect);
- float unscaledStartY = mTmpRect.top - (unscaledHeight - thumbHeight) / 2f;
+ final float unscaledStartY = mTmpRect.top - (unscaledHeight - thumbHeight) / 2f;
+ final float toY = appRect.top + mNextAppTransitionInsets.top + -unscaledStartY;
if (mNextAppTransitionScaleUp) {
// Animation up from the thumbnail to the full screen
Animation scale = new ScaleAnimation(1f, scaleW, 1f, scaleW,
@@ -744,7 +745,6 @@
alpha.setDuration(THUMBNAIL_APP_TRANSITION_ALPHA_DURATION);
final float toX = appRect.left + appRect.width() / 2 -
(mTmpRect.left + thumbWidth / 2);
- final float toY = appRect.top + mNextAppTransitionInsets.top + -unscaledStartY;
Animation translate = new TranslateAnimation(0, toX, 0, toY);
translate.setInterpolator(mTouchResponseInterpolator);
translate.setDuration(THUMBNAIL_APP_TRANSITION_DURATION);
@@ -764,8 +764,9 @@
Animation alpha = new AlphaAnimation(0f, 1f);
alpha.setInterpolator(mThumbnailFadeInInterpolator);
alpha.setDuration(THUMBNAIL_APP_TRANSITION_ALPHA_DURATION);
- Animation translate = new TranslateAnimation(0, 0, -unscaledStartY +
- mNextAppTransitionInsets.top, 0);
+ final float toX = appRect.left + appRect.width() / 2 -
+ (mTmpRect.left + thumbWidth / 2);
+ Animation translate = new TranslateAnimation(toX, 0, toY, 0);
translate.setInterpolator(mTouchResponseInterpolator);
translate.setDuration(THUMBNAIL_APP_TRANSITION_DURATION);
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 65b91f7..c4653cf 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -28,6 +28,7 @@
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
+import android.hardware.input.InputManager;
import android.os.IBinder;
import android.os.Message;
import android.os.Process;
@@ -36,6 +37,8 @@
import android.view.Display;
import android.view.DragEvent;
import android.view.InputChannel;
+import android.view.InputDevice;
+import android.view.PointerIcon;
import android.view.SurfaceControl;
import android.view.View;
import android.view.WindowManager;
@@ -72,6 +75,7 @@
int mUid;
ClipData mData;
ClipDescription mDataDescription;
+ int mTouchSource;
boolean mDragResult;
float mOriginalAlpha;
float mOriginalX, mOriginalY;
@@ -342,6 +346,7 @@
private void cleanUpDragLw() {
broadcastDragEndedLw();
+ restorePointerIconLw();
// stop intercepting input
unregister();
@@ -576,4 +581,21 @@
set.start(); // Will start on the first call to getTransformation.
return set;
}
+
+ private boolean isFromSource(int source) {
+ return (mTouchSource & source) == source;
+ }
+
+ void overridePointerIconLw(int touchSource) {
+ mTouchSource = touchSource;
+ if (isFromSource(InputDevice.SOURCE_MOUSE)) {
+ InputManager.getInstance().setPointerIconShape(PointerIcon.STYLE_GRAB);
+ }
+ }
+
+ private void restorePointerIconLw() {
+ if (isFromSource(InputDevice.SOURCE_MOUSE)) {
+ InputManager.getInstance().setPointerIconShape(PointerIcon.STYLE_DEFAULT);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index d8cbbab..a8d974f 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -283,7 +283,7 @@
}
public boolean performDrag(IWindow window, IBinder dragToken,
- float touchX, float touchY, float thumbCenterX, float thumbCenterY,
+ int touchSource, float touchX, float touchY, float thumbCenterX, float thumbCenterY,
ClipData data) {
if (DEBUG_DRAG) {
Slog.d(TAG_WM, "perform drag: win=" + window + " data=" + data);
@@ -336,6 +336,7 @@
mService.mDragState.mData = data;
mService.mDragState.broadcastDragStartedLw(touchX, touchY);
+ mService.mDragState.overridePointerIconLw(touchSource);
// remember the thumb offsets for later
mService.mDragState.mThumbOffsetX = thumbCenterX;
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index d2e2639..1021411 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5308,12 +5308,6 @@
// Called by window manager policy. Not exposed externally.
@Override
- public void switchKeyboardLayout(int deviceId, int direction) {
- mInputManager.switchKeyboardLayout(deviceId, direction);
- }
-
- // Called by window manager policy. Not exposed externally.
- @Override
public void switchInputMethod(boolean forwardDirection) {
final InputMethodManagerInternal inputMethodManagerInternal =
LocalServices.getService(InputMethodManagerInternal.class);
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 9012b98..761d6e9 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -27,6 +27,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER_LIGHT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerService.H.*;
import static com.android.server.wm.WindowManagerService.LAYOUT_REPEAT_THRESHOLD;
import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
@@ -67,6 +68,7 @@
* surfaces according to these frames. Z layer is still assigned withing WindowManagerService.
*/
class WindowSurfacePlacer {
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowSurfacePlacer" : TAG_WM;
private final WindowManagerService mService;
private final WallpaperController mWallpaperControllerLocked;
@@ -160,7 +162,7 @@
if (DEBUG) {
throw new RuntimeException("Recursive call!");
}
- Slog.w(TAG_WM, "performLayoutAndPlaceSurfacesLocked called while in layout. Callers="
+ Slog.w(TAG, "performLayoutAndPlaceSurfacesLocked called while in layout. Callers="
+ Debug.getCallers(3));
return;
}
@@ -186,11 +188,10 @@
// Wait a little bit for things to settle down, and off we go.
while (!mService.mForceRemoves.isEmpty()) {
WindowState ws = mService.mForceRemoves.remove(0);
- Slog.i(TAG_WM, "Force removing: " + ws);
+ Slog.i(TAG, "Force removing: " + ws);
mService.removeWindowInnerLocked(ws);
}
- Slog.w(TAG_WM,
- "Due to memory failure, waiting a bit for next layout");
+ Slog.w(TAG, "Due to memory failure, waiting a bit for next layout");
Object tmp = new Object();
synchronized (tmp) {
try {
@@ -209,7 +210,7 @@
if (++mLayoutRepeatCount < 6) {
requestTraversal();
} else {
- Slog.e(TAG_WM, "Performed 6 layouts in a row. Skipping");
+ Slog.e(TAG, "Performed 6 layouts in a row. Skipping");
mLayoutRepeatCount = 0;
}
} else {
@@ -222,7 +223,7 @@
}
} catch (RuntimeException e) {
mInLayout = false;
- Slog.wtf(TAG_WM, "Unhandled exception while laying out windows", e);
+ Slog.wtf(TAG, "Unhandled exception while laying out windows", e);
}
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
@@ -230,18 +231,15 @@
void debugLayoutRepeats(final String msg, int pendingLayoutChanges) {
if (mLayoutRepeatCount >= LAYOUT_REPEAT_THRESHOLD) {
- Slog.v(TAG_WM, "Layouts looping: " + msg +
+ Slog.v(TAG, "Layouts looping: " + msg +
", mPendingLayoutChanges = 0x" + Integer.toHexString(pendingLayoutChanges));
}
}
// "Something has changed! Let's make it correct now."
private void performSurfacePlacementInner(boolean recoveringMemory) {
- if (DEBUG_WINDOW_TRACE) {
- Slog.v(TAG_WM,
- "performSurfacePlacementInner: entry. Called by "
- + Debug.getCallers(3));
- }
+ if (DEBUG_WINDOW_TRACE) Slog.v(TAG, "performSurfacePlacementInner: entry. Called by "
+ + Debug.getCallers(3));
int i;
boolean updateInputWindowsNeeded = false;
@@ -283,16 +281,16 @@
final int defaultDw = defaultInfo.logicalWidth;
final int defaultDh = defaultInfo.logicalHeight;
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces");
SurfaceControl.openTransaction();
try {
applySurfaceChangesTransaction(recoveringMemory, numDisplays, defaultDw, defaultDh);
} catch (RuntimeException e) {
- Slog.wtf(TAG_WM, "Unhandled exception in Window Manager", e);
+ Slog.wtf(TAG, "Unhandled exception in Window Manager", e);
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
"<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
}
@@ -339,7 +337,7 @@
if (mWallpaperMayChange) {
if (DEBUG_WALLPAPER_LIGHT)
- Slog.v(TAG_WM, "Wallpaper may change! Adjusting");
+ Slog.v(TAG, "Wallpaper may change! Adjusting");
defaultDisplay.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("WallpaperMayChange",
defaultDisplay.pendingLayoutChanges);
@@ -374,10 +372,8 @@
mService.mResizingWindows.remove(i);
}
- if (DEBUG_ORIENTATION && mService.mDisplayFrozen)
- Slog.v(TAG_WM,
- "With display frozen, orientationChangeComplete="
- + mOrientationChangeComplete);
+ if (DEBUG_ORIENTATION && mService.mDisplayFrozen) Slog.v(TAG,
+ "With display frozen, orientationChangeComplete=" + mOrientationChangeComplete);
if (mOrientationChangeComplete) {
if (mService.mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_NONE) {
mService.mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_NONE;
@@ -435,9 +431,8 @@
// soon as their animations are complete
token.mAppAnimator.clearAnimation();
token.mAppAnimator.animating = false;
- if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT)
- Slog.v(TAG_WM,
- "performLayout: App token exiting now removed" + token);
+ if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
+ "performLayout: App token exiting now removed" + token);
token.removeAppFromTaskLocked();
}
}
@@ -482,7 +477,7 @@
|| Settings.Global.getInt(mService.mContext.getContentResolver(),
Settings.Global.THEATER_MODE_ON, 0) == 0) {
if (DEBUG_VISIBILITY || DEBUG_POWER) {
- Slog.v(TAG_WM, "Turning screen on after layout!");
+ Slog.v(TAG, "Turning screen on after layout!");
}
mService.mPowerManager.wakeUp(SystemClock.uptimeMillis(),
"android.server.wm:TURN_ON");
@@ -491,8 +486,7 @@
}
if (mUpdateRotation) {
- if (DEBUG_ORIENTATION) Slog.d(TAG_WM,
- "Performing post-rotate rotation");
+ if (DEBUG_ORIENTATION) Slog.d(TAG, "Performing post-rotate rotation");
if (mService.updateRotationUncheckedLocked(false)) {
mService.mH.sendEmptyMessage(SEND_NEW_CONFIGURATION);
} else {
@@ -545,7 +539,7 @@
mService.scheduleAnimationLocked();
- if (DEBUG_WINDOW_TRACE) Slog.e(TAG_WM,
+ if (DEBUG_WINDOW_TRACE) Slog.e(TAG,
"performSurfacePlacementInner exit: animating=" + mService.mAnimator.isAnimating());
}
@@ -589,7 +583,7 @@
do {
repeats++;
if (repeats > 6) {
- Slog.w(TAG_WM, "Animation repeat aborted after too many iterations");
+ Slog.w(TAG, "Animation repeat aborted after too many iterations");
displayContent.layoutNeeded = false;
break;
}
@@ -605,7 +599,7 @@
if (isDefaultDisplay
&& (displayContent.pendingLayoutChanges & FINISH_LAYOUT_REDO_CONFIG) != 0) {
- if (DEBUG_LAYOUT) Slog.v(TAG_WM, "Computing new config from layout");
+ if (DEBUG_LAYOUT) Slog.v(TAG, "Computing new config from layout");
if (mService.updateOrientationFromAppTokensLocked(true)) {
displayContent.layoutNeeded = true;
mService.mH.sendEmptyMessage(SEND_NEW_CONFIGURATION);
@@ -621,7 +615,7 @@
performLayoutLockedInner(displayContent, repeats == 1,
false /* updateInputWindows */);
} else {
- Slog.w(TAG_WM, "Layout repeat skipped after too many iterations");
+ Slog.w(TAG, "Layout repeat skipped after too many iterations");
}
// FIRST AND ONE HALF LOOP: Make WindowManagerPolicy think
@@ -707,7 +701,7 @@
}
}
- //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - done placing");
+ //Slog.i(TAG, "Window " + this + " clearing mContentChanged - done placing");
w.mContentChanged = false;
w.mMovedByResize = false;
@@ -730,7 +724,7 @@
}
if ((w.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
if (DEBUG_WALLPAPER_LIGHT)
- Slog.v(TAG_WM, "First draw done in potential wallpaper target " + w);
+ Slog.v(TAG, "First draw done in potential wallpaper target " + w);
mWallpaperMayChange = true;
displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
if (DEBUG_LAYOUT_REPEATS) {
@@ -753,7 +747,7 @@
final AppWindowToken atoken = w.mAppToken;
if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) {
- Slog.d(TAG_WM, "updateWindows: starting " + w
+ Slog.d(TAG, "updateWindows: starting " + w
+ " isOnScreen=" + w.isOnScreen() + " allDrawn=" + atoken.allDrawn
+ " freezingScreen=" + atoken.mAppAnimator.freezingScreen);
}
@@ -767,11 +761,11 @@
|| winAnimator.mAttrType == TYPE_BASE_APPLICATION)
&& !w.mExiting && !w.mDestroying) {
if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
- Slog.v(TAG_WM, "Eval win " + w + ": isDrawn="
+ Slog.v(TAG, "Eval win " + w + ": isDrawn="
+ w.isDrawnLw()
+ ", isAnimating=" + winAnimator.isAnimating());
if (!w.isDrawnLw()) {
- Slog.v(TAG_WM, "Not displayed: s="
+ Slog.v(TAG, "Not displayed: s="
+ winAnimator.mSurfaceController
+ " pv=" + w.mPolicyVisibility
+ " mDrawState=" + winAnimator.drawStateToString()
@@ -786,7 +780,7 @@
if (w.isDrawnLw()) {
atoken.numDrawnWindows++;
if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)
- Slog.v(TAG_WM, "tokenMayBeDrawn: " + atoken
+ Slog.v(TAG, "tokenMayBeDrawn: " + atoken
+ " freezingScreen="
+ atoken.mAppAnimator.freezingScreen
+ " mAppFreezing=" + w.mAppFreezing);
@@ -854,8 +848,8 @@
int i;
if (DEBUG_LAYOUT) {
- Slog.v(TAG_WM, "-------------------------------------");
- Slog.v(TAG_WM, "performLayout: needed="
+ Slog.v(TAG, "-------------------------------------");
+ Slog.v(TAG, "performLayout: needed="
+ displayContent.layoutNeeded + " dw=" + dw + " dh=" + dh);
}
@@ -889,18 +883,18 @@
|| win.isGoneForLayoutLw();
if (DEBUG_LAYOUT && !win.mLayoutAttached) {
- Slog.v(TAG_WM, "1ST PASS " + win
+ Slog.v(TAG, "1ST PASS " + win
+ ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame
+ " mLayoutAttached=" + win.mLayoutAttached
+ " screen changed=" + win.isConfigChanged());
final AppWindowToken atoken = win.mAppToken;
- if (gone) Slog.v(TAG_WM, " GONE: mViewVisibility="
+ if (gone) Slog.v(TAG, " GONE: mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled="
+ win.mRelayoutCalled + " hidden="
+ win.mRootToken.hidden + " hiddenRequested="
+ (atoken != null && atoken.hiddenRequested)
+ " mAttachedHidden=" + win.mAttachedHidden);
- else Slog.v(TAG_WM, " VIS: mViewVisibility="
+ else Slog.v(TAG, " VIS: mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled="
+ win.mRelayoutCalled + " hidden="
+ win.mRootToken.hidden + " hiddenRequested="
@@ -920,7 +914,7 @@
win.mAppToken.layoutConfigChanges)))) {
if (!win.mLayoutAttached) {
if (initial) {
- //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - initial");
+ //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
win.mContentChanged = false;
}
if (win.mAttrs.type == TYPE_DREAM) {
@@ -940,7 +934,7 @@
displayContent.mDimLayerController.updateDimLayer(task);
}
- if (DEBUG_LAYOUT) Slog.v(TAG_WM,
+ if (DEBUG_LAYOUT) Slog.v(TAG,
" LAYOUT: mFrame="
+ win.mFrame + " mContainingFrame="
+ win.mContainingFrame + " mDisplayFrame="
@@ -961,7 +955,7 @@
final WindowState win = windows.get(i);
if (win.mLayoutAttached) {
- if (DEBUG_LAYOUT) Slog.v(TAG_WM,
+ if (DEBUG_LAYOUT) Slog.v(TAG,
"2ND PASS " + win + " mHaveFrame=" + win.mHaveFrame + " mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled);
// If this view is GONE, then skip it -- keep the current
@@ -975,14 +969,14 @@
if ((win.mViewVisibility != View.GONE && win.mRelayoutCalled)
|| !win.mHaveFrame || win.mLayoutNeeded) {
if (initial) {
- //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - initial");
+ //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
win.mContentChanged = false;
}
win.mLayoutNeeded = false;
win.prelayout();
mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow);
win.mLayoutSeq = seq;
- if (DEBUG_LAYOUT) Slog.v(TAG_WM,
+ if (DEBUG_LAYOUT) Slog.v(TAG,
" LAYOUT: mFrame=" + win.mFrame + " mContainingFrame="
+ win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame);
}
@@ -1013,7 +1007,7 @@
if (!transitionGoodToGo(appsCount)) {
return 0;
}
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "**** GOOD TO GO");
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO");
int transit = mService.mAppTransition.getAppTransition();
if (mService.mSkipAppTransitionAnimation) {
transit = AppTransition.TRANSIT_UNSET;
@@ -1105,7 +1099,7 @@
// example, when this transition is being done behind
// the lock screen.
if (!mService.mPolicy.allowAppAnimationsLw()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"Animations disallowed by keyguard or dream.");
animLp = null;
}
@@ -1154,7 +1148,7 @@
for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Now opening app" + wtoken);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken);
if (!appAnimator.usingTransferredAnimation) {
appAnimator.clearThumbnail();
@@ -1179,14 +1173,14 @@
for (int j = 0; j < windowsCount; j++) {
appAnimator.mAllAppWinAnimators.add(wtoken.allAppWindows.get(j).mWinAnimator);
}
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION handleAppTransitionReadyLocked()");
SurfaceControl.openTransaction();
try {
mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked());
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
"<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()");
}
mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
@@ -1231,7 +1225,7 @@
for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mClosingApps.valueAt(i);
final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Now closing app " + wtoken);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now closing app " + wtoken);
appAnimator.clearThumbnail();
appAnimator.animation = null;
wtoken.inPendingTransaction = false;
@@ -1270,14 +1264,14 @@
}
private boolean transitionGoodToGo(int appsCount) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"Checking " + appsCount + " opening apps (frozen="
+ mService.mDisplayFrozen + " timeout="
+ mService.mAppTransition.isTimeout() + ")...");
if (!mService.mAppTransition.isTimeout()) {
for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"Check opening app=" + wtoken + ": allDrawn="
+ wtoken.allDrawn + " startingDisplayed="
+ wtoken.startingDisplayed + " startingMoved="
@@ -1293,7 +1287,7 @@
// We also need to wait for the specs to be fetched, if needed.
if (mService.mAppTransition.isFetchingAppTransitionsSpecs()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "isFetchingAppTransitionSpecs=true");
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "isFetchingAppTransitionSpecs=true");
return false;
}
@@ -1314,7 +1308,7 @@
? null : wallpaperTarget;
final ArraySet<AppWindowToken> openingApps = mService.mOpeningApps;
final ArraySet<AppWindowToken> closingApps = mService.mClosingApps;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New wallpaper target=" + wallpaperTarget
+ ", oldWallpaper=" + oldWallpaper
+ ", lower target=" + lowerWallpaperTarget
@@ -1324,7 +1318,7 @@
mService.mAnimateWallpaperWithTarget = false;
if (closingAppHasWallpaper && openingAppHasWallpaper) {
if (DEBUG_APP_TRANSITIONS)
- Slog.v(TAG_WM, "Wallpaper animation!");
+ Slog.v(TAG, "Wallpaper animation!");
switch (transit) {
case AppTransition.TRANSIT_ACTIVITY_OPEN:
case AppTransition.TRANSIT_TASK_OPEN:
@@ -1337,14 +1331,14 @@
transit = AppTransition.TRANSIT_WALLPAPER_INTRA_CLOSE;
break;
}
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit: " + AppTransition.appTransitionToString(transit));
} else if (oldWallpaper != null && !mService.mOpeningApps.isEmpty()
&& !openingApps.contains(oldWallpaper.mAppToken)
&& closingApps.contains(oldWallpaper.mAppToken)) {
// We are transitioning from an activity with a wallpaper to one without.
transit = AppTransition.TRANSIT_WALLPAPER_CLOSE;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit away from wallpaper: "
+ AppTransition.appTransitionToString(transit));
} else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw() &&
@@ -1352,7 +1346,7 @@
// We are transitioning from an activity without
// a wallpaper to now showing the wallpaper
transit = AppTransition.TRANSIT_WALLPAPER_OPEN;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit into wallpaper: "
+ AppTransition.appTransitionToString(transit));
} else {
@@ -1447,7 +1441,7 @@
int numInteresting = wtoken.numInterestingWindows;
if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
if (DEBUG_VISIBILITY)
- Slog.v(TAG_WM, "allDrawn: " + wtoken
+ Slog.v(TAG, "allDrawn: " + wtoken
+ " interesting=" + numInteresting
+ " drawn=" + wtoken.numDrawnWindows);
wtoken.allDrawn = true;
@@ -1476,7 +1470,7 @@
final AppWindowToken wtoken = win.mAppToken;
final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
if (DEBUG_APP_TRANSITIONS)
- Slog.v(TAG_WM, "Now animating app in place " + wtoken);
+ Slog.v(TAG, "Now animating app in place " + wtoken);
appAnimator.clearThumbnail();
appAnimator.animation = null;
mService.updateTokenInPlaceLocked(wtoken, transit);
@@ -1502,7 +1496,7 @@
final int taskId = appToken.mTask.mTaskId;
Bitmap thumbnailHeader = mService.mAppTransition.getAppTransitionThumbnailHeader(taskId);
if (thumbnailHeader == null || thumbnailHeader.getConfig() == Bitmap.Config.ALPHA_8) {
- if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "No thumbnail header bitmap for: " + taskId);
+ if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "No thumbnail header bitmap for: " + taskId);
return;
}
// This thumbnail animation is very special, we need to have
@@ -1520,7 +1514,7 @@
PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN);
surfaceControl.setLayerStack(display.getLayerStack());
if (SHOW_TRANSACTIONS) {
- Slog.i(TAG_WM, " THUMBNAIL " + surfaceControl + ": CREATE");
+ Slog.i(TAG, " THUMBNAIL " + surfaceControl + ": CREATE");
}
// Draw the thumbnail onto the surface
@@ -1563,7 +1557,7 @@
openingAppAnimator.thumbnailX = mTmpStartRect.left;
openingAppAnimator.thumbnailY = mTmpStartRect.top;
} catch (Surface.OutOfResourcesException e) {
- Slog.e(TAG_WM, "Can't allocate thumbnail/Canvas surface w="
+ Slog.e(TAG, "Can't allocate thumbnail/Canvas surface w="
+ dirty.width() + " h=" + dirty.height(), e);
openingAppAnimator.clearThumbnail();
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index b33a921..0fffd76 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -132,7 +132,6 @@
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.devicepolicy.DevicePolicyManagerService.ActiveAdmin.TrustAgentInfo;
-import com.android.server.pm.UserManagerService;
import com.android.server.pm.UserRestrictionsUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -181,6 +180,14 @@
private static final String DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML =
"do-not-ask-credentials-on-boot";
+ private static final String TAG_AFFILIATION_ID = "affiliation-id";
+
+ private static final String TAG_ADMIN_BROADCAST_PENDING = "admin-broadcast-pending";
+
+ private static final String ATTR_VALUE = "value";
+
+ private static final String TAG_INITIALIZATION_BUNDLE = "initialization-bundle";
+
private static final int REQUEST_EXPIRE_PASSWORD = 5571;
private static final long MS_PER_DAY = 86400 * 1000;
@@ -242,16 +249,20 @@
GLOBAL_SETTINGS_DEPRECATED.add(Settings.Global.WIFI_ON);
}
- // Keyguard features that when set of a profile will affect the profiles
- // parent user.
+ /** Keyguard features that when set on a profile will affect the profiles parent user. */
private static final int PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER =
+ // STOPSHIP If the work challenge supports fingerprint, move DISABLE_FINGERPRINT
+ // to PROFILE_KEYGUARD_FEATURES_AFFECT_PROFILE?
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS
| DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT;
- // Keyguard features that are allowed to be set on a managed profile
+ /** Keyguard features that when set on a profile affect the profile content or challenge only */
+ private static final int PROFILE_KEYGUARD_FEATURES_AFFECT_PROFILE =
+ DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS;
+
+ /** Keyguard features that are allowed to be set on a managed profile */
private static final int PROFILE_KEYGUARD_FEATURES =
- PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER
- | DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS;
+ PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER | PROFILE_KEYGUARD_FEATURES_AFFECT_PROFILE;
final Context mContext;
final Injector mInjector;
@@ -372,6 +383,12 @@
String mApplicationRestrictionsManagingPackage;
+ Set<String> mAffiliationIds = new ArraySet<>();
+
+ // Used for initialization of users created by createAndManageUsers.
+ boolean mAdminBroadcastPending = false;
+ PersistableBundle mInitBundle = null;
+
public DevicePolicyData(int userHandle) {
mUserHandle = userHandle;
}
@@ -420,16 +437,15 @@
}
if (Intent.ACTION_USER_REMOVED.equals(action)) {
removeUserData(userHandle);
- } else if (Intent.ACTION_USER_STARTED.equals(action)
- || Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
-
- if (Intent.ACTION_USER_STARTED.equals(action)) {
+ } else if (Intent.ACTION_USER_STARTED.equals(action)) {
+ synchronized (DevicePolicyManagerService.this) {
// Reset the policy data
- synchronized (DevicePolicyManagerService.this) {
- mUserData.remove(userHandle);
- }
+ mUserData.remove(userHandle);
+ sendAdminEnabledBroadcastLocked(userHandle);
}
handlePackagesChanged(null /* check all admins */, userHandle);
+ } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
+ handlePackagesChanged(null /* check all admins */, userHandle);
} else if (Intent.ACTION_PACKAGE_CHANGED.equals(action)
|| (Intent.ACTION_PACKAGE_ADDED.equals(action)
&& intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))) {
@@ -592,12 +608,18 @@
}
ActiveAdmin getParentActiveAdmin() {
- if (parentAdmin == null && !isParent) {
+ Preconditions.checkState(!isParent);
+
+ if (parentAdmin == null) {
parentAdmin = new ActiveAdmin(info, /* parent */ true);
}
return parentAdmin;
}
+ boolean hasParentActiveAdmin() {
+ return parentAdmin != null;
+ }
+
int getUid() { return info.getActivityInfo().applicationInfo.uid; }
public UserHandle getUserHandle() {
@@ -929,6 +951,8 @@
Log.w(LOG_TAG, "Missing text when loading long support message");
}
} else if (TAG_PARENT_ADMIN.equals(tag)) {
+ Preconditions.checkState(!isParent);
+
parentAdmin = new ActiveAdmin(info, /* parent */ true);
parentAdmin.readFromXml(parser);
} else if (TAG_ORGANIZATION_COLOR.equals(tag)) {
@@ -1142,6 +1166,12 @@
}
pw.print(prefix); pw.println("userRestrictions:");
UserRestrictionsUtils.dumpRestrictions(pw, prefix + " ", userRestrictions);
+ pw.print(prefix); pw.print("isParent=");
+ pw.println(isParent);
+ if (parentAdmin != null) {
+ pw.print(prefix); pw.println("parentAdmin:");
+ parentAdmin.dump(prefix + " ", pw);
+ }
}
}
@@ -1401,7 +1431,7 @@
mIPackageManager = Preconditions.checkNotNull(injector.getIPackageManager());
mLocalService = new LocalService();
- mLockPatternUtils = new LockPatternUtils(mContext);
+ mLockPatternUtils = injector.newLockPatternUtils();
mHasFeature = mContext.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN);
@@ -1658,8 +1688,8 @@
* Set an alarm for an upcoming event - expiration warning, expiration, or post-expiration
* reminders. Clears alarm if no expirations are configured.
*/
- protected void setExpirationAlarmCheckLocked(Context context, DevicePolicyData policy) {
- final long expiration = getPasswordExpirationLocked(null, policy.mUserHandle);
+ private void setExpirationAlarmCheckLocked(Context context, int userHandle) {
+ final long expiration = getPasswordExpirationLocked(null, userHandle, /* parent */ false);
final long now = System.currentTimeMillis();
final long timeToExpire = expiration - now;
final long alarmTime;
@@ -1685,7 +1715,7 @@
PendingIntent pi = PendingIntent.getBroadcastAsUser(context, REQUEST_EXPIRE_PASSWORD,
new Intent(ACTION_EXPIRED_PASSWORD_NOTIFICATION),
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT,
- new UserHandle(policy.mUserHandle));
+ UserHandle.of(userHandle));
am.cancel(pi);
if (alarmTime != 0) {
am.set(AlarmManager.RTC, alarmTime, pi);
@@ -1705,6 +1735,17 @@
return null;
}
+ ActiveAdmin getActiveAdminUncheckedLocked(ComponentName who, int userHandle, boolean parent) {
+ if (parent) {
+ enforceManagedProfile(userHandle, "call APIs on the parent profile");
+ }
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ if (admin != null && parent) {
+ admin = admin.getParentActiveAdmin();
+ }
+ return admin;
+ }
+
ActiveAdmin getActiveAdminForCallerLocked(ComponentName who, int reqPolicy)
throws SecurityException {
final int callingUid = mInjector.binderGetCallingUid();
@@ -1735,6 +1776,15 @@
}
}
+ ActiveAdmin getActiveAdminForCallerLocked(ComponentName who, int reqPolicy, boolean parent)
+ throws SecurityException {
+ if (parent) {
+ enforceManagedProfile(mInjector.userHandleGetCallingUserId(),
+ "call APIs on the parent profile");
+ }
+ ActiveAdmin admin = getActiveAdminForCallerLocked(who, reqPolicy);
+ return parent ? admin.getParentActiveAdmin() : admin;
+ }
/**
* Find the admin for the component and userId bit of the uid, then check
* the admin's uid matches the uid.
@@ -1854,6 +1904,18 @@
}
}
+ /**
+ * Sends a broadcast to each profile that share the password unlock with the given user id.
+ */
+ private void sendAdminCommandForLockscreenPoliciesLocked(
+ String action, int reqPolicy, int userHandle) {
+ if (isSeparateProfileChallengeEnabled(userHandle)) {
+ sendAdminCommandLocked(action, reqPolicy, userHandle);
+ } else {
+ sendAdminCommandToSelfAndProfilesLocked(action, reqPolicy, userHandle);
+ }
+ }
+
void removeActiveAdminLocked(final ComponentName adminReceiver, final int userHandle) {
final ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
if (admin != null) {
@@ -1877,7 +1939,7 @@
resetGlobalProxyLocked(getUserData(userHandle));
}
saveSettingsLocked(userHandle);
- updateMaximumTimeToLockLocked(policy);
+ updateMaximumTimeToLockLocked(userHandle);
policy.mRemovingAdmins.remove(adminReceiver);
}
// The removed admin might have disabled camera, so update user
@@ -2026,6 +2088,25 @@
out.endTag(null, DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML);
}
+ for (String id : policy.mAffiliationIds) {
+ out.startTag(null, TAG_AFFILIATION_ID);
+ out.attribute(null, "id", id);
+ out.endTag(null, TAG_AFFILIATION_ID);
+ }
+
+ if (policy.mAdminBroadcastPending) {
+ out.startTag(null, TAG_ADMIN_BROADCAST_PENDING);
+ out.attribute(null, ATTR_VALUE,
+ Boolean.toString(policy.mAdminBroadcastPending));
+ out.endTag(null, TAG_ADMIN_BROADCAST_PENDING);
+ }
+
+ if (policy.mInitBundle != null) {
+ out.startTag(null, TAG_INITIALIZATION_BUNDLE);
+ policy.mInitBundle.saveToXml(out);
+ out.endTag(null, TAG_INITIALIZATION_BUNDLE);
+ }
+
out.endTag(null, "policies");
out.endDocument();
@@ -2034,7 +2115,7 @@
stream.close();
journal.commit();
sendChangedNotification(userHandle);
- } catch (IOException e) {
+ } catch (XmlPullParserException | IOException e) {
Slog.w(LOG_TAG, "failed writing file", e);
try {
if (stream != null) {
@@ -2100,6 +2181,7 @@
policy.mLockTaskPackages.clear();
policy.mAdminList.clear();
policy.mAdminMap.clear();
+ policy.mAffiliationIds.clear();
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
@@ -2157,6 +2239,13 @@
parser.getAttributeValue(null, ATTR_DISABLED));
} else if (DO_NOT_ASK_CREDENTIALS_ON_BOOT_XML.equals(tag)) {
policy.doNotAskCredentialsOnBoot = true;
+ } else if (TAG_AFFILIATION_ID.equals(tag)) {
+ policy.mAffiliationIds.add(parser.getAttributeValue(null, "id"));
+ } else if (TAG_ADMIN_BROADCAST_PENDING.equals(tag)) {
+ String pending = parser.getAttributeValue(null, ATTR_VALUE);
+ policy.mAdminBroadcastPending = Boolean.toString(true).equals(pending);
+ } else if (TAG_INITIALIZATION_BUNDLE.equals(tag)) {
+ policy.mInitBundle = PersistableBundle.restoreFromXml(parser);
} else {
Slog.w(LOG_TAG, "Unknown tag: " + tag);
XmlUtils.skipCurrentTag(parser);
@@ -2185,12 +2274,12 @@
// never normally happen.
final long identity = mInjector.binderClearCallingIdentity();
try {
- LockPatternUtils utils = mInjector.newLockPatternUtils();
- if (utils.getActivePasswordQuality(userHandle) < policy.mActivePasswordQuality) {
+ int actualPasswordQuality = mLockPatternUtils.getActivePasswordQuality(userHandle);
+ if (actualPasswordQuality < policy.mActivePasswordQuality) {
Slog.w(LOG_TAG, "Active password quality 0x"
+ Integer.toHexString(policy.mActivePasswordQuality)
+ " does not match actual quality 0x"
- + Integer.toHexString(utils.getActivePasswordQuality(userHandle)));
+ + Integer.toHexString(actualPasswordQuality));
policy.mActivePasswordQuality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
policy.mActivePasswordLength = 0;
policy.mActivePasswordUpperCase = 0;
@@ -2205,7 +2294,7 @@
}
validatePasswordOwnerLocked(policy);
- updateMaximumTimeToLockLocked(policy);
+ updateMaximumTimeToLockLocked(userHandle);
updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
if (policy.mStatusBarDisabled) {
setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
@@ -2369,25 +2458,21 @@
synchronized (this) {
final long now = System.currentTimeMillis();
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo ui : profiles) {
- int profileUserHandle = ui.id;
- final DevicePolicyData policy = getUserData(profileUserHandle);
- final int count = policy.mAdminList.size();
- if (count > 0) {
- for (int i = 0; i < count; i++) {
- final ActiveAdmin admin = policy.mAdminList.get(i);
- if (admin.info.usesPolicy(DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD)
- && admin.passwordExpirationTimeout > 0L
- && now >= admin.passwordExpirationDate - EXPIRATION_GRACE_PERIOD_MS
- && admin.passwordExpirationDate > 0L) {
- sendAdminCommandLocked(admin,
- DeviceAdminReceiver.ACTION_PASSWORD_EXPIRING);
- }
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins = getActiveAdminsForLockscreenPoliciesLocked(
+ userHandle, /* parent */ false);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (admin.info.usesPolicy(DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD)
+ && admin.passwordExpirationTimeout > 0L
+ && now >= admin.passwordExpirationDate - EXPIRATION_GRACE_PERIOD_MS
+ && admin.passwordExpirationDate > 0L) {
+ sendAdminCommandLocked(admin,
+ DeviceAdminReceiver.ACTION_PASSWORD_EXPIRING);
}
}
- setExpirationAlarmCheckLocked(mContext, getUserData(userHandle));
+ setExpirationAlarmCheckLocked(mContext, userHandle);
}
}
@@ -2656,7 +2741,7 @@
@Override
public boolean isSeparateProfileChallengeAllowed(int userHandle) {
ComponentName profileOwner = getProfileOwner(userHandle);
- return !isAdminApiLevelMOrBelow(profileOwner, userHandle);
+ return profileOwner != null && !isAdminApiLevelMOrBelow(profileOwner, userHandle);
}
@Override
@@ -2665,18 +2750,14 @@
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
validateQualityConstant(quality);
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
- if (parent) {
- ap = ap.getParentActiveAdmin();
- }
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.passwordQuality != quality) {
ap.passwordQuality = quality;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@@ -2691,46 +2772,55 @@
int mode = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
- if (parent && admin != null) {
- admin = admin.getParentActiveAdmin();
- }
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.passwordQuality : mode;
}
- if (isSeparateProfileChallengeEnabled(userHandle) && !parent) {
- // If a Work Challenge is in use, only return its restrictions.
- DevicePolicyData policy = getUserDataUnchecked(userHandle);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (mode < admin.passwordQuality) {
- mode = admin.passwordQuality;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (mode < admin.passwordQuality) {
+ mode = admin.passwordQuality;
}
- } else {
- // Return strictest policy for this user and profiles that are visible from this
- // user that do not use a separate work challenge.
- // TODO: When there are separate parent restrictions the profile should just
- // obey its own.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- // Only aggregate data for the parent profile plus the non-work challenge
- // enabled profiles.
- if (!(userInfo.isManagedProfile()
- && isSeparateProfileChallengeEnabled(userInfo.id))) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (mode < admin.passwordQuality) {
- mode = admin.passwordQuality;
- }
+ }
+ return mode;
+ }
+ }
+
+ private List<ActiveAdmin> getActiveAdminsForLockscreenPoliciesLocked(
+ int userHandle, boolean parent) {
+ if (!parent && isSeparateProfileChallengeEnabled(userHandle)) {
+ // If this user has a separate challenge, only return its restrictions.
+ return getUserDataUnchecked(userHandle).mAdminList;
+ } else {
+ // Return all admins for this user and the profiles that are visible from this
+ // user that do not use a separate work challenge.
+ ArrayList<ActiveAdmin> admins = new ArrayList<ActiveAdmin>();
+ for (UserInfo userInfo : mUserManager.getProfiles(userHandle)) {
+ DevicePolicyData policy = getUserData(userInfo.id);
+ if (!isManagedProfile(userInfo.id)) {
+ admins.addAll(policy.mAdminList);
+ } else {
+ // For managed profiles, we always include the policies set on the parent
+ // profile. Additionally, we include the ones set on the managed profile
+ // if no separate challenge is in place.
+ boolean hasSeparateChallenge = isSeparateProfileChallengeEnabled(userInfo.id);
+ final int N = policy.mAdminList.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = policy.mAdminList.get(i);
+ if (admin.hasParentActiveAdmin()) {
+ admins.add(admin.getParentActiveAdmin());
+ }
+ if (!hasSeparateChallenge) {
+ admins.add(admin);
}
}
}
}
- return mode;
+ return admins;
}
}
@@ -2744,24 +2834,23 @@
}
@Override
- public void setPasswordMinimumLength(ComponentName who, int length) {
+ public void setPasswordMinimumLength(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordLength != length) {
ap.minimumPasswordLength = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumLength(ComponentName who, int userHandle) {
+ public int getPasswordMinimumLength(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -2770,20 +2859,18 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordLength : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (length < admin.minimumPasswordLength) {
- length = admin.minimumPasswordLength;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (length < admin.minimumPasswordLength) {
+ length = admin.minimumPasswordLength;
}
}
return length;
@@ -2791,24 +2878,23 @@
}
@Override
- public void setPasswordHistoryLength(ComponentName who, int length) {
+ public void setPasswordHistoryLength(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.passwordHistoryLength != length) {
ap.passwordHistoryLength = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordHistoryLength(ComponentName who, int userHandle) {
+ public int getPasswordHistoryLength(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -2817,37 +2903,36 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.passwordHistoryLength : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (length < admin.passwordHistoryLength) {
- length = admin.passwordHistoryLength;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (length < admin.passwordHistoryLength) {
+ length = admin.passwordHistoryLength;
}
}
+
return length;
}
}
@Override
- public void setPasswordExpirationTimeout(ComponentName who, long timeout) {
+ public void setPasswordExpirationTimeout(ComponentName who, long timeout, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
Preconditions.checkArgumentNonnegative(timeout, "Timeout must be >= 0 ms");
- final int userHandle = UserHandle.getCallingUserId();
+ final int userHandle = mInjector.userHandleGetCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD, parent);
// Calling this API automatically bumps the expiration date
final long expiration = timeout > 0L ? (timeout + System.currentTimeMillis()) : 0L;
ap.passwordExpirationDate = expiration;
@@ -2858,8 +2943,10 @@
.format(new Date(expiration)));
}
saveSettingsLocked(userHandle);
- // in case this is the first one
- setExpirationAlarmCheckLocked(mContext, getUserData(userHandle));
+
+ // in case this is the first one, set the alarm on the appropriate user.
+ int affectedUserHandle = parent ? getProfileParentId(userHandle) : userHandle;
+ setExpirationAlarmCheckLocked(mContext, affectedUserHandle);
}
}
@@ -2868,7 +2955,7 @@
* Returns 0 if not configured.
*/
@Override
- public long getPasswordExpirationTimeout(ComponentName who, int userHandle) {
+ public long getPasswordExpirationTimeout(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0L;
}
@@ -2877,20 +2964,19 @@
long timeout = 0L;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.passwordExpirationTimeout : timeout;
}
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (timeout == 0L || (admin.passwordExpirationTimeout != 0L
- && timeout > admin.passwordExpirationTimeout)) {
- timeout = admin.passwordExpirationTimeout;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (timeout == 0L || (admin.passwordExpirationTimeout != 0L
+ && timeout > admin.passwordExpirationTimeout)) {
+ timeout = admin.passwordExpirationTimeout;
}
}
return timeout;
@@ -2971,59 +3057,56 @@
* Return a single admin's expiration date/time, or the min (soonest) for all admins.
* Returns 0 if not configured.
*/
- private long getPasswordExpirationLocked(ComponentName who, int userHandle) {
+ private long getPasswordExpirationLocked(ComponentName who, int userHandle, boolean parent) {
long timeout = 0L;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.passwordExpirationDate : timeout;
}
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (timeout == 0L || (admin.passwordExpirationDate != 0
- && timeout > admin.passwordExpirationDate)) {
- timeout = admin.passwordExpirationDate;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins = getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (timeout == 0L || (admin.passwordExpirationDate != 0
+ && timeout > admin.passwordExpirationDate)) {
+ timeout = admin.passwordExpirationDate;
}
}
return timeout;
}
@Override
- public long getPasswordExpiration(ComponentName who, int userHandle) {
+ public long getPasswordExpiration(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0L;
}
enforceFullCrossUsersPermission(userHandle);
synchronized (this) {
- return getPasswordExpirationLocked(who, userHandle);
+ return getPasswordExpirationLocked(who, userHandle, parent);
}
}
@Override
- public void setPasswordMinimumUpperCase(ComponentName who, int length) {
+ public void setPasswordMinimumUpperCase(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordUpperCase != length) {
ap.minimumPasswordUpperCase = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumUpperCase(ComponentName who, int userHandle) {
+ public int getPasswordMinimumUpperCase(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3032,20 +3115,18 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordUpperCase : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (length < admin.minimumPasswordUpperCase) {
- length = admin.minimumPasswordUpperCase;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (length < admin.minimumPasswordUpperCase) {
+ length = admin.minimumPasswordUpperCase;
}
}
return length;
@@ -3053,21 +3134,20 @@
}
@Override
- public void setPasswordMinimumLowerCase(ComponentName who, int length) {
+ public void setPasswordMinimumLowerCase(ComponentName who, int length, boolean parent) {
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordLowerCase != length) {
ap.minimumPasswordLowerCase = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumLowerCase(ComponentName who, int userHandle) {
+ public int getPasswordMinimumLowerCase(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3076,20 +3156,18 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordLowerCase : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (length < admin.minimumPasswordLowerCase) {
- length = admin.minimumPasswordLowerCase;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (length < admin.minimumPasswordLowerCase) {
+ length = admin.minimumPasswordLowerCase;
}
}
return length;
@@ -3097,24 +3175,23 @@
}
@Override
- public void setPasswordMinimumLetters(ComponentName who, int length) {
+ public void setPasswordMinimumLetters(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordLetters != length) {
ap.minimumPasswordLetters = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumLetters(ComponentName who, int userHandle) {
+ public int getPasswordMinimumLetters(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3123,23 +3200,21 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordLetters : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
- continue;
- }
- if (length < admin.minimumPasswordLetters) {
- length = admin.minimumPasswordLetters;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
+ continue;
+ }
+ if (length < admin.minimumPasswordLetters) {
+ length = admin.minimumPasswordLetters;
}
}
return length;
@@ -3147,24 +3222,23 @@
}
@Override
- public void setPasswordMinimumNumeric(ComponentName who, int length) {
+ public void setPasswordMinimumNumeric(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordNumeric != length) {
ap.minimumPasswordNumeric = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumNumeric(ComponentName who, int userHandle) {
+ public int getPasswordMinimumNumeric(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3173,23 +3247,21 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordNumeric : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
- continue;
- }
- if (length < admin.minimumPasswordNumeric) {
- length = admin.minimumPasswordNumeric;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
+ continue;
+ }
+ if (length < admin.minimumPasswordNumeric) {
+ length = admin.minimumPasswordNumeric;
}
}
return length;
@@ -3197,24 +3269,23 @@
}
@Override
- public void setPasswordMinimumSymbols(ComponentName who, int length) {
+ public void setPasswordMinimumSymbols(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordSymbols != length) {
ap.minimumPasswordSymbols = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumSymbols(ComponentName who, int userHandle) {
+ public int getPasswordMinimumSymbols(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3223,23 +3294,21 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordSymbols : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
- continue;
- }
- if (length < admin.minimumPasswordSymbols) {
- length = admin.minimumPasswordSymbols;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
+ continue;
+ }
+ if (length < admin.minimumPasswordSymbols) {
+ length = admin.minimumPasswordSymbols;
}
}
return length;
@@ -3247,24 +3316,23 @@
}
@Override
- public void setPasswordMinimumNonLetter(ComponentName who, int length) {
+ public void setPasswordMinimumNonLetter(ComponentName who, int length, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
if (ap.minimumPasswordNonLetter != length) {
ap.minimumPasswordNonLetter = length;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getPasswordMinimumNonLetter(ComponentName who, int userHandle) {
+ public int getPasswordMinimumNonLetter(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3273,23 +3341,21 @@
int length = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.minimumPasswordNonLetter : length;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
- continue;
- }
- if (length < admin.minimumPasswordNonLetter) {
- length = admin.minimumPasswordNonLetter;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins =
+ getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (!isLimitPasswordAllowed(admin, PASSWORD_QUALITY_COMPLEX)) {
+ continue;
+ }
+ if (length < admin.minimumPasswordNonLetter) {
+ length = admin.minimumPasswordNonLetter;
}
}
return length;
@@ -3304,119 +3370,129 @@
enforceFullCrossUsersPermission(userHandle);
synchronized (this) {
- int id = getCredentialOwner(userHandle);
- DevicePolicyData policy = getUserDataUnchecked(id);
-
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
- ActiveAdmin admin =
- getActiveAdminForCallerLocked(null, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD);
- ComponentName adminComponentName = admin.info.getComponent();
- // TODO: Include the Admin sdk level check in LockPatternUtils check.
- ComponentName who = !isAdminApiLevelMOrBelow(adminComponentName, userHandle)
- && isSeparateProfileChallengeEnabled(userHandle)
- ? adminComponentName : null;
- if (policy.mActivePasswordQuality < getPasswordQuality(who, userHandle, parent)
- || policy.mActivePasswordLength < getPasswordMinimumLength(null, userHandle)) {
+ getActiveAdminForCallerLocked(
+ null, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, parent);
+
+ DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, parent));
+ if (policy.mActivePasswordQuality < getPasswordQuality(null, userHandle, parent)
+ || policy.mActivePasswordLength < getPasswordMinimumLength(
+ null, userHandle, parent)) {
return false;
}
if (policy.mActivePasswordQuality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
return true;
}
- return policy.mActivePasswordUpperCase >= getPasswordMinimumUpperCase(null, userHandle)
- && policy.mActivePasswordLowerCase >= getPasswordMinimumLowerCase(null, userHandle)
- && policy.mActivePasswordLetters >= getPasswordMinimumLetters(null, userHandle)
- && policy.mActivePasswordNumeric >= getPasswordMinimumNumeric(null, userHandle)
- && policy.mActivePasswordSymbols >= getPasswordMinimumSymbols(null, userHandle)
- && policy.mActivePasswordNonLetter >= getPasswordMinimumNonLetter(null, userHandle);
+ return policy.mActivePasswordUpperCase >= getPasswordMinimumUpperCase(
+ null, userHandle, parent)
+ && policy.mActivePasswordLowerCase >= getPasswordMinimumLowerCase(
+ null, userHandle, parent)
+ && policy.mActivePasswordLetters >= getPasswordMinimumLetters(
+ null, userHandle, parent)
+ && policy.mActivePasswordNumeric >= getPasswordMinimumNumeric(
+ null, userHandle, parent)
+ && policy.mActivePasswordSymbols >= getPasswordMinimumSymbols(
+ null, userHandle, parent)
+ && policy.mActivePasswordNonLetter >= getPasswordMinimumNonLetter(
+ null, userHandle, parent);
}
}
@Override
- public int getCurrentFailedPasswordAttempts(int userHandle) {
+ public int getCurrentFailedPasswordAttempts(int userHandle, boolean parent) {
synchronized (this) {
// 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_WATCH_LOGIN);
+ getActiveAdminForCallerLocked(
+ null, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent);
- int credentialOwnerId = getCredentialOwner(userHandle);
- DevicePolicyData policy = getUserDataUnchecked(credentialOwnerId);
+ DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, parent));
return policy.mFailedPasswordAttempts;
}
}
@Override
- public void setMaximumFailedPasswordsForWipe(ComponentName who, int num) {
+ public void setMaximumFailedPasswordsForWipe(ComponentName who, int num, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
synchronized (this) {
// This API can only be called by an active device admin,
// so try to retrieve it to check that the caller is one.
- getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_WIPE_DATA);
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_WATCH_LOGIN);
+ getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_WIPE_DATA, parent);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent);
if (ap.maximumFailedPasswordsForWipe != num) {
ap.maximumFailedPasswordsForWipe = num;
- saveSettingsLocked(userHandle);
+ saveSettingsLocked(mInjector.userHandleGetCallingUserId());
}
}
}
@Override
- public int getMaximumFailedPasswordsForWipe(ComponentName who, int userHandle) {
+ public int getMaximumFailedPasswordsForWipe(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
enforceFullCrossUsersPermission(userHandle);
synchronized (this) {
- ActiveAdmin admin = (who != null) ? getActiveAdminUncheckedLocked(who, userHandle)
- : getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle);
+ ActiveAdmin admin = (who != null)
+ ? getActiveAdminUncheckedLocked(who, userHandle, parent)
+ : getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle, parent);
return admin != null ? admin.maximumFailedPasswordsForWipe : 0;
}
}
@Override
- public int getProfileWithMinimumFailedPasswordsForWipe(int userHandle) {
+ public int getProfileWithMinimumFailedPasswordsForWipe(int userHandle, boolean parent) {
if (!mHasFeature) {
return UserHandle.USER_NULL;
}
enforceFullCrossUsersPermission(userHandle);
synchronized (this) {
- ActiveAdmin admin = getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle);
+ ActiveAdmin admin = getAdminWithMinimumFailedPasswordsForWipeLocked(
+ userHandle, parent);
return admin != null ? admin.getUserHandle().getIdentifier() : UserHandle.USER_NULL;
}
}
/**
- * Returns the admin with the strictest policy on maximum failed passwords for this user and all
- * profiles that are visible from this user. If the policy for the primary and any other profile
- * are equal, it returns the admin for the primary profile.
- * Returns {@code null} if none of them have that policy set.
+ * Returns the admin with the strictest policy on maximum failed passwords for:
+ * <ul>
+ * <li>this user if it has a separate profile challenge, or
+ * <li>this user and all profiles that don't have their own challenge otherwise.
+ * </ul>
+ * <p>If the policy for the primary and any other profile are equal, it returns the admin for
+ * the primary profile.
+ * Returns {@code null} if no participating admin has that policy set.
*/
- private ActiveAdmin getAdminWithMinimumFailedPasswordsForWipeLocked(int userHandle) {
+ private ActiveAdmin getAdminWithMinimumFailedPasswordsForWipeLocked(
+ int userHandle, boolean parent) {
int count = 0;
ActiveAdmin strictestAdmin = null;
- for (UserInfo userInfo : mUserManager.getProfiles(userHandle)) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- for (ActiveAdmin admin : policy.mAdminList) {
- if (admin.maximumFailedPasswordsForWipe ==
- ActiveAdmin.DEF_MAXIMUM_FAILED_PASSWORDS_FOR_WIPE) {
- continue; // No max number of failed passwords policy set for this profile.
- }
- // We always favor the primary profile if several profiles have the same value set.
- if (count == 0 ||
- count > admin.maximumFailedPasswordsForWipe ||
- (userInfo.isPrimary() && count >= admin.maximumFailedPasswordsForWipe)) {
- count = admin.maximumFailedPasswordsForWipe;
- strictestAdmin = admin;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins = getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (admin.maximumFailedPasswordsForWipe ==
+ ActiveAdmin.DEF_MAXIMUM_FAILED_PASSWORDS_FOR_WIPE) {
+ continue; // No max number of failed passwords policy set for this profile.
+ }
+
+ // We always favor the primary profile if several profiles have the same value set.
+ int userId = admin.getUserHandle().getIdentifier();
+ if (count == 0 ||
+ count > admin.maximumFailedPasswordsForWipe ||
+ (count == admin.maximumFailedPasswordsForWipe &&
+ mUserManager.getUserInfo(userId).isPrimary())) {
+ count = admin.maximumFailedPasswordsForWipe;
+ strictestAdmin = admin;
}
}
return strictestAdmin;
@@ -3430,14 +3506,9 @@
final int callingUid = mInjector.binderGetCallingUid();
final int userHandle = mInjector.userHandleGetCallingUserId();
- long ident = mInjector.binderClearCallingIdentity();
- try {
- if (getCredentialOwner(userHandle) != userHandle) {
- throw new SecurityException("You can not change password for this profile because"
+ if (getCredentialOwner(userHandle, /* parent */ false) != userHandle) {
+ throw new SecurityException("You can not change password for this profile because"
+ " it shares the password with the owner profile");
- }
- } finally {
- mInjector.binderRestoreCallingIdentity(ident);
}
String password = passwordOrNull != null ? passwordOrNull : "";
@@ -3481,7 +3552,7 @@
}
}
}
- quality = getPasswordQuality(null, userHandle, false);
+ quality = getPasswordQuality(null, userHandle, /* parent */ false);
if (quality == DevicePolicyManager.PASSWORD_QUALITY_MANAGED) {
quality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
}
@@ -3497,7 +3568,7 @@
}
quality = Math.max(realQuality, quality);
}
- int length = getPasswordMinimumLength(null, userHandle);
+ int length = getPasswordMinimumLength(null, userHandle, /* parent */ false);
if (password.length() < length) {
Slog.w(LOG_TAG, "resetPassword: password length " + password.length()
+ " does not meet required length " + length);
@@ -3526,40 +3597,43 @@
nonletter++;
}
}
- int neededLetters = getPasswordMinimumLetters(null, userHandle);
+ int neededLetters = getPasswordMinimumLetters(null, userHandle, /* parent */ false);
if(letters < neededLetters) {
Slog.w(LOG_TAG, "resetPassword: number of letters " + letters
+ " does not meet required number of letters " + neededLetters);
return false;
}
- int neededNumbers = getPasswordMinimumNumeric(null, userHandle);
+ int neededNumbers = getPasswordMinimumNumeric(null, userHandle, /* parent */ false);
if (numbers < neededNumbers) {
Slog.w(LOG_TAG, "resetPassword: number of numerical digits " + numbers
+ " does not meet required number of numerical digits "
+ neededNumbers);
return false;
}
- int neededLowerCase = getPasswordMinimumLowerCase(null, userHandle);
+ int neededLowerCase = getPasswordMinimumLowerCase(
+ null, userHandle, /* parent */ false);
if (lowercase < neededLowerCase) {
Slog.w(LOG_TAG, "resetPassword: number of lowercase letters " + lowercase
+ " does not meet required number of lowercase letters "
+ neededLowerCase);
return false;
}
- int neededUpperCase = getPasswordMinimumUpperCase(null, userHandle);
+ int neededUpperCase = getPasswordMinimumUpperCase(
+ null, userHandle, /* parent */ false);
if (uppercase < neededUpperCase) {
Slog.w(LOG_TAG, "resetPassword: number of uppercase letters " + uppercase
+ " does not meet required number of uppercase letters "
+ neededUpperCase);
return false;
}
- int neededSymbols = getPasswordMinimumSymbols(null, userHandle);
+ int neededSymbols = getPasswordMinimumSymbols(null, userHandle, /* parent */ false);
if (symbols < neededSymbols) {
Slog.w(LOG_TAG, "resetPassword: number of special symbols " + symbols
+ " does not meet required number of special symbols " + neededSymbols);
return false;
}
- int neededNonLetter = getPasswordMinimumNonLetter(null, userHandle);
+ int neededNonLetter = getPasswordMinimumNonLetter(
+ null, userHandle, /* parent */ false);
if (nonletter < neededNonLetter) {
Slog.w(LOG_TAG, "resetPassword: number of non-letter characters " + nonletter
+ " does not meet required number of non-letter characters "
@@ -3584,17 +3658,16 @@
// Don't do this with the lock held, because it is going to call
// back in to the service.
- ident = mInjector.binderClearCallingIdentity();
+ final long ident = mInjector.binderClearCallingIdentity();
try {
- LockPatternUtils utils = mInjector.newLockPatternUtils();
if (!TextUtils.isEmpty(password)) {
- utils.saveLockPassword(password, null, quality, userHandle);
+ mLockPatternUtils.saveLockPassword(password, null, quality, userHandle);
} else {
- utils.clearLock(userHandle);
+ mLockPatternUtils.clearLock(userHandle);
}
boolean requireEntry = (flags & DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY) != 0;
if (requireEntry) {
- utils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW,
+ mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW,
UserHandle.USER_ALL);
}
synchronized (this) {
@@ -3614,7 +3687,7 @@
private boolean isLockScreenSecureUnchecked(int userId) {
long ident = mInjector.binderClearCallingIdentity();
try {
- return mInjector.newLockPatternUtils().isSecure(userId);
+ return mLockPatternUtils.isSecure(userId);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
@@ -3641,50 +3714,69 @@
}
@Override
- public void setMaximumTimeToLock(ComponentName who, long timeMs) {
+ public void setMaximumTimeToLock(ComponentName who, long timeMs, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
+ final int userHandle = mInjector.userHandleGetCallingUserId();
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_FORCE_LOCK);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_FORCE_LOCK, parent);
if (ap.maximumTimeToUnlock != timeMs) {
ap.maximumTimeToUnlock = timeMs;
saveSettingsLocked(userHandle);
- updateMaximumTimeToLockLocked(getUserData(userHandle));
+ updateMaximumTimeToLockLocked(userHandle);
}
}
}
- void updateMaximumTimeToLockLocked(DevicePolicyData policy) {
- long timeMs = getMaximumTimeToLock(null, policy.mUserHandle);
+ void updateMaximumTimeToLockLocked(int userHandle) {
+ // Calculate the min timeout for all profiles - including the ones with a separate
+ // challenge. Ideally if the timeout only affected the profile challenge we'd lock that
+ // challenge only and keep the screen on. However there is no easy way of doing that at the
+ // moment so we set the screen off timeout regardless of whether it affects the parent user
+ // or the profile challenge only.
+ long timeMs = Integer.MAX_VALUE;
+ List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
+ for (UserInfo userInfo : profiles) {
+ DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
+ final int N = policy.mAdminList.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = policy.mAdminList.get(i);
+ if (admin.maximumTimeToUnlock > 0
+ && timeMs > admin.maximumTimeToUnlock) {
+ timeMs = admin.maximumTimeToUnlock;
+ }
+ }
+ }
+
+ // We only store the last maximum time to lock on the parent profile. So if calling from a
+ // managed profile, retrieve the policy for the parent.
+ DevicePolicyData policy = getUserDataUnchecked(getProfileParentId(userHandle));
if (policy.mLastMaximumTimeToLock == timeMs) {
return;
}
+ policy.mLastMaximumTimeToLock = timeMs;
- long ident = mInjector.binderClearCallingIdentity();
+ final long ident = mInjector.binderClearCallingIdentity();
try {
- if (timeMs <= 0) {
- timeMs = Integer.MAX_VALUE;
- } else {
+ if (policy.mLastMaximumTimeToLock != Integer.MAX_VALUE) {
// Make sure KEEP_SCREEN_ON is disabled, since that
// would allow bypassing of the maximum time to lock.
mInjector.settingsGlobalPutInt(Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
}
- policy.mLastMaximumTimeToLock = timeMs;
// TODO It can overflow. Cap it.
mInjector.getPowerManagerInternal()
- .setMaximumScreenOffTimeoutFromDeviceAdmin((int)timeMs);
+ .setMaximumScreenOffTimeoutFromDeviceAdmin((int)policy.mLastMaximumTimeToLock);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
}
@Override
- public long getMaximumTimeToLock(ComponentName who, int userHandle) {
+ public long getMaximumTimeToLock(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
@@ -3693,23 +3785,21 @@
long time = 0;
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return admin != null ? admin.maximumTimeToUnlock : time;
}
- // Return strictest policy for this user and profiles that are visible from this user.
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (time == 0) {
- time = admin.maximumTimeToUnlock;
- } else if (admin.maximumTimeToUnlock != 0
- && time > admin.maximumTimeToUnlock) {
- time = admin.maximumTimeToUnlock;
- }
+ // Return the strictest policy across all participating admins.
+ List<ActiveAdmin> admins = getActiveAdminsForLockscreenPoliciesLocked(
+ userHandle, parent);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (time == 0) {
+ time = admin.maximumTimeToUnlock;
+ } else if (admin.maximumTimeToUnlock != 0
+ && time > admin.maximumTimeToUnlock) {
+ time = admin.maximumTimeToUnlock;
}
}
return time;
@@ -3717,32 +3807,36 @@
}
@Override
- public void lockNow() {
+ public void lockNow(boolean parent) {
if (!mHasFeature) {
return;
}
synchronized (this) {
// 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_FORCE_LOCK);
- lockNowUnchecked();
- }
- }
+ getActiveAdminForCallerLocked(
+ null, DeviceAdminInfo.USES_POLICY_FORCE_LOCK, parent);
- private void lockNowUnchecked() {
- long ident = mInjector.binderClearCallingIdentity();
- try {
- // Power off the display
- mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(),
- PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0);
- // Ensure the device is locked
- new LockPatternUtils(mContext).requireStrongAuth(
- STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW, UserHandle.USER_ALL);
- mInjector.getIWindowManager().lockNow(null);
- } catch (RemoteException e) {
- } finally {
- mInjector.binderRestoreCallingIdentity(ident);
+ int userToLock = mInjector.userHandleGetCallingUserId();
+
+ // Unless this is a managed profile with work challenge enabled, lock all users.
+ if (parent || !isSeparateProfileChallengeEnabled(userToLock)) {
+ userToLock = UserHandle.USER_ALL;
+ }
+ final long ident = mInjector.binderClearCallingIdentity();
+ try {
+ mLockPatternUtils.requireStrongAuth(
+ STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW, userToLock);
+ if (userToLock == UserHandle.USER_ALL) {
+ // Power off the display
+ mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0);
+ mInjector.getIWindowManager().lockNow(null);
+ }
+ } catch (RemoteException e) {
+ } finally {
+ mInjector.binderRestoreCallingIdentity(ident);
+ }
}
}
@@ -4155,7 +4249,8 @@
return;
}
enforceFullCrossUsersPermission(userHandle);
- // Managed Profile password can only be changed when per user encryption is present.
+
+ // Managed Profile password can only be changed when it has a separate challenge.
if (!isSeparateProfileChallengeEnabled(userHandle)) {
enforceNotManagedProfile(userHandle, "set the active password");
}
@@ -4180,18 +4275,12 @@
policy.mFailedPasswordAttempts = 0;
saveSettingsLocked(userHandle);
updatePasswordExpirationsLocked(userHandle);
- setExpirationAlarmCheckLocked(mContext, policy);
+ setExpirationAlarmCheckLocked(mContext, userHandle);
// Send a broadcast to each profile using this password as its primary unlock.
- if (mLockPatternUtils.isSeparateProfileChallengeEnabled(userHandle)) {
- sendAdminCommandLocked(
- DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
- } else {
- sendAdminCommandToSelfAndProfilesLocked(
- DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
- }
+ sendAdminCommandForLockscreenPoliciesLocked(
+ DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
+ DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
}
} finally {
mInjector.binderRestoreCallingIdentity(ident);
@@ -4202,33 +4291,35 @@
* Called any time the device password is updated. Resets all password expiration clocks.
*/
private void updatePasswordExpirationsLocked(int userHandle) {
- List<UserInfo> profiles = mUserManager.getProfiles(userHandle);
- for (UserInfo userInfo : profiles) {
- int profileId = userInfo.id;
- DevicePolicyData policy = getUserDataUnchecked(profileId);
- final int N = policy.mAdminList.size();
- if (N > 0) {
- for (int i=0; i<N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (admin.info.usesPolicy(DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD)) {
- long timeout = admin.passwordExpirationTimeout;
- long expiration = timeout > 0L ? (timeout + System.currentTimeMillis()) : 0L;
- admin.passwordExpirationDate = expiration;
- }
- }
- }
- saveSettingsLocked(profileId);
+ ArraySet<Integer> affectedUserIds = new ArraySet<Integer>();
+ List<ActiveAdmin> admins = getActiveAdminsForLockscreenPoliciesLocked(
+ userHandle, /* parent */ false);
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ if (admin.info.usesPolicy(DeviceAdminInfo.USES_POLICY_EXPIRE_PASSWORD)) {
+ affectedUserIds.add(admin.getUserHandle().getIdentifier());
+ long timeout = admin.passwordExpirationTimeout;
+ long expiration = timeout > 0L ? (timeout + System.currentTimeMillis()) : 0L;
+ admin.passwordExpirationDate = expiration;
}
+ }
+ for (int affectedUserId : affectedUserIds) {
+ saveSettingsLocked(affectedUserId);
+ }
}
@Override
public void reportFailedPasswordAttempt(int userHandle) {
enforceFullCrossUsersPermission(userHandle);
- enforceNotManagedProfile(userHandle, "report failed password attempt");
+ if (!isSeparateProfileChallengeEnabled(userHandle)) {
+ enforceNotManagedProfile(userHandle,
+ "report failed password attempt if separate profile challenge is not in place");
+ }
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.BIND_DEVICE_ADMIN, null);
- long ident = mInjector.binderClearCallingIdentity();
+ final long ident = mInjector.binderClearCallingIdentity();
try {
boolean wipeData = false;
int identifier = 0;
@@ -4237,8 +4328,8 @@
policy.mFailedPasswordAttempts++;
saveSettingsLocked(userHandle);
if (mHasFeature) {
- ActiveAdmin strictestAdmin =
- getAdminWithMinimumFailedPasswordsForWipeLocked(userHandle);
+ ActiveAdmin strictestAdmin = getAdminWithMinimumFailedPasswordsForWipeLocked(
+ userHandle, /* parent */ false);
int max = strictestAdmin != null
? strictestAdmin.maximumFailedPasswordsForWipe : 0;
if (max > 0 && policy.mFailedPasswordAttempts >= max) {
@@ -4248,7 +4339,8 @@
wipeData = true;
identifier = strictestAdmin.getUserHandle().getIdentifier();
}
- sendAdminCommandToSelfAndProfilesLocked(
+
+ sendAdminCommandForLockscreenPoliciesLocked(
DeviceAdminReceiver.ACTION_PASSWORD_FAILED,
DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, userHandle);
}
@@ -4278,7 +4370,7 @@
policy.mPasswordOwner = -1;
saveSettingsLocked(userHandle);
if (mHasFeature) {
- sendAdminCommandToSelfAndProfilesLocked(
+ sendAdminCommandForLockscreenPoliciesLocked(
DeviceAdminReceiver.ACTION_PASSWORD_SUCCEEDED,
DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, userHandle);
}
@@ -4938,22 +5030,25 @@
}
}
- /**
- * Selectively disable keyguard features.
- */
@Override
- public void setKeyguardDisabledFeatures(ComponentName who, int which) {
+ public void setKeyguardDisabledFeatures(ComponentName who, int which, boolean parent) {
if (!mHasFeature) {
return;
}
Preconditions.checkNotNull(who, "ComponentName is null");
- final int userHandle = UserHandle.getCallingUserId();
+ final int userHandle = mInjector.userHandleGetCallingUserId();
if (isManagedProfile(userHandle)) {
- which = which & PROFILE_KEYGUARD_FEATURES;
+ if (parent) {
+ which = which & PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
+ } else if (isSeparateProfileChallengeEnabled(userHandle)){
+ which = which & PROFILE_KEYGUARD_FEATURES_AFFECT_PROFILE;
+ } else {
+ which = which & PROFILE_KEYGUARD_FEATURES;
+ }
}
synchronized (this) {
- ActiveAdmin ap = getActiveAdminForCallerLocked(who,
- DeviceAdminInfo.USES_POLICY_DISABLE_KEYGUARD_FEATURES);
+ ActiveAdmin ap = getActiveAdminForCallerLocked(
+ who, DeviceAdminInfo.USES_POLICY_DISABLE_KEYGUARD_FEATURES, parent);
if (ap.disabledKeyguardFeatures != which) {
ap.disabledKeyguardFeatures = which;
saveSettingsLocked(userHandle);
@@ -4966,50 +5061,43 @@
* or the aggregate of all active admins if who is null.
*/
@Override
- public int getKeyguardDisabledFeatures(ComponentName who, int userHandle) {
+ public int getKeyguardDisabledFeatures(ComponentName who, int userHandle, boolean parent) {
if (!mHasFeature) {
return 0;
}
enforceFullCrossUsersPermission(userHandle);
- long ident = mInjector.binderClearCallingIdentity();
+ final long ident = mInjector.binderClearCallingIdentity();
try {
synchronized (this) {
if (who != null) {
- ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle);
+ ActiveAdmin admin = getActiveAdminUncheckedLocked(who, userHandle, parent);
return (admin != null) ? admin.disabledKeyguardFeatures : 0;
}
- UserInfo user = mUserManager.getUserInfo(userHandle);
- final List<UserInfo> profiles;
- if (user.isManagedProfile()) {
+ final List<ActiveAdmin> admins;
+ if (!parent && isManagedProfile(userHandle)) {
// If we are being asked about a managed profile, just return keyguard features
// disabled by admins in the profile.
- profiles = Collections.singletonList(user);
+ admins = getUserDataUnchecked(userHandle).mAdminList;
} else {
- // Otherwise return those set by admins in the user
- // and its profiles.
- profiles = mUserManager.getProfiles(userHandle);
+ // Otherwise return those set by admins in the user and its profiles.
+ admins = getActiveAdminsForLockscreenPoliciesLocked(userHandle, parent);
}
- // Determine which keyguard features are disabled by any active admin.
- int which = 0;
- for (UserInfo userInfo : profiles) {
- DevicePolicyData policy = getUserData(userInfo.id);
- final int N = policy.mAdminList.size();
- for (int i = 0; i < N; i++) {
- ActiveAdmin admin = policy.mAdminList.get(i);
- if (userInfo.id == userHandle || !userInfo.isManagedProfile()) {
- // If we are being asked explictly about this user
- // return all disabled features even if its a managed profile.
- which |= admin.disabledKeyguardFeatures;
- } else if (!isSeparateProfileChallengeEnabled(
- userInfo.id)) {
- // Otherwise a managed profile is only allowed to disable
- // some features on the parent user, and we only aggregate them if
- // it doesn't have its own challenge.
- which |= (admin.disabledKeyguardFeatures
- & PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER);
- }
+ int which = DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE;
+ final int N = admins.size();
+ for (int i = 0; i < N; i++) {
+ ActiveAdmin admin = admins.get(i);
+ int userId = admin.getUserHandle().getIdentifier();
+ if (userId == userHandle || !isManagedProfile(userHandle)) {
+ // If we are being asked explicitly about this user
+ // return all disabled features even if its a managed profile.
+ which |= admin.disabledKeyguardFeatures;
+ } else {
+ // Otherwise a managed profile is only allowed to disable
+ // some features on the parent user.
+ which |= (admin.disabledKeyguardFeatures
+ & PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER);
}
}
return which;
@@ -5270,7 +5358,7 @@
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
long token = mInjector.binderClearCallingIdentity();
try {
- new LockPatternUtils(mContext).setDeviceOwnerInfo(info);
+ mLockPatternUtils.setDeviceOwnerInfo(info);
} finally {
mInjector.binderRestoreCallingIdentity(token);
}
@@ -5280,7 +5368,7 @@
@Override
public String getDeviceOwnerLockScreenInfo() {
- return new LockPatternUtils(mContext).getDeviceOwnerInfo();
+ return mLockPatternUtils.getDeviceOwnerInfo();
}
private void clearUserPoliciesLocked(UserHandle userHandle) {
@@ -5557,15 +5645,37 @@
}
}
- private void enforceNotManagedProfile(int userHandle, String message) {
- if(isManagedProfile(userHandle)) {
- throw new SecurityException("You can not " + message + " for a managed profile. ");
+ private void enforceManagedProfile(int userHandle, String message) {
+ if(!isManagedProfile(userHandle)) {
+ throw new SecurityException("You can not " + message + " outside a managed profile.");
}
}
- private int getCredentialOwner(int userHandle) {
- long ident = mInjector.binderClearCallingIdentity();
+ private void enforceNotManagedProfile(int userHandle, String message) {
+ if(isManagedProfile(userHandle)) {
+ throw new SecurityException("You can not " + message + " for a managed profile.");
+ }
+ }
+
+ private int getProfileParentId(int userHandle) {
+ final long ident = mInjector.binderClearCallingIdentity();
try {
+ UserInfo parentUser = mUserManager.getProfileParent(userHandle);
+ return parentUser != null ? parentUser.id : userHandle;
+ } finally {
+ mInjector.binderRestoreCallingIdentity(ident);
+ }
+ }
+
+ private int getCredentialOwner(int userHandle, boolean parent) {
+ final long ident = mInjector.binderClearCallingIdentity();
+ try {
+ if (parent) {
+ UserInfo parentProfile = mUserManager.getProfileParent(userHandle);
+ if (parentProfile != null) {
+ userHandle = parentProfile.id;
+ }
+ }
return mUserManager.getCredentialOwnerProfile(userHandle);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
@@ -6261,6 +6371,85 @@
}
}
+ private void sendAdminEnabledBroadcastLocked(int userHandle) {
+ DevicePolicyData policyData = getUserData(userHandle);
+ if (policyData.mAdminBroadcastPending) {
+ // Send the initialization data to profile owner and delete the data
+ ActiveAdmin admin = getProfileOwnerAdminLocked(userHandle);
+ if (admin != null) {
+ PersistableBundle initBundle = policyData.mInitBundle;
+ sendAdminCommandLocked(admin, DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED,
+ initBundle == null ? null : new Bundle(initBundle), null);
+ }
+ policyData.mInitBundle = null;
+ policyData.mAdminBroadcastPending = false;
+ saveSettingsLocked(userHandle);
+ }
+ }
+
+ @Override
+ public UserHandle createAndManageUser(ComponentName admin, String name,
+ PersistableBundle adminExtras, int flags) {
+ // Create user.
+ Preconditions.checkNotNull(admin, "ComponentName is null");
+ UserHandle user = null;
+ synchronized (this) {
+ getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+
+ final long id = mInjector.binderClearCallingIdentity();
+ try {
+ UserInfo userInfo = mUserManager.createUser(name, 0 /* flags */);
+ if (userInfo != null) {
+ user = userInfo.getUserHandle();
+ }
+ } finally {
+ mInjector.binderRestoreCallingIdentity(id);
+ }
+ }
+ if (user == null) {
+ return null;
+ }
+ // Set admin.
+ final long id = mInjector.binderClearCallingIdentity();
+ try {
+ final String adminPkg = admin.getPackageName();
+
+ final int userHandle = user.getIdentifier();
+ try {
+ // Install the profile owner if not present.
+ if (!mIPackageManager.isPackageAvailable(adminPkg, userHandle)) {
+ mIPackageManager.installExistingPackageAsUser(adminPkg, userHandle);
+ }
+ } catch (RemoteException e) {
+ Slog.e(LOG_TAG, "Failed to make remote calls for createAndManageUser, "
+ + "removing created user", e);
+ mUserManager.removeUser(user.getIdentifier());
+ return null;
+ }
+
+ setActiveAdmin(admin, true, userHandle);
+ // User is not started yet, the broadcast by setActiveAdmin will not be received.
+ // So we store adminExtras for broadcasting when the user starts for first time.
+ synchronized(this) {
+ DevicePolicyData policyData = getUserData(userHandle);
+ policyData.mInitBundle = adminExtras;
+ policyData.mAdminBroadcastPending = true;
+ saveSettingsLocked(userHandle);
+ }
+ final String ownerName = getProfileOwnerName(Process.myUserHandle().getIdentifier());
+ setProfileOwner(admin, ownerName, userHandle);
+
+ if ((flags & DevicePolicyManager.SKIP_SETUP_WIZARD) != 0) {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.USER_SETUP_COMPLETE, 1, userHandle);
+ }
+
+ return user;
+ } finally {
+ mInjector.binderRestoreCallingIdentity(id);
+ }
+ }
+
@Override
public boolean removeUser(ComponentName who, UserHandle userHandle) {
Preconditions.checkNotNull(who, "ComponentName is null");
@@ -6502,15 +6691,8 @@
+ userId);
}
- UserManager um = UserManager.get(mContext);
- UserInfo primaryUser = um.getProfileParent(userId);
-
- // Call did not come from a managed profile
- if (primaryUser == null) {
- primaryUser = um.getUserInfo(userId);
- }
-
- if (!isSystemApp(mIPackageManager, packageName, primaryUser.id)) {
+ int parentUserId = getProfileParentId(userId);
+ if (!isSystemApp(mIPackageManager, packageName, parentUserId)) {
throw new IllegalArgumentException("Only system apps can be enabled this way.");
}
@@ -6538,19 +6720,12 @@
long id = mInjector.binderClearCallingIdentity();
try {
- UserManager um = UserManager.get(mContext);
- UserInfo primaryUser = um.getProfileParent(userId);
-
- // Call did not come from a managed profile.
- if (primaryUser == null) {
- primaryUser = um.getUserInfo(userId);
- }
-
+ int parentUserId = getProfileParentId(userId);
List<ResolveInfo> activitiesToEnable = mIPackageManager.queryIntentActivities(
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
0, // no flags
- primaryUser.id);
+ parentUserId);
if (VERBOSE_LOG) {
Slog.d(LOG_TAG, "Enabling system activities: " + activitiesToEnable);
@@ -6560,7 +6735,7 @@
for (ResolveInfo info : activitiesToEnable) {
if (info.activityInfo != null) {
String packageName = info.activityInfo.packageName;
- if (isSystemApp(mIPackageManager, packageName, primaryUser.id)) {
+ if (isSystemApp(mIPackageManager, packageName, parentUserId)) {
numberOfAppsInstalled++;
mIPackageManager.installExistingPackageAsUser(packageName, userId);
} else {
@@ -6964,7 +7139,8 @@
if (Settings.Global.STAY_ON_WHILE_PLUGGED_IN.equals(setting)) {
// ignore if it contradicts an existing policy
- long timeMs = getMaximumTimeToLock(who, UserHandle.getCallingUserId());
+ long timeMs = getMaximumTimeToLock(
+ who, mInjector.userHandleGetCallingUserId(), /* parent */ false);
if (timeMs > 0 && timeMs < Integer.MAX_VALUE) {
return;
}
@@ -6987,7 +7163,7 @@
synchronized (this) {
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- if (isDeviceOwner(who, mInjector.userHandleGetCallingUserId())) {
+ if (isDeviceOwner(who, callingUserId)) {
if (!SECURE_SETTINGS_DEVICEOWNER_WHITELIST.contains(setting)) {
throw new SecurityException(String.format(
"Permission denial: Device owners cannot update %1$s", setting));
@@ -7060,15 +7236,14 @@
getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
}
final int userId = UserHandle.getCallingUserId();
- LockPatternUtils utils = new LockPatternUtils(mContext);
long ident = mInjector.binderClearCallingIdentity();
try {
// disallow disabling the keyguard if a password is currently set
- if (disabled && utils.isSecure(userId)) {
+ if (disabled && mLockPatternUtils.isSecure(userId)) {
return false;
}
- utils.setLockScreenDisabled(disabled, userId);
+ mLockPatternUtils.setLockScreenDisabled(disabled, userId);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
@@ -7201,7 +7376,6 @@
@Override
public boolean isActiveAdminWithPolicy(int uid, int reqPolicy) {
- final int userId = UserHandle.getUserId(uid);
synchronized(DevicePolicyManagerService.this) {
return getActiveAdminWithPolicyForUidLocked(null, reqPolicy, uid) != null;
}
@@ -7742,4 +7916,48 @@
: ActiveAdmin.DEF_ORGANIZATION_COLOR;
}
}
+
+ @Override
+ public void setAffiliationIds(ComponentName admin, List<String> ids) {
+ final Set<String> affiliationIds = new ArraySet<String>(ids);
+ final int callingUserId = mInjector.userHandleGetCallingUserId();
+
+ synchronized (this) {
+ getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ getUserData(callingUserId).mAffiliationIds = affiliationIds;
+ saveSettingsLocked(callingUserId);
+ if (callingUserId != UserHandle.USER_SYSTEM && isDeviceOwner(admin, callingUserId)) {
+ // Affiliation ids specified by the device owner are additionally stored in
+ // UserHandle.USER_SYSTEM's DevicePolicyData.
+ getUserData(UserHandle.USER_SYSTEM).mAffiliationIds = affiliationIds;
+ saveSettingsLocked(UserHandle.USER_SYSTEM);
+ }
+ }
+ }
+
+ @Override
+ public boolean isAffiliatedUser() {
+ final int callingUserId = mInjector.userHandleGetCallingUserId();
+
+ synchronized (this) {
+ if (mOwners.getDeviceOwnerUserId() == callingUserId) {
+ // The user that the DO is installed on is always affiliated.
+ return true;
+ }
+ final ComponentName profileOwner = getProfileOwner(callingUserId);
+ if (profileOwner == null
+ || !profileOwner.getPackageName().equals(mOwners.getDeviceOwnerPackageName())) {
+ return false;
+ }
+ final Set<String> userAffiliationIds = getUserData(callingUserId).mAffiliationIds;
+ final Set<String> deviceAffiliationIds =
+ getUserData(UserHandle.USER_SYSTEM).mAffiliationIds;
+ for (String id : userAffiliationIds) {
+ if (deviceAffiliationIds.contains(id)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 8114031..c186a12 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -602,7 +602,6 @@
StatusBarManagerService statusBar = null;
INotificationManager notification = null;
- InputMethodManagerService imm = null;
WallpaperManagerService wallpaper = null;
LocationManagerService location = null;
CountryDetectorService countryDetector = null;
@@ -613,14 +612,7 @@
// Bring up services needed for UI.
if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
- traceBeginAndSlog("StartInputMethodManagerService");
- try {
- imm = new InputMethodManagerService(context);
- ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);
- } catch (Throwable e) {
- reportWtf("starting Input Manager Service", e);
- }
- Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ mSystemServiceManager.startService(InputMethodManagerService.Lifecycle.class);
traceBeginAndSlog("StartAccessibilityManagerService");
try {
@@ -1207,7 +1199,6 @@
final ConnectivityService connectivityF = connectivity;
final NetworkScoreService networkScoreF = networkScore;
final WallpaperManagerService wallpaperF = wallpaper;
- final InputMethodManagerService immF = imm;
final LocationManagerService locationF = location;
final CountryDetectorService countryDetectorF = countryDetector;
final NetworkTimeUpdateService networkTimeUpdaterF = networkTimeUpdater;
@@ -1304,11 +1295,6 @@
reportWtf("Notifying WallpaperService running", e);
}
try {
- if (immF != null) immF.systemRunning(statusBarF);
- } catch (Throwable e) {
- reportWtf("Notifying InputMethodService running", e);
- }
- try {
if (locationF != null) locationF.systemRunning();
} catch (Throwable e) {
reportWtf("Notifying Location Service running", e);
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 672058b..536fb70 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -34,6 +34,7 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.test.MoreAsserts;
+import android.util.ArraySet;
import android.util.Pair;
import org.mockito.ArgumentCaptor;
@@ -44,6 +45,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
@@ -1476,4 +1478,69 @@
assertNull(dpm.getLongSupportMessage(admin1));
}
}
+
+ /**
+ * Test for:
+ * {@link DevicePolicyManager#setAffiliationIds}
+ * {@link DevicePolicyManager#isAffiliatedUser}
+ */
+ public void testUserAffiliation() throws Exception {
+ mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
+ mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
+ mContext.callerPermissions.add(permission.INTERACT_ACROSS_USERS_FULL);
+
+ // Check that the system user is unaffiliated.
+ mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
+ assertFalse(dpm.isAffiliatedUser());
+
+ // Set a device owner on the system user. Check that the system user becomes affiliated.
+ setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID);
+ dpm.setActiveAdmin(admin1, /* replace =*/ false);
+ assertTrue(dpm.setDeviceOwner(admin1, "owner-name"));
+ assertTrue(dpm.isAffiliatedUser());
+
+ // Install a profile owner whose package name matches the device owner on a test user. Check
+ // that the test user is unaffiliated.
+ mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+ setAsProfileOwner(admin2);
+ assertFalse(dpm.isAffiliatedUser());
+
+ // Have the profile owner specify a set of affiliation ids. Check that the test user remains
+ // unaffiliated.
+ final Set<String> userAffiliationIds = new ArraySet<>();
+ userAffiliationIds.add("red");
+ userAffiliationIds.add("green");
+ userAffiliationIds.add("blue");
+ dpm.setAffiliationIds(admin2, userAffiliationIds);
+ assertFalse(dpm.isAffiliatedUser());
+
+ // Have the device owner specify a set of affiliation ids that do not intersect with those
+ // specified by the profile owner. Check that the test user remains unaffiliated.
+ final Set<String> deviceAffiliationIds = new ArraySet<>();
+ deviceAffiliationIds.add("cyan");
+ deviceAffiliationIds.add("yellow");
+ deviceAffiliationIds.add("magenta");
+ mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
+ dpm.setAffiliationIds(admin1, deviceAffiliationIds);
+ mContext.binder.callingUid = DpmMockContext.CALLER_UID;
+ assertFalse(dpm.isAffiliatedUser());
+
+ // Have the profile owner specify a set of affiliation ids that intersect with those
+ // specified by the device owner. Check that the test user becomes affiliated.
+ userAffiliationIds.add("yellow");
+ dpm.setAffiliationIds(admin2, userAffiliationIds);
+ assertTrue(dpm.isAffiliatedUser());
+
+ // Change the profile owner to one whose package name does not match the device owner. Check
+ // that the test user is not affiliated anymore.
+ dpm.clearProfileOwner(admin2);
+ final ComponentName admin = new ComponentName("test", "test");
+ markPackageAsInstalled(admin.getPackageName(), null, DpmMockContext.CALLER_USER_HANDLE);
+ assertTrue(dpm.setProfileOwner(admin, "owner-name", DpmMockContext.CALLER_USER_HANDLE));
+ assertFalse(dpm.isAffiliatedUser());
+
+ // Check that the system user remains affiliated.
+ mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
+ assertTrue(dpm.isAffiliatedUser());
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTestable.java
index b80f3bf..3da61d6 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTestable.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTestable.java
@@ -26,7 +26,7 @@
public DevicePolicyManagerTestable(DpmMockContext context,
DevicePolicyManagerServiceTestable dpms) {
- super(context, dpms);
+ super(context, dpms, /* parentInstance = */ false);
this.dpms = dpms;
}
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
index c557ab7..3dc1a9a 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
@@ -65,6 +65,22 @@
return mMockContext;
}
+ protected void markPackageAsInstalled(String packageName, ApplicationInfo ai, int userId)
+ throws Exception {
+ final PackageInfo pi = DpmTestUtils.cloneParcelable(
+ mRealTestContext.getPackageManager().getPackageInfo(
+ mRealTestContext.getPackageName(), 0));
+ assertTrue(pi.applicationInfo.flags != 0);
+
+ if (ai != null) {
+ pi.applicationInfo = ai;
+ }
+
+ doReturn(pi).when(mMockContext.ipackageManager).getPackageInfo(
+ eq(packageName),
+ eq(0),
+ eq(userId));
+ }
protected void setUpPackageManagerForAdmin(ComponentName admin, int packageUid)
throws Exception {
@@ -124,17 +140,6 @@
eq(UserHandle.getUserId(packageUid)));
// Set up getPackageInfo().
-
- final PackageInfo pi = DpmTestUtils.cloneParcelable(
- mRealTestContext.getPackageManager().getPackageInfo(
- admin.getPackageName(), 0));
- assertTrue(pi.applicationInfo.flags != 0);
-
- pi.applicationInfo = ai;
-
- doReturn(pi).when(mMockContext.ipackageManager).getPackageInfo(
- eq(admin.getPackageName()),
- eq(0),
- eq(UserHandle.getUserId(packageUid)));
+ markPackageAsInstalled(admin.getPackageName(), ai, UserHandle.getUserId(packageUid));
}
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 4253cd4..f2949bf4 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -558,6 +558,7 @@
}
mRealTimeSnapshot = actualRealtime;
mSystemTimeSnapshot = actualSystemTime;
+ postCheckIdleStates(UserHandle.USER_ALL);
}
return actualSystemTime;
}
@@ -602,7 +603,7 @@
|| event.mEventType == Event.SYSTEM_INTERACTION
|| event.mEventType == Event.USER_INTERACTION)) {
if (previouslyIdle) {
- // Slog.d(TAG, "Informing listeners of out-of-idle " + event.mPackage);
+ //Slog.d(TAG, "Informing listeners of out-of-idle " + event.mPackage);
mHandler.sendMessage(mHandler.obtainMessage(MSG_INFORM_LISTENERS, userId,
/* idle = */ 0, event.mPackage));
notifyBatteryStats(event.mPackage, userId, false);
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 8fee91f..2aef109 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -18,6 +18,8 @@
import android.Manifest;
import android.app.ActivityManager;
+import android.app.ActivityManagerInternal;
+import android.app.ActivityManagerNative;
import android.app.AppGlobals;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -45,6 +47,7 @@
import android.provider.Settings;
import android.service.voice.IVoiceInteractionService;
import android.service.voice.IVoiceInteractionSession;
+import android.service.voice.VoiceInteractionManagerInternal;
import android.service.voice.VoiceInteractionService;
import android.service.voice.VoiceInteractionServiceInfo;
import android.service.voice.VoiceInteractionSession;
@@ -71,12 +74,13 @@
*/
public class VoiceInteractionManagerService extends SystemService {
static final String TAG = "VoiceInteractionManagerService";
- static final boolean DEBUG = false;
+ static final boolean DEBUG = true;
final Context mContext;
final ContentResolver mResolver;
final DatabaseHelper mDbHelper;
final SoundTriggerHelper mSoundTriggerHelper;
+ final ActivityManagerInternal mAmInternal;
public VoiceInteractionManagerService(Context context) {
super(context);
@@ -85,6 +89,7 @@
mDbHelper = new DatabaseHelper(context);
mSoundTriggerHelper = new SoundTriggerHelper(context);
mServiceStub = new VoiceInteractionManagerServiceStub();
+ mAmInternal = LocalServices.getService(ActivityManagerInternal.class);
PackageManagerInternal packageManagerInternal = LocalServices.getService(
PackageManagerInternal.class);
@@ -105,6 +110,7 @@
@Override
public void onStart() {
publishBinderService(Context.VOICE_INTERACTION_MANAGER_SERVICE, mServiceStub);
+ publishLocalService(VoiceInteractionManagerInternal.class, new LocalService());
}
@Override
@@ -124,6 +130,31 @@
mServiceStub.switchUser(userHandle);
}
+ class LocalService extends VoiceInteractionManagerInternal {
+ @Override
+ public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options) {
+ if (DEBUG) {
+ Slog.i(TAG, "startLocalVoiceInteraction " + callingActivity);
+ }
+ VoiceInteractionManagerService.this.mServiceStub.startLocalVoiceInteraction(
+ callingActivity, options);
+ }
+
+ @Override
+ public boolean supportsLocalVoiceInteraction() {
+ return VoiceInteractionManagerService.this.mServiceStub.supportsLocalVoiceInteraction();
+ }
+
+ @Override
+ public void stopLocalVoiceInteraction(IBinder callingActivity) {
+ if (DEBUG) {
+ Slog.i(TAG, "stopLocalVoiceInteraction " + callingActivity);
+ }
+ VoiceInteractionManagerService.this.mServiceStub.stopLocalVoiceInteraction(
+ callingActivity);
+ }
+ }
+
// implementation entry point and binder service
private final VoiceInteractionManagerServiceStub mServiceStub;
@@ -139,6 +170,49 @@
mEnableService = shouldEnableService(mContext.getResources());
}
+ // TODO: VI Make sure the caller is the current user or profile
+ void startLocalVoiceInteraction(final IBinder token, Bundle options) {
+ if (mImpl == null) return;
+
+ final long caller = Binder.clearCallingIdentity();
+ try {
+ mImpl.showSessionLocked(options,
+ VoiceInteractionSession.SHOW_SOURCE_ACTIVITY,
+ new IVoiceInteractionSessionShowCallback.Stub() {
+ @Override
+ public void onFailed() {
+ }
+
+ @Override
+ public void onShown() {
+ mAmInternal.onLocalVoiceInteractionStarted(token,
+ mImpl.mActiveSession.mSession,
+ mImpl.mActiveSession.mInteractor);
+ }
+ },
+ token);
+ } finally {
+ Binder.restoreCallingIdentity(caller);
+ }
+ }
+
+ public void stopLocalVoiceInteraction(IBinder callingActivity) {
+ if (mImpl == null) return;
+
+ final long caller = Binder.clearCallingIdentity();
+ try {
+ mImpl.finishLocked(callingActivity, true);
+ } finally {
+ Binder.restoreCallingIdentity(caller);
+ }
+ }
+
+ public boolean supportsLocalVoiceInteraction() {
+ if (mImpl == null) return false;
+
+ return mImpl.supportsLocalVoiceInteraction();
+ }
+
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
@@ -568,7 +642,7 @@
}
final long caller = Binder.clearCallingIdentity();
try {
- mImpl.finishLocked(token);
+ mImpl.finishLocked(token, false);
} finally {
Binder.restoreCallingIdentity(caller);
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
index 3efd0fb..1544723 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -215,12 +215,12 @@
}
}
- public void finishLocked(IBinder token) {
- if (mActiveSession == null || token != mActiveSession.mToken) {
+ public void finishLocked(IBinder token, boolean finishTask) {
+ if (mActiveSession == null || (!finishTask && token != mActiveSession.mToken)) {
Slog.w(TAG, "finish does not match active session");
return;
}
- mActiveSession.cancelLocked();
+ mActiveSession.cancelLocked(finishTask);
mActiveSession = null;
}
@@ -251,6 +251,10 @@
return mActiveSession != null ? mActiveSession.getUserDisabledShowContextLocked() : 0;
}
+ public boolean supportsLocalVoiceInteraction() {
+ return mInfo.getSupportsLocalInteraction();
+ }
+
public void dumpLocked(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!mValid) {
pw.print(" NOT VALID: ");
@@ -308,7 +312,7 @@
// If there is an active session, cancel it to allow it to clean up its window and other
// state.
if (mActiveSession != null) {
- mActiveSession.cancelLocked();
+ mActiveSession.cancelLocked(false);
mActiveSession = null;
}
try {
@@ -343,7 +347,7 @@
@Override
public void sessionConnectionGone(VoiceInteractionSessionConnection connection) {
synchronized (mLock) {
- finishLocked(connection.mToken);
+ finishLocked(connection.mToken, false);
}
}
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
index 1788e88..e04f312 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
@@ -418,7 +418,7 @@
return false;
}
- public void cancelLocked() {
+ public void cancelLocked(boolean finishTask) {
hideLocked();
mCanceled = true;
if (mBound) {
@@ -429,7 +429,7 @@
Slog.w(TAG, "Voice interation session already dead");
}
}
- if (mSession != null) {
+ if (finishTask && mSession != null) {
try {
mAm.finishVoiceTask(mSession);
} catch (RemoteException e) {
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index 3e30188..497864e8 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -397,27 +397,23 @@
/**
* Broadcast intent action for letting custom component know to show the missed call
- * notification.
- * @hide
+ * notification. If no custom component exists then this is sent to the default dialer which
+ * should post a missed-call notification.
*/
- @SystemApi
public static final String ACTION_SHOW_MISSED_CALLS_NOTIFICATION =
"android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
/**
- * The number of calls associated with the notification.
- * @hide
+ * The number of calls associated with the notification. If the number is zero then the missed
+ * call notification should be dismissed.
*/
- @SystemApi
public static final String EXTRA_NOTIFICATION_COUNT =
"android.telecom.extra.NOTIFICATION_COUNT";
/**
* The number associated with the missed calls. This number is only relevant
* when EXTRA_NOTIFICATION_COUNT is 1.
- * @hide
*/
- @SystemApi
public static final String EXTRA_NOTIFICATION_PHONE_NUMBER =
"android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
diff --git a/tests/VoiceInteraction/AndroidManifest.xml b/tests/VoiceInteraction/AndroidManifest.xml
index fe17c6e..cbc6c76 100644
--- a/tests/VoiceInteraction/AndroidManifest.xml
+++ b/tests/VoiceInteraction/AndroidManifest.xml
@@ -61,5 +61,13 @@
<category android:name="android.intent.category.VOICE" />
</intent-filter>
</activity>
+ <activity android:name="StartVoiceInteractionActivity" android:label="In-Activity Voice"
+ android:theme="@android:style/Theme.Material.Light">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/tests/VoiceInteraction/res/layout/local_interaction_app.xml b/tests/VoiceInteraction/res/layout/local_interaction_app.xml
new file mode 100644
index 0000000..9694133
--- /dev/null
+++ b/tests/VoiceInteraction/res/layout/local_interaction_app.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="8dp"
+ >
+
+ <TextView android:id="@+id/log"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:layout_marginTop="16dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ />
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:orientation="horizontal">
+
+ <Button android:id="@+id/start"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/startFromActivity"
+ />
+
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:orientation="horizontal">
+
+ <Button android:id="@+id/stop"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/stopFromActivity"
+ android:enabled="false"
+ />
+
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:orientation="horizontal">
+
+ <Button android:id="@+id/command"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/commandVoice"
+ />
+
+ <Button android:id="@+id/pick"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/pickVoice"
+ />
+
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="16dp"
+ android:orientation="horizontal">
+
+ <Button android:id="@+id/cancel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/cancelVoice"
+ />
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/VoiceInteraction/res/values/strings.xml b/tests/VoiceInteraction/res/values/strings.xml
index c665c23..64f8bc5 100644
--- a/tests/VoiceInteraction/res/values/strings.xml
+++ b/tests/VoiceInteraction/res/values/strings.xml
@@ -31,6 +31,8 @@
<string name="pickVoice">Pick Voice</string>
<string name="cancelVoice">Cancel</string>
<string name="jumpOut">Jump out</string>
+ <string name="startFromActivity">Start voice interaction</string>
+ <string name="stopFromActivity">Stop voice interaction</string>
<string name="largetext">This is a bunch of text that we will use to show how we handle it
when reporting it for assist data. We need many many lines of text, like\n
diff --git a/tests/VoiceInteraction/res/xml/interaction_service.xml b/tests/VoiceInteraction/res/xml/interaction_service.xml
index c015ad2..f0c88a2 100644
--- a/tests/VoiceInteraction/res/xml/interaction_service.xml
+++ b/tests/VoiceInteraction/res/xml/interaction_service.xml
@@ -21,4 +21,5 @@
android:sessionService="com.android.test.voiceinteraction.MainInteractionSessionService"
android:recognitionService="com.android.test.voiceinteraction.MainRecognitionService"
android:settingsActivity="com.android.test.voiceinteraction.SettingsActivity"
- android:supportsAssist="true" />
+ android:supportsAssist="true"
+ android:supportsLocalInteraction="true" />
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
index 6e3694b..450334c 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
@@ -73,6 +73,7 @@
CharSequence mPendingPrompt;
Request mPendingRequest;
int mCurrentTask = -1;
+ int mShowFlags;
MainInteractionSession(Context context) {
super(context);
@@ -88,6 +89,7 @@
@Override
public void onShow(Bundle args, int showFlags) {
super.onShow(args, showFlags);
+ mShowFlags = showFlags;
Log.i(TAG, "onShow: flags=0x" + Integer.toHexString(showFlags) + " args=" + args);
mState = STATE_IDLE;
mStartIntent = args != null ? (Intent)args.getParcelable("intent") : null;
@@ -311,6 +313,8 @@
if (mState != STATE_IDLE) {
outInsets.contentInsets.top = mBottomContent.getTop();
outInsets.touchableInsets = Insets.TOUCHABLE_INSETS_CONTENT;
+ } else if ((mShowFlags & SHOW_SOURCE_ACTIVITY) != 0) {
+ outInsets.touchableInsets = Insets.TOUCHABLE_INSETS_CONTENT;
}
}
@@ -355,7 +359,7 @@
mPendingPrompt = prompt.getVisualPrompt();
}
}
-
+
@Override
public void onRequestConfirmation(ConfirmationRequest request) {
Log.i(TAG, "onConfirm: prompt=" + request.getVoicePrompt() + " extras="
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/StartVoiceInteractionActivity.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/StartVoiceInteractionActivity.java
new file mode 100644
index 0000000..41058c9
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/StartVoiceInteractionActivity.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.voiceinteraction;
+
+import android.app.Activity;
+import android.app.VoiceInteractor;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class StartVoiceInteractionActivity extends Activity implements View.OnClickListener {
+ static final String TAG = "LocalVoiceInteractionActivity";
+
+ static final String REQUEST_ABORT = "abort";
+ static final String REQUEST_COMPLETE = "complete";
+ static final String REQUEST_COMMAND = "command";
+ static final String REQUEST_PICK = "pick";
+ static final String REQUEST_CONFIRM = "confirm";
+
+ VoiceInteractor mInteractor;
+ VoiceInteractor.Request mCurrentRequest = null;
+ TextView mLog;
+ Button mCommandButton;
+ Button mPickButton;
+ Button mCancelButton;
+ Button mStartButton;
+ Button mStopButton;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.local_interaction_app);
+
+ mLog = (TextView)findViewById(R.id.log);
+ mCommandButton = (Button)findViewById(R.id.command);
+ mCommandButton.setOnClickListener(this);
+ mPickButton = (Button)findViewById(R.id.pick);
+ mPickButton.setOnClickListener(this);
+ mCancelButton = (Button)findViewById(R.id.cancel);
+ mCancelButton.setOnClickListener(this);
+ mStartButton = (Button) findViewById(R.id.start);
+ mStartButton.setOnClickListener(this);
+ mStopButton = (Button) findViewById(R.id.stop);
+ mStopButton.setOnClickListener(this);
+
+ mLog.append("Local Voice Interaction Supported = " + isLocalVoiceInteractionSupported());
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == mCommandButton) {
+ VoiceInteractor.CommandRequest req = new TestCommand("Some arg");
+ mInteractor.submitRequest(req, REQUEST_COMMAND);
+ } else if (v == mPickButton) {
+ VoiceInteractor.PickOptionRequest.Option[] options =
+ new VoiceInteractor.PickOptionRequest.Option[5];
+ options[0] = new VoiceInteractor.PickOptionRequest.Option("One");
+ options[1] = new VoiceInteractor.PickOptionRequest.Option("Two");
+ options[2] = new VoiceInteractor.PickOptionRequest.Option("Three");
+ options[3] = new VoiceInteractor.PickOptionRequest.Option("Four");
+ options[4] = new VoiceInteractor.PickOptionRequest.Option("Five");
+ VoiceInteractor.PickOptionRequest req = new TestPickOption(options);
+ mInteractor.submitRequest(req, REQUEST_PICK);
+ } else if (v == mCancelButton && mCurrentRequest != null) {
+ Log.i(TAG, "Cancel request");
+ mCurrentRequest.cancel();
+ } else if (v == mStartButton) {
+ Bundle args = new Bundle();
+ args.putString("Foo", "Bar");
+ startLocalVoiceInteraction(args);
+ } else if (v == mStopButton) {
+ stopLocalVoiceInteraction();
+ }
+ }
+
+ @Override
+ public void onLocalVoiceInteractionStarted() {
+ mInteractor = getVoiceInteractor();
+ mLog.append("\nLocalVoiceInteraction started!");
+ mStopButton.setEnabled(true);
+ }
+
+ @Override
+ public void onLocalVoiceInteractionStopped() {
+ mInteractor = getVoiceInteractor();
+ mLog.append("\nLocalVoiceInteraction stopped!");
+ mStopButton.setEnabled(false);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+
+ static class TestAbortVoice extends VoiceInteractor.AbortVoiceRequest {
+ public TestAbortVoice() {
+ super(new VoiceInteractor.Prompt("Dammit, we suck :("), null);
+ }
+ @Override public void onCancel() {
+ Log.i(TAG, "Canceled!");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled abort\n");
+ }
+ @Override public void onAbortResult(Bundle result) {
+ Log.i(TAG, "Abort result: result=" + result);
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append(
+ "Abort: result=" + result + "\n");
+ getActivity().finish();
+ }
+ }
+
+ static class TestCompleteVoice extends VoiceInteractor.CompleteVoiceRequest {
+ public TestCompleteVoice() {
+ super(new VoiceInteractor.Prompt("Woohoo, completed!"), null);
+ }
+ @Override public void onCancel() {
+ Log.i(TAG, "Canceled!");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled complete\n");
+ }
+ @Override public void onCompleteResult(Bundle result) {
+ Log.i(TAG, "Complete result: result=" + result);
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append("Complete: result="
+ + result + "\n");
+ getActivity().finish();
+ }
+ }
+
+ static class TestCommand extends VoiceInteractor.CommandRequest {
+ public TestCommand(String arg) {
+ super("com.android.test.voiceinteraction.COMMAND", makeBundle(arg));
+ }
+ @Override public void onCancel() {
+ Log.i(TAG, "Canceled!");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled command\n");
+ }
+ @Override
+ public void onCommandResult(boolean finished, Bundle result) {
+ Log.i(TAG, "Command result: finished=" + finished + " result=" + result);
+ StringBuilder sb = new StringBuilder();
+ if (finished) {
+ sb.append("Command final result: ");
+ } else {
+ sb.append("Command intermediate result: ");
+ }
+ if (result != null) {
+ result.getString("key");
+ }
+ sb.append(result);
+ sb.append("\n");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append(sb.toString());
+ }
+ static Bundle makeBundle(String arg) {
+ Bundle b = new Bundle();
+ b.putString("key", arg);
+ return b;
+ }
+ }
+
+ static class TestPickOption extends VoiceInteractor.PickOptionRequest {
+ public TestPickOption(Option[] options) {
+ super(new VoiceInteractor.Prompt("Need to pick something"), options, null);
+ }
+ @Override public void onCancel() {
+ Log.i(TAG, "Canceled!");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append("Canceled pick\n");
+ }
+ @Override
+ public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) {
+ Log.i(TAG, "Pick result: finished=" + finished + " selections=" + selections
+ + " result=" + result);
+ StringBuilder sb = new StringBuilder();
+ if (finished) {
+ sb.append("Pick final result: ");
+ } else {
+ sb.append("Pick intermediate result: ");
+ }
+ for (int i=0; i<selections.length; i++) {
+ if (i >= 1) {
+ sb.append(", ");
+ }
+ sb.append(selections[i].getLabel());
+ }
+ sb.append("\n");
+ ((StartVoiceInteractionActivity)getActivity()).mLog.append(sb.toString());
+ }
+ }
+}
diff --git a/tools/aapt2/link/Link.cpp b/tools/aapt2/link/Link.cpp
index 364a55b..f3a9ea3 100644
--- a/tools/aapt2/link/Link.cpp
+++ b/tools/aapt2/link/Link.cpp
@@ -56,6 +56,7 @@
Maybe<std::string> generateProguardRulesPath;
bool noAutoVersion = false;
bool staticLib = false;
+ bool generateNonFinalIds = false;
bool verbose = false;
bool outputToDirectory = false;
bool autoAddOverlay = false;
@@ -835,7 +836,7 @@
JavaClassGeneratorOptions options;
options.types = JavaClassGeneratorOptions::SymbolTypes::kAll;
- if (mOptions.staticLib) {
+ if (mOptions.staticLib || mOptions.generateNonFinalIds) {
options.useFinal = false;
}
@@ -933,6 +934,9 @@
.optionalFlag("--version-name", "Version name to inject into the AndroidManifest.xml "
"if none is present", &versionName)
.optionalSwitch("--static-lib", "Generate a static Android library", &options.staticLib)
+ .optionalSwitch("--non-final-ids", "Generates R.java without the final modifier.\n"
+ "This is implied when --static-lib is specified.",
+ &options.generateNonFinalIds)
.optionalFlag("--private-symbols", "Package name to use when generating R.java for "
"private symbols.\n"
"If not specified, public and private symbols will use the application's "
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
index 769285f..7b8e29a 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
@@ -148,7 +148,7 @@
@Override
public boolean performDrag(IWindow window, IBinder dragToken,
- float touchX, float touchY, float thumbCenterX, float thumbCenterY,
+ int touchSource, float touchX, float touchY, float thumbCenterX, float thumbCenterY,
ClipData data)
throws RemoteException {
// pass for now
diff --git a/tools/layoutlib/bridge/src/libcore/util/ZoneInfo_WallTime_Delegate.java b/tools/layoutlib/bridge/src/libcore/util/ZoneInfo_WallTime_Delegate.java
deleted file mode 100644
index f29c5c0..0000000
--- a/tools/layoutlib/bridge/src/libcore/util/ZoneInfo_WallTime_Delegate.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 libcore.util;
-
-import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
-
-import java.util.GregorianCalendar;
-
-/**
- * Delegate used to provide alternate implementation of select methods in {@link ZoneInfo.WallTime}
- */
-public class ZoneInfo_WallTime_Delegate {
-
- @LayoutlibDelegate
- static GregorianCalendar createGregorianCalendar() {
- return new GregorianCalendar();
- }
-}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index 87f6106..d106592 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -224,7 +224,6 @@
"libcore.io.MemoryMappedFile#mmapRO",
"libcore.io.MemoryMappedFile#close",
"libcore.io.MemoryMappedFile#bigEndianIterator",
- "libcore.util.ZoneInfo$WallTime#createGregorianCalendar",
};
/**