diff options
37 files changed, 894 insertions, 132 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index 9f385fe..58c3a9c 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -983,6 +983,7 @@ public final class Pm { case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK: return "ask"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS: return "always"; case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER: return "never"; + case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK : return "always ask"; } return "Unknown link state: " + state; } diff --git a/core/java/android/content/RestrictionEntry.java b/core/java/android/content/RestrictionEntry.java index ab049ec..0473475 100644 --- a/core/java/android/content/RestrictionEntry.java +++ b/core/java/android/content/RestrictionEntry.java @@ -456,7 +456,7 @@ public class RestrictionEntry implements Parcelable { if (o == this) return true; if (!(o instanceof RestrictionEntry)) return false; final RestrictionEntry other = (RestrictionEntry) o; - if (mType != other.mType || mKey.equals(other.mKey)) { + if (mType != other.mType || !mKey.equals(other.mKey)) { return false; } if (mCurrentValues == null && other.mCurrentValues == null diff --git a/core/java/android/content/RestrictionsManager.java b/core/java/android/content/RestrictionsManager.java index 1fac06e..a7744e7 100644 --- a/core/java/android/content/RestrictionsManager.java +++ b/core/java/android/content/RestrictionsManager.java @@ -677,7 +677,8 @@ public class RestrictionsManager { * <table> * <tr><th>RestrictionEntry</th><th>Bundle</th></tr> * <tr><td>{@link RestrictionEntry#TYPE_BOOLEAN}</td><td>{@link Bundle#putBoolean}</td></tr> - * <tr><td>{@link RestrictionEntry#TYPE_CHOICE}, {@link RestrictionEntry#TYPE_CHOICE}</td> + * <tr><td>{@link RestrictionEntry#TYPE_CHOICE}, + * {@link RestrictionEntry#TYPE_MULTI_SELECT}</td> * <td>{@link Bundle#putStringArray}</td></tr> * <tr><td>{@link RestrictionEntry#TYPE_INTEGER}</td><td>{@link Bundle#putInt}</td></tr> * <tr><td>{@link RestrictionEntry#TYPE_STRING}</td><td>{@link Bundle#putString}</td></tr> diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 5583920..a2ef078 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1003,13 +1003,13 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri /** * <p>The orientation of the camera relative to the sensor * coordinate system.</p> - * <p>The four coefficients that describe the quarternion + * <p>The four coefficients that describe the quaternion * rotation from the Android sensor coordinate system to a * camera-aligned coordinate system where the X-axis is * aligned with the long side of the image sensor, the Y-axis * is aligned with the short side of the image sensor, and * the Z-axis is aligned with the optical axis of the sensor.</p> - * <p>To convert from the quarternion coefficients <code>(x,y,z,w)</code> + * <p>To convert from the quaternion coefficients <code>(x,y,z,w)</code> * to the axis of rotation <code>(a_x, a_y, a_z)</code> and rotation * amount <code>theta</code>, the following formulas can be used:</p> * <pre><code> theta = 2 * acos(w) @@ -1018,7 +1018,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * a_z = z / sin(theta/2) * </code></pre> * <p>To create a 3x3 rotation matrix that applies the rotation - * defined by this quarternion, the following matrix can be + * defined by this quaternion, the following matrix can be * used:</p> * <pre><code>R = [ 1 - 2y^2 - 2z^2, 2xy - 2zw, 2xz + 2yw, * 2xy + 2zw, 1 - 2x^2 - 2z^2, 2yz - 2xw, @@ -1030,7 +1030,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * <p>where <code>p</code> is in the device sensor coordinate system, and * <code>p'</code> is in the camera-oriented coordinate system.</p> * <p><b>Units</b>: - * Quarternion coefficients</p> + * Quaternion coefficients</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> */ @PublicKey @@ -1052,13 +1052,13 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * user's perspective) will report <code>(0.03, 0, 0)</code>.</p> * <p>To transform a pixel coordinates between two cameras * facing the same direction, first the source camera - * android.lens.radialDistortion must be corrected for. Then - * the source camera android.lens.intrinsicCalibration needs + * {@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion} must be corrected for. Then + * the source camera {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} needs * to be applied, followed by the {@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation} * of the source camera, the translation of the source camera * relative to the destination camera, the * {@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation} of the destination camera, and - * finally the inverse of android.lens.intrinsicCalibration + * finally the inverse of {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} * of the destination camera. This obtains a * radial-distortion-free coordinate in the destination * camera pixel coordinates.</p> @@ -1069,7 +1069,9 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * <p><b>Units</b>: Meters</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> * + * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION * @see CameraCharacteristics#LENS_POSE_ROTATION + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION */ @PublicKey public static final Key<float[]> LENS_POSE_TRANSLATION = @@ -1115,7 +1117,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * where <code>(0,0)</code> is the top-left of the * preCorrectionActiveArraySize rectangle. Once the pose and * intrinsic calibration transforms have been applied to a - * world point, then the android.lens.radialDistortion + * world point, then the {@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion} * transform needs to be applied, and the result adjusted to * be in the {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} coordinate * system (where <code>(0, 0)</code> is the top-left of the @@ -1130,6 +1132,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * * @see CameraCharacteristics#LENS_POSE_ROTATION * @see CameraCharacteristics#LENS_POSE_TRANSLATION + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @@ -1156,7 +1159,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * </code></pre> * <p>The pixel coordinates are defined in a normalized * coordinate system related to the - * android.lens.intrinsicCalibration calibration fields. + * {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} calibration fields. * Both <code>[x_i, y_i]</code> and <code>[x_c, y_c]</code> have <code>(0,0)</code> at the * lens optical center <code>[c_x, c_y]</code>. The maximum magnitudes * of both x and y coordinates are normalized to be 1 at the @@ -1169,6 +1172,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * <p><b>Units</b>: * Unitless coefficients.</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> + * + * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION */ @PublicKey public static final Key<float[]> LENS_RADIAL_DISTORTION = @@ -2262,7 +2267,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p> * <p>The currently supported fields that correct for geometric distortion are:</p> * <ol> - * <li>android.lens.radialDistortion.</li> + * <li>{@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion}.</li> * </ol> * <p>If all of the geometric distortion fields are no-ops, this rectangle will be the same * as the post-distortion-corrected rectangle given in @@ -2275,6 +2280,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * <p><b>Units</b>: Pixel coordinates on the image sensor</p> * <p>This key is available on all devices.</p> * + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java index 4a71aa0..20b0be1 100644 --- a/core/java/android/hardware/camera2/CameraDevice.java +++ b/core/java/android/hardware/camera2/CameraDevice.java @@ -480,8 +480,11 @@ public abstract class CameraDevice implements AutoCloseable { * the configurations in the tables below are also guaranteed for creating a reprocessable * capture session if the camera device supports YUV reprocessing or PRIVATE reprocessing. * However, not all output targets used to create a reprocessable session may be used in a - * {@link CaptureRequest} simultaneously. The guaranteed output targets that can be included - * in a {@link CaptureRequest} simultaneously are listed in the tables under + * {@link CaptureRequest} simultaneously. For devices that support only 1 output target in a + * reprocess {@link CaptureRequest}, submitting a reprocess {@link CaptureRequest} with multiple + * output targets will result in a {@link CaptureFailure}. For devices that support multiple + * output targets in a reprocess {@link CaptureRequest}, the guaranteed output targets that can + * be included in a {@link CaptureRequest} simultaneously are listed in the tables under * {@link #createCaptureSession createCaptureSession}. For example, with a FULL-capability * ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == } * {@link CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL}) device that supports PRIVATE @@ -532,8 +535,6 @@ public abstract class CameraDevice implements AutoCloseable { * <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code RECORD}</td> <td></td><td id="rb"></td> <td>High-resolution ZSL in-app video processing with regular preview.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>Maximum-resolution ZSL in-app processing with regular preview.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>Maximum-resolution two-input ZSL in-app processing.</td> </tr> - * <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code RECORD}</td> <td>{@code JPEG}</td><td id="rb">{@code RECORD}</td> <td>High-resolution ZSL in-app video processing and video snapshot with regular preview.</td> </tr> - * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Maximum-resolution two-input ZSL in-app processing with regular preview.</td> </tr> * <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>ZSL still capture and in-app processing.</td> </tr> * </table><br> * </p> @@ -711,7 +712,9 @@ public abstract class CameraDevice implements AutoCloseable { * provide input images to camera device via {@link android.media.ImageWriter#queueInputImage}. * The application must use the capture result of one of those output images to create a * reprocess capture request so that the camera device can use the information to achieve - * optimal reprocess image quality. + * optimal reprocess image quality. For camera devices that support only 1 output + * {@link Surface}, submitting a reprocess {@link CaptureRequest} with multiple + * output targets will result in a {@link CaptureFailure}. * * @param inputResult The capture result of the output image or one of the output images used * to generate the reprocess input image for this capture request. diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index c580083..35a1d96 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -647,8 +647,8 @@ public abstract class CameraMetadata<TKey> { * {@link android.hardware.camera2.CaptureResult }:<ul> * <li>{@link CameraCharacteristics#LENS_POSE_TRANSLATION android.lens.poseTranslation}</li> * <li>{@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation}</li> - * <li>android.lens.intrinsicCalibration</li> - * <li>android.lens.radialDistortion</li> + * <li>{@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration}</li> + * <li>{@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion}</li> * </ul> * </li> * <li>The {@link CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE android.depth.depthIsExclusive} entry is listed by this device.</li> @@ -667,8 +667,10 @@ public abstract class CameraMetadata<TKey> { * * @see CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE * @see CameraCharacteristics#LENS_FACING + * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION * @see CameraCharacteristics#LENS_POSE_ROTATION * @see CameraCharacteristics#LENS_POSE_TRANSLATION + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES */ public static final int REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT = 8; diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index d5511c1..46eddb3 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -2602,13 +2602,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { /** * <p>The orientation of the camera relative to the sensor * coordinate system.</p> - * <p>The four coefficients that describe the quarternion + * <p>The four coefficients that describe the quaternion * rotation from the Android sensor coordinate system to a * camera-aligned coordinate system where the X-axis is * aligned with the long side of the image sensor, the Y-axis * is aligned with the short side of the image sensor, and * the Z-axis is aligned with the optical axis of the sensor.</p> - * <p>To convert from the quarternion coefficients <code>(x,y,z,w)</code> + * <p>To convert from the quaternion coefficients <code>(x,y,z,w)</code> * to the axis of rotation <code>(a_x, a_y, a_z)</code> and rotation * amount <code>theta</code>, the following formulas can be used:</p> * <pre><code> theta = 2 * acos(w) @@ -2617,7 +2617,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * a_z = z / sin(theta/2) * </code></pre> * <p>To create a 3x3 rotation matrix that applies the rotation - * defined by this quarternion, the following matrix can be + * defined by this quaternion, the following matrix can be * used:</p> * <pre><code>R = [ 1 - 2y^2 - 2z^2, 2xy - 2zw, 2xz + 2yw, * 2xy + 2zw, 1 - 2x^2 - 2z^2, 2yz - 2xw, @@ -2629,7 +2629,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * <p>where <code>p</code> is in the device sensor coordinate system, and * <code>p'</code> is in the camera-oriented coordinate system.</p> * <p><b>Units</b>: - * Quarternion coefficients</p> + * Quaternion coefficients</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> */ @PublicKey @@ -2651,13 +2651,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * user's perspective) will report <code>(0.03, 0, 0)</code>.</p> * <p>To transform a pixel coordinates between two cameras * facing the same direction, first the source camera - * android.lens.radialDistortion must be corrected for. Then - * the source camera android.lens.intrinsicCalibration needs + * {@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion} must be corrected for. Then + * the source camera {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} needs * to be applied, followed by the {@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation} * of the source camera, the translation of the source camera * relative to the destination camera, the * {@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation} of the destination camera, and - * finally the inverse of android.lens.intrinsicCalibration + * finally the inverse of {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} * of the destination camera. This obtains a * radial-distortion-free coordinate in the destination * camera pixel coordinates.</p> @@ -2668,7 +2668,9 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * <p><b>Units</b>: Meters</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> * + * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION * @see CameraCharacteristics#LENS_POSE_ROTATION + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION */ @PublicKey public static final Key<float[]> LENS_POSE_TRANSLATION = @@ -2714,7 +2716,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * where <code>(0,0)</code> is the top-left of the * preCorrectionActiveArraySize rectangle. Once the pose and * intrinsic calibration transforms have been applied to a - * world point, then the android.lens.radialDistortion + * world point, then the {@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion} * transform needs to be applied, and the result adjusted to * be in the {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} coordinate * system (where <code>(0, 0)</code> is the top-left of the @@ -2729,6 +2731,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * * @see CameraCharacteristics#LENS_POSE_ROTATION * @see CameraCharacteristics#LENS_POSE_TRANSLATION + * @see CameraCharacteristics#LENS_RADIAL_DISTORTION * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @@ -2755,7 +2758,7 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * </code></pre> * <p>The pixel coordinates are defined in a normalized * coordinate system related to the - * android.lens.intrinsicCalibration calibration fields. + * {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration} calibration fields. * Both <code>[x_i, y_i]</code> and <code>[x_c, y_c]</code> have <code>(0,0)</code> at the * lens optical center <code>[c_x, c_y]</code>. The maximum magnitudes * of both x and y coordinates are normalized to be 1 at the @@ -2768,6 +2771,8 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { * <p><b>Units</b>: * Unitless coefficients.</p> * <p><b>Optional</b> - This value may be {@code null} on some devices.</p> + * + * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION */ @PublicKey public static final Key<float[]> LENS_RADIAL_DISTORTION = diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java index e786707..fddfbde 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java +++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java @@ -338,6 +338,8 @@ public class LegacyCameraDevice implements AutoCloseable { } else { sizedSurfaces.add(new Pair<>(output, s)); } + // Lock down the size before configuration + setSurfaceDimens(output, s.getWidth(), s.getHeight()); } catch (BufferQueueAbandonedException e) { Log.e(TAG, "Surface bufferqueue is abandoned, cannot configure as output: ", e); return BAD_VALUE; diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java index e71e49f..b8d6960 100644 --- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java +++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java @@ -1290,7 +1290,7 @@ public final class StreamConfigurationMap { for (StreamConfiguration config : configurations) { int fmt = config.getFormat(); if (fmt == format && config.isOutput() == output) { - if (output) { + if (output && mListHighResolution) { // Filter slow high-res output formats; include for // highRes, remove for !highRes long duration = 0; diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index ee37047..6e29989 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -395,7 +395,7 @@ public class FingerprintManager { * Request authentication of a crypto object. This call warms up the fingerprint hardware * and starts scanning for a fingerprint. It terminates when * {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)} or - * {@link AuthenticationCallback#onAuthenticationSucceeded(AuthenticationResult) is called, at + * {@link AuthenticationCallback#onAuthenticationSucceeded(AuthenticationResult)} is called, at * which point the object is no longer valid. The operation can be canceled by using the * provided cancel object. * diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 6962711..0cc1b25 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -612,7 +612,7 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { View listItem = view; try { View v; - while (!(v = (View) listItem.getParent()).equals(this)) { + while ((v = (View) listItem.getParent()) != null && !v.equals(this)) { listItem = v; } } catch (ClassCastException e) { @@ -620,11 +620,13 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { return INVALID_POSITION; } - // Search the children for the list item - final int childCount = getChildCount(); - for (int i = 0; i < childCount; i++) { - if (getChildAt(i).equals(listItem)) { - return mFirstPosition + i; + if (listItem != null) { + // Search the children for the list item + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + if (getChildAt(i).equals(listItem)) { + return mFirstPosition + i; + } } } diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java index 916f19d..447292c 100644 --- a/core/java/com/android/internal/util/StateMachine.java +++ b/core/java/com/android/internal/util/StateMachine.java @@ -29,6 +29,7 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; +import java.util.Iterator; import java.util.HashMap; import java.util.Vector; @@ -1864,6 +1865,20 @@ public class StateMachine { } /** + * Removes a message from the deferred messages queue. + */ + protected final void removeDeferredMessages(int what) { + SmHandler smh = mSmHandler; + if (smh == null) return; + + Iterator<Message> iterator = smh.mDeferredMessages.iterator(); + while (iterator.hasNext()) { + Message msg = iterator.next(); + if (msg.what == what) iterator.remove(); + } + } + + /** * Validate that the message was sent by * {@link StateMachine#quit} or {@link StateMachine#quitNow}. * */ diff --git a/core/jni/android_media_AudioErrors.h b/core/jni/android_media_AudioErrors.h index 4907830..c17a020 100644 --- a/core/jni/android_media_AudioErrors.h +++ b/core/jni/android_media_AudioErrors.h @@ -32,6 +32,7 @@ enum { AUDIO_JAVA_PERMISSION_DENIED = -4, AUDIO_JAVA_NO_INIT = -5, AUDIO_JAVA_DEAD_OBJECT = -6, + AUDIO_JAVA_WOULD_BLOCK = -7, }; static inline jint nativeToJavaStatus(status_t status) { @@ -46,6 +47,8 @@ static inline jint nativeToJavaStatus(status_t status) { return AUDIO_JAVA_PERMISSION_DENIED; case NO_INIT: return AUDIO_JAVA_NO_INIT; + case WOULD_BLOCK: + return AUDIO_JAVA_WOULD_BLOCK; case DEAD_OBJECT: return AUDIO_JAVA_DEAD_OBJECT; default: diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 629d14b..99e55bf 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -786,6 +786,46 @@ android:protectionLevel="normal" android:permissionFlags="hidden"/> + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.WRITE_SMS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.MANAGE_ACCOUNTS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.USE_CREDENTIALS" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + + <!-- @hide We need to keep this around for backwards compatibility --> + <permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" + android:protectionLevel="normal" + android:permissionFlags="hidden"/> + <!-- ====================================================================== --> <!-- INSTALL PERMISSIONS --> <!-- ====================================================================== --> diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd index 63eee96..6f9545d 100644 --- a/docs/html/guide/topics/resources/providing-resources.jd +++ b/docs/html/guide/topics/resources/providing-resources.jd @@ -954,7 +954,7 @@ same way. For example, a color:</p> <?xml version="1.0" encoding="utf-8"?> <resources> <color name="yellow">#f00</color> - <color name="highlight">@color/red</color> + <color name="highlight">@color/yellow</color> </resources> </pre> diff --git a/docs/html/images/training/auto-desktop-head-unit-context-menu-enabled.png b/docs/html/images/training/auto-desktop-head-unit-context-menu-enabled.png Binary files differnew file mode 100644 index 0000000..99e60e9 --- /dev/null +++ b/docs/html/images/training/auto-desktop-head-unit-context-menu-enabled.png diff --git a/docs/html/images/training/auto-desktop-head-unit-launch.png b/docs/html/images/training/auto-desktop-head-unit-launch.png Binary files differnew file mode 100644 index 0000000..012857a --- /dev/null +++ b/docs/html/images/training/auto-desktop-head-unit-launch.png diff --git a/docs/html/images/training/auto-desktop-head-unit-server-running.png b/docs/html/images/training/auto-desktop-head-unit-server-running.png Binary files differnew file mode 100644 index 0000000..5aa3b83 --- /dev/null +++ b/docs/html/images/training/auto-desktop-head-unit-server-running.png diff --git a/docs/html/images/training/auto-desktop-head-unit-wkst-launch.png b/docs/html/images/training/auto-desktop-head-unit-wkst-launch.png Binary files differnew file mode 100644 index 0000000..4d48ac4 --- /dev/null +++ b/docs/html/images/training/auto-desktop-head-unit-wkst-launch.png diff --git a/docs/html/preview/features/runtime-permissions.jd b/docs/html/preview/features/runtime-permissions.jd index 8ab7619..62e49b9 100644 --- a/docs/html/preview/features/runtime-permissions.jd +++ b/docs/html/preview/features/runtime-permissions.jd @@ -916,8 +916,11 @@ $ adb pm revoke <package_name> <permission_name> </dt> <dd> - Returns <code>true</code> if the app has the specified permission, whether - or not the device is using the M Preview. + Returns {@link android.content.pm.PackageManager#PERMISSION_GRANTED + PERMISSION_GRANTED} if the app has the specified permission, whether + or not the device is using the M Preview. If the app does not have the + specified permission, returns {@link + android.content.pm.PackageManager#PERMISSION_DENIED PERMISSION_DENIED}. </dd> <dt> diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd index dbc0f35..39822e5 100644 --- a/docs/html/sdk/index.jd +++ b/docs/html/sdk/index.jd @@ -5,28 +5,28 @@ page.image=images/cards/android-studio_2x.png header.hide=1 page.metaDescription=Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and more. -studio.version=1.3.1.0 +studio.version=1.3.2.0 -studio.linux_bundle_download=android-studio-ide-141.2135290-linux.zip -studio.linux_bundle_bytes=351992670 -studio.linux_bundle_checksum=51e5f5de2b82883d87f85ee38cf7b7b8b2e7debf +studio.linux_bundle_download=android-studio-ide-141.2178183-linux.zip +studio.linux_bundle_bytes=352010593 +studio.linux_bundle_checksum=cf780413f8c8223eb348bd27c19a9c04b75eaeb2 -studio.mac_bundle_download=android-studio-ide-141.2135290-mac.dmg -studio.mac_bundle_bytes=368321249 -studio.mac_bundle_checksum=9fc12b5657ff52c761b7e7c115feade2a9728386 +studio.mac_bundle_download=android-studio-ide-141.2178183-mac.dmg +studio.mac_bundle_bytes=368335367 +studio.mac_bundle_checksum=75b67eb15a34a152a40e7189484ab0ebc375b877 -studio.win_bundle_download=android-studio-ide-141.2135290-windows.zip -studio.win_bundle_bytes=344406793 -studio.win_bundle_checksum=3b4c4924cb9495e56db61ca0e8c8d2bf588c4b97 +studio.win_bundle_download=android-studio-ide-141.2178183-windows.zip +studio.win_bundle_bytes=344424713 +studio.win_bundle_checksum=3134f226b5f3c3f74d4fc2d9cff03a4458f01d69 -studio.win_bundle_exe_download=android-studio-bundle-141.2135290-windows.exe -studio.win_bundle_exe_bytes=1008506096 -studio.win_bundle_exe_checksum=8cff590f2e08e339f8c2491b287a840ae87c7383 +studio.win_bundle_exe_download=android-studio-bundle-141.2178183-windows.exe +studio.win_bundle_exe_bytes=1136982712 +studio.win_bundle_exe_checksum=c7d39c529dd434489da9d086ff689d34dc791526 -studio.win_notools_exe_download=android-studio-ide-141.2135290-windows.exe -studio.win_notools_exe_bytes=321791312 -studio.win_notools_exe_checksum=d70fb49d03db9dded19c891a92452601e39272f4 +studio.win_notools_exe_download=android-studio-ide-141.2178183-windows.exe +studio.win_notools_exe_bytes=321810248 +studio.win_notools_exe_checksum=b5d1aaa000729c03a3cf980add79d1b93121c56d @@ -289,7 +289,7 @@ width: 400px;text-align: center;">The official Android IDE</p> </ul> <a class="online landing-button green download-bundle-button" -href="#Other" >Download Android Studio</a> +href="#Other" >Download Android Studio<br/><span class='small'></span></a> <!-- this appears when viewing the offline docs --> <p class="offline"> diff --git a/docs/html/tools/help/desktop-head-unit.jd b/docs/html/tools/help/desktop-head-unit.jd new file mode 100644 index 0000000..981979c --- /dev/null +++ b/docs/html/tools/help/desktop-head-unit.jd @@ -0,0 +1,439 @@ +page.title=Desktop Head Unit +page.tags="auto", "car", "testing","dhu" +@jd:body + + +<div id="qv-wrapper"> +<div id="qv"> + + <h2>In this document</h2> + <ol> + <li><a href="#launching-dhu">Launching the DHU</a></li> + <li><a href="#dhu-commands">Issuing DHU Commands</a></li> + </ol> + + <h2>See also</h2> + <ol> + <li><a href="{@docRoot}training/auto/start/index.html#test-it-dhu">Run and Test Auto Apps</a></li> + </ol> + +</div> +</div> + + +<p>The Desktop Head Unit (DHU) enables your development machine to emulate an Android Auto +head unit, so you can easily run and test Android Auto apps. The DHU runs on +Windows, Mac, and Linux hosts and replaces previous Android Auto simulators, +such as the Android Media Browser and Messaging +simulators.</p> + +<p class="note"><strong>Note:</strong> For other information about testing Auto apps, see the +training lesson +<a href="{@docRoot}training/auto/start/index.html#test-it-dhu">Run and Test Auto Apps</a>. </p> + + +<h2 id="launching-dhu">Launching the DHU</h2> + +<p> + To launch the DHU, run the <code>desktop-head-unit.exe</code> (on Windows) + or <code>desktop-head-unit</code> (on Mac or Linux) command, as described in + <a href="{@docRoot}training/auto/start/index.html#connecting-dhu">Connecting + the DHU to your mobile device</a>. +</p> + +<p> + By default, the DHU emulates the most common form of Android Auto-compatible + head unit, which uses a touch screen user interface. You can simulate user + touches by clicking the DHU with a mouse. To emulate head units which use + a rotary controller for input, you can use the <code>-i controller</code> flag, + as in this example: +</p> + +<pre class="no-pretty-print">$ ./desktop-head-unit -i controller</pre> + +<p> + When the DHU is in rotary-controller mode you can simulate controller + operations by using keyboard shortcuts, as described in <a href= + "#cmd-bindings">DHU commands and key bindings</a>. If the DHU is in rotary + controller mode, it ignores mouse clicks; you must operate Android Auto with + the simulated rotary controller operations. +</p> + +<h2 id="dhu-commands">Issuing DHU Commands</h2> + +<p> + DHU commands allow you to test your app with Android Auto features, such as + playing voice input or switching between night and day display mode. You can issue commands to + the DHU by running commands from the terminal window where you launched DHU. + You can also issue commands by selecting the DHU window and + using keyboard shortcuts. The DHU commands + and key bindings for all controls are listed in <a href="#cmd-bindings">DHU + commands and key bindings</a>. +</p> + + +<h3 id="day-night">Switching between day and night mode</h3> + +<p> + Android Auto supports different color schemes for day and night. You should test your app in both + day and night mode. You can switch between night and day mode in either of the + following ways: +</p> + +<ul> + <li>Run the command <code>daynight</code> in the terminal where you launched the DHU. + </li> + + <li>Select the DHU window and press the <strong>N</strong> key. + </li> +</ul> + +<h3>Microphone testing</h3> + +<p>The DHU supports using a microphone for voice input. You can also instruct the DHU to treat +a pre-recorded voice track as input, as if the DHU had heard the track through the microphone.</p> + +<p>To use a pre-recorded sound file as input, enter this command: </p> +<pre class="no-pretty-print"> +$ mic play <sound_file_path>/<sound_file>.wav +</pre> + +<p>For your convenience, we have provided the following sound files for common +voice commands. These sound files are installed in the +<code><sdk>/extras/google/auto/voice/</code> directory.</p> + +<dl> + <dt> + <code>exitnav.wav</code> + </dt> + + <dd> + "Exit navigation." + </dd> + + <dt> + <code>navgoogle.wav</code> + </dt> + + <dd> + "Navigate to 1600 Amphitheatre Parkway, Mountain View." + </dd> + + <dt> + <code>navsoh.wav</code> + </dt> + + <dd> + "Navigate to Sydney Opera House." + </dd> + + <dt> + <code>nextturn.wav</code> + </dt> + + <dd> + "When is my next turn?" + </dd> + + <dt> + <code>showalternateroute.wav</code> + </dt> + + <dd> + "Show alternate routes."" + </dd> + + <dt> + <code>howlong.wav</code> + </dt> + + <dd> + "How long until I get there?" + </dd> + + <dt> + <code>navhome.wav</code> + </dt> + + <dd> + "Navigate to home." + </dd> + + <dt> + <code>navwork.wav</code> + </dt> + + <dd> + "Navigate to work."" + </dd> + + <dt> + <code>pause.wav</code> + </dt> + + <dd> + "Pause music." + </dd> + + <dt> + <code>showtraffic.wav</code> + </dt> + + <dd> + "Show traffic." + </dd> +</dl> +<h3 id="cmd-bindings">DHU commands and key bindings</h3> + +<p>The DHU supports the following commands.</p> + +<p class="table-caption" id="table-commands"><strong>Table 1.</strong> Commands and key bindings</p> +<table> +<tr> + <th>Category</th> + <th>Command</th> + <th>Subcommand</th> + <th>Argument(s)</th> + <th>Keyboard Shortcut(s)</th> + <th>Description</th> +</tr> + +<!--system--> + +<tr> +<td rowspan="4">System</td> +<td>help</td> +<td></td> +<td>[command]</td> +<td></td> +<td>Shows the full command set. Specifying a command name (for example, <code>help day</code>) + causes the system to show help for that command.</td> +</tr> + +<tr> + +<td>quit</td> +<td></td> +<td></td> +<td>Alt+q</td> +<td>Quits the head unit.</td> +</tr> + +<tr> + +<td>sleep</td> +<td></td> +<td>[seconds]</td> +<td></td> +<td>Sleeps for one second. Specifying an argument (for example, <code>sleep 30</code>) causes the +system to sleep the specified number of seconds. This command +is useful if you are writing scripts for the DHU. (You can run a script by using I/O redirection +from the command line: <code>./desktop-head-unit < script.txt</code> loads commands from the +file <code>script.txt</code>.)</td> +</tr> + +<tr> + +<td>screenshot</td> +<td></td> +<td>filename.png</td> +<td></td> +<td>Saves a screenshot to <code>filename.png</code>.</td> +</tr> + + +<!--microphone--> + +<tr> +<td rowspan="3">Microphone</td> +<td rowspan="3">mic</td> +<td>begin</td> +<td></td> +<td>m </td> +<td>Activates the microphone (equivalent to clicking the steering wheel's microphone button) and +waits for input from the computer microphone.</td> +</tr> + +<tr> + + +<td>play</td> +<td>filename.wav</td> +<td></td> +<td>Causes the DHU to treat <code>filename.wav</code> as voice input, as if it had heard that sound + through the microphone. You do not hear the sound file being played, but you do hear + the response from Android Auto.</td> +</tr> + +<tr> + + +<td>repeat</td> +<td></td> +<td></td> +<td>Repeats the last <code>mic play</code> command, as if you had called <code>mic play</code> + again with the same sound file parameter.</td> +</tr> + +<!--Input--> + +<tr> +<td rowspan="7">Input</td> +<td rowspan="6">dpad</td> +<td>up <br> down <br> left <br> right</td> +<td></td> +<td>Arrow keys</td> +<td>Simulates moving the rotary controller.</td> +</tr> + +<tr> + + +<td>soft left <br> soft right</td> +<td></td> +<td>Shift+Arrow keys</td> +<td>Simulates pressing the side buttons available on some rotary controllers.</td> +</tr> + +<tr> + + +<td>click</td> +<td></td> +<td>Return</td> +<td>Simulates pressing the rotary controller.</td> +</tr> + +<tr> + + +<td>back</td> +<td></td> +<td>Backspace</td> +<td>Simulates pressing the <strong>back</strong> button available below some rotary + controllers.</td> +</tr> + +<tr> + + +<td>rotate left <br> rotate right</td> +<td></td> +<td>1 <br> 2</td> +<td>Simulates rotating the rotary controller left (counter-clockwise) or right (clockwise).</td> +</tr> + +<tr> + + +<td>flick left <br> flick right</td> +<td></td> +<td>Shift+1 <br> Shift+2</td> +<td>Simulates a fast spin of the rotary controller to the left (counter-clockwise) or right + (clockwise).</td> +</tr> + +<tr> + +<td>tap</td> +<td></td> +<td>x y</td> +<td></td> +<td>Simulates a touch event at the specified coordinates. For example, <code>tap 50 100</code></td> +</tr> + + +<!--Day/Night--> + +<tr> +<td rowspan="3">Day/Night</td> +<td>day</td> +<td></td> +<td></td> +<td>Shift+n</td> +<td>Activates day mode (high brightness, full color).</td> +</tr> + +<tr> + +<td>night</td> +<td></td> +<td> </td> +<td>Ctrl+n </td> +<td>Activates night mode (low brightness, high contrast).</td> +</tr> + +<tr> + +<td>daynight</td> +<td></td> +<td></td> +<td>n </td> +<td>Toggles current day/night mode.</td> +</tr> + +</table> + + + + +<h2 id="auto-simulators">Media Browser and Messaging Simulators</h2> + +<p class="caution"><strong>Important:</strong> Use of the Android Media Browser and Messaging +Simulators for testing Android Auto apps is deprecated. Instead, we recommend using the +Desktop Head Unit, which enables your development machine to act as if it were an Android Auto head +unit.</p> + +<p>To get the simulators, open the +<a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> and download +them from <strong>Extras > Android Auto API Simulators</strong>.</p> + +<p>Before you begin testing, compile your app in your development environment. +Install your app and the Android simulator for the features you want to test +(that is, audio or messaging) on a physical or virtual device running Android +5.0 (API level 21) or higher. To check the version of Android on the device, go +to <strong>Settings > About phone</strong> (or <strong>About tablet</strong>) +<strong>> Android Version</strong>.</p> + +<h3 id="testing-audio-apps">Testing audio apps</h3> +<p>To run and test audio apps:</p> + +<ol> +<li>Install the Android Media Browser simulator +({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on +the test device. You can do this using +the <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> +<li>Enable <a href="{@docRoot}tools/device.html#developer-device-options"> +developer options</a> on the test device.</li> +<li>Install your app on the test device.</li> +<li>Launch the Android Media Browser simulator to see how your audio app +appears in Auto. If your app does not appear, stop the simulator from +<strong>Settings > Apps</strong> and restart it.</li> +</ol> + + +<h3 id="testing-messaging-apps">Testing messaging apps</h3> +<p>To run and test messaging apps:</p> + +<ol> +<li>Install the Android Messaging simulator + ({@code <sdk>/extras/google/simulators/messaging-simulator.apk}) +on the test device. You can do this using the +<a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> +<li>Enable the simulator to read notifications posted on the system: +<ol type="a"> + <li>Enable <a href="{@docRoot}tools/device.html#developer-device-options"> +developer options</a> on the test device.</li> + <li>Click <strong>Settings > Sounds & Notifications > Notification + Access</strong> and check the box labeled + <strong>Messaging Simulator</strong>.</li> +</ol> +<li>Install your app on the test device.</li> +<li>Launch the Android Messaging Simulator to see how your messaging app appears +in Auto. If your app does not appear, stop the simulator from +<strong>Settings > Apps</strong> and restart it.</li> +</ol> + + + + diff --git a/docs/html/tools/revisions/studio.jd b/docs/html/tools/revisions/studio.jd index c922b28..298b173 100644 --- a/docs/html/tools/revisions/studio.jd +++ b/docs/html/tools/revisions/studio.jd @@ -43,6 +43,29 @@ Android Studio, as denoted by revision number. </p> <div class="toggle-content opened"> <p><a href="#" onclick="return toggleContent(this)"> <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" + alt=""/>Android Studio v1.3.2</a> <em>(August 2015)</em> + </p> + <div class="toggle-content-toggleme"> + <p>Fixes and enhancements:</p> + <ul> + <li>Added support for Android 6.0 (API level 23), including new icons and AVD Manager + support for creating devices with new screen densities.</li> + <li>Fixed an exception that was occuring during update checks. + <a href="http://b.android.com/183068">Issue: 183068</a></li> + <li>Fixed problem where unresolved view coordinates could cause the layout editor to crash. + <a href="http://b.android.com/178690">Issue: 178690</a></li> + <li>Fixed issue with invalid resource type warnings. + <a href="http://b.android.com/182433">Issue: 182433</a></li> + <li>Fixed lint check that was incorrectly flagging resources as private. + <a href="http://b.android.com/183120">Issue: 183120</a></li> + </ul> + </div> +</div> + + +<div class="toggle-content closed"> + <p><a href="#" onclick="return toggleContent(this)"> + <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""/>Android Studio v1.3.1</a> <em>(August 2015)</em> </p> <div class="toggle-content-toggleme"> @@ -60,8 +83,6 @@ Android Studio, as denoted by revision number. </p> </div> - - <div class="toggle-content closed"> <p><a href="#" onclick="return toggleContent(this)"> <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" @@ -100,7 +121,7 @@ Android Studio, as denoted by revision number. </p> <li>Added <a href="{@docRoot}tools/data-binding/guide.html">data binding</a> support to create declarative layouts that bind your application logic to layout elements. </li> <li>Added support for a separate - <a href="{@docRoot}tools/studio/studio-features.html#test-module">test APK module</a> + <a href="{@docRoot}tools/studio/studio-features.html#test-module">test APK module</a> to build test APKs in Android Studio. </li> <li>Updated the <a href="{@docRoot}tools/help/avd-manager.html">AVD Manager</a> with HAXM optimizations and improved notifications. </li> diff --git a/docs/html/tools/sdk/eclipse-adt.jd b/docs/html/tools/sdk/eclipse-adt.jd index 08634da..3c12a64 100644 --- a/docs/html/tools/sdk/eclipse-adt.jd +++ b/docs/html/tools/sdk/eclipse-adt.jd @@ -53,6 +53,39 @@ href="http://tools.android.com/knownissues">http://tools.android.com/knownissues <div class="toggle-content opened"> <p><a href="#" onclick="return toggleContent(this)"> <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" + alt=""/>ADT 23.0.7</a> <em>(August 2015)</em> + </p> + + <div class="toggle-content-toggleme"> +<dl> + <dt>Dependencies:</dt> + + <dd> + <ul> + <li>Java 7 or higher is required if you are targeting Android 5.0 and higher.</li> + <li>Java 1.6 or higher is required if you are targeting other releases.</li> + <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li> + <li>This version of ADT is designed for use with + <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r24.1.2</a>. + If you haven't already installed SDK Tools r24.1.2 into your SDK, use the + Android SDK Manager to do so.</li> + </ul> + </dd> + + <dt>General Notes:</dt> + <dd> + <ul> + <li>Fixed issues with the rendering library for the visual layout editor.</li> + </ul> + </dd> +</dl> +</div> +</div> + + +<div class="toggle-content closed"> + <p><a href="#" onclick="return toggleContent(this)"> + <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt=""/>ADT 23.0.6</a> <em>(March 2015)</em> </p> @@ -75,7 +108,7 @@ href="http://tools.android.com/knownissues">http://tools.android.com/knownissues <dt>General Notes:</dt> <dd> <ul> - <li>Fixed issues with the rendering library.</li> + <li>Fixed issues with the rendering library for the visual layout editor.</li> </ul> </dd> </dl> diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs index db19d4f..72f9f21 100644 --- a/docs/html/tools/tools_toc.cs +++ b/docs/html/tools/tools_toc.cs @@ -160,6 +160,7 @@ class="en">Tools Help</span></a></div> <li><a href="<?cs var:toroot ?>tools/help/avd-manager.html">AVD Manager</a></li> <li><a href="<?cs var:toroot ?>tools/help/bmgr.html">bmgr</a> <li><a href="<?cs var:toroot ?>tools/help/monitor.html">Device Monitor</a></li> + <li><a href="<?cs var:toroot ?>tools/help/desktop-head-unit.html">Desktop Head Unit</a></li> <li><a href="<?cs var:toroot ?>tools/help/dmtracedump.html">dmtracedump</a></li> <li><a href="<?cs var:toroot ?>tools/help/draw9patch.html">Draw 9-Patch</a></li> <li><a href="<?cs var:toroot ?>tools/help/emulator.html">Emulator</a></li> diff --git a/docs/html/training/auto/start/index.jd b/docs/html/training/auto/start/index.jd index 22e7521..f6cdbd1 100644 --- a/docs/html/training/auto/start/index.jd +++ b/docs/html/training/auto/start/index.jd @@ -16,7 +16,7 @@ page.image=auto/images/assets/icons/auto_app_in_simulator.png <ol> <li><a href="#dev-project">Set Up an Auto Project</a></li> <li><a href="#build-it">Build Auto Apps</a></li> - <li><a href="#test-it">Run and Test Auto Apps</a></li> + <li><a href="#test-it-dhu">Run and Test Auto Apps </a></li> </ol> <h2>You should also read</h2> @@ -149,57 +149,124 @@ requirements, you can reduce the effort for building and testing your app. For more information, see <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto App Quality</a>.</p> -<h2 id="test-it">Run and Test Auto Apps</h2> -<p>As you prepare to publish your app, make sure that your app looks correct -when projected on the Auto user interface. Use the Android Media Browser -simulator and Android Messaging simulators to view and test your audio or -messaging apps in a screen that looks similar to what is projected on Auto.</p> -<p>To get the simulators, open the -<a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> and download -them from <strong>Extras > Android Auto API Simulators</strong>.</p> +<h2 id="test-it-dhu">Run and Test Auto Apps </h2> -<p>Before you begin testing, compile your app in your development environment. -Install your app and the Android simulator for the features you want to test -(that is, audio or messaging) on a physical or virtual device running Android -5.0 (API level 21) or higher. To check the version of Android on the device, go -to <strong>Settings > About > Android Version</strong>.</p> +<p> + As you develop, you can run and test your app on your development machine + using the <em>Desktop Head Unit</em> (DHU). The DHU replaces the existing + simulators and enables your development machine to simulate a vehicle + dashboard system running Android Auto. +</p> -<h3 id="testing-audio-apps">Testing audio apps</h3> -<p>To run and test audio apps:</p> +<h3 id="installing-dhu">Installing the DHU</h3> <ol> -<li>Install the Android Media Browser simulator -({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on -the test device. You can do this using -the <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> -<li>Enable <a href="{@docRoot}tools/device.html#device-developer-options"> -developer options</a> on the test device.</li> -<li>Install your app on the test device.</li> -<li>Launch the Android Media Browser simulator to see how your audio app -appears in Auto. If your app does not appear, stop the simulator from -<strong>Settings > Apps</strong> then restart it.</li> + <li>Enable developer mode on your mobile device, as described in + <a href="{@docRoot}tools/device.html#developer-device-options">Enabling On-device + Developer Options</a>. </li> + <li>Compile your app in your development environment and install your app on + a physical mobile device running Android 5.0 (API level 21) or higher. To check the + version of Android on a Nexus device, go to + <strong>Settings > About phone</strong> (or <strong>About tablet</strong>) <strong>> + Android version</strong>.</li> + + <li>Install the + <a class="external-link" + href="https://play.google.com/store/apps/details?id=com.google.android.projection.gearhead&hl=en" + >Android Auto app</a> on the mobile device.</li> + <li>Open the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> and + download the DHU package <strong>Android Auto Desktop Head Unit</strong> from the + <em>SDK Tools</em> tab. The DHU installs in the <code><sdk>/extras/google/auto/</code> + directory.</li> + <li>If you are running the DHU on Linux, you must also install + the portaudio, libpng, sdl2, and sdl2_ttf libraries. + The procedure to do this varies depending on your Linux distribution. For example, on + Debian-derived Linux distributions, you can install the libraries with this command: + +<pre class="no-pretty-print"> +$ sudo apt-get install libsdl2-2.0-0 libsdl2-ttf-2.0-0 libportaudio2 libpng12-0 +</pre> + + </li> </ol> -<h3 id="testing-messaging-apps">Testing messaging apps</h3> -<p>To run and test messaging apps:</p> +<div class="figure" style="width:330px"> + <img src="{@docRoot}images/training/auto-desktop-head-unit-server-running.png" + alt="" > + <p class="img-caption"> + <strong>Figure 2.</strong> Notification that the head unit server is running. + </p> +</div> +<img src="{@docRoot}images/training/auto-desktop-head-unit-context-menu-enabled.png" + alt="" > +<p class="img-caption"> + <strong>Figure 1.</strong> Context menu with developer options. +</p> + +<h3 id="connecting-dhu">Connecting the DHU to your mobile device</h3> + +<p>Run the DHU by connecting your mobile device to a development machine and setting up a connection to + the head unit server over <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge + (ADB)</a>. Follow these steps to set up tunneling and start the DHU:</p> <ol> -<li>Install the Android Messaging simulator - ({@code <sdk>/extras/google/simulators/messaging-simulator.apk}) -on the test device. You can do this using the -<a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> -<li>Enable the simulator to read notifications posted on the system: -<ol type="a"> - <li>Enable <a href="{@docRoot}tools/device.html#device-developer-options"> -developer options</a> on the test device.</li> - <li>Click <strong>Settings > Sounds & Notifications > Notification - Access</strong> and check the box labeled - <strong>Messaging Simulator</strong>.</li> -</ol> -<li>Install your app on the test device.</li> -<li>Launch the Android Messaging Simulator to see how your messaging app appears -in Auto. If your app does not appear, stop the simulator from -<strong>Settings > Apps</strong> then restart it.</li> + <li>On the mobile device, enable Android Auto developer mode by starting the Android Auto + companion app, and then tapping the header image 10 times. + This step is only required the first time you run the companion app. + </li> + <li>If the server is not already running, select <strong>Start head unit server</strong> + from the Android Auto menu. + <p>On the device, a foreground service appears in the notification area. </p> + </li> + + <li>Connect the mobile device to the development machine via USB. Your device must be unlocked to + launch the DHU. + </li> + <li>On the development machine, run the following {@code adb} command to + forward socket connections from the + development machine's port 5277 to the same port number on the Android device. + This configuration allows the DHU to connect to the head unit server running on your phone over + a TCP socket. + <pre class="no-pretty-print">$ adb forward tcp:5277 tcp:5277</pre> + </li> + + <li>Start the DHU by running the command <code>desktop-head-unit.exe</code> (on Windows) + or <code>./desktop-head-unit</code> (on Mac or Linux) from the + <code><sdk>/extras/google/auto/</code> directory. + +<pre class="no-pretty-print">$ cd <sdk>/extras/google/auto +$ ./desktop-head-unit</pre> + + <p> + By default, the head unit server connects over port 5277. To override the host or port + (for example, to forward over SSH), use the <code>--adb</code> flag. + </p> + + </li> </ol> + +<div class="figure" style="width:432px"> + + <img src="{@docRoot}images/training/auto-desktop-head-unit-wkst-launch.png" + alt="" > + <p class="img-caption"> + <strong>Figure 4.</strong> DHU launches on the development machine. + </p> +</div> + + <img src="{@docRoot}images/training/auto-desktop-head-unit-launch.png" + alt="" > + <p class="img-caption"> + <strong>Figure 3.</strong> Android Auto launches on the mobile device. + </p> + +<p> + After you set up and start the DHU, you can run DHU commands from the command line to run and + test your app from the terminal. You can also run these commands by using keyboard shortcuts. For + more information about DHU configuration and commands, see <a href= + "{@docRoot}tools/help/desktop-head-unit.html">Desktop Head Unit</a>. +</p> + + diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index 32f6a89..464f3de 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -855,7 +855,8 @@ public class RippleDrawable extends LayerDrawable { // Position the shader to account for canvas translation. if (mMaskShader != null) { - mMaskMatrix.setTranslate(-x, -y); + final Rect bounds = getBounds(); + mMaskMatrix.setTranslate(bounds.left - x, bounds.top - y); mMaskShader.setLocalMatrix(mMaskMatrix); } diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index e99a37a..c59d1c7 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -279,6 +279,7 @@ public class AudioSystem public static final int PERMISSION_DENIED = -4; public static final int NO_INIT = -5; public static final int DEAD_OBJECT = -6; + public static final int WOULD_BLOCK = -7; /* * AudioPolicyService methods diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index 8880dad..bb4f7d9 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -158,6 +158,18 @@ public class AudioTrack * Denotes a failure due to the improper use of a method. */ public static final int ERROR_INVALID_OPERATION = AudioSystem.INVALID_OPERATION; + /** + * An error code indicating that the object reporting it is no longer valid and needs to + * be recreated. + * @hide + */ + public static final int ERROR_DEAD_OBJECT = AudioSystem.DEAD_OBJECT; + /** + * {@link #getTimestampWithStatus(AudioTimestamp)} is called in STOPPED or FLUSHED state, + * or immediately after start/ACTIVE. + * @hide + */ + public static final int ERROR_WOULD_BLOCK = AudioSystem.WOULD_BLOCK; // Error codes: // to keep in sync with frameworks/base/core/jni/android_media_AudioTrack.cpp @@ -1225,6 +1237,44 @@ public class AudioTrack return true; } + /** + * Poll for a timestamp on demand. + * <p> + * Same as {@link #getTimestamp(AudioTimestamp)} but with a more useful return code. + * + * @param timestamp a reference to a non-null AudioTimestamp instance allocated + * and owned by caller. + * @return {@link #SUCCESS} if a timestamp is available + * {@link #ERROR_WOULD_BLOCK} if called in STOPPED or FLUSHED state, or if called + * immediately after start/ACTIVE, when the number of frames consumed is less than the + * overall hardware latency to physical output. In WOULD_BLOCK cases, one might poll + * again, or use {@link #getPlaybackHeadPosition}, or use 0 position and current time + * for the timestamp. + * {@link #ERROR_DEAD_OBJECT} if the AudioTrack is not valid anymore and + * needs to be recreated. + * {@link #ERROR_INVALID_OPERATION} if current route does not support + * timestamps. In this case, the approximate frame position can be obtained + * using {@link #getPlaybackHeadPosition}. + * + * The AudioTimestamp instance is filled in with a position in frame units, together + * with the estimated time when that frame was presented or is committed to + * be presented. + * @hide + */ + // Add this text when the "on new timestamp" API is added: + // Use if you need to get the most recent timestamp outside of the event callback handler. + public int getTimestampWithStatus(AudioTimestamp timestamp) + { + if (timestamp == null) { + throw new IllegalArgumentException(); + } + // It's unfortunate, but we have to either create garbage every time or use synchronized + long[] longArray = new long[2]; + int ret = native_get_timestamp(longArray); + timestamp.framePosition = longArray[0]; + timestamp.nanoTime = longArray[1]; + return ret; + } //-------------------------------------------------------------------------- // Initialization / configuration diff --git a/media/java/android/media/midi/package.html b/media/java/android/media/midi/package.html index 7baa5bc..45fb579 100644 --- a/media/java/android/media/midi/package.html +++ b/media/java/android/media/midi/package.html @@ -202,11 +202,12 @@ MidiInputPort inputPort = device.openInputPort(index); <p>MIDI messages are sent as byte arrays. Here we encode a NoteOn message.</p> <pre class=prettyprint> -byte[] buffer = new buffer[64]; +byte[] buffer = new byte[32]; int numBytes = 0; -buffer[numBytes++] = 0x90 + channel; // note on -buffer[numBytes++] = pitch; -buffer[numBytes++] = velocity; +int channel = 3; // MIDI channels 1-16 are encoded as 0-15. +buffer[numBytes++] = (byte)(0x90 + (channel - 1)); // note on +buffer[numBytes++] = (byte)60; // pitch is middle C +buffer[numBytes++] = (byte)127; // max velocity int offset = 0; // post is non-blocking inputPort.send(buffer, offset, numBytes); diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index c00fdf3..37e0db0 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -104,6 +104,7 @@ <uses-permission android:name="android.permission.REGISTER_CALL_PROVIDER" /> <uses-permission android:name="android.permission.REGISTER_CONNECTION_MANAGER" /> <uses-permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION" /> + <uses-permission android:name="android.permission.GET_APP_OPS_STATS" /> <application android:label="@string/app_label"> <provider diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java index 2a84362..adc9b36 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java @@ -22,6 +22,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.graphics.Typeface; import android.media.projection.MediaProjectionManager; import android.media.projection.IMediaProjectionManager; import android.media.projection.IMediaProjection; @@ -29,7 +30,14 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.text.BidiFormatter; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.style.StyleSpan; import android.util.Log; +import android.util.TypedValue; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.CompoundButton; @@ -39,6 +47,8 @@ public class MediaProjectionPermissionActivity extends Activity implements DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener, DialogInterface.OnCancelListener { private static final String TAG = "MediaProjectionPermissionActivity"; + private static final float MAX_APP_NAME_SIZE_PX = 500f; + private static final String ELLIPSIS = "\u2026"; private boolean mPermanentGrant; private String mPackageName; @@ -84,11 +94,49 @@ public class MediaProjectionPermissionActivity extends Activity return; } - String appName = aInfo.loadLabel(packageManager).toString(); + TextPaint paint = new TextPaint(); + paint.setTextSize(42); + + String label = aInfo.loadLabel(packageManager).toString(); + + // If the label contains new line characters it may push the security + // message below the fold of the dialog. Labels shouldn't have new line + // characters anyways, so just truncate the message the first time one + // is seen. + final int labelLength = label.length(); + int offset = 0; + while (offset < labelLength) { + final int codePoint = label.codePointAt(offset); + final int type = Character.getType(codePoint); + if (type == Character.LINE_SEPARATOR + || type == Character.CONTROL + || type == Character.PARAGRAPH_SEPARATOR) { + label = label.substring(0, offset) + ELLIPSIS; + break; + } + offset += Character.charCount(codePoint); + } + + if (label.isEmpty()) { + label = mPackageName; + } + + String unsanitizedAppName = TextUtils.ellipsize(label, + paint, MAX_APP_NAME_SIZE_PX, TextUtils.TruncateAt.END).toString(); + String appName = BidiFormatter.getInstance().unicodeWrap(unsanitizedAppName); + + String actionText = getString(R.string.media_projection_dialog_text, appName); + SpannableString message = new SpannableString(actionText); + + int appNameIndex = actionText.indexOf(appName); + if (appNameIndex >= 0) { + message.setSpan(new StyleSpan(Typeface.BOLD), + appNameIndex, appNameIndex + appName.length(), 0); + } mDialog = new AlertDialog.Builder(this) .setIcon(aInfo.loadIcon(packageManager)) - .setMessage(getString(R.string.media_projection_dialog_text, appName)) + .setMessage(message) .setPositiveButton(R.string.media_projection_action_text, this) .setNegativeButton(android.R.string.cancel, this) .setView(R.layout.remember_permission_checkbox) diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 8d9c965..7c74a30 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -401,21 +401,40 @@ public class BackupManagerService { public boolean isSystemRestore; public String[] filterSet; - // Restore a single package + /** + * Restore a single package; no kill after restore + */ RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs, - long _token, PackageInfo _pkg, int _pmToken) { + long _token, PackageInfo _pkg) { transport = _transport; dirName = _dirName; observer = _obs; token = _token; pkgInfo = _pkg; - pmToken = _pmToken; + pmToken = 0; isSystemRestore = false; filterSet = null; } - // Restore everything possible. This is the form that Setup Wizard or similar - // restore UXes use. + /** + * Restore at install: PM token needed, kill after restore + */ + RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs, + long _token, String _pkgName, int _pmToken) { + transport = _transport; + dirName = _dirName; + observer = _obs; + token = _token; + pkgInfo = null; + pmToken = _pmToken; + isSystemRestore = false; + filterSet = new String[] { _pkgName }; + } + + /** + * Restore everything possible. This is the form that Setup Wizard or similar + * restore UXes use. + */ RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs, long _token) { transport = _transport; @@ -428,8 +447,10 @@ public class BackupManagerService { filterSet = null; } - // Restore some set of packages. Leave this one up to the caller to specify - // whether it's to be considered a system-level restore. + /** + * Restore some set of packages. Leave this one up to the caller to specify + * whether it's to be considered a system-level restore. + */ RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs, long _token, String[] _filterSet, boolean _isSystemRestore) { transport = _transport; @@ -9136,19 +9157,13 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF // This can throw and so *must* happen before the wakelock is acquired String dirName = transport.transportDirName(); - // We can use a synthetic PackageInfo here because: - // 1. We know it's valid, since the Package Manager supplied the name - // 2. Only the packageName field will be used by the restore code - PackageInfo pkg = new PackageInfo(); - pkg.packageName = packageName; - mWakelock.acquire(); if (MORE_DEBUG) { Slog.d(TAG, "Restore at install of " + packageName); } Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); msg.obj = new RestoreParams(transport, dirName, null, - restoreSet, pkg, token); + restoreSet, packageName, token); mBackupHandler.sendMessage(msg); } catch (RemoteException e) { // Binding to the transport broke; back off and proceed with the installation. @@ -9527,8 +9542,7 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF Slog.d(TAG, "restorePackage() : " + packageName); } Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); - msg.obj = new RestoreParams(mRestoreTransport, dirName, - observer, token, app, 0); + msg.obj = new RestoreParams(mRestoreTransport, dirName, observer, token, app); mBackupHandler.sendMessage(msg); } finally { Binder.restoreCallingIdentity(oldId); diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java index 56ebed6..c373fb8 100644 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -1569,6 +1569,8 @@ public class AppOpsService extends IAppOpsService.Stub { if ("-h".equals(arg)) { dumpHelp(pw); return; + } else if ("-a".equals(arg)) { + // dump all data } else if ("write-settings".equals(arg)) { long token = Binder.clearCallingIdentity(); try { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 9bf4f5f..335288d 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -1263,8 +1263,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + result); } - // There is some accuracy error in reports so allow 30 milliseconds of error. - final long SAMPLE_ERROR_MILLIS = 30; + // There is some accuracy error in reports so allow some slop in the results. + final long SAMPLE_ERROR_MILLIS = 750; final long totalTimeMs = result.mControllerIdleTimeMs + result.mControllerRxTimeMs + result.mControllerTxTimeMs; if (totalTimeMs > timePeriodMs + SAMPLE_ERROR_MILLIS) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f67f3f3..74200cb 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4626,7 +4626,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (result == null) { result = new CrossProfileDomainInfo(); result.resolveInfo = - createForwardingResolveInfo(null, sourceUserId, parentUserId); + createForwardingResolveInfo(new IntentFilter(), sourceUserId, parentUserId); result.bestDomainVerificationStatus = status; } else { result.bestDomainVerificationStatus = bestDomainVerificationStatus(status, diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index ab56d5e..726d29d 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1589,8 +1589,6 @@ class WindowStateAnimator { final int left = ((int) shownFrame.left) - attrs.surfaceInsets.left; final int top = ((int) shownFrame.top) - attrs.surfaceInsets.top; if (mSurfaceX != left || mSurfaceY != top) { - mSurfaceX = left; - mSurfaceY = top; if (mAnimating) { // If this window (or its app token) is animating, then the position // of the surface will be re-computed on the next animation frame. @@ -1598,6 +1596,8 @@ class WindowStateAnimator { // transformation is being applied by the animation. return; } + mSurfaceX = left; + mSurfaceY = top; if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setWallpaperOffset"); SurfaceControl.openTransaction(); try { |