diff options
122 files changed, 1036 insertions, 711 deletions
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 8fa7d6c3b4f7..eb52cb7f9508 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -41,6 +41,7 @@ import android.provider.Settings.Global; import android.service.notification.StatusBarNotification; import android.service.notification.ZenModeConfig; import android.util.Log; +import android.util.proto.ProtoOutputStream; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -1061,6 +1062,27 @@ public class NotificationManager { + "]"; } + /** @hide */ + public void toProto(ProtoOutputStream proto, long fieldId) { + final long pToken = proto.start(fieldId); + + bitwiseToProtoEnum(proto, PolicyProto.PRIORITY_CATEGORIES, priorityCategories); + proto.write(PolicyProto.PRIORITY_CALL_SENDER, priorityCallSenders); + proto.write(PolicyProto.PRIORITY_MESSAGE_SENDER, priorityMessageSenders); + bitwiseToProtoEnum( + proto, PolicyProto.SUPPRESSED_VISUAL_EFFECTS, suppressedVisualEffects); + + proto.end(pToken); + } + + private static void bitwiseToProtoEnum(ProtoOutputStream proto, long fieldId, int data) { + for (int i = 1; data > 0; ++i, data >>>= 1) { + if ((data & 1) == 1) { + proto.write(fieldId, i); + } + } + } + public static String suppressedEffectsToString(int effects) { if (effects <= 0) return ""; final StringBuilder sb = new StringBuilder(); diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index fe7afed8de13..80144bd7971b 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -70,14 +70,15 @@ public class StatusBarManager { * Setting this flag disables quick settings completely, but does not disable expanding the * notification shade. */ - public static final int DISABLE2_QUICK_SETTINGS = 0x00000001; + public static final int DISABLE2_QUICK_SETTINGS = 1; + public static final int DISABLE2_SYSTEM_ICONS = 1 << 1; public static final int DISABLE2_NONE = 0x00000000; - public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS; + public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS; @IntDef(flag = true, - value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS}) + value = {DISABLE2_NONE, DISABLE2_MASK, DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS}) @Retention(RetentionPolicy.SOURCE) public @interface Disable2Flags {} diff --git a/core/java/android/hardware/LegacySensorManager.java b/core/java/android/hardware/LegacySensorManager.java index f5cf3f74bc38..098121dfeffd 100644 --- a/core/java/android/hardware/LegacySensorManager.java +++ b/core/java/android/hardware/LegacySensorManager.java @@ -204,7 +204,7 @@ final class LegacySensorManager { } private static final class LegacyListener implements SensorEventListener { - private float mValues[] = new float[6]; + private float[] mValues = new float[6]; private SensorListener mTarget; private int mSensors; private final LmsFilter mYawfilter = new LmsFilter(); @@ -256,7 +256,7 @@ final class LegacySensorManager { } public void onSensorChanged(SensorEvent event) { - final float v[] = mValues; + final float[] v = mValues; v[0] = event.values[0]; v[1] = event.values[1]; v[2] = event.values[2]; @@ -264,10 +264,10 @@ final class LegacySensorManager { int legacyType = getLegacySensorType(type); mapSensorDataToWindow(legacyType, v, LegacySensorManager.getRotation()); if (type == Sensor.TYPE_ORIENTATION) { - if ((mSensors & SensorManager.SENSOR_ORIENTATION_RAW)!=0) { + if ((mSensors & SensorManager.SENSOR_ORIENTATION_RAW) != 0) { mTarget.onSensorChanged(SensorManager.SENSOR_ORIENTATION_RAW, v); } - if ((mSensors & SensorManager.SENSOR_ORIENTATION)!=0) { + if ((mSensors & SensorManager.SENSOR_ORIENTATION) != 0) { v[0] = mYawfilter.filter(event.timestamp, v[0]); mTarget.onSensorChanged(SensorManager.SENSOR_ORIENTATION, v); } @@ -317,7 +317,7 @@ final class LegacySensorManager { switch (sensor) { case SensorManager.SENSOR_ACCELEROMETER: case SensorManager.SENSOR_MAGNETIC_FIELD: - values[0] =-y; + values[0] = -y; values[1] = x; values[2] = z; break; @@ -337,15 +337,15 @@ final class LegacySensorManager { switch (sensor) { case SensorManager.SENSOR_ACCELEROMETER: case SensorManager.SENSOR_MAGNETIC_FIELD: - values[0] =-x; - values[1] =-y; + values[0] = -x; + values[1] = -y; values[2] = z; break; case SensorManager.SENSOR_ORIENTATION: case SensorManager.SENSOR_ORIENTATION_RAW: values[0] = (x >= 180) ? (x - 180) : (x + 180); - values[1] =-y; - values[2] =-z; + values[1] = -y; + values[2] = -z; break; } } @@ -369,10 +369,11 @@ final class LegacySensorManager { private static final class LmsFilter { private static final int SENSORS_RATE_MS = 20; private static final int COUNT = 12; - private static final float PREDICTION_RATIO = 1.0f/3.0f; - private static final float PREDICTION_TIME = (SENSORS_RATE_MS*COUNT/1000.0f)*PREDICTION_RATIO; - private float mV[] = new float[COUNT*2]; - private long mT[] = new long[COUNT*2]; + private static final float PREDICTION_RATIO = 1.0f / 3.0f; + private static final float PREDICTION_TIME = + (SENSORS_RATE_MS * COUNT / 1000.0f) * PREDICTION_RATIO; + private float[] mV = new float[COUNT * 2]; + private long[] mT = new long[COUNT * 2]; private int mIndex; public LmsFilter() { @@ -383,9 +384,9 @@ final class LegacySensorManager { float v = in; final float ns = 1.0f / 1000000000.0f; float v1 = mV[mIndex]; - if ((v-v1) > 180) { + if ((v - v1) > 180) { v -= 360; - } else if ((v1-v) > 180) { + } else if ((v1 - v) > 180) { v += 360; } /* Manage the circular buffer, we write the data twice spaced @@ -393,40 +394,43 @@ final class LegacySensorManager { * when it's full */ mIndex++; - if (mIndex >= COUNT*2) + if (mIndex >= COUNT * 2) { mIndex = COUNT; + } mV[mIndex] = v; mT[mIndex] = time; - mV[mIndex-COUNT] = v; - mT[mIndex-COUNT] = time; + mV[mIndex - COUNT] = v; + mT[mIndex - COUNT] = time; float A, B, C, D, E; float a, b; int i; A = B = C = D = E = 0; - for (i=0 ; i<COUNT-1 ; i++) { + for (i = 0; i < COUNT - 1; i++) { final int j = mIndex - 1 - i; final float Z = mV[j]; - final float T = (mT[j]/2 + mT[j+1]/2 - time)*ns; - float dT = (mT[j] - mT[j+1])*ns; + final float T = (mT[j] / 2 + mT[j + 1] / 2 - time) * ns; + float dT = (mT[j] - mT[j + 1]) * ns; dT *= dT; - A += Z*dT; - B += T*(T*dT); - C += (T*dT); - D += Z*(T*dT); + A += Z * dT; + B += T * (T * dT); + C += (T * dT); + D += Z * (T * dT); E += dT; } - b = (A*B + C*D) / (E*B + C*C); - a = (E*b - A) / C; - float f = b + PREDICTION_TIME*a; + b = (A * B + C * D) / (E * B + C * C); + a = (E * b - A) / C; + float f = b + PREDICTION_TIME * a; // Normalize f *= (1.0f / 360.0f); - if (((f>=0)?f:-f) >= 0.5f) - f = f - (float)Math.ceil(f + 0.5f) + 1.0f; - if (f < 0) + if (((f >= 0) ? f : -f) >= 0.5f) { + f = f - (float) Math.ceil(f + 0.5f) + 1.0f; + } + if (f < 0) { f += 1.0f; + } f *= 360.0f; return f; } diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java index f02e4849e7da..7fb0c89e7f92 100644 --- a/core/java/android/hardware/Sensor.java +++ b/core/java/android/hardware/Sensor.java @@ -794,12 +794,12 @@ public final class Sensor { 1, // SENSOR_TYPE_PICK_UP_GESTURE 1, // SENSOR_TYPE_WRIST_TILT_GESTURE 1, // SENSOR_TYPE_DEVICE_ORIENTATION - 16,// SENSOR_TYPE_POSE_6DOF + 16, // SENSOR_TYPE_POSE_6DOF 1, // SENSOR_TYPE_STATIONARY_DETECT 1, // SENSOR_TYPE_MOTION_DETECT 1, // SENSOR_TYPE_HEART_BEAT 2, // SENSOR_TYPE_DYNAMIC_SENSOR_META - 16,// skip over additional sensor info type + 16, // skip over additional sensor info type 1, // SENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT 6, // SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED }; @@ -857,8 +857,8 @@ public final class Sensor { static int getMaxLengthValuesArray(Sensor sensor, int sdkLevel) { // RotationVector length has changed to 3 to 5 for API level 18 // Set it to 3 for backward compatibility. - if (sensor.mType == Sensor.TYPE_ROTATION_VECTOR && - sdkLevel <= Build.VERSION_CODES.JELLY_BEAN_MR1) { + if (sensor.mType == Sensor.TYPE_ROTATION_VECTOR + && sdkLevel <= Build.VERSION_CODES.JELLY_BEAN_MR1) { return 3; } int offset = sensor.mType; @@ -1033,9 +1033,9 @@ public final class Sensor { * Returns true if the sensor is a wake-up sensor. * <p> * <b>Application Processor Power modes</b> <p> - * Application Processor(AP), is the processor on which applications run. When no wake lock is held - * and the user is not interacting with the device, this processor can enter a “Suspend” mode, - * reducing the power consumption by 10 times or more. + * Application Processor(AP), is the processor on which applications run. When no wake lock is + * held and the user is not interacting with the device, this processor can enter a “Suspend” + * mode, reducing the power consumption by 10 times or more. * </p> * <p> * <b>Non-wake-up sensors</b> <p> @@ -1232,6 +1232,6 @@ public final class Sensor { */ private void setUuid(long msb, long lsb) { // TODO(b/29547335): Rename this method to setId. - mId = (int)msb; + mId = (int) msb; } } diff --git a/core/java/android/hardware/SensorAdditionalInfo.java b/core/java/android/hardware/SensorAdditionalInfo.java index 0c6a41511181..7c876cfcb80a 100644 --- a/core/java/android/hardware/SensorAdditionalInfo.java +++ b/core/java/android/hardware/SensorAdditionalInfo.java @@ -200,7 +200,7 @@ public class SensorAdditionalInfo { public static final int TYPE_DEBUG_INFO = 0x40000000; SensorAdditionalInfo( - Sensor aSensor, int aType, int aSerial, int [] aIntValues, float [] aFloatValues) { + Sensor aSensor, int aType, int aSerial, int[] aIntValues, float[] aFloatValues) { sensor = aSensor; type = aType; serial = aSerial; @@ -222,10 +222,10 @@ public class SensorAdditionalInfo { null, new float[] { strength, declination, inclination}); } /** @hide */ - public static SensorAdditionalInfo createCustomInfo(Sensor aSensor, int type, float [] data) { + public static SensorAdditionalInfo createCustomInfo(Sensor aSensor, int type, float[] data) { if (type < TYPE_CUSTOM_INFO || type >= TYPE_DEBUG_INFO || aSensor == null) { - throw new IllegalArgumentException("invalid parameter(s): type: " + type + - "; sensor: " + aSensor); + throw new IllegalArgumentException( + "invalid parameter(s): type: " + type + "; sensor: " + aSensor); } return new SensorAdditionalInfo(aSensor, type, 0, null, data); diff --git a/core/java/android/hardware/SensorEvent.java b/core/java/android/hardware/SensorEvent.java index c0bca97e12b7..bbd04a31f8c8 100644 --- a/core/java/android/hardware/SensorEvent.java +++ b/core/java/android/hardware/SensorEvent.java @@ -207,8 +207,8 @@ public class SensorEvent { * timestamp = event.timestamp; * float[] deltaRotationMatrix = new float[9]; * SensorManager.getRotationMatrixFromVector(deltaRotationMatrix, deltaRotationVector); - * // User code should concatenate the delta rotation we computed with the current rotation - * // in order to get the updated rotation. + * // User code should concatenate the delta rotation we computed with the current + * // rotation in order to get the updated rotation. * // rotationCurrent = rotationCurrent * deltaRotationMatrix; * } * </pre> @@ -244,21 +244,22 @@ public class SensorEvent { * <h4>{@link android.hardware.Sensor#TYPE_GRAVITY Sensor.TYPE_GRAVITY}:</h4> * <p>A three dimensional vector indicating the direction and magnitude of gravity. Units * are m/s^2. The coordinate system is the same as is used by the acceleration sensor.</p> - * <p><b>Note:</b> When the device is at rest, the output of the gravity sensor should be identical - * to that of the accelerometer.</p> - * - * <h4>{@link android.hardware.Sensor#TYPE_LINEAR_ACCELERATION Sensor.TYPE_LINEAR_ACCELERATION}:</h4> - * A three dimensional vector indicating acceleration along each device axis, not including - * gravity. All values have units of m/s^2. The coordinate system is the same as is used by the - * acceleration sensor. + * <p><b>Note:</b> When the device is at rest, the output of the gravity sensor should be + * identical to that of the accelerometer.</p> + * + * <h4> + * {@link android.hardware.Sensor#TYPE_LINEAR_ACCELERATION Sensor.TYPE_LINEAR_ACCELERATION}: + * </h4> A three dimensional vector indicating acceleration along each device axis, not + * including gravity. All values have units of m/s^2. The coordinate system is the same as is + * used by the acceleration sensor. * <p>The output of the accelerometer, gravity and linear-acceleration sensors must obey the * following relation:</p> - * <p><ul>acceleration = gravity + linear-acceleration</ul></p> + * <p><ul>acceleration = gravity + linear-acceleration</ul></p> * * <h4>{@link android.hardware.Sensor#TYPE_ROTATION_VECTOR Sensor.TYPE_ROTATION_VECTOR}:</h4> - * <p>The rotation vector represents the orientation of the device as a combination of an <i>angle</i> - * and an <i>axis</i>, in which the device has rotated through an angle θ around an axis - * <x, y, z>.</p> + * <p>The rotation vector represents the orientation of the device as a combination of an + * <i>angle</i> and an <i>axis</i>, in which the device has rotated through an angle θ + * around an axis <x, y, z>.</p> * <p>The three elements of the rotation vector are * <x*sin(θ/2), y*sin(θ/2), z*sin(θ/2)>, such that the magnitude of the rotation * vector is equal to sin(θ/2), and the direction of the rotation vector is equal to the diff --git a/core/java/android/hardware/SensorListener.java b/core/java/android/hardware/SensorListener.java index c71e968d2713..e2033b6dc105 100644 --- a/core/java/android/hardware/SensorListener.java +++ b/core/java/android/hardware/SensorListener.java @@ -19,8 +19,8 @@ package android.hardware; /** * Used for receiving notifications from the SensorManager when * sensor values have changed. - * - * @deprecated Use + * + * @deprecated Use * {@link android.hardware.SensorEventListener SensorEventListener} instead. */ @Deprecated @@ -36,7 +36,7 @@ public interface SensorListener { * <p><u>Definition of the coordinate system used below.</u><p> * <p>The X axis refers to the screen's horizontal axis * (the small edge in portrait mode, the long edge in landscape mode) and - * points to the right. + * points to the right. * <p>The Y axis refers to the screen's vertical axis and points towards * the top of the screen (the origin is in the lower-left corner). * <p>The Z axis points toward the sky when the device is lying on its back @@ -44,18 +44,18 @@ public interface SensorListener { * <p> <b>IMPORTANT NOTE:</b> The axis <b><u>are swapped</u></b> when the * device's screen orientation changes. To access the unswapped values, * use indices 3, 4 and 5 in values[]. - * + * * <p>{@link android.hardware.SensorManager#SENSOR_ORIENTATION SENSOR_ORIENTATION}, * {@link android.hardware.SensorManager#SENSOR_ORIENTATION_RAW SENSOR_ORIENTATION_RAW}:<p> * All values are angles in degrees. - * + * * <p>values[0]: Azimuth, rotation around the Z axis (0<=azimuth<360). * 0 = North, 90 = East, 180 = South, 270 = West - * + * * <p>values[1]: Pitch, rotation around X axis (-180<=pitch<=180), with positive * values when the z-axis moves toward the y-axis. * - * <p>values[2]: Roll, rotation around Y axis (-90<=roll<=90), with positive values + * <p>values[2]: Roll, rotation around Y axis (-90<=roll<=90), with positive values * when the z-axis moves toward the x-axis. * * <p>Note that this definition of yaw, pitch and roll is different from the @@ -64,17 +64,17 @@ public interface SensorListener { * * <p>{@link android.hardware.SensorManager#SENSOR_ACCELEROMETER SENSOR_ACCELEROMETER}:<p> * All values are in SI units (m/s^2) and measure contact forces. - * - * <p>values[0]: force applied by the device on the x-axis - * <p>values[1]: force applied by the device on the y-axis + * + * <p>values[0]: force applied by the device on the x-axis + * <p>values[1]: force applied by the device on the y-axis * <p>values[2]: force applied by the device on the z-axis - * + * * <p><u>Examples</u>: * <li>When the device is pushed on its left side toward the right, the * x acceleration value is negative (the device applies a reaction force * to the push toward the left)</li> - * - * <li>When the device lies flat on a table, the acceleration value is + * + * <li>When the device lies flat on a table, the acceleration value is * {@link android.hardware.SensorManager#STANDARD_GRAVITY -STANDARD_GRAVITY}, * which correspond to the force the device applies on the table in reaction * to gravity.</li> @@ -83,7 +83,7 @@ public interface SensorListener { * All values are in micro-Tesla (uT) and measure the ambient magnetic * field in the X, Y and -Z axis. * <p><b><u>Note:</u></b> the magnetic field's Z axis is inverted. - * + * * @param sensor The ID of the sensor being monitored * @param values The new values for the sensor. */ @@ -97,5 +97,5 @@ public interface SensorListener { * @param sensor The ID of the sensor being monitored * @param accuracy The new accuracy of this sensor. */ - public void onAccuracyChanged(int sensor, int accuracy); + public void onAccuracyChanged(int sensor, int accuracy); } diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java index e1cd451ba2a8..35aaf78bc3c2 100644 --- a/core/java/android/hardware/SensorManager.java +++ b/core/java/android/hardware/SensorManager.java @@ -83,7 +83,7 @@ public abstract class SensorManager { /** @hide */ protected static final String TAG = "SensorManager"; - private static final float[] mTempMatrix = new float[16]; + private static final float[] sTempMatrix = new float[16]; // Cached lists of sensors by type. Guarded by mSensorListByType. private final SparseArray<List<Sensor>> mSensorListByType = @@ -188,7 +188,7 @@ public abstract class SensorManager { * @deprecated use {@link android.hardware.Sensor Sensor} instead. */ @Deprecated - public static final int SENSOR_MAX = ((SENSOR_ALL + 1)>>1); + public static final int SENSOR_MAX = ((SENSOR_ALL + 1) >> 1); /** @@ -425,8 +425,9 @@ public abstract class SensorManager { } else { list = new ArrayList<Sensor>(); for (Sensor i : fullList) { - if (i.getType() == type) + if (i.getType() == type) { list.add(i); + } } } list = Collections.unmodifiableList(list); @@ -461,8 +462,9 @@ public abstract class SensorManager { } else { List<Sensor> list = new ArrayList(); for (Sensor i : fullList) { - if (i.getType() == type) + if (i.getType() == type) { list.add(i); + } } return Collections.unmodifiableList(list); } @@ -490,10 +492,11 @@ public abstract class SensorManager { // For the following sensor types, return a wake-up sensor. These types are by default // defined as wake-up sensors. For the rest of the SDK defined sensor types return a // non_wake-up version. - if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION || - type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE || - type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE || - type == Sensor.TYPE_WRIST_TILT_GESTURE || type == Sensor.TYPE_DYNAMIC_SENSOR_META) { + if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION + || type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE + || type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE + || type == Sensor.TYPE_WRIST_TILT_GESTURE + || type == Sensor.TYPE_DYNAMIC_SENSOR_META) { wakeUpSensor = true; } @@ -509,12 +512,12 @@ public abstract class SensorManager { * <p> * For example, * <ul> - * <li>getDefaultSensor({@link Sensor#TYPE_ACCELEROMETER}, true) returns a wake-up accelerometer - * sensor if it exists. </li> - * <li>getDefaultSensor({@link Sensor#TYPE_PROXIMITY}, false) returns a non wake-up proximity - * sensor if it exists. </li> - * <li>getDefaultSensor({@link Sensor#TYPE_PROXIMITY}, true) returns a wake-up proximity sensor - * which is the same as the Sensor returned by {@link #getDefaultSensor(int)}. </li> + * <li>getDefaultSensor({@link Sensor#TYPE_ACCELEROMETER}, true) returns a wake-up + * accelerometer sensor if it exists. </li> + * <li>getDefaultSensor({@link Sensor#TYPE_PROXIMITY}, false) returns a non wake-up + * proximity sensor if it exists. </li> + * <li>getDefaultSensor({@link Sensor#TYPE_PROXIMITY}, true) returns a wake-up proximity + * sensor which is the same as the Sensor returned by {@link #getDefaultSensor(int)}. </li> * </ul> * </p> * <p class="note"> @@ -532,8 +535,9 @@ public abstract class SensorManager { public Sensor getDefaultSensor(int type, boolean wakeUp) { List<Sensor> l = getSensorList(type); for (Sensor sensor : l) { - if (sensor.isWakeUpSensor() == wakeUp) + if (sensor.isWakeUpSensor() == wakeUp) { return sensor; + } } return null; } @@ -842,8 +846,8 @@ public abstract class SensorManager { * @return <code>true</code> if the sensor is supported and successfully enabled. * @see #registerListener(SensorEventListener, Sensor, int, int) */ - public boolean registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs, - int maxReportLatencyUs, Handler handler) { + public boolean registerListener(SensorEventListener listener, Sensor sensor, + int samplingPeriodUs, int maxReportLatencyUs, Handler handler) { int delayUs = getDelay(samplingPeriodUs); return registerListenerImpl(listener, sensor, delayUs, handler, maxReportLatencyUs, 0); } @@ -953,7 +957,7 @@ public abstract class SensorManager { * Used for receiving notifications from the SensorManager when dynamic sensors are connected or * disconnected. */ - public static abstract class DynamicSensorCallback { + public abstract static class DynamicSensorCallback { /** * Called when there is a dynamic sensor being connected to the system. * @@ -1180,7 +1184,7 @@ public abstract class SensorManager { float Ay = gravity[1]; float Az = gravity[2]; - final float normsqA = (Ax*Ax + Ay*Ay + Az*Az); + final float normsqA = (Ax * Ax + Ay * Ay + Az * Az); final float g = 9.81f; final float freeFallGravitySquared = 0.01f * g * g; if (normsqA < freeFallGravitySquared) { @@ -1191,10 +1195,10 @@ public abstract class SensorManager { final float Ex = geomagnetic[0]; final float Ey = geomagnetic[1]; final float Ez = geomagnetic[2]; - float Hx = Ey*Az - Ez*Ay; - float Hy = Ez*Ax - Ex*Az; - float Hz = Ex*Ay - Ey*Ax; - final float normH = (float)Math.sqrt(Hx*Hx + Hy*Hy + Hz*Hz); + float Hx = Ey * Az - Ez * Ay; + float Hy = Ez * Ax - Ex * Az; + float Hz = Ex * Ay - Ey * Ax; + final float normH = (float) Math.sqrt(Hx * Hx + Hy * Hy + Hz * Hz); if (normH < 0.1f) { // device is close to free fall (or in space?), or close to @@ -1205,13 +1209,13 @@ public abstract class SensorManager { Hx *= invH; Hy *= invH; Hz *= invH; - final float invA = 1.0f / (float)Math.sqrt(Ax*Ax + Ay*Ay + Az*Az); + final float invA = 1.0f / (float) Math.sqrt(Ax * Ax + Ay * Ay + Az * Az); Ax *= invA; Ay *= invA; Az *= invA; - final float Mx = Ay*Hz - Az*Hy; - final float My = Az*Hx - Ax*Hz; - final float Mz = Ax*Hy - Ay*Hx; + final float Mx = Ay * Hz - Az * Hy; + final float My = Az * Hx - Ax * Hz; + final float Mz = Ax * Hy - Ay * Hx; if (R != null) { if (R.length == 9) { R[0] = Hx; R[1] = Hy; R[2] = Hz; @@ -1228,17 +1232,17 @@ public abstract class SensorManager { // compute the inclination matrix by projecting the geomagnetic // vector onto the Z (gravity) and X (horizontal component // of geomagnetic vector) axes. - final float invE = 1.0f / (float)Math.sqrt(Ex*Ex + Ey*Ey + Ez*Ez); - final float c = (Ex*Mx + Ey*My + Ez*Mz) * invE; - final float s = (Ex*Ax + Ey*Ay + Ez*Az) * invE; + final float invE = 1.0f / (float) Math.sqrt(Ex * Ex + Ey * Ey + Ez * Ez); + final float c = (Ex * Mx + Ey * My + Ez * Mz) * invE; + final float s = (Ex * Ax + Ey * Ay + Ez * Az) * invE; if (I.length == 9) { I[0] = 1; I[1] = 0; I[2] = 0; I[3] = 0; I[4] = c; I[5] = s; - I[6] = 0; I[7] =-s; I[8] = c; + I[6] = 0; I[7] = -s; I[8] = c; } else if (I.length == 16) { I[0] = 1; I[1] = 0; I[2] = 0; I[4] = 0; I[5] = c; I[6] = s; - I[8] = 0; I[9] =-s; I[10]= c; + I[8] = 0; I[9] = -s; I[10] = c; I[3] = I[7] = I[11] = I[12] = I[13] = I[14] = 0; I[15] = 1; } @@ -1262,9 +1266,9 @@ public abstract class SensorManager { */ public static float getInclination(float[] I) { if (I.length == 9) { - return (float)Math.atan2(I[5], I[4]); + return (float) Math.atan2(I[5], I[4]); } else { - return (float)Math.atan2(I[6], I[5]); + return (float) Math.atan2(I[6], I[5]); } } @@ -1343,17 +1347,16 @@ public abstract class SensorManager { * @see #getRotationMatrix(float[], float[], float[], float[]) */ - public static boolean remapCoordinateSystem(float[] inR, int X, int Y, - float[] outR) - { + public static boolean remapCoordinateSystem(float[] inR, int X, int Y, float[] outR) { if (inR == outR) { - final float[] temp = mTempMatrix; - synchronized(temp) { + final float[] temp = sTempMatrix; + synchronized (temp) { // we don't expect to have a lot of contention if (remapCoordinateSystemImpl(inR, X, Y, temp)) { final int size = outR.length; - for (int i=0 ; i<size ; i++) + for (int i = 0; i < size; i++) { outR[i] = temp[i]; + } return true; } } @@ -1361,9 +1364,7 @@ public abstract class SensorManager { return remapCoordinateSystemImpl(inR, X, Y, outR); } - private static boolean remapCoordinateSystemImpl(float[] inR, int X, int Y, - float[] outR) - { + private static boolean remapCoordinateSystemImpl(float[] inR, int X, int Y, float[] outR) { /* * X and Y define a rotation matrix 'r': * @@ -1376,14 +1377,18 @@ public abstract class SensorManager { */ final int length = outR.length; - if (inR.length != length) + if (inR.length != length) { return false; // invalid parameter - if ((X & 0x7C)!=0 || (Y & 0x7C)!=0) + } + if ((X & 0x7C) != 0 || (Y & 0x7C) != 0) { return false; // invalid parameter - if (((X & 0x3)==0) || ((Y & 0x3)==0)) + } + if (((X & 0x3) == 0) || ((Y & 0x3) == 0)) { return false; // no axis specified - if ((X & 0x3) == (Y & 0x3)) + } + if ((X & 0x3) == (Y & 0x3)) { return false; // same axis specified + } // Z is "the other" axis, its sign is either +/- sign(X)*sign(Y) // this can be calculated by exclusive-or'ing X and Y; except for @@ -1391,28 +1396,29 @@ public abstract class SensorManager { int Z = X ^ Y; // extract the axis (remove the sign), offset in the range 0 to 2. - final int x = (X & 0x3)-1; - final int y = (Y & 0x3)-1; - final int z = (Z & 0x3)-1; + final int x = (X & 0x3) - 1; + final int y = (Y & 0x3) - 1; + final int z = (Z & 0x3) - 1; // compute the sign of Z (whether it needs to be inverted) - final int axis_y = (z+1)%3; - final int axis_z = (z+2)%3; - if (((x^axis_y)|(y^axis_z)) != 0) + final int axis_y = (z + 1) % 3; + final int axis_z = (z + 2) % 3; + if (((x ^ axis_y) | (y ^ axis_z)) != 0) { Z ^= 0x80; + } - final boolean sx = (X>=0x80); - final boolean sy = (Y>=0x80); - final boolean sz = (Z>=0x80); + final boolean sx = (X >= 0x80); + final boolean sy = (Y >= 0x80); + final boolean sz = (Z >= 0x80); // Perform R * r, in avoiding actual muls and adds. - final int rowLength = ((length==16)?4:3); - for (int j=0 ; j<3 ; j++) { - final int offset = j*rowLength; - for (int i=0 ; i<3 ; i++) { - if (x==i) outR[offset+i] = sx ? -inR[offset+0] : inR[offset+0]; - if (y==i) outR[offset+i] = sy ? -inR[offset+1] : inR[offset+1]; - if (z==i) outR[offset+i] = sz ? -inR[offset+2] : inR[offset+2]; + final int rowLength = ((length == 16) ? 4 : 3); + for (int j = 0; j < 3; j++) { + final int offset = j * rowLength; + for (int i = 0; i < 3; i++) { + if (x == i) outR[offset + i] = sx ? -inR[offset + 0] : inR[offset + 0]; + if (y == i) outR[offset + i] = sy ? -inR[offset + 1] : inR[offset + 1]; + if (z == i) outR[offset + i] = sz ? -inR[offset + 2] : inR[offset + 2]; } } if (length == 16) { @@ -1466,7 +1472,7 @@ public abstract class SensorManager { * @see #getRotationMatrix(float[], float[], float[], float[]) * @see GeomagneticField */ - public static float[] getOrientation(float[] R, float values[]) { + public static float[] getOrientation(float[] R, float[] values) { /* * 4x4 (length=16) case: * / R[ 0] R[ 1] R[ 2] 0 \ @@ -1481,13 +1487,13 @@ public abstract class SensorManager { * */ if (R.length == 9) { - values[0] = (float)Math.atan2(R[1], R[4]); - values[1] = (float)Math.asin(-R[7]); - values[2] = (float)Math.atan2(-R[6], R[8]); + values[0] = (float) Math.atan2(R[1], R[4]); + values[1] = (float) Math.asin(-R[7]); + values[2] = (float) Math.atan2(-R[6], R[8]); } else { - values[0] = (float)Math.atan2(R[1], R[5]); - values[1] = (float)Math.asin(-R[9]); - values[2] = (float)Math.atan2(-R[8], R[10]); + values[0] = (float) Math.atan2(R[1], R[5]); + values[1] = (float) Math.asin(-R[9]); + values[2] = (float) Math.atan2(-R[8], R[10]); } return values; @@ -1524,7 +1530,7 @@ public abstract class SensorManager { */ public static float getAltitude(float p0, float p) { final float coef = 1.0f / 5.255f; - return 44330.0f * (1.0f - (float)Math.pow(p/p0, coef)); + return 44330.0f * (1.0f - (float) Math.pow(p / p0, coef)); } /** Helper function to compute the angle change between two rotation matrices. @@ -1557,12 +1563,13 @@ public abstract class SensorManager { * (in radians) is stored */ - public static void getAngleChange( float[] angleChange, float[] R, float[] prevR) { - float rd1=0,rd4=0, rd6=0,rd7=0, rd8=0; - float ri0=0,ri1=0,ri2=0,ri3=0,ri4=0,ri5=0,ri6=0,ri7=0,ri8=0; - float pri0=0, pri1=0, pri2=0, pri3=0, pri4=0, pri5=0, pri6=0, pri7=0, pri8=0; + public static void getAngleChange(float[] angleChange, float[] R, float[] prevR) { + float rd1 = 0, rd4 = 0, rd6 = 0, rd7 = 0, rd8 = 0; + float ri0 = 0, ri1 = 0, ri2 = 0, ri3 = 0, ri4 = 0, ri5 = 0, ri6 = 0, ri7 = 0, ri8 = 0; + float pri0 = 0, pri1 = 0, pri2 = 0, pri3 = 0, pri4 = 0; + float pri5 = 0, pri6 = 0, pri7 = 0, pri8 = 0; - if(R.length == 9) { + if (R.length == 9) { ri0 = R[0]; ri1 = R[1]; ri2 = R[2]; @@ -1572,7 +1579,7 @@ public abstract class SensorManager { ri6 = R[6]; ri7 = R[7]; ri8 = R[8]; - } else if(R.length == 16) { + } else if (R.length == 16) { ri0 = R[0]; ri1 = R[1]; ri2 = R[2]; @@ -1584,7 +1591,7 @@ public abstract class SensorManager { ri8 = R[10]; } - if(prevR.length == 9) { + if (prevR.length == 9) { pri0 = prevR[0]; pri1 = prevR[1]; pri2 = prevR[2]; @@ -1594,7 +1601,7 @@ public abstract class SensorManager { pri6 = prevR[6]; pri7 = prevR[7]; pri8 = prevR[8]; - } else if(prevR.length == 16) { + } else if (prevR.length == 16) { pri0 = prevR[0]; pri1 = prevR[1]; pri2 = prevR[2]; @@ -1615,9 +1622,9 @@ public abstract class SensorManager { rd7 = pri2 * ri1 + pri5 * ri4 + pri8 * ri7; //rd[2][1] rd8 = pri2 * ri2 + pri5 * ri5 + pri8 * ri8; //rd[2][2] - angleChange[0] = (float)Math.atan2(rd1, rd4); - angleChange[1] = (float)Math.asin(-rd7); - angleChange[2] = (float)Math.atan2(-rd6, rd8); + angleChange[0] = (float) Math.atan2(rd1, rd4); + angleChange[1] = (float) Math.asin(-rd7); + angleChange[2] = (float) Math.atan2(-rd6, rd8); } @@ -1650,8 +1657,8 @@ public abstract class SensorManager { if (rotationVector.length >= 4) { q0 = rotationVector[3]; } else { - q0 = 1 - q1*q1 - q2*q2 - q3*q3; - q0 = (q0 > 0) ? (float)Math.sqrt(q0) : 0; + q0 = 1 - q1 * q1 - q2 * q2 - q3 * q3; + q0 = (q0 > 0) ? (float) Math.sqrt(q0) : 0; } float sq_q1 = 2 * q1 * q1; @@ -1664,7 +1671,7 @@ public abstract class SensorManager { float q2_q3 = 2 * q2 * q3; float q1_q0 = 2 * q1 * q0; - if(R.length == 9) { + if (R.length == 9) { R[0] = 1 - sq_q2 - sq_q3; R[1] = q1_q2 - q3_q0; R[2] = q1_q3 + q2_q0; @@ -1707,8 +1714,8 @@ public abstract class SensorManager { if (rv.length >= 4) { Q[0] = rv[3]; } else { - Q[0] = 1 - rv[0]*rv[0] - rv[1]*rv[1] - rv[2]*rv[2]; - Q[0] = (Q[0] > 0) ? (float)Math.sqrt(Q[0]) : 0; + Q[0] = 1 - rv[0] * rv[0] - rv[1] * rv[1] - rv[2] * rv[2]; + Q[0] = (Q[0] > 0) ? (float) Math.sqrt(Q[0]) : 0; } Q[1] = rv[0]; Q[2] = rv[1]; @@ -1800,7 +1807,7 @@ public abstract class SensorManager { */ @SystemApi public boolean initDataInjection(boolean enable) { - return initDataInjectionImpl(enable); + return initDataInjectionImpl(enable); } /** @@ -1846,9 +1853,9 @@ public abstract class SensorManager { } int expectedNumValues = Sensor.getMaxLengthValuesArray(sensor, Build.VERSION_CODES.M); if (values.length != expectedNumValues) { - throw new IllegalArgumentException ("Wrong number of values for sensor " + - sensor.getName() + " actual=" + values.length + " expected=" + - expectedNumValues); + throw new IllegalArgumentException("Wrong number of values for sensor " + + sensor.getName() + " actual=" + values.length + " expected=" + + expectedNumValues); } if (accuracy < SENSOR_STATUS_NO_CONTACT || accuracy > SENSOR_STATUS_ACCURACY_HIGH) { throw new IllegalArgumentException("Invalid sensor accuracy"); diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 607788d3effc..1174cb6a2692 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -28,10 +28,11 @@ import android.util.Log; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; -import dalvik.system.CloseGuard; import com.android.internal.annotations.GuardedBy; +import dalvik.system.CloseGuard; + import java.io.IOException; import java.io.UncheckedIOException; import java.lang.ref.WeakReference; @@ -40,7 +41,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - /** * Sensor manager implementation that communicates with the built-in * system sensors. @@ -101,7 +101,7 @@ public class SystemSensorManager extends SensorManager { /** {@hide} */ public SystemSensorManager(Context context, Looper mainLooper) { - synchronized(sLock) { + synchronized (sLock) { if (!sNativeClassInited) { sNativeClassInited = true; nativeClassInit(); @@ -114,7 +114,7 @@ public class SystemSensorManager extends SensorManager { mNativeInstance = nativeCreate(context.getOpPackageName()); // initialize the sensor list - for (int index = 0;;++index) { + for (int index = 0;; ++index) { Sensor sensor = new Sensor(); if (!nativeGetSensorAtIndex(mNativeInstance, sensor, index)) break; mFullSensorsList.add(sensor); @@ -157,9 +157,9 @@ public class SystemSensorManager extends SensorManager { return false; } if (mSensorListeners.size() >= MAX_LISTENER_COUNT) { - throw new IllegalStateException("register failed, " + - "the sensor listeners size has exceeded the maximum limit " + - MAX_LISTENER_COUNT); + throw new IllegalStateException("register failed, " + + "the sensor listeners size has exceeded the maximum limit " + + MAX_LISTENER_COUNT); } // Invariants to preserve: @@ -170,9 +170,10 @@ public class SystemSensorManager extends SensorManager { SensorEventQueue queue = mSensorListeners.get(listener); if (queue == null) { Looper looper = (handler != null) ? handler.getLooper() : mMainLooper; - final String fullClassName = listener.getClass().getEnclosingClass() != null ? - listener.getClass().getEnclosingClass().getName() : - listener.getClass().getName(); + final String fullClassName = + listener.getClass().getEnclosingClass() != null + ? listener.getClass().getEnclosingClass().getName() + : listener.getClass().getName(); queue = new SensorEventQueue(listener, looper, this, fullClassName); if (!queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs)) { queue.dispose(); @@ -221,17 +222,18 @@ public class SystemSensorManager extends SensorManager { if (sensor.getReportingMode() != Sensor.REPORTING_MODE_ONE_SHOT) return false; if (mTriggerListeners.size() >= MAX_LISTENER_COUNT) { - throw new IllegalStateException("request failed, " + - "the trigger listeners size has exceeded the maximum limit " + - MAX_LISTENER_COUNT); + throw new IllegalStateException("request failed, " + + "the trigger listeners size has exceeded the maximum limit " + + MAX_LISTENER_COUNT); } synchronized (mTriggerListeners) { TriggerEventQueue queue = mTriggerListeners.get(listener); if (queue == null) { - final String fullClassName = listener.getClass().getEnclosingClass() != null ? - listener.getClass().getEnclosingClass().getName() : - listener.getClass().getName(); + final String fullClassName = + listener.getClass().getEnclosingClass() != null + ? listener.getClass().getEnclosingClass().getName() + : listener.getClass().getName(); queue = new TriggerEventQueue(listener, mMainLooper, this, fullClassName); if (!queue.addSensor(sensor, 0, 0)) { queue.dispose(); @@ -336,27 +338,27 @@ public class SystemSensorManager extends SensorManager { mHandleToSensor.remove(sensor.getHandle()); if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) { - synchronized(mTriggerListeners) { + synchronized (mTriggerListeners) { HashMap<TriggerEventListener, TriggerEventQueue> triggerListeners = - new HashMap<TriggerEventListener, TriggerEventQueue>(mTriggerListeners); + new HashMap<TriggerEventListener, TriggerEventQueue>(mTriggerListeners); - for (TriggerEventListener l: triggerListeners.keySet()) { - if (DEBUG_DYNAMIC_SENSOR){ - Log.i(TAG, "removed trigger listener" + l.toString() + - " due to sensor disconnection"); + for (TriggerEventListener l : triggerListeners.keySet()) { + if (DEBUG_DYNAMIC_SENSOR) { + Log.i(TAG, "removed trigger listener" + l.toString() + + " due to sensor disconnection"); } cancelTriggerSensorImpl(l, sensor, true); } } } else { - synchronized(mSensorListeners) { + synchronized (mSensorListeners) { HashMap<SensorEventListener, SensorEventQueue> sensorListeners = - new HashMap<SensorEventListener, SensorEventQueue>(mSensorListeners); + new HashMap<SensorEventListener, SensorEventQueue>(mSensorListeners); for (SensorEventListener l: sensorListeners.keySet()) { - if (DEBUG_DYNAMIC_SENSOR){ - Log.i(TAG, "removed event listener" + l.toString() + - " due to sensor disconnection"); + if (DEBUG_DYNAMIC_SENSOR) { + Log.i(TAG, "removed event listener" + l.toString() + + " due to sensor disconnection"); } unregisterListenerImpl(l, sensor); } @@ -365,7 +367,7 @@ public class SystemSensorManager extends SensorManager { } private void updateDynamicSensorList() { - synchronized(mFullDynamicSensorsList) { + synchronized (mFullDynamicSensorsList) { if (mDynamicSensorListDirty) { List<Sensor> list = new ArrayList<>(); nativeGetDynamicSensors(mNativeInstance, list); @@ -488,15 +490,15 @@ public class SystemSensorManager extends SensorManager { int i = 0, j = 0; while (true) { - if (j < oldList.size() && ( i >= newList.size() || - newList.get(i).getHandle() > oldList.get(j).getHandle()) ) { + if (j < oldList.size() && (i >= newList.size() + || newList.get(i).getHandle() > oldList.get(j).getHandle())) { changed = true; if (removed != null) { removed.add(oldList.get(j)); } ++j; - } else if (i < newList.size() && ( j >= oldList.size() || - newList.get(i).getHandle() < oldList.get(j).getHandle())) { + } else if (i < newList.size() && (j >= oldList.size() + || newList.get(i).getHandle() < oldList.get(j).getHandle())) { changed = true; if (added != null) { added.add(newList.get(i)); @@ -505,8 +507,8 @@ public class SystemSensorManager extends SensorManager { updated.add(newList.get(i)); } ++i; - } else if (i < newList.size() && j < oldList.size() && - newList.get(i).getHandle() == oldList.get(j).getHandle()) { + } else if (i < newList.size() && j < oldList.size() + && newList.get(i).getHandle() == oldList.get(j).getHandle()) { if (updated != null) { updated.add(oldList.get(j)); } @@ -623,7 +625,7 @@ public class SystemSensorManager extends SensorManager { * associated with any listener and there is one InjectEventQueue associated with a * SensorManager instance. */ - private static abstract class BaseEventQueue { + private abstract static class BaseEventQueue { private static native long nativeInitBaseEventQueue(long nativeManager, WeakReference<BaseEventQueue> eventQWeak, MessageQueue msgQ, String packageName, int mode, String opPackageName); @@ -633,9 +635,9 @@ public class SystemSensorManager extends SensorManager { private static native void nativeDestroySensorEventQueue(long eventQ); private static native int nativeFlushSensor(long eventQ); private static native int nativeInjectSensorData(long eventQ, int handle, - float[] values,int accuracy, long timestamp); + float[] values, int accuracy, long timestamp); - private long nSensorEventQueue; + private long mNativeSensorEventQueue; private final SparseBooleanArray mActiveSensors = new SparseBooleanArray(); protected final SparseIntArray mSensorAccuracies = new SparseIntArray(); private final CloseGuard mCloseGuard = CloseGuard.get(); @@ -646,7 +648,7 @@ public class SystemSensorManager extends SensorManager { BaseEventQueue(Looper looper, SystemSensorManager manager, int mode, String packageName) { if (packageName == null) packageName = ""; - nSensorEventQueue = nativeInitBaseEventQueue(manager.mNativeInstance, + mNativeSensorEventQueue = nativeInitBaseEventQueue(manager.mNativeInstance, new WeakReference<>(this), looper.getQueue(), packageName, mode, manager.mContext.getOpPackageName()); mCloseGuard.open("dispose"); @@ -668,17 +670,17 @@ public class SystemSensorManager extends SensorManager { addSensorEvent(sensor); if (enableSensor(sensor, delayUs, maxBatchReportLatencyUs) != 0) { // Try continuous mode if batching fails. - if (maxBatchReportLatencyUs == 0 || - maxBatchReportLatencyUs > 0 && enableSensor(sensor, delayUs, 0) != 0) { - removeSensor(sensor, false); - return false; + if (maxBatchReportLatencyUs == 0 + || maxBatchReportLatencyUs > 0 && enableSensor(sensor, delayUs, 0) != 0) { + removeSensor(sensor, false); + return false; } } return true; } public boolean removeAllSensors() { - for (int i=0 ; i<mActiveSensors.size(); i++) { + for (int i = 0; i < mActiveSensors.size(); i++) { if (mActiveSensors.valueAt(i) == true) { int handle = mActiveSensors.keyAt(i); Sensor sensor = mManager.mHandleToSensor.get(handle); @@ -706,8 +708,8 @@ public class SystemSensorManager extends SensorManager { } public int flush() { - if (nSensorEventQueue == 0) throw new NullPointerException(); - return nativeFlushSensor(nSensorEventQueue); + if (mNativeSensorEventQueue == 0) throw new NullPointerException(); + return nativeFlushSensor(mNativeSensorEventQueue); } public boolean hasSensors() { @@ -731,29 +733,30 @@ public class SystemSensorManager extends SensorManager { } mCloseGuard.close(); } - if (nSensorEventQueue != 0) { - nativeDestroySensorEventQueue(nSensorEventQueue); - nSensorEventQueue = 0; + if (mNativeSensorEventQueue != 0) { + nativeDestroySensorEventQueue(mNativeSensorEventQueue); + mNativeSensorEventQueue = 0; } } private int enableSensor( Sensor sensor, int rateUs, int maxBatchReportLatencyUs) { - if (nSensorEventQueue == 0) throw new NullPointerException(); + if (mNativeSensorEventQueue == 0) throw new NullPointerException(); if (sensor == null) throw new NullPointerException(); - return nativeEnableSensor(nSensorEventQueue, sensor.getHandle(), rateUs, + return nativeEnableSensor(mNativeSensorEventQueue, sensor.getHandle(), rateUs, maxBatchReportLatencyUs); } protected int injectSensorDataBase(int handle, float[] values, int accuracy, long timestamp) { - return nativeInjectSensorData(nSensorEventQueue, handle, values, accuracy, timestamp); + return nativeInjectSensorData( + mNativeSensorEventQueue, handle, values, accuracy, timestamp); } private int disableSensor(Sensor sensor) { - if (nSensorEventQueue == 0) throw new NullPointerException(); + if (mNativeSensorEventQueue == 0) throw new NullPointerException(); if (sensor == null) throw new NullPointerException(); - return nativeDisableSensor(nSensorEventQueue, sensor.getHandle()); + return nativeDisableSensor(mNativeSensorEventQueue, sensor.getHandle()); } protected abstract void dispatchSensorEvent(int handle, float[] values, int accuracy, long timestamp); @@ -840,7 +843,7 @@ public class SystemSensorManager extends SensorManager { // sensor disconnected return; } - ((SensorEventListener2)mListener).onFlushCompleted(sensor); + ((SensorEventListener2) mListener).onFlushCompleted(sensor); } return; } @@ -858,7 +861,7 @@ public class SystemSensorManager extends SensorManager { } SensorAdditionalInfo info = new SensorAdditionalInfo(sensor, type, serial, intValues, floatValues); - ((SensorEventCallback)mListener).onSensorAdditionalInfo(info); + ((SensorEventCallback) mListener).onSensorAdditionalInfo(info); } } } @@ -930,8 +933,8 @@ public class SystemSensorManager extends SensorManager { super(looper, manager, OPERATING_MODE_DATA_INJECTION, packageName); } - int injectSensorData(int handle, float[] values,int accuracy, long timestamp) { - return injectSensorDataBase(handle, values, accuracy, timestamp); + int injectSensorData(int handle, float[] values, int accuracy, long timestamp) { + return injectSensorDataBase(handle, values, accuracy, timestamp); } @SuppressWarnings("unused") @@ -959,6 +962,7 @@ public class SystemSensorManager extends SensorManager { int handle = -1; if (parameter.sensor != null) handle = parameter.sensor.getHandle(); return nativeSetOperationParameter( - mNativeInstance, handle, parameter.type, parameter.floatValues, parameter.intValues) == 0; + mNativeInstance, handle, + parameter.type, parameter.floatValues, parameter.intValues) == 0; } } diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 0df6361d4224..e9e695bbdf10 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -23,7 +23,6 @@ import android.util.Log; import android.util.Slog; import com.android.internal.util.FastPrintWriter; -import com.android.internal.util.FunctionalUtils; import com.android.internal.util.FunctionalUtils.ThrowingRunnable; import com.android.internal.util.FunctionalUtils.ThrowingSupplier; @@ -202,7 +201,7 @@ public class Binder implements IBinder { * then its own pid is returned. */ public static final native int getCallingPid(); - + /** * Return the Linux uid assigned to the process that sent you the * current transaction that is being processed. This uid can be used with @@ -335,7 +334,7 @@ public class Binder implements IBinder { * it needs to. */ public static final native void flushPendingCommands(); - + /** * Add the calling thread to the IPC thread pool. This function does * not return until the current process is exiting. @@ -372,7 +371,7 @@ public class Binder implements IBinder { } } } - + /** * Convenience method for associating a specific interface with the Binder. * After calling, queryLocalInterface() will be implemented for you @@ -383,7 +382,7 @@ public class Binder implements IBinder { mOwner = owner; mDescriptor = descriptor; } - + /** * Default implementation returns an empty interface name. */ @@ -408,7 +407,7 @@ public class Binder implements IBinder { public boolean isBinderAlive() { return true; } - + /** * Use information supplied to attachInterface() to return the * associated IInterface if it matches the requested @@ -630,7 +629,7 @@ public class Binder implements IBinder { } return r; } - + /** * Local implementation is a no-op. */ @@ -643,7 +642,7 @@ public class Binder implements IBinder { public boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags) { return true; } - + protected void finalize() throws Throwable { try { destroyBinder(); @@ -730,7 +729,15 @@ public class Binder implements IBinder { } } +/** + * Java proxy for a native IBinder object. + * Allocated and constructed by the native javaObjectforIBinder function. Never allocated + * directly from Java code. + */ final class BinderProxy implements IBinder { + // See android_util_Binder.cpp for the native half of this. + // TODO: Consider using NativeAllocationRegistry instead of finalization. + // Assume the process-wide default value when created volatile boolean mWarnOnBlocking = Binder.sWarnOnBlocking; @@ -789,7 +796,7 @@ final class BinderProxy implements IBinder { reply.recycle(); } } - + public void dumpAsync(FileDescriptor fd, String[] args) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -826,7 +833,7 @@ final class BinderProxy implements IBinder { BinderProxy() { mSelf = new WeakReference(this); } - + @Override protected void finalize() throws Throwable { try { @@ -835,9 +842,9 @@ final class BinderProxy implements IBinder { super.finalize(); } } - + private native final void destroy(); - + private static final void sendDeathNotice(DeathRecipient recipient) { if (false) Log.v("JavaBinder", "sendDeathNotice to " + recipient); try { @@ -848,8 +855,20 @@ final class BinderProxy implements IBinder { exc); } } - + + // This WeakReference to "this" is used only by native code to "attach" to the + // native IBinder object. + // Using WeakGlobalRefs instead currently appears unsafe, in that they can yield a + // non-null value after the BinderProxy is enqueued for finalization. + // Used only once immediately after construction. + // TODO: Consider making the extra native-to-java call to compute this on the fly. final private WeakReference mSelf; + + // Native pointer to the wrapped native IBinder object. Counted as strong reference. private long mObject; + + // Native pointer to native DeathRecipientList. Counted as strong reference. + // Basically owned by the JavaProxy object. Reference counted only because DeathRecipients + // hold a weak reference that can be temporarily promoted. private long mOrgue; } diff --git a/core/java/com/android/internal/util/RingBuffer.java b/core/java/com/android/internal/util/RingBuffer.java new file mode 100644 index 000000000000..ad84353f23a9 --- /dev/null +++ b/core/java/com/android/internal/util/RingBuffer.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import static com.android.internal.util.Preconditions.checkArgumentPositive; + +import java.lang.reflect.Array; +import java.util.Arrays; + +/** + * A simple ring buffer structure with bounded capacity backed by an array. + * Events can always be added at the logical end of the buffer. If the buffer is + * full, oldest events are dropped when new events are added. + * {@hide} + */ +public class RingBuffer<T> { + + // Array for storing events. + private final T[] mBuffer; + // Cursor keeping track of the logical end of the array. This cursor never + // wraps and instead keeps track of the total number of append() operations. + private long mCursor = 0; + + public RingBuffer(Class<T> c, int capacity) { + checkArgumentPositive(capacity, "A RingBuffer cannot have 0 capacity"); + // Java cannot create generic arrays without a runtime hint. + mBuffer = (T[]) Array.newInstance(c, capacity); + } + + public int size() { + return (int) Math.min(mBuffer.length, (long) mCursor); + } + + public void append(T t) { + mBuffer[indexOf(mCursor++)] = t; + } + + public T[] toArray() { + // Only generic way to create a T[] from another T[] + T[] out = Arrays.copyOf(mBuffer, size(), (Class<T[]>) mBuffer.getClass()); + // Reverse iteration from youngest event to oldest event. + long inCursor = mCursor - 1; + int outIdx = out.length - 1; + while (outIdx >= 0) { + out[outIdx--] = (T) mBuffer[indexOf(inCursor--)]; + } + return out; + } + + private int indexOf(long cursor) { + return (int) Math.abs(cursor % mBuffer.length); + } +} diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index af5d12bd2510..7908c9d2b609 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -513,8 +513,8 @@ protected: private: JavaVM* const mVM; - jobject mObject; - jweak mObjectWeak; // will be a weak ref to the same VM-side DeathRecipient after binderDied() + jobject mObject; // Initial strong ref to Java-side DeathRecipient. Cleared on binderDied(). + jweak mObjectWeak; // weak ref to the same Java-side DeathRecipient after binderDied(). wp<DeathRecipientList> mList; }; @@ -586,7 +586,7 @@ static void proxy_cleanup(const void* id, void* obj, void* cleanupCookie) env->DeleteGlobalRef((jobject)obj); } -static Mutex mProxyLock; +static Mutex gProxyLock; jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val) { @@ -601,7 +601,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val) // For the rest of the function we will hold this lock, to serialize // looking/creation/destruction of Java proxies for native Binder proxies. - AutoMutex _l(mProxyLock); + AutoMutex _l(gProxyLock); // Someone else's... do we know about it? jobject object = (jobject)val->findObject(&gBinderProxyOffsets); @@ -1277,7 +1277,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj, static void android_os_BinderProxy_destroy(JNIEnv* env, jobject obj) { // Don't race with construction/initialization - AutoMutex _l(mProxyLock); + AutoMutex _l(gProxyLock); IBinder* b = (IBinder*) env->GetLongField(obj, gBinderProxyOffsets.mObject); diff --git a/core/proto/android/app/notificationmanager.proto b/core/proto/android/app/notificationmanager.proto new file mode 100644 index 000000000000..4dfd0cf469a7 --- /dev/null +++ b/core/proto/android/app/notificationmanager.proto @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +option java_package = "android.app"; +option java_multiple_files = true; + +package android.app; + +/** + * An android.app.NotificationMananger.Policy object. + */ +message PolicyProto { + enum Category { + CATEGORY_UNKNOWN = 0; + // Reminder notifications are prioritized. + REMINDERS = 1; + // Event notifications are prioritized. + EVENTS = 2; + // Message notifications are prioritized. + MESSAGES = 3; + // Calls are prioritized. + CALLS = 4; + // Calls from repeat callers are prioritized. + REPEAT_CALLERS = 5; + } + repeated Category priority_categories = 1; + + enum Sender { + // Any sender is prioritized. + ANY = 0; + // Saved contacts are prioritized. + CONTACTS = 1; + // Only starred contacts are prioritized. + STARRED = 2; + } + Sender priority_call_sender = 2; + Sender priority_message_sender = 3; + + enum SuppressedVisualEffect { + SVE_UNKNOWN = 0; + // Whether notifications suppressed by DND should not interrupt visually + // (e.g. with notification lights or by turning the screen on) when the + // screen is off. + SCREEN_OFF = 1; + // Whether notifications suppressed by DND should not interrupt visually + // when the screen is on (e.g. by peeking onto the screen). + SCREEN_ON = 2; + } + repeated SuppressedVisualEffect suppressed_visual_effects = 4; +} diff --git a/core/proto/android/service/notification.proto b/core/proto/android/service/notification.proto index a8482a1d6be6..05afe525c1eb 100644 --- a/core/proto/android/service/notification.proto +++ b/core/proto/android/service/notification.proto @@ -21,6 +21,7 @@ package android.service.notification; option java_multiple_files = true; option java_outer_classname = "NotificationServiceProto"; +import "frameworks/base/core/proto/android/app/notificationmanager.proto"; import "frameworks/base/core/proto/android/content/component_name.proto"; message NotificationServiceDumpProto { @@ -98,7 +99,7 @@ message ZenModeProto { repeated string enabled_active_conditions = 2; int32 suppressed_effects = 3; repeated string suppressors = 4; - string policy = 5; + android.app.PolicyProto policy = 5; } enum ZenMode { diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index c734cfa5786a..164b585de385 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Foon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokluidsprekers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Oorfone"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Stelsel"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-oudio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Draadlose skerm"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 43c1dc48fdd4..9f3bcbbafed5 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ቴሌቪዥን"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ስልክ"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"የትከል ድምፅ ማጉያዎች"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"ኤችዲኤምአይ"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"የጆሮ ማዳመጫዎች"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"ዩ ኤስ ቢ"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ስርዓት"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"የብሉቱዝ ድምጽ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ገመድ አልባ ማሳያ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index d248428ac570..b3aa8bfb2000 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -1513,11 +1513,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"التلفزيون"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"الهاتف"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"مكبرات صوت للإرساء"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"سماعات رأس"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"النظام"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"صوت بلوتوث"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"عرض شاشة لاسلكي"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index bd711bfb32ed..61e2c1e4139d 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dok spikerlər"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Qulaqlıq"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz ekran"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 621185c02da9..f3c25d627f54 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -1444,11 +1444,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvučnici bazne stanice"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalice"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bežični ekran"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index d4808d06c17a..bba23aa76458 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ТБ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Тэлефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Дынамікі станцыi"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Навушнікі"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Сістэма"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-аўдыё"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Бесправадны дысплей"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 70870ec296a3..5b9288810239 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Телевизор"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Докинг станц.: Високогов."</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Слушалки"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Звук през Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Безжичен дисплей"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 49b2ccc50657..dff5ab608eec 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"টিভি"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ফোন"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ডক স্পিকার"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"হেডফোন"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"সিস্টেম"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ব্লুটুথ অডিও"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ওয়্যারলেস প্রদর্শন"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 38601064f85a..d1bb0f9c2298 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -1446,11 +1446,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvučnici priključne stanice"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalice"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bežični prikaz"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 3475891d108a..60018d93ad38 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televisor"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telèfon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altaveus de la base"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculars"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Àudio per Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla sense fil"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 09e156d522e6..53ea5860d200 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televize"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Reproduktory doku"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Sluchátka"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth Audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezdrátový displej"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 5ee109d21246..d6e400ba2da0 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Tv"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockstationens højttalere"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hovedtelefoner"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådløs skærm"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 3585d4cceeac..ff0fe95bf153 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock-Lautsprecher"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kopfhörer"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-Audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Kabellose Übertragung (WiDi)"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index c20ba6ef4076..806d42496458 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Τηλεόραση"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Τηλέφωνο"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Ηχεία βάσης σύνδεσης"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ακουστικά"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Σύστημα"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ήχος Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Ασύρματη οθόνη"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index afddfc4b9d04..8264a28035f3 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index afddfc4b9d04..8264a28035f3 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index afddfc4b9d04..8264a28035f3 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index afddfc4b9d04..8264a28035f3 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index e4a69ab1df9c..44fd405a8961 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 02613635b2a3..e7a18eac324f 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Dispositivo"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altavoces del conector"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculares"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla inalámbrica"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 6a5d3a9efcb6..820ab101ca23 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Teléfono"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altavoces de la base"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculares"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla inalámbrica"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 267cd9ddc4e3..d6cf28e7b885 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Teler"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doki kõlarid"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kõrvaklapid"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Juhtmeta ekraan"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 20cefa886a71..f0414bb0bcac 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Telebista"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefonoa"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Konektatu bozgorailuak oinarrira"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Aurikularrak"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetootharen audioa"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Hari gabeko pantaila"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 320ab80b7f46..9b974fe3ef06 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"تلویزیون"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"تلفن"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"بلندگوهای جایگاه"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"هدفونها"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"سیستم"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوتوثهای صوتی"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"صفحه نمایش بیسیم"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 62b0486d9c95..ed516766ef81 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -1130,7 +1130,7 @@ <string name="wifi_connect_alert_title" msgid="8455846016001810172">"Sallitaanko yhteys?"</string> <string name="wifi_connect_alert_message" msgid="6451273376815958922">"Sovellus %1$s yrittää yhdistää Wi-Fi-verkkoon %2$s."</string> <string name="wifi_connect_default_application" msgid="7143109390475484319">"Sovellus"</string> - <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Suora Wi-Fi-yhteys"</string> + <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string> <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Käynnistä suora Wi-Fi-yhteys. Wi-Fi-asiakas/-hotspot poistetaan käytöstä."</string> <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Suoran Wi-Fi-yhteyden käynnistäminen epäonnistui."</string> <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct on käytössä"</string> @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televisio"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Puhelin"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Telineen kaiuttimet"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kuulokkeet"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Järjestelmä"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ääni"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Langaton näyttö"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 90b31c89dec2..085c9d0ccfe4 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -253,7 +253,7 @@ <string name="foreground_service_apps_in_background" msgid="7175032677643332242">"<xliff:g id="NUMBER">%1$d</xliff:g> applications sollicitent la pile"</string> <string name="foreground_service_tap_for_details" msgid="372046743534354644">"Touchez pour afficher des détails sur l\'utilisation de la pile et des données"</string> <string name="foreground_service_multiple_separator" msgid="4021901567939866542">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string> - <string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string> + <string name="safeMode" msgid="2788228061547930246">"Mode sans échec"</string> <string name="android_system_label" msgid="6577375335728551336">"Système Android"</string> <string name="user_owner_label" msgid="1119010402169916617">"Passer au profil personnel"</string> <string name="managed_profile_label" msgid="5289992269827577857">"Passer au profil professionnel"</string> @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Télévision"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Téléphone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Haut-parleurs de la station d\'accueil"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Oreillettes"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Affichage sans fil"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index e361500146f6..5a360a86b0b3 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Téléviseur"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Téléphone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Haut-parleurs de la station d\'accueil"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Écouteurs"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Affichage sans fil"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index a24252ccb562..f17f10b261f3 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televisión"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Teléfono"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Conectar altofalantes á base"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculares"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio por Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Visualización sen fíos"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 3249e14b094e..4f2e29c806b3 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ફોન"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"સ્પીકર્સ ડૉક કરો"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"હેડફોન"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"સિસ્ટમ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"બ્લૂટૂથ ઑડિઓ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"વાયરલેસ ડિસ્પ્લે"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 7c2c35c2cb70..a112be440b14 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"टीवी"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फ़ोन"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"डॉक स्पीकर"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफ़ोन"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्टम"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ब्लूटूथ ऑडियो"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"वायरलेस डिसप्ले"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 8f74abc0208c..08a7697bf440 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -1444,11 +1444,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televizor"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvučnici postolja"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalice"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sustav"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth zvuk"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bežični prikaz"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 96d878cd0313..2cd1a10d6a8e 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokkolóegység hangszórója"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fejhallgató"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Rendszer"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth hang"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Vezeték nélküli kijelző"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index b6649971afec..b27b257b24c0 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Հեռուստացույց"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Հեռախոս"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Համակցված բարձրախոսներ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ականջակալներ"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Համակարգ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ի աուդիո ֆայլ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Անլար էկրան"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 0f210e9fc8d7..dda8877b3785 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Ponsel"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Pengeras suara dok"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphone"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Layar nirkabel"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 3c256a9050f6..f72f0f640980 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Sjónvarp"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Sími"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokkuhátalarar"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Heyrnartól"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Kerfi"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-hljóð"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Þráðlaus skjábirting"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 147c10358221..e2c99e7d61d9 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefono"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altoparlanti dock"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Cuffie audio"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Visualizzazione wireless"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 67acb4f91f3f..1eb1e6625357 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"טלוויזיה"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"טלפון"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"רמקולים של מעגן"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"אוזניות"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"מערכת"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"אודיו Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"צג אלחוטי"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index de8c758a46f3..76caa1c7fc2f 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"テレビ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"モバイル端末"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ホルダーのスピーカー"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ヘッドホン"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"システム"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ワイヤレスディスプレイ"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 08bd6a4088e0..2149ded4fa16 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ტელევიზია"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ტელეფონი"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"სპიკერების მიმაგრება"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ყურსასმენები"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"სისტემა"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth აუდიო"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"უსადენო ეკრანი"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index cd08c7ae1ff6..8e421de5e5b2 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ТД"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Үндеткіштерді қондыру"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Құлақаспаптар"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Жүйе"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth aудио"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Сымсыз дисплей"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index b8f982099c4b..910f42cf57ff 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -1423,11 +1423,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ទូរទស្សន៍"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ទូរសព្ទ"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ភ្ជាប់អូប៉ាល័រ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"កាស"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ប្រព័ន្ធ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"សំឡេងប៊្លូធូស"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"បង្ហាញបណ្ដាញឥតខ្សែ"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index ea233f65f6ec..5db847f0909e 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ಟಿವಿ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ಫೋನ್"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ಡಾಕ್ ಸ್ಪೀಕರ್ಗಳು"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ಹೆಡ್ಫೋನ್ಗಳು"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ಸಿಸ್ಟಂ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ವಯರ್ಲೆಸ್ ಪ್ರದರ್ಶನ"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 411f12741887..ab31961399d3 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -358,11 +358,11 @@ <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"앱이 브로드캐스트가 끝난 후에 남은 브로드캐스트를 보낼 수 있도록 허용합니다. 앱을 지나치게 사용하면 태블릿에서 메모리를 너무 많이 사용하도록 하여 속도를 저하시키거나 불안정하게 만들 수 있습니다."</string> <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"앱이 브로드캐스트가 끝난 후에도 흥미로운 브로드캐스트를 보낼 수 있도록 허용합니다. 이 기능을 과도하게 사용하면 메모리 사용량이 많아져 TV 속도가 저하되거나 성능이 불안정해질 수 있습니다."</string> <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"앱이 브로드캐스트가 끝난 후에 남은 브로드캐스트를 보낼 수 있도록 허용합니다. 앱을 지나치게 사용하면 휴대전화에서 메모리를 너무 많이 사용하도록 하여 속도를 저하시키거나 불안정하게 만들 수 있습니다."</string> - <string name="permlab_readContacts" msgid="8348481131899886131">"주소록 읽기"</string> + <string name="permlab_readContacts" msgid="8348481131899886131">"연락처 읽기"</string> <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"특정인과 전화, 이메일 또는 기타 수단으로 연락한 빈도를 포함하여 사용자 태블릿에 저장된 연락처에 대한 데이터를 앱이 읽도록 허용합니다. 이 권한을 사용하면 앱이 연락처 데이터를 저장할 수 있으며, 악성 앱이 사용자 모르게 연락처 데이터를 공유할 수도 있습니다."</string> <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"앱이 특정 연락처와 통화를 하거나 이메일을 주고받거나 다른 방법으로 연락한 횟수를 포함하여 TV에 저장된 연락처 관련 데이터를 읽을 수 있도록 허용합니다. 이 경우 앱이 연락처 데이터를 저장할 수 있으며 악성 앱이 사용자 몰래 연락처 데이터에 공유할 수도 있습니다."</string> <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"특정인과 전화, 이메일 또는 기타 수단으로 연락한 빈도를 포함하여 사용자 휴대전화에 저장된 연락처에 대한 데이터를 앱이 읽도록 허용합니다. 이 권한을 사용하면 앱이 연락처 데이터를 저장할 수 있으며, 악성 앱이 사용자 모르게 연락처 데이터를 공유할 수도 있습니다."</string> - <string name="permlab_writeContacts" msgid="5107492086416793544">"주소록 수정"</string> + <string name="permlab_writeContacts" msgid="5107492086416793544">"연락처 수정"</string> <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"특정인과 전화, 이메일 또는 기타 수단으로 연락한 빈도를 포함하여 사용자 태블릿에 저장된 연락처에 대한 데이터를 앱이 수정할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 연락처 데이터를 삭제할 수 있습니다."</string> <string name="permdesc_writeContacts" product="tv" msgid="5438230957000018959">"앱이 특정 연락처와 통화를 하거나 이메일을 주고받거나 다른 수단으로 연락한 횟수를 포함하여 TV에 저장된 연락처 관련 데이터를 수정할 수 있도록 허용합니다. 이 경우 앱이 연락처 데이터를 삭제할 수 있습니다."</string> <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"특정인과 전화, 이메일 또는 기타 수단으로 연락한 빈도를 포함하여 사용자 휴대전화에 저장된 연락처에 대한 데이터를 앱이 수정할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 연락처 데이터를 삭제할 수 있습니다."</string> @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"휴대전화"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"도크 스피커"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"헤드폰"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"시스템"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"블루투스 오디오"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"무선 디스플레이"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index ce9bab3e8ca5..25958bff8c8a 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -1422,11 +1422,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Сыналгы"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Аудио док бекет"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Кулакчын"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Тутум"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Зымсыз дисплей"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 2ebf450c4f84..8c6b80735a5c 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ໂທລະພາບ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ໂທລະສັບ"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ບ່ອນຕັ້ງລຳໂພງ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ຫູຟັງ"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ລະບົບ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ສຽງ Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ການສະແດງຜົນໄຮ້ສາຍ"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index e5a72092b1d1..3f6cddf98616 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefonas"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doko garsiakalbiai"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ausinės"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"„Bluetooth“ garsas"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Belaidis rodymas"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 61c07566e30e..0afd3e773c86 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -1444,11 +1444,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Tālrunis"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doka skaļruņi"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Austiņas"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistēma"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezvadu attēlošana"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 6406ed1af1de..df755eab834e 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -1423,11 +1423,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Телевизор"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Приклучи звучници"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Слушалки"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудио на Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Безжичен приказ"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 2f9583ea01a7..488eba853431 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ടിവി"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ഫോണ്"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ഡോക്ക് സ്പീക്കറുകൾ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ഹെഡ്ഫോണുകൾ"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"സിസ്റ്റം"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ബ്ലൂടൂത്ത് ഓഡിയോ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"വയർലെസ് ഡിസ്പ്ലേ"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index eab1e7ed1aa6..e58193216c4c 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Tелевиз"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Утас"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Чанга яригчийг суулгах"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Чихэвч"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Утасгүй дэлгэц"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index f95df783790a..2cf3ec829845 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"टीव्ही"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फोन"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"स्पीकर डॉक करा"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफोन"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्टम"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ब्लूटूथ ऑडिओ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"वायरलेस डिस्प्ले"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index e526246b1813..612bc0f7387c 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Pembesar suara dok"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fon kepala"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Paparan wayarles"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index c8c95f0b09fe..7c2277865daf 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"တီဗွီ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ဖုန်း"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"အထိုင်ရှိသော စပီကာများ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"နားကြပ်"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"စနစ်"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ဘလူးတုသ် အသံ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ကြိုးမဲ့ပြသခြင်း"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index b8538942eb07..8b1f80435387 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Google TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokkhøyttalere"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hodetelefoner"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådløs skjerm"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 69eab151810e..a0f0065d7041 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -1427,11 +1427,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फोन"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"डक स्पिकरहरू"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफोनहरू"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"प्रणाली"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ब्लुटुथ अडियो"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ताररहित प्रदर्शन"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index ed7a1dd6bbb2..39810e4ac052 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Tv"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefoon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockluidsprekers"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hoofdtelefoon"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systeem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Draadloze weergave"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 11957f1524af..719eb97cc980 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ਫ਼ੋਨ ਕਰੋ"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ਡੌਕ ਸਪੀਕਰਸ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ਹੈੱਡਫ਼ੋਨ"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ਸਿਸਟਮ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ਆਡੀਓ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 071b570499f0..7b349796d5c3 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -257,7 +257,7 @@ <string name="notification_channel_foreground_service" msgid="3931987440602669158">"Aplikacje zużywające baterię"</string> <string name="foreground_service_app_in_background" msgid="1060198778219731292">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> zużywa baterię"</string> <string name="foreground_service_apps_in_background" msgid="7175032677643332242">"Liczba aplikacji zużywających baterię: <xliff:g id="NUMBER">%1$d</xliff:g>"</string> - <string name="foreground_service_tap_for_details" msgid="372046743534354644">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i transmisji danych"</string> + <string name="foreground_service_tap_for_details" msgid="372046743534354644">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i użycia danych"</string> <string name="foreground_service_multiple_separator" msgid="4021901567939866542">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string> <string name="safeMode" msgid="2788228061547930246">"Tryb awaryjny"</string> <string name="android_system_label" msgid="6577375335728551336">"System Android"</string> @@ -347,7 +347,7 @@ <string name="permlab_runInBackground" msgid="7365290743781858803">"działanie w tle"</string> <string name="permdesc_runInBackground" msgid="7370142232209999824">"Ta aplikacja może działać w tle. Bateria może się szybciej rozładowywać."</string> <string name="permlab_useDataInBackground" msgid="8694951340794341809">"transmisja danych w tle"</string> - <string name="permdesc_useDataInBackground" msgid="6049514223791806027">"Ta aplikacja może przesyłać i odbierać dane w tle. Transmisja danych może się zwiększyć."</string> + <string name="permdesc_useDataInBackground" msgid="6049514223791806027">"Ta aplikacja może przesyłać i odbierać dane w tle. Użycie danych może się zwiększyć."</string> <string name="permlab_persistentActivity" msgid="8841113627955563938">"sprawianie, że aplikacja jest cały czas uruchomiona"</string> <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Pozwala aplikacji na trwałe zapisywanie swoich fragmentów w pamięci. Może to zmniejszyć ilość pamięci dostępnej dla innych aplikacji i spowolnić działanie tabletu."</string> <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"Pozwala aplikacji zapewnić nieusuwalność swoich fragmentów z pamięci. Może to ograniczyć ilość pamięci dostępną dla innych aplikacji i spowalniać działanie telewizora."</string> @@ -1426,7 +1426,7 @@ <string name="storage_usb_drive_label" msgid="4501418548927759953">"Dysk USB (<xliff:g id="MANUFACTURER">%s</xliff:g>)"</string> <string name="storage_usb" msgid="3017954059538517278">"Nośnik USB"</string> <string name="extract_edit_menu_button" msgid="8940478730496610137">"Edytuj"</string> - <string name="data_usage_warning_title" msgid="3620440638180218181">"Alert transmisji danych"</string> + <string name="data_usage_warning_title" msgid="3620440638180218181">"Alert użycia danych"</string> <string name="data_usage_warning_body" msgid="6660692274311972007">"Kliknij, by wyświetlić użycie i ustawienia."</string> <string name="data_usage_3g_limit_title" msgid="4361523876818447683">"Osiągnięto limit danych 2G/3G"</string> <string name="data_usage_4g_limit_title" msgid="4609566827219442376">"Osiągnięto limit danych 4G"</string> @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Telewizor"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Głośniki stacji dokującej"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Słuchawki"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Dźwięk Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wyświetlacz bezprzewodowy"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 8e3c99126ed4..276add6425be 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Alto-falantes da dock"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fones de ouvido"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Display sem fio"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 1042165235fd..ac81366a6bd5 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telemóvel"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altif. estação ancoragem"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auscultadores"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Visualização sem fios"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 8e3c99126ed4..276add6425be 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefone"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Alto-falantes da dock"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fones de ouvido"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Display sem fio"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 1750066de566..6f310b3d0155 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1444,11 +1444,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Difuz. dispozit. andocare"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Căști"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Ecran wireless"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index b5cf23370048..1960663f0ab9 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Телевизор"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Динамики док-станции"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Наушники"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Воспроизведение звука через Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Беспроводной монитор"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 539064c0f7e2..63f2c50c0a78 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -1423,11 +1423,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"රූපවාහිනී"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"දුරකථනය"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"නාදක ඩොක් කරන්න"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ඉස් බණු"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"පද්ධතිය"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"බ්ලූටූත් ශ්රව්ය"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"නොරැහැන් සංදර්ශකය"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index be7664c78fbb..9f37618bfc8f 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televízor"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefón"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Reproduktory doku"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slúchadlá"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezdrôtové zobrazenie"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index aaa2432c2145..349e5b1901eb 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televizor"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvočniki stojala"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalke"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Zvok prek Bluetootha"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Brezžični prikaz"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 31c7c313c95f..f67c889e34e9 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Televizori"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altoparlantët e stacionit"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kufjet"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistemi"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audioja e \"bluetooth-it\""</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Ekran pa tel"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 5d25cf174509..579a60199e71 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -1444,11 +1444,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ТВ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Звучници базне станице"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Слушалице"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Бежични екран"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index d0c857251963..619d498349bb 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Mobil"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockningsstationens högtalare"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hörlurar"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ljud"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådlös skärm"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index a28e14a59dc3..236e467c0db8 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1419,11 +1419,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Runinga"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Simu"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Vipasa sauti vya kituo"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Vipokeasauti"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Mfumo"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Sauti ya Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Uonyeshaji usiotumia waya"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 62f90539a0eb..9c81d0ec49bb 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"டிவி"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ஃபோன்"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"மொபைல் வைக்கும் கருவியின் ஸ்பீக்கர்கள்"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ஹெட்ஃபோன்கள்"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"சிஸ்டம்"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"புளூடூத் ஆடியோ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"வயர்லெஸ் காட்சி"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 95c055635f73..5b05a254d1fb 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"టీవీ"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ఫోన్"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"డాక్ స్పీకర్లు"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"హెడ్ఫోన్లు"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"సిస్టమ్"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"బ్లూటూత్ ఆడియో"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"వైర్లెస్ డిస్ప్లే"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 8b2db467860d..05a8b92a6286 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"ทีวี"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"โทรศัพท์"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ลำโพงแท่นชาร์จ"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"หูฟัง"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"ระบบ"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"เสียงบลูทูธ"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"การแสดงผลแบบไร้สาย"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 2e047c24ac7a..227a28749c2e 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telepono"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Mga speaker ng dock"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Mga Headphone"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio sa Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 852471c13022..918d9d670da9 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Yuva hoparlörleri"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kulaklıklar"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ses"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Kablosuz ekran"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 7d98b78fcbd3..08fdf012cc5f 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1467,11 +1467,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Телевізор"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Динаміки док-станції"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Навушники"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудіо Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Бездротовий екран"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 5198bb2f83e5..073f7a6948e0 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"فون"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ڈاک اسپیکرز"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ہیڈ فونز"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"سسٹم"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوٹوتھ آڈیو"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"وائرلیس ڈسپلے"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index bc30741250d9..2ad9bd1f02b4 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Taglik karnaylar"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Quloq karnaychalari"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Tizim"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ovozni Bluetooth orqali chiqarish"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz monitor"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index ea2c3af123e5..e585f77b50da 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Điện thoại"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Loa đế"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Tai nghe"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Hệ thống"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Âm thanh Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Hiển thị không dây"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index f66faf690a6e..5f8d072c446e 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"电视"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"手机"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"基座扬声器"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"耳机"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"系统"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"蓝牙音频"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"无线显示"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 52df581f377f..d4b3b394055b 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"電視"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"手機"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"插座喇叭"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"耳機"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音頻"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"無線螢幕分享"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index e7fa2f1abba3..de12340f6be5 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"電視"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"手機"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"座架喇叭"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"耳機"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音訊"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"無線螢幕分享"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 0c986676cb4f..9178ed785ae1 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -1421,11 +1421,9 @@ <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"I-TV"</string> <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Ifoni"</string> <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Izipikha ze-Dock"</string> - <!-- no translation found for default_audio_route_name_hdmi (1486254205617081251) --> - <skip /> + <string name="default_audio_route_name_hdmi" msgid="1486254205617081251">"HDMI"</string> <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ama-headphone"</string> - <!-- no translation found for default_audio_route_name_usb (1234984851352637769) --> - <skip /> + <string name="default_audio_route_name_usb" msgid="1234984851352637769">"I-USB"</string> <string name="default_audio_route_category_name" msgid="3722811174003886946">"Isistimu"</string> <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Umsindo we-Bluetooth"</string> <string name="wireless_display_route_description" msgid="9070346425023979651">"Ukubonisa okungenazintambo"</string> diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp index f5bb821f4e23..69ead5890566 100644 --- a/libs/hwui/AnimatorManager.cpp +++ b/libs/hwui/AnimatorManager.cpp @@ -71,9 +71,11 @@ void AnimatorManager::setAnimationHandle(AnimationHandle* handle) { void AnimatorManager::pushStaging() { if (mNewAnimators.size()) { - LOG_ALWAYS_FATAL_IF(!mAnimationHandle, - "Trying to start new animators on %p (%s) without an animation handle!", - &mParent, mParent.getName()); + if (CC_UNLIKELY(!mAnimationHandle)) { + ALOGW("Trying to start new animators on %p (%s) without an animation handle!", + &mParent, mParent.getName()); + return; + } // Only add new animators that are not already in the mAnimators list for (auto& anim : mNewAnimators) { diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index bd884a3c9729..fbfa7250083b 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -608,11 +608,6 @@ <string name="wait_for_debugger_summary">Debugged application waits for debugger to attach before executing</string> - <!-- UI debug setting: title for Telephonymonitor switch [CHAR LIMIT=50] --> - <string name="telephony_monitor_switch">Telephony Monitor</string> - <!-- UI debug setting: summary for switch of Telephonymonitor [CHAR LIMIT=500] --> - <string name="telephony_monitor_switch_summary">TelephonyMonitor will collect logs when it detects a problem with telephony/modem functionality and prompt notification to user to file a bug</string> - <!-- Preference category for input debugging development settings. [CHAR LIMIT=25] --> <string name="debug_input_category">Input</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 6cab2ec064e6..f43a0488457d 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -336,7 +336,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string> - <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Effacer tout"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 987ce712e9c4..c2089a60436b 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -184,10 +184,10 @@ <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ਸੂਚਨਾ ਰੱਦ ਕੀਤੀ।"</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ਸੂਚਨਾ ਸ਼ੇਡ।"</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ।"</string> - <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ਲੌਕ ਸਕ੍ਰੀਨ।"</string> + <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">" ਲਾਕ ਸਕ੍ਰੀਨ।"</string> <string name="accessibility_desc_settings" msgid="3417884241751434521">"ਸੈਟਿੰਗਾਂ"</string> <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ਰੂਪ-ਰੇਖਾ।"</string> - <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"ਕਾਰਜ-ਸਥਾਨ ਲੌਕ ਸਕ੍ਰੀਨ"</string> + <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"ਕਾਰਜ-ਸਥਾਨ ਲਾਕ ਸਕ੍ਰੀਨ"</string> <string name="accessibility_desc_close" msgid="7479755364962766729">"ਬੰਦ ਕਰੋ"</string> <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string> <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi ਬੰਦ ਕੀਤਾ।"</string> @@ -258,11 +258,11 @@ <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"ਸੂਚਨਾ ਸੈਟਿੰਗਾਂ"</string> <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ਸੈਟਿੰਗਾਂ"</string> <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ਸਕ੍ਰੀਨ ਆਟੋਮੈਟਿਕਲੀ ਰੋਟੇਟ ਕਰੇਗੀ।"</string> - <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ਸਕ੍ਰੀਨ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਹੈ।"</string> - <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ਸਕ੍ਰੀਨ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ਸਕ੍ਰੀਨ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲਾਕ ਕੀਤੀ ਹੈ।"</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ਸਕ੍ਰੀਨ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲਾਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"ਸਕ੍ਰੀਨ ਹੁਣ ਆਟੋਮੈਟਿਕਲੀ ਰੋਟੇਟ ਕਰੇਗੀ।"</string> - <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> - <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ਸਕ੍ਰੀਨ ਹੁਣ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> + <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲਾਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> + <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ਸਕ੍ਰੀਨ ਹੁਣ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲਾਕ ਕੀਤੀ ਗਈ ਹੈ।"</string> <string name="dessert_case" msgid="1295161776223959221">"ਡੈਜ਼ਰਟ ਕੇਸ"</string> <string name="start_dreams" msgid="5640361424498338327">"ਸਕ੍ਰੀਨ ਸੇਵਰ"</string> <string name="ethernet_label" msgid="7967563676324087464">"ਈਥਰਨੈਟ"</string> @@ -278,7 +278,7 @@ <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ਆਟੋ-ਰੋਟੇਟ"</string> <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string> <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> ਮੋਡ"</string> - <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ਰੋਟੇਸ਼ਨ ਲੌਕ ਕੀਤੀ"</string> + <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ਰੋਟੇਸ਼ਨ ਲਾਕ ਕੀਤੀ"</string> <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ਪੋਰਟਰੇਟ"</string> <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ਲੈਂਡਸਕੇਪ"</string> <string name="quick_settings_ime_label" msgid="7073463064369468429">"ਇਨਪੁੱਟ ਵਿਧੀ"</string> @@ -721,7 +721,7 @@ <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ।"</string> <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ਸੈਟਿੰਗਾਂ ਦੇ ਕ੍ਰਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ।"</string> <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ਦਾ <xliff:g id="ID_1">%1$d</xliff:g> ਪੰਨਾ"</string> - <string name="tuner_lock_screen" msgid="5755818559638850294">"ਲੌਕ ਸਕ੍ਰੀਨ"</string> + <string name="tuner_lock_screen" msgid="5755818559638850294">" ਲਾਕ ਸਕ੍ਰੀਨ"</string> <string name="pip_phone_expand" msgid="5889780005575693909">"ਵਿਸਤਾਰ ਕਰੋ"</string> <string name="pip_phone_minimize" msgid="1079119422589131792">"ਛੋਟਾ ਕਰੋ"</string> <string name="pip_phone_close" msgid="8416647892889710330">"ਬੰਦ ਕਰੋ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 7ff9b73b2bf6..a725e53ec762 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -244,7 +244,7 @@ <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Transmisja danych 4G została wstrzymana"</string> <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilna transmisja danych jest wstrzymana"</string> <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Transmisja danych została wstrzymana"</string> - <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Osiągnięto ustawiony limit danych. Nie korzystasz już z komórkowej transmisji danych.\n\nJeśli włączysz ją ponownie, może zostać naliczona opłata za transmisję danych."</string> + <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Osiągnięto ustawiony limit danych. Nie korzystasz już z komórkowej transmisji danych.\n\nJeśli włączysz ją ponownie, może zostać naliczona opłata za użycie danych."</string> <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Wznów"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string> @@ -785,7 +785,7 @@ <string name="qs_dnd_keep" msgid="1825009164681928736">"Zachowaj"</string> <string name="qs_dnd_replace" msgid="8019520786644276623">"Zastąp"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacje działające w tle"</string> - <string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i transmisji danych"</string> + <string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i użycia danych"</string> <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Wyłączyć mobilną transmisję danych?"</string> <string name="touch_filtered_warning" msgid="8671693809204767551">"Aplikacja Ustawienia nie może zweryfikować Twojej odpowiedzi, ponieważ inna aplikacja zasłania prośbę o udzielenie uprawnień."</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index d767979b25c3..2152ae353e93 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -73,7 +73,7 @@ <string name="screenshot_saved_title" msgid="6461865960961414961">"已拍攝螢幕擷取畫面。"</string> <string name="screenshot_saved_text" msgid="2685605830386712477">"輕觸即可查看螢幕擷圖。"</string> <string name="screenshot_failed_title" msgid="705781116746922771">"無法拍攝螢幕擷取畫面。"</string> - <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"儲存螢幕擷圖時發生問題。"</string> + <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"儲存螢幕擷取畫面時發生問題。"</string> <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"由於儲存空間有限,因此無法儲存螢幕擷取畫面。"</string> <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"這個應用程式或貴機構不允許擷取螢幕畫面"</string> <string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string> diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index 2b31967cea4f..2fe66a14a41d 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -15,6 +15,8 @@ */ package com.android.systemui; +import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; +import static android.app.StatusBarManager.DISABLE_NONE; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import android.animation.ArgbEvaluator; @@ -52,6 +54,7 @@ import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.policy.IconLogger; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; +import com.android.systemui.util.Utils.DisableStateTracker; import java.text.NumberFormat; @@ -101,6 +104,9 @@ public class BatteryMeterView extends LinearLayout implements mSettingObserver = new SettingObserver(new Handler(context.getMainLooper())); + addOnAttachStateChangeListener( + new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS)); + mSlotBattery = context.getString( com.android.internal.R.string.status_bar_battery); mBatteryIconView = new ImageView(context); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 759d2cf2f8bc..181931e12441 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -16,14 +16,15 @@ package com.android.systemui.statusbar; +import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; +import static android.app.StatusBarManager.DISABLE_NONE; + import android.annotation.DrawableRes; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; -import android.graphics.drawable.Animatable; -import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.telephony.SubscriptionInfo; import android.util.ArraySet; @@ -50,14 +51,14 @@ import com.android.systemui.statusbar.policy.NetworkControllerImpl; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; +import com.android.systemui.util.Utils.DisableStateTracker; import java.util.ArrayList; import java.util.List; // Intimately tied to the design of res/layout/signal_cluster_view.xml public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback, - SecurityController.SecurityControllerCallback, Tunable, - DarkReceiver { + SecurityController.SecurityControllerCallback, Tunable, DarkReceiver { static final String TAG = "SignalClusterView"; static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -148,6 +149,8 @@ public class SignalClusterView extends LinearLayout implements NetworkController mIconScaleFactor = typedValue.getFloat(); mNetworkController = Dependency.get(NetworkController.class); mSecurityController = Dependency.get(SecurityController.class); + addOnAttachStateChangeListener( + new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS)); updateActivityEnabled(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 4739a2eed6de..67500bf4217d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2624,8 +2624,11 @@ public class StatusBar extends SystemUI implements DemoMode, flagdbg.append(0 != ((diff1 & StatusBarManager.DISABLE_CLOCK)) ? '!' : ' '); flagdbg.append(0 != ((state1 & StatusBarManager.DISABLE_SEARCH)) ? 'S' : 's'); flagdbg.append(0 != ((diff1 & StatusBarManager.DISABLE_SEARCH)) ? '!' : ' '); + flagdbg.append("> disable2<"); flagdbg.append(0 != ((state2 & StatusBarManager.DISABLE2_QUICK_SETTINGS)) ? 'Q' : 'q'); flagdbg.append(0 != ((diff2 & StatusBarManager.DISABLE2_QUICK_SETTINGS)) ? '!' : ' '); + flagdbg.append(0 != ((state2 & StatusBarManager.DISABLE2_SYSTEM_ICONS)) ? 'I' : 'i'); + flagdbg.append(0 != ((diff2 & StatusBarManager.DISABLE2_SYSTEM_ICONS)) ? '!' : ' '); flagdbg.append('>'); Log.d(TAG, flagdbg.toString()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index c2407652b2df..bcda60ebc62c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -14,10 +14,10 @@ package com.android.systemui.statusbar.phone; -import android.annotation.ColorInt; +import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; +import static android.app.StatusBarManager.DISABLE_NONE; + import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Color; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.ArraySet; @@ -29,11 +29,11 @@ import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import com.android.internal.statusbar.StatusBarIcon; -import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.policy.DarkIconDispatcher; +import com.android.systemui.util.Utils.DisableStateTracker; public interface StatusBarIconController { @@ -149,6 +149,14 @@ public interface StatusBarIconController { mContext = group.getContext(); mIconSize = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); + + DisableStateTracker tracker = + new DisableStateTracker(DISABLE_NONE, DISABLE2_SYSTEM_ICONS); + mGroup.addOnAttachStateChangeListener(tracker); + if (mGroup.isAttachedToWindow()) { + // In case we miss the first onAttachedToWindow event + tracker.onViewAttachedToWindow(mGroup); + } } protected void onIconAdded(int index, String slot, boolean blocked, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java index 68f8e065a429..1c3ee758a3ce 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java @@ -33,7 +33,6 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; -import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.IconLogger; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; @@ -50,21 +49,17 @@ import java.util.ArrayList; public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable, ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController { - private final DarkIconDispatcher mDarkIconDispatcher; - - private Context mContext; - private DemoStatusIcons mDemoStatusIcons; - private final ArrayList<IconManager> mIconGroups = new ArrayList<>(); - private final ArraySet<String> mIconBlacklist = new ArraySet<>(); private final IconLogger mIconLogger = Dependency.get(IconLogger.class); + private Context mContext; + private DemoStatusIcons mDemoStatusIcons; + public StatusBarIconControllerImpl(Context context) { super(context.getResources().getStringArray( com.android.internal.R.array.config_statusBarIcons)); Dependency.get(ConfigurationController.class).addCallback(this); - mDarkIconDispatcher = Dependency.get(DarkIconDispatcher.class); mContext = context; loadDimens(); diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java index f4aebae7bdaf..eca612776f21 100644 --- a/packages/SystemUI/src/com/android/systemui/util/Utils.java +++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java @@ -14,6 +14,11 @@ package com.android.systemui.util; +import android.view.View; + +import com.android.systemui.SysUiServiceProvider; +import com.android.systemui.statusbar.CommandQueue; + import java.util.List; import java.util.function.Consumer; @@ -28,4 +33,52 @@ public class Utils { c.accept(list.get(i)); } } + + /** + * Sets the visibility of an UI element according to the DISABLE_* flags in + * {@link android.app.StatusBarManager}. + */ + public static class DisableStateTracker implements CommandQueue.Callbacks, + View.OnAttachStateChangeListener { + private final int mMask1; + private final int mMask2; + private View mView; + private boolean mDisabled; + + public DisableStateTracker(int disableMask, int disable2Mask) { + mMask1 = disableMask; + mMask2 = disable2Mask; + } + + @Override + public void onViewAttachedToWindow(View v) { + mView = v; + SysUiServiceProvider.getComponent(v.getContext(), CommandQueue.class) + .addCallbacks(this); + } + + @Override + public void onViewDetachedFromWindow(View v) { + SysUiServiceProvider.getComponent(mView.getContext(), CommandQueue.class) + .removeCallbacks(this); + mView = null; + } + + /** + * Sets visibility of this {@link View} given the states passed from + * {@link com.android.systemui.statusbar.CommandQueue.Callbacks#disable(int, int)}. + */ + @Override + public void disable(int state1, int state2, boolean animate) { + final boolean disabled = ((state1 & mMask1) != 0) || ((state2 & mMask2) != 0); + if (disabled == mDisabled) return; + mDisabled = disabled; + mView.setVisibility(disabled ? View.GONE : View.VISIBLE); + } + + /** @return {@code true} if and only if this {@link View} is currently disabled */ + public boolean isDisabled() { + return mDisabled; + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java index 4f87b02ed35f..e023e87067e0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java @@ -14,6 +14,7 @@ package com.android.systemui.qs.car; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.mock; import android.content.Context; import android.support.test.filters.SmallTest; @@ -27,6 +28,7 @@ import android.widget.FrameLayout; import com.android.keyguard.CarrierText; import com.android.systemui.Dependency; import com.android.systemui.SysuiBaseFragmentTest; +import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.policy.Clock; import org.junit.Before; @@ -54,7 +56,7 @@ public class CarQsFragmentTest extends SysuiBaseFragmentTest { .replace(CarrierText.class, View.class) .replace(Clock.class, View.class) .build()); - + mSysuiContext.putComponent(CommandQueue.class, mock(CommandQueue.class)); mDependency.injectTestDependency(Dependency.BG_LOOPER, TestableLooper.get(this).getLooper()); } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 361d91a07e59..63d31e230e92 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2136,7 +2136,14 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai try { // Protect against recursion. mStackSupervisor.inResumeTopActivity = true; - result = resumeTopActivityInnerLocked(prev, options); + // The contained logic must be synchronized, since we are both changing the visibility + // and updating the {@link Configuration}. {@link ActivityRecord#setVisibility} will + // ultimately cause the client code to schedule a layout. Since layouts retrieve the + // current {@link Configuration}, we must ensure that the below code updates it before + // the layout can occur. + synchronized (mWindowManager.getWindowManagerLock()) { + result = resumeTopActivityInnerLocked(prev, options); + } } finally { mStackSupervisor.inResumeTopActivity = false; } @@ -4503,7 +4510,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai Slog.i(TAG, "moveTaskToBack: " + tr); // If the task is locked, then show the lock task toast - if (!mService.mLockTaskController.checkLockedTask(tr)) { + if (mService.mLockTaskController.checkLockedTask(tr)) { return false; } diff --git a/services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java b/services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java index 475d786aedd1..f2445fa36006 100644 --- a/services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java +++ b/services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java @@ -34,6 +34,7 @@ import android.util.Base64; import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.RingBuffer; import com.android.internal.util.TokenBucket; import com.android.server.SystemService; import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent; @@ -44,7 +45,11 @@ import java.util.ArrayList; import java.util.List; import java.util.function.ToIntFunction; -/** {@hide} */ +/** + * Event buffering service for core networking and connectivity metrics. + * + * {@hide} + */ final public class IpConnectivityMetrics extends SystemService { private static final String TAG = IpConnectivityMetrics.class.getSimpleName(); private static final boolean DBG = false; @@ -58,7 +63,10 @@ final public class IpConnectivityMetrics extends SystemService { private static final String SERVICE_NAME = IpConnectivityLog.SERVICE_NAME; - // Default size of the event buffer. Once the buffer is full, incoming events are dropped. + // Default size of the event rolling log for bug report dumps. + private static final int DEFAULT_LOG_SIZE = 500; + // Default size of the event buffer for metrics reporting. + // Once the buffer is full, incoming events are dropped. private static final int DEFAULT_BUFFER_SIZE = 2000; // Maximum size of the event buffer. private static final int MAXIMUM_BUFFER_SIZE = DEFAULT_BUFFER_SIZE * 10; @@ -67,24 +75,38 @@ final public class IpConnectivityMetrics extends SystemService { private static final int ERROR_RATE_LIMITED = -1; - // Lock ensuring that concurrent manipulations of the event buffer are correct. + // Lock ensuring that concurrent manipulations of the event buffers are correct. // There are three concurrent operations to synchronize: // - appending events to the buffer. // - iterating throught the buffer. // - flushing the buffer content and replacing it by a new buffer. private final Object mLock = new Object(); + // Implementation instance of IIpConnectivityMetrics.aidl. @VisibleForTesting public final Impl impl = new Impl(); + // Subservice listening to Netd events via INetdEventListener.aidl. @VisibleForTesting NetdEventListenerService mNetdListener; + // Rolling log of the most recent events. This log is used for dumping + // connectivity events in bug reports. + @GuardedBy("mLock") + private final RingBuffer<ConnectivityMetricsEvent> mEventLog = + new RingBuffer(ConnectivityMetricsEvent.class, DEFAULT_LOG_SIZE); + // Buffer of connectivity events used for metrics reporting. This buffer + // does not rotate automatically and instead saturates when it becomes full. + // It is flushed at metrics reporting. @GuardedBy("mLock") private ArrayList<ConnectivityMetricsEvent> mBuffer; + // Total number of events dropped from mBuffer since last metrics reporting. @GuardedBy("mLock") private int mDropped; + // Capacity of mBuffer @GuardedBy("mLock") private int mCapacity; + // A list of rate limiting counters keyed by connectivity event types for + // metrics reporting mBuffer. @GuardedBy("mLock") private final ArrayMap<Class<?>, TokenBucket> mBuckets = makeRateLimitingBuckets(); @@ -132,6 +154,7 @@ final public class IpConnectivityMetrics extends SystemService { private int append(ConnectivityMetricsEvent event) { if (DBG) Log.d(TAG, "logEvent: " + event); synchronized (mLock) { + mEventLog.append(event); final int left = mCapacity - mBuffer.size(); if (event == null) { return left; @@ -216,6 +239,23 @@ final public class IpConnectivityMetrics extends SystemService { } } + /** + * Prints for bug reports the content of the rolling event log and the + * content of Netd event listener. + */ + private void cmdDumpsys(FileDescriptor fd, PrintWriter pw, String[] args) { + final ConnectivityMetricsEvent[] events; + synchronized (mLock) { + events = mEventLog.toArray(); + } + for (ConnectivityMetricsEvent ev : events) { + pw.println(ev.toString()); + } + if (mNetdListener != null) { + mNetdListener.list(pw); + } + } + private void cmdStats(FileDescriptor fd, PrintWriter pw, String[] args) { synchronized (mLock) { pw.println("Buffered events: " + mBuffer.size()); @@ -258,7 +298,8 @@ final public class IpConnectivityMetrics extends SystemService { cmdFlush(fd, pw, args); return; case CMD_DUMPSYS: - // Fallthrough to CMD_LIST when dumpsys.cpp dumps services states (bug reports) + cmdDumpsys(fd, pw, args); + return; case CMD_LIST: cmdList(fd, pw, args); return; diff --git a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java index 25dba3570e20..6206dfcd6622 100644 --- a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java +++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java @@ -38,6 +38,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.BitUtils; import com.android.internal.util.IndentingPrintWriter; +import com.android.internal.util.RingBuffer; import com.android.internal.util.TokenBucket; import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent; import java.io.PrintWriter; @@ -82,9 +83,8 @@ public class NetdEventListenerService extends INetdEventListener.Stub { private final ArrayMap<String, WakeupStats> mWakeupStats = new ArrayMap<>(); // Ring buffer array for storing packet wake up events sent by Netd. @GuardedBy("this") - private final WakeupEvent[] mWakeupEvents = new WakeupEvent[WAKEUP_EVENT_BUFFER_LENGTH]; - @GuardedBy("this") - private long mWakeupEventCursor = 0; + private final RingBuffer<WakeupEvent> mWakeupEvents = + new RingBuffer(WakeupEvent.class, WAKEUP_EVENT_BUFFER_LENGTH); private final ConnectivityManager mCm; @@ -175,13 +175,11 @@ public class NetdEventListenerService extends INetdEventListener.Stub { @GuardedBy("this") private void addWakeupEvent(String iface, long timestampMs, int uid) { - int index = wakeupEventIndex(mWakeupEventCursor); - mWakeupEventCursor++; WakeupEvent event = new WakeupEvent(); event.iface = iface; event.timestampMs = timestampMs; event.uid = uid; - mWakeupEvents[index] = event; + mWakeupEvents.append(event); WakeupStats stats = mWakeupStats.get(iface); if (stats == null) { stats = new WakeupStats(iface); @@ -190,23 +188,6 @@ public class NetdEventListenerService extends INetdEventListener.Stub { stats.countEvent(event); } - @GuardedBy("this") - private WakeupEvent[] getWakeupEvents() { - int length = (int) Math.min(mWakeupEventCursor, (long) mWakeupEvents.length); - WakeupEvent[] out = new WakeupEvent[length]; - // Reverse iteration from youngest event to oldest event. - long inCursor = mWakeupEventCursor - 1; - int outIdx = out.length - 1; - while (outIdx >= 0) { - out[outIdx--] = mWakeupEvents[wakeupEventIndex(inCursor--)]; - } - return out; - } - - private static int wakeupEventIndex(long cursor) { - return (int) Math.abs(cursor % WAKEUP_EVENT_BUFFER_LENGTH); - } - public synchronized void flushStatistics(List<IpConnectivityEvent> events) { flushProtos(events, mConnectEvents, IpConnectivityEventBuilder::toProto); flushProtos(events, mDnsEvents, IpConnectivityEventBuilder::toProto); @@ -230,7 +211,7 @@ public class NetdEventListenerService extends INetdEventListener.Stub { for (int i = 0; i < mWakeupStats.size(); i++) { pw.println(mWakeupStats.valueAt(i)); } - for (WakeupEvent wakeup : getWakeupEvents()) { + for (WakeupEvent wakeup : mWakeupEvents.toArray()) { pw.println(wakeup); } } diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java index 542b929d85f5..c9c93293e2ee 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java @@ -27,6 +27,7 @@ import android.app.AlarmManager.OnAlarmListener; import android.app.admin.DevicePolicyManager; import android.app.trust.IStrongAuthTracker; import android.content.Context; +import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; import android.os.Binder; import android.os.DeadObjectException; @@ -74,7 +75,10 @@ public class LockSettingsStrongAuth { } public void systemReady() { - mFingerprintManager = mContext.getSystemService(FingerprintManager.class); + final PackageManager pm = mContext.getPackageManager(); + if (pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { + mFingerprintManager = mContext.getSystemService(FingerprintManager.class); + } } private void handleAddStrongAuthTracker(IStrongAuthTracker tracker) { diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index ffdafc562673..9fcc67df500a 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -567,7 +567,7 @@ public class ZenModeHelper { proto.write(ZenModeProto.ENABLED_ACTIVE_CONDITIONS, rule.toString()); } } - proto.write(ZenModeProto.POLICY, mConfig.toNotificationPolicy().toString()); + mConfig.toNotificationPolicy().toProto(proto, ZenModeProto.POLICY); proto.write(ZenModeProto.SUPPRESSED_EFFECTS, mSuppressedEffects); } } diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 4fafe34b3063..e04706abfd8c 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -23,6 +23,7 @@ import android.content.pm.PackageParser; import android.os.FileUtils; import android.os.PowerManager; import android.os.SystemClock; +import android.os.SystemProperties; import android.os.UserHandle; import android.os.WorkSource; import android.util.Log; @@ -103,7 +104,17 @@ public class PackageDexOptimizer { } static boolean canOptimizePackage(PackageParser.Package pkg) { - return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) != 0; + // We do not dexopt a package with no code. + if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) == 0) { + return false; + } + + // We do not dexopt a priv-app package when pm.dexopt.priv-apps is false. + if (pkg.isPrivilegedApp()) { + return SystemProperties.getBoolean("pm.dexopt.priv-apps", true); + } + + return true; } /** diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d54ed611b4ef..ed8dd8b408a0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3315,24 +3315,6 @@ public class PackageManagerService extends IPackageManager.Stub removeCodePathLI(dstCodePath); return null; } - - // If we have a profile for a compressed APK, copy it to the reference location. - // Since the package is the stub one, remove the stub suffix to get the normal package and - // APK name. - File profileFile = new File(getPrebuildProfilePath(pkg).replace(STUB_SUFFIX, "")); - if (profileFile.exists()) { - try { - // We could also do this lazily before calling dexopt in - // PackageDexOptimizer to prevent this happening on first boot. The issue - // is that we don't have a good way to say "do this only once". - if (!mInstaller.copySystemProfile(profileFile.getAbsolutePath(), - pkg.applicationInfo.uid, pkg.packageName)) { - Log.e(TAG, "decompressPackage failed to copy system profile!"); - } - } catch (Exception e) { - Log.e(TAG, "Failed to copy profile " + profileFile.getAbsolutePath() + " ", e); - } - } return dstCodePath; } @@ -9757,7 +9739,7 @@ public class PackageManagerService extends IPackageManager.Stub * and {@code numberOfPackagesFailed}. */ private int[] performDexOptUpgrade(List<PackageParser.Package> pkgs, boolean showDialog, - final String compilerFilter, boolean bootComplete) { + String compilerFilter, boolean bootComplete) { int numberOfPackagesVisited = 0; int numberOfPackagesOptimized = 0; @@ -9768,8 +9750,6 @@ public class PackageManagerService extends IPackageManager.Stub for (PackageParser.Package pkg : pkgs) { numberOfPackagesVisited++; - boolean useProfileForDexopt = false; - if ((isFirstBoot() || isUpgrade()) && isSystemApp(pkg)) { // Copy over initial preopt profiles since we won't get any JIT samples for methods // that are already compiled. @@ -9783,28 +9763,11 @@ public class PackageManagerService extends IPackageManager.Stub if (!mInstaller.copySystemProfile(profileFile.getAbsolutePath(), pkg.applicationInfo.uid, pkg.packageName)) { Log.e(TAG, "Installer failed to copy system profile!"); - } else { - useProfileForDexopt = true; } } catch (Exception e) { Log.e(TAG, "Failed to copy profile " + profileFile.getAbsolutePath() + " ", e); } - } else { - PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(pkg.packageName); - // Handle compressed APKs in this path. Only do this for stubs with profiles to - // minimize the number off apps being speed-profile compiled during first boot. - // The other paths will not change the filter. - if (disabledPs != null && disabledPs.pkg.isStub) { - // The package is the stub one, remove the stub suffix to get the normal - // package and APK names. - String systemProfilePath = - getPrebuildProfilePath(disabledPs.pkg).replace(STUB_SUFFIX, ""); - File systemProfile = new File(systemProfilePath); - // Use the profile for compilation if there exists one for the same package - // in the system partition. - useProfileForDexopt = systemProfile.exists(); - } } } @@ -9833,14 +9796,6 @@ public class PackageManagerService extends IPackageManager.Stub } } - String pkgCompilerFilter = compilerFilter; - if (useProfileForDexopt) { - // Use background dexopt mode to try and use the profile. Note that this does not - // guarantee usage of the profile. - pkgCompilerFilter = - PackageManagerServiceCompilerMapping.getCompilerFilterForReason( - PackageManagerService.REASON_BACKGROUND_DEXOPT); - } // If the OTA updates a system app which was previously preopted to a non-preopted state // the app might end up being verified at runtime. That's because by default the apps // are verify-profile but for preopted apps there's no profile. @@ -9849,9 +9804,9 @@ public class PackageManagerService extends IPackageManager.Stub // filter (by default 'quicken'). // Note that at this stage unused apps are already filtered. if (isSystemApp(pkg) && - DexFile.isProfileGuidedCompilerFilter(pkgCompilerFilter) && + DexFile.isProfileGuidedCompilerFilter(compilerFilter) && !Environment.getReferenceProfile(pkg.packageName).exists()) { - pkgCompilerFilter = getNonProfileGuidedCompilerFilter(pkgCompilerFilter); + compilerFilter = getNonProfileGuidedCompilerFilter(compilerFilter); } // checkProfiles is false to avoid merging profiles during boot which @@ -9862,7 +9817,7 @@ public class PackageManagerService extends IPackageManager.Stub int dexoptFlags = bootComplete ? DexoptOptions.DEXOPT_BOOT_COMPLETE : 0; int primaryDexOptStaus = performDexOptTraced(new DexoptOptions( pkg.packageName, - pkgCompilerFilter, + compilerFilter, dexoptFlags)); switch (primaryDexOptStaus) { @@ -10736,6 +10691,12 @@ public class PackageManagerService extends IPackageManager.Stub assertPackageIsValid(pkg, policyFlags, scanFlags); + if (Build.IS_DEBUGGABLE && + pkg.isPrivilegedApp() && + !SystemProperties.getBoolean("pm.dexopt.priv-apps", true)) { + PackageManagerServiceUtils.logPackageHasUncompressedCode(pkg); + } + // Initialize package source and resource directories final File scanFile = new File(pkg.codePath); final File destCodeFile = new File(pkg.applicationInfo.getCodePath()); diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index 25fef0a0ce31..48ddf5e9658f 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -22,6 +22,8 @@ import com.android.server.pm.dex.PackageDexUsage; import static com.android.server.pm.PackageManagerService.DEBUG_DEXOPT; import static com.android.server.pm.PackageManagerService.TAG; +import com.android.internal.util.ArrayUtils; + import android.annotation.NonNull; import android.app.AppGlobals; import android.content.Intent; @@ -33,6 +35,8 @@ import android.os.UserHandle; import android.system.ErrnoException; import android.util.ArraySet; import android.util.Log; +import android.util.Slog; +import android.util.jar.StrictJarFile; import dalvik.system.VMRuntime; import libcore.io.Libcore; @@ -41,9 +45,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.function.Predicate; +import java.util.zip.ZipEntry; /** * Class containing helper methods for the PackageManagerService. @@ -253,4 +259,59 @@ public class PackageManagerServiceUtils { } return false; } + + /** + * Checks that the archive located at {@code fileName} has uncompressed dex file and so + * files that can be direclty mapped. + */ + public static void logApkHasUncompressedCode(String fileName) { + StrictJarFile jarFile = null; + try { + jarFile = new StrictJarFile(fileName, + false /*verify*/, false /*signatureSchemeRollbackProtectionsEnforced*/); + Iterator<ZipEntry> it = jarFile.iterator(); + while (it.hasNext()) { + ZipEntry entry = it.next(); + if (entry.getName().endsWith(".dex")) { + if (entry.getMethod() != ZipEntry.STORED) { + Slog.wtf(TAG, "APK " + fileName + " has compressed dex code " + + entry.getName()); + } else if ((entry.getDataOffset() & 0x3) != 0) { + Slog.wtf(TAG, "APK " + fileName + " has unaligned dex code " + + entry.getName()); + } + } else if (entry.getName().endsWith(".so")) { + if (entry.getMethod() != ZipEntry.STORED) { + Slog.wtf(TAG, "APK " + fileName + " has compressed native code " + + entry.getName()); + } else if ((entry.getDataOffset() & (0x1000 - 1)) != 0) { + Slog.wtf(TAG, "APK " + fileName + " has unaligned native code " + + entry.getName()); + } + } + } + } catch (IOException ignore) { + Slog.wtf(TAG, "Error when parsing APK " + fileName); + } finally { + try { + if (jarFile != null) { + jarFile.close(); + } + } catch (IOException ignore) {} + } + return; + } + + /** + * Checks that the APKs in the given package have uncompressed dex file and so + * files that can be direclty mapped. + */ + public static void logPackageHasUncompressedCode(PackageParser.Package pkg) { + logApkHasUncompressedCode(pkg.baseCodePath); + if (!ArrayUtils.isEmpty(pkg.splitCodePaths)) { + for (int i = 0; i < pkg.splitCodePaths.length; i++) { + logApkHasUncompressedCode(pkg.splitCodePaths[i]); + } + } + } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 6a5f6fafb275..10adc5a65388 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2193,8 +2193,18 @@ public class WindowManagerService extends IWindowManager.Stub // and needs process it before handling the corresponding window frame. the variable // {@code mergedConfiguration} is an out parameter that will be passed back to the // client over IPC and checked there. - win.getMergedConfiguration(mergedConfiguration); - win.setReportedConfiguration(mergedConfiguration); + // Note: in the cases where the window is tied to an activity, we should not send a + // configuration update when the window has requested to be hidden. Doing so can lead + // to the client erroneously accepting a configuration that would have otherwise caused + // an activity restart. We instead hand back the last reported + // {@link MergedConfiguration}. + if (win.mAppToken == null || !win.mAppToken.isClientHidden()) { + win.getMergedConfiguration(mergedConfiguration); + } else { + win.getLastReportedMergedConfiguration(mergedConfiguration); + } + + win.setLastReportedMergedConfiguration(mergedConfiguration); outFrame.set(win.mCompatFrame); outOverscanInsets.set(win.mOverscanInsets); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index eba7c3aa35ca..49a7944a97bd 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -257,7 +257,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP * We'll send configuration to client only if it is different from the last applied one and * client won't perform unnecessary updates. */ - private final Configuration mLastReportedConfiguration = new Configuration(); + private final MergedConfiguration mLastReportedConfiguration = new MergedConfiguration(); /** * Actual position of the surface shown on-screen (may be modified by animation). These are @@ -1244,7 +1244,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // this is not necessarily what the client has processed yet. Find a // better indicator consistent with the client. return (mOrientationChanging || (isVisible() - && getConfiguration().orientation != mLastReportedConfiguration.orientation)) + && getConfiguration().orientation != getLastReportedConfiguration().orientation)) && !mSeamlesslyRotated && !mOrientationChangeTimedOut; } @@ -1758,7 +1758,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP /** Returns true if last applied config was not yet requested by client. */ boolean isConfigChanged() { - return !mLastReportedConfiguration.equals(getConfiguration()); + return !getLastReportedConfiguration().equals(getConfiguration()); } void onWindowReplacementTimeout() { @@ -2312,8 +2312,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP outConfiguration.setConfiguration(globalConfig, overrideConfig); } - void setReportedConfiguration(MergedConfiguration config) { - mLastReportedConfiguration.setTo(config.getMergedConfiguration()); + void setLastReportedMergedConfiguration(MergedConfiguration config) { + mLastReportedConfiguration.setTo(config); + } + + void getLastReportedMergedConfiguration(MergedConfiguration config) { + config.setTo(mLastReportedConfiguration); + } + + private Configuration getLastReportedConfiguration() { + return mLastReportedConfiguration.getMergedConfiguration(); } void adjustStartingWindowFlags() { @@ -2853,7 +2861,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP new MergedConfiguration(mService.mRoot.getConfiguration(), getMergedOverrideConfiguration()); - setReportedConfiguration(mergedConfiguration); + setLastReportedMergedConfiguration(mergedConfiguration); if (DEBUG_ORIENTATION && mWinAnimator.mDrawState == DRAW_PENDING) Slog.i(TAG, "Resizing " + this + " WITH DRAW PENDING"); @@ -3254,7 +3262,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } pw.print(prefix); pw.print("mFullConfiguration="); pw.println(getConfiguration()); pw.print(prefix); pw.print("mLastReportedConfiguration="); - pw.println(mLastReportedConfiguration); + pw.println(getLastReportedConfiguration()); } pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface); pw.print(" mShownPosition="); mShownPosition.printShortString(pw); @@ -3314,7 +3322,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP pw.print(prefix); pw.print("mOrientationChanging="); pw.print(mOrientationChanging); pw.print(" configOrientationChanging="); - pw.print(mLastReportedConfiguration.orientation + pw.print(getLastReportedConfiguration().orientation != getConfiguration().orientation); pw.print(" mAppFreezing="); pw.print(mAppFreezing); pw.print(" mTurnOnScreen="); pw.print(mTurnOnScreen); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java index 0315c8d6f9ba..1aafac66bae4 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java @@ -32,6 +32,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; import static android.content.res.Configuration.EMPTY; import static com.android.server.wm.WindowContainer.POSITION_TOP; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * A collection of static functions that can be referenced by other test packages to provide access @@ -51,7 +52,10 @@ public class WindowTestUtils { * Retrieves an instance of a mock {@link WindowManagerService}. */ public static WindowManagerService getMockWindowManagerService() { - return mock(WindowManagerService.class); + final WindowManagerService service = mock(WindowManagerService.class); + final WindowHashMap windowMap = new WindowHashMap(); + when(service.getWindowManagerLock()).thenReturn(windowMap); + return service; } /** diff --git a/tests/net/java/com/android/internal/util/RingBufferTest.java b/tests/net/java/com/android/internal/util/RingBufferTest.java new file mode 100644 index 000000000000..7a2344317223 --- /dev/null +++ b/tests/net/java/com/android/internal/util/RingBufferTest.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +import java.util.Arrays; +import java.util.Objects; + + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class RingBufferTest { + + @Test + public void testEmptyRingBuffer() { + RingBuffer<String> buffer = new RingBuffer<>(String.class, 100); + + assertArraysEqual(new String[0], buffer.toArray()); + } + + @Test + public void testIncorrectConstructorArguments() { + try { + RingBuffer<String> buffer = new RingBuffer<>(String.class, -10); + fail("Should not be able to create a negative capacity RingBuffer"); + } catch (IllegalArgumentException expected) { + } + + try { + RingBuffer<String> buffer = new RingBuffer<>(String.class, 0); + fail("Should not be able to create a 0 capacity RingBuffer"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testRingBufferWithNoWrapping() { + RingBuffer<String> buffer = new RingBuffer<>(String.class, 100); + + buffer.append("a"); + buffer.append("b"); + buffer.append("c"); + buffer.append("d"); + buffer.append("e"); + + String[] expected = {"a", "b", "c", "d", "e"}; + assertArraysEqual(expected, buffer.toArray()); + } + + @Test + public void testRingBufferWithCapacity1() { + RingBuffer<String> buffer = new RingBuffer<>(String.class, 1); + + buffer.append("a"); + assertArraysEqual(new String[]{"a"}, buffer.toArray()); + + buffer.append("b"); + assertArraysEqual(new String[]{"b"}, buffer.toArray()); + + buffer.append("c"); + assertArraysEqual(new String[]{"c"}, buffer.toArray()); + + buffer.append("d"); + assertArraysEqual(new String[]{"d"}, buffer.toArray()); + + buffer.append("e"); + assertArraysEqual(new String[]{"e"}, buffer.toArray()); + } + + @Test + public void testRingBufferWithWrapping() { + int capacity = 100; + RingBuffer<String> buffer = new RingBuffer<>(String.class, capacity); + + buffer.append("a"); + buffer.append("b"); + buffer.append("c"); + buffer.append("d"); + buffer.append("e"); + + String[] expected1 = {"a", "b", "c", "d", "e"}; + assertArraysEqual(expected1, buffer.toArray()); + + String[] expected2 = new String[capacity]; + int firstIndex = 0; + int lastIndex = capacity - 1; + + expected2[firstIndex] = "e"; + for (int i = 1; i < capacity; i++) { + buffer.append("x"); + expected2[i] = "x"; + } + assertArraysEqual(expected2, buffer.toArray()); + + buffer.append("x"); + expected2[firstIndex] = "x"; + assertArraysEqual(expected2, buffer.toArray()); + + for (int i = 0; i < 10; i++) { + for (String s : expected2) { + buffer.append(s); + } + } + assertArraysEqual(expected2, buffer.toArray()); + + buffer.append("a"); + expected2[lastIndex] = "a"; + assertArraysEqual(expected2, buffer.toArray()); + } + + static <T> void assertArraysEqual(T[] expected, T[] got) { + if (expected.length != got.length) { + fail(Arrays.toString(expected) + " and " + Arrays.toString(got) + + " did not have the same length"); + } + + for (int i = 0; i < expected.length; i++) { + if (!Objects.equals(expected[i], got[i])) { + fail(Arrays.toString(expected) + " and " + Arrays.toString(got) + + " were not equal"); + } + } + } +} |