Merge "Translate selection arguments that are paths."
diff --git a/api/current.txt b/api/current.txt
index b274bff..a529a0f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -5499,74 +5499,74 @@
ctor public Notification.Builder(android.content.Context, String);
ctor @Deprecated public Notification.Builder(android.content.Context);
method @Deprecated public android.app.Notification.Builder addAction(int, CharSequence, android.app.PendingIntent);
- method public android.app.Notification.Builder addAction(android.app.Notification.Action);
- method public android.app.Notification.Builder addExtras(android.os.Bundle);
+ method @NonNull public android.app.Notification.Builder addAction(android.app.Notification.Action);
+ method @NonNull public android.app.Notification.Builder addExtras(android.os.Bundle);
method @Deprecated public android.app.Notification.Builder addPerson(String);
- method public android.app.Notification.Builder addPerson(android.app.Person);
- method public android.app.Notification build();
+ method @NonNull public android.app.Notification.Builder addPerson(android.app.Person);
+ method @NonNull public android.app.Notification build();
method public android.widget.RemoteViews createBigContentView();
method public android.widget.RemoteViews createContentView();
method public android.widget.RemoteViews createHeadsUpContentView();
- method public android.app.Notification.Builder extend(android.app.Notification.Extender);
+ method @NonNull public android.app.Notification.Builder extend(android.app.Notification.Extender);
method public android.os.Bundle getExtras();
method @Deprecated public android.app.Notification getNotification();
method public android.app.Notification.Style getStyle();
- method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
- method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
- method public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
- method public android.app.Notification.Builder setAutoCancel(boolean);
- method public android.app.Notification.Builder setBadgeIconType(int);
- method public android.app.Notification.Builder setBubbleMetadata(android.app.Notification.BubbleMetadata);
- method public android.app.Notification.Builder setCategory(String);
- method public android.app.Notification.Builder setChannelId(String);
- method public android.app.Notification.Builder setChronometerCountDown(boolean);
- method public android.app.Notification.Builder setColor(@ColorInt int);
- method public android.app.Notification.Builder setColorized(boolean);
+ method @NonNull public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
+ method @NonNull public android.app.Notification.Builder setActions(android.app.Notification.Action...);
+ method @NonNull public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method @NonNull public android.app.Notification.Builder setAutoCancel(boolean);
+ method @NonNull public android.app.Notification.Builder setBadgeIconType(int);
+ method @NonNull public android.app.Notification.Builder setBubbleMetadata(android.app.Notification.BubbleMetadata);
+ method @NonNull public android.app.Notification.Builder setCategory(String);
+ method @NonNull public android.app.Notification.Builder setChannelId(String);
+ method @NonNull public android.app.Notification.Builder setChronometerCountDown(boolean);
+ method @NonNull public android.app.Notification.Builder setColor(@ColorInt int);
+ method @NonNull public android.app.Notification.Builder setColorized(boolean);
method @Deprecated public android.app.Notification.Builder setContent(android.widget.RemoteViews);
method @Deprecated public android.app.Notification.Builder setContentInfo(CharSequence);
- method public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
- method public android.app.Notification.Builder setContentText(CharSequence);
- method public android.app.Notification.Builder setContentTitle(CharSequence);
- method public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
- method public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
- method public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
+ method @NonNull public android.app.Notification.Builder setContentText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setContentTitle(CharSequence);
+ method @NonNull public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
method @Deprecated public android.app.Notification.Builder setDefaults(int);
- method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
- method public android.app.Notification.Builder setExtras(android.os.Bundle);
- method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
- method public android.app.Notification.Builder setGroup(String);
- method public android.app.Notification.Builder setGroupAlertBehavior(int);
- method public android.app.Notification.Builder setGroupSummary(boolean);
- method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
- method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
+ method @NonNull public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
+ method @NonNull public android.app.Notification.Builder setExtras(android.os.Bundle);
+ method @NonNull public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method @NonNull public android.app.Notification.Builder setGroup(String);
+ method @NonNull public android.app.Notification.Builder setGroupAlertBehavior(int);
+ method @NonNull public android.app.Notification.Builder setGroupSummary(boolean);
+ method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
+ method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
method @Deprecated public android.app.Notification.Builder setLights(@ColorInt int, int, int);
- method public android.app.Notification.Builder setLocalOnly(boolean);
- method public android.app.Notification.Builder setNumber(int);
- method public android.app.Notification.Builder setOngoing(boolean);
- method public android.app.Notification.Builder setOnlyAlertOnce(boolean);
+ method @NonNull public android.app.Notification.Builder setLocalOnly(boolean);
+ method @NonNull public android.app.Notification.Builder setNumber(int);
+ method @NonNull public android.app.Notification.Builder setOngoing(boolean);
+ method @NonNull public android.app.Notification.Builder setOnlyAlertOnce(boolean);
method @Deprecated public android.app.Notification.Builder setPriority(int);
- method public android.app.Notification.Builder setProgress(int, int, boolean);
- method public android.app.Notification.Builder setPublicVersion(android.app.Notification);
- method public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
- method public android.app.Notification.Builder setSettingsText(CharSequence);
- method public android.app.Notification.Builder setShortcutId(String);
- method public android.app.Notification.Builder setShowWhen(boolean);
- method public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
- method public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
- method public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
- method public android.app.Notification.Builder setSortKey(String);
+ method @NonNull public android.app.Notification.Builder setProgress(int, int, boolean);
+ method @NonNull public android.app.Notification.Builder setPublicVersion(android.app.Notification);
+ method @NonNull public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
+ method @NonNull public android.app.Notification.Builder setSettingsText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setShortcutId(String);
+ method @NonNull public android.app.Notification.Builder setShowWhen(boolean);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
+ method @NonNull public android.app.Notification.Builder setSortKey(String);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, int);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes);
- method public android.app.Notification.Builder setStyle(android.app.Notification.Style);
- method public android.app.Notification.Builder setSubText(CharSequence);
- method public android.app.Notification.Builder setTicker(CharSequence);
+ method @NonNull public android.app.Notification.Builder setStyle(android.app.Notification.Style);
+ method @NonNull public android.app.Notification.Builder setSubText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setTicker(CharSequence);
method @Deprecated public android.app.Notification.Builder setTicker(CharSequence, android.widget.RemoteViews);
- method public android.app.Notification.Builder setTimeoutAfter(long);
- method public android.app.Notification.Builder setUsesChronometer(boolean);
+ method @NonNull public android.app.Notification.Builder setTimeoutAfter(long);
+ method @NonNull public android.app.Notification.Builder setUsesChronometer(boolean);
method @Deprecated public android.app.Notification.Builder setVibrate(long[]);
- method public android.app.Notification.Builder setVisibility(int);
- method public android.app.Notification.Builder setWhen(long);
+ method @NonNull public android.app.Notification.Builder setVisibility(int);
+ method @NonNull public android.app.Notification.Builder setWhen(long);
}
public static final class Notification.CarExtender implements android.app.Notification.Extender {
@@ -12513,7 +12513,7 @@
method public int getInt(int);
method public long getLong(int);
method public android.net.Uri getNotificationUri();
- method public default java.util.List<android.net.Uri> getNotificationUris();
+ method @Nullable public default java.util.List<android.net.Uri> getNotificationUris();
method public int getPosition();
method public short getShort(int);
method public String getString(int);
@@ -13072,19 +13072,19 @@
method public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String, String);
method @Deprecated public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String[], String, String);
method public int delete(@NonNull android.database.sqlite.SQLiteDatabase, @Nullable String, @Nullable String[]);
- method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+ method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
method public boolean getDistinct();
- method public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
+ method @Nullable public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
method public boolean getStrict();
- method public String getTables();
+ method @Nullable public String getTables();
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
- method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
+ method public void setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
method public void setDistinct(boolean);
- method public void setProjectionMap(java.util.Map<java.lang.String,java.lang.String>);
+ method public void setProjectionMap(@Nullable java.util.Map<java.lang.String,java.lang.String>);
method public void setStrict(boolean);
- method public void setTables(String);
+ method public void setTables(@Nullable String);
method public int update(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues, @Nullable String, @Nullable String[]);
}
@@ -13554,7 +13554,7 @@
method @CheckResult public android.graphics.Bitmap extractAlpha(android.graphics.Paint, int[]);
method public int getAllocationByteCount();
method public int getByteCount();
- method public android.graphics.Color getColor(int, int);
+ method @NonNull public android.graphics.Color getColor(int, int);
method @Nullable public android.graphics.ColorSpace getColorSpace();
method public android.graphics.Bitmap.Config getConfig();
method public int getDensity();
@@ -16558,13 +16558,13 @@
public static class BiometricPrompt.Builder {
ctor public BiometricPrompt.Builder(android.content.Context);
- method public android.hardware.biometrics.BiometricPrompt build();
- method public android.hardware.biometrics.BiometricPrompt.Builder setAllowDeviceCredential(boolean);
- method public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
- method public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
- method public android.hardware.biometrics.BiometricPrompt.Builder setRequireConfirmation(boolean);
- method public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
- method public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt build();
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setAllowDeviceCredential(boolean);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setRequireConfirmation(boolean);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
}
public static final class BiometricPrompt.CryptoObject {
@@ -16646,93 +16646,93 @@
method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission();
method @NonNull public java.util.Set<java.lang.String> getPhysicalCameraIds();
method @Nullable public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int);
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
- field @Deprecated public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
+ field @Deprecated @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
}
public static final class CameraCharacteristics.Key<T> {
@@ -17038,63 +17038,63 @@
method @Nullable public Object getTag();
method public boolean isReprocess();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
field public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
}
public static final class CaptureRequest.Builder {
@@ -17119,88 +17119,88 @@
method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
method public int getSequenceId();
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
- field @Deprecated public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
- field public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
- field public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
+ field @Deprecated @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
}
public static final class CaptureResult.Key<T> {
@@ -23418,14 +23418,14 @@
field public static final int MASTERING_NOT_INDICATED = 0; // 0x0
}
- public static class AudioPresentation.Builder {
+ public static final class AudioPresentation.Builder {
ctor public AudioPresentation.Builder(int);
method @NonNull public android.media.AudioPresentation build();
method @NonNull public android.media.AudioPresentation.Builder setHasAudioDescription(boolean);
method @NonNull public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean);
method @NonNull public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean);
- method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.String>);
- method @NonNull public android.media.AudioPresentation.Builder setLocale(android.icu.util.ULocale);
+ method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.CharSequence>);
+ method @NonNull public android.media.AudioPresentation.Builder setLocale(@NonNull android.icu.util.ULocale);
method @NonNull public android.media.AudioPresentation.Builder setMasteringIndication(int);
method @NonNull public android.media.AudioPresentation.Builder setProgramId(int);
}
@@ -34585,7 +34585,7 @@
method public static java.io.File getExternalStoragePublicDirectory(String);
method public static String getExternalStorageState();
method public static String getExternalStorageState(java.io.File);
- method public static java.io.File getRootDirectory();
+ method @NonNull public static java.io.File getRootDirectory();
method @Deprecated public static String getStorageState(java.io.File);
method public static boolean isExternalStorageEmulated();
method public static boolean isExternalStorageEmulated(java.io.File);
@@ -35311,27 +35311,27 @@
ctor public StrictMode.ThreadPolicy.Builder();
ctor public StrictMode.ThreadPolicy.Builder(android.os.StrictMode.ThreadPolicy);
method public android.os.StrictMode.ThreadPolicy build();
- method public android.os.StrictMode.ThreadPolicy.Builder detectAll();
- method public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
- method public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
- method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
- method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
- method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
- method public android.os.StrictMode.ThreadPolicy.Builder permitAll();
- method public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
- method public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
- method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
- method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
- method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectAll();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitAll();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
}
public static final class StrictMode.VmPolicy {
@@ -35342,26 +35342,26 @@
ctor public StrictMode.VmPolicy.Builder();
ctor public StrictMode.VmPolicy.Builder(android.os.StrictMode.VmPolicy);
method public android.os.StrictMode.VmPolicy build();
- method public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
- method public android.os.StrictMode.VmPolicy.Builder detectAll();
- method public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
- method public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
- method public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
- method public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
- method public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
- method public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
- method public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
- method public android.os.StrictMode.VmPolicy.Builder penaltyLog();
- method public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
- method public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectAll();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyLog();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
}
public final class SystemClock {
@@ -38407,14 +38407,12 @@
public final class MediaStore {
ctor public MediaStore();
- method @NonNull public static android.net.Uri createPending(@NonNull android.content.Context, @NonNull android.provider.MediaStore.PendingParams);
- method @NonNull public static java.util.Set<java.lang.String> getAllVolumeNames(android.content.Context);
- method public static android.net.Uri getDocumentUri(android.content.Context, android.net.Uri);
+ method @NonNull public static java.util.Set<java.lang.String> getAllVolumeNames(@NonNull android.content.Context);
+ method @Nullable public static android.net.Uri getDocumentUri(@NonNull android.content.Context, @NonNull android.net.Uri);
method public static android.net.Uri getMediaScannerUri();
- method public static android.net.Uri getMediaUri(android.content.Context, android.net.Uri);
+ method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri);
method public static String getVersion(android.content.Context);
method @NonNull public static String getVolumeName(@NonNull android.net.Uri);
- method @NonNull public static android.provider.MediaStore.PendingSession openPending(@NonNull android.content.Context, @NonNull android.net.Uri);
method @NonNull public static android.net.Uri setIncludePending(@NonNull android.net.Uri);
method @NonNull public static android.net.Uri setRequireOriginal(@NonNull android.net.Uri);
field public static final String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
@@ -38603,10 +38601,10 @@
}
public static final class MediaStore.Downloads implements android.provider.MediaStore.DownloadColumns {
- method public static android.net.Uri getContentUri(String);
+ method @NonNull public static android.net.Uri getContentUri(@NonNull String);
field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/download";
- field public static final android.net.Uri EXTERNAL_CONTENT_URI;
- field public static final android.net.Uri INTERNAL_CONTENT_URI;
+ field @NonNull public static final android.net.Uri EXTERNAL_CONTENT_URI;
+ field @NonNull public static final android.net.Uri INTERNAL_CONTENT_URI;
}
public static final class MediaStore.Files {
@@ -38687,6 +38685,7 @@
public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
field @Deprecated public static final String DATA = "_data";
field public static final String DATE_ADDED = "date_added";
+ field public static final String DATE_EXPIRES = "date_expires";
field public static final String DATE_MODIFIED = "date_modified";
field public static final String DISPLAY_NAME = "_display_name";
field public static final String DOCUMENT_ID = "document_id";
@@ -38703,23 +38702,6 @@
field public static final String WIDTH = "width";
}
- public static class MediaStore.PendingParams {
- ctor public MediaStore.PendingParams(@NonNull android.net.Uri, @NonNull String, @NonNull String);
- method public void setDownloadUri(@Nullable android.net.Uri);
- method public void setPrimaryDirectory(@Nullable String);
- method public void setRefererUri(@Nullable android.net.Uri);
- method public void setSecondaryDirectory(@Nullable String);
- }
-
- public static class MediaStore.PendingSession implements java.lang.AutoCloseable {
- method public void abandon();
- method public void close();
- method public void notifyProgress(@IntRange(from=0, to=100) int);
- method @NonNull public android.os.ParcelFileDescriptor open() throws java.io.FileNotFoundException;
- method @NonNull public java.io.OutputStream openOutputStream() throws java.io.FileNotFoundException;
- method @NonNull public android.net.Uri publish();
- }
-
public static final class MediaStore.Video {
ctor public MediaStore.Video();
method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
@@ -39258,7 +39240,7 @@
}
public static final class Telephony.CarrierId implements android.provider.BaseColumns {
- method public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int);
+ method @NonNull public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int);
method public static android.net.Uri getUriForSubscriptionId(int);
field public static final String CARRIER_ID = "carrier_id";
field public static final String CARRIER_NAME = "carrier_name";
@@ -41193,8 +41175,9 @@
public final class FillContext implements android.os.Parcelable {
method public int describeContents();
+ method @NonNull public android.view.autofill.AutofillId getFocusedId();
method public int getRequestId();
- method public android.app.assist.AssistStructure getStructure();
+ method @NonNull public android.app.assist.AssistStructure getStructure();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.autofill.FillContext> CREATOR;
}
@@ -41386,10 +41369,10 @@
field public static final android.os.Parcelable.Creator<android.service.autofill.VisibilitySetterAction> CREATOR;
}
- public static class VisibilitySetterAction.Builder {
+ public static final class VisibilitySetterAction.Builder {
ctor public VisibilitySetterAction.Builder(@IdRes int, int);
- method public android.service.autofill.VisibilitySetterAction build();
- method public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
+ method @NonNull public android.service.autofill.VisibilitySetterAction build();
+ method @NonNull public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
}
}
@@ -41415,7 +41398,7 @@
public class CarrierMessagingClientService extends android.app.Service {
ctor public CarrierMessagingClientService();
- method public final android.os.IBinder onBind(android.content.Intent);
+ method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
}
public abstract class CarrierMessagingService extends android.app.Service {
@@ -44488,6 +44471,7 @@
field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff
field public static final android.os.Parcelable.Creator<android.telephony.CellInfo> CREATOR;
field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff
+ field public static final long UNAVAILABLE_LONG = 9223372036854775807L; // 0x7fffffffffffffffL
}
public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable {
@@ -50520,6 +50504,7 @@
method public android.animation.StateListAnimator getStateListAnimator();
method protected int getSuggestedMinimumHeight();
method protected int getSuggestedMinimumWidth();
+ method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
method public int getSystemUiVisibility();
method @android.view.ViewDebug.ExportedProperty public Object getTag();
method public Object getTag(int);
@@ -50858,6 +50843,7 @@
method public void setSelected(boolean);
method public void setSoundEffectsEnabled(boolean);
method public void setStateListAnimator(android.animation.StateListAnimator);
+ method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
method public void setSystemUiVisibility(int);
method public void setTag(Object);
method public void setTag(int, Object);
@@ -51686,6 +51672,7 @@
method public void addOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
method public void addOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
method public void addOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+ method public void addOnSystemGestureExclusionRectsChangedListener(java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
@@ -51700,6 +51687,7 @@
method public void removeOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
method public void removeOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
method public void removeOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+ method public void removeOnSystemGestureExclusionRectsChangedListener(java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
@@ -53041,7 +53029,7 @@
public final class ContentCaptureContext implements android.os.Parcelable {
method public int describeContents();
- method public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull android.net.Uri);
+ method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull android.net.Uri);
method @Nullable public android.os.Bundle getExtras();
method @NonNull public android.content.LocusId getLocusId();
method public void writeToParcel(android.os.Parcel, int);
@@ -53050,7 +53038,7 @@
public static final class ContentCaptureContext.Builder {
ctor public ContentCaptureContext.Builder(@NonNull android.content.LocusId);
- method public android.view.contentcapture.ContentCaptureContext build();
+ method @NonNull public android.view.contentcapture.ContentCaptureContext build();
method @NonNull public android.view.contentcapture.ContentCaptureContext.Builder setExtras(@NonNull android.os.Bundle);
}
@@ -53066,7 +53054,7 @@
method @NonNull public final android.view.contentcapture.ContentCaptureSession createContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext);
method public final void destroy();
method @Nullable public final android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
- method public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
+ method @NonNull public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, long);
method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, long);
method public final void notifyViewAppeared(@NonNull android.view.ViewStructure);
@@ -53093,7 +53081,7 @@
public static final class UserDataRemovalRequest.Builder {
ctor public UserDataRemovalRequest.Builder();
- method public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, boolean);
+ method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, boolean);
method @NonNull public android.view.contentcapture.UserDataRemovalRequest build();
method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder forEverything();
}
@@ -57778,16 +57766,16 @@
method @Deprecated public void onZoom(boolean);
}
- public class ZoomControls extends android.widget.LinearLayout {
- ctor public ZoomControls(android.content.Context);
- ctor public ZoomControls(android.content.Context, android.util.AttributeSet);
- method public void hide();
- method public void setIsZoomInEnabled(boolean);
- method public void setIsZoomOutEnabled(boolean);
- method public void setOnZoomInClickListener(android.view.View.OnClickListener);
- method public void setOnZoomOutClickListener(android.view.View.OnClickListener);
- method public void setZoomSpeed(long);
- method public void show();
+ @Deprecated public class ZoomControls extends android.widget.LinearLayout {
+ ctor @Deprecated public ZoomControls(android.content.Context);
+ ctor @Deprecated public ZoomControls(android.content.Context, android.util.AttributeSet);
+ method @Deprecated public void hide();
+ method @Deprecated public void setIsZoomInEnabled(boolean);
+ method @Deprecated public void setIsZoomOutEnabled(boolean);
+ method @Deprecated public void setOnZoomInClickListener(android.view.View.OnClickListener);
+ method @Deprecated public void setOnZoomOutClickListener(android.view.View.OnClickListener);
+ method @Deprecated public void setZoomSpeed(long);
+ method @Deprecated public void show();
}
}
diff --git a/api/removed.txt b/api/removed.txt
index c4ed871..31dda47 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -352,11 +352,11 @@
}
public static final class StrictMode.ThreadPolicy.Builder {
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
}
public static final class StrictMode.VmPolicy.Builder {
- method public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
}
public final class SystemClock {
@@ -508,6 +508,8 @@
}
public final class MediaStore {
+ method @Deprecated @NonNull public static android.net.Uri createPending(@NonNull android.content.Context, @NonNull android.provider.MediaStore.PendingParams);
+ method @Deprecated @NonNull public static android.provider.MediaStore.PendingSession openPending(@NonNull android.content.Context, @NonNull android.net.Uri);
method @Deprecated @NonNull public static android.net.Uri setIncludeTrashed(@NonNull android.net.Uri);
method @Deprecated public static void trash(@NonNull android.content.Context, @NonNull android.net.Uri);
method @Deprecated public static void trash(@NonNull android.content.Context, @NonNull android.net.Uri, long);
@@ -515,11 +517,27 @@
}
public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
- field @Deprecated public static final String DATE_EXPIRES = "date_expires";
field @Deprecated public static final String HASH = "_hash";
field @Deprecated public static final String IS_TRASHED = "is_trashed";
}
+ @Deprecated public static class MediaStore.PendingParams {
+ ctor public MediaStore.PendingParams(@NonNull android.net.Uri, @NonNull String, @NonNull String);
+ method public void setDownloadUri(@Nullable android.net.Uri);
+ method public void setPrimaryDirectory(@Nullable String);
+ method public void setRefererUri(@Nullable android.net.Uri);
+ method public void setSecondaryDirectory(@Nullable String);
+ }
+
+ @Deprecated public static class MediaStore.PendingSession implements java.lang.AutoCloseable {
+ method public void abandon();
+ method public void close();
+ method public void notifyProgress(@IntRange(from=0, to=100) int);
+ method @NonNull public android.os.ParcelFileDescriptor open() throws java.io.FileNotFoundException;
+ method @NonNull public java.io.OutputStream openOutputStream() throws java.io.FileNotFoundException;
+ method @NonNull public android.net.Uri publish();
+ }
+
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field @Deprecated public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
}
diff --git a/api/system-current.txt b/api/system-current.txt
index 7dd139f..ec7cea9 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -565,12 +565,12 @@
}
public class StatusBarManager {
- method public android.app.StatusBarManager.DisableInfo getDisableInfo();
- method public void setDisabledForSetup(boolean);
+ method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
+ method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
}
public static final class StatusBarManager.DisableInfo {
- method public boolean areNoComponentsDisabled();
+ method public boolean areAllComponentsEnabled();
method public boolean isNavigateToHomeDisabled();
method public boolean isNotificationPeekingDisabled();
method public boolean isRecentsDisabled();
@@ -1906,12 +1906,12 @@
public static class BrightnessConfiguration.Builder {
ctor public BrightnessConfiguration.Builder(float[], float[]);
- method public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
- method public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
- method public android.hardware.display.BrightnessConfiguration build();
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
+ method @NonNull public android.hardware.display.BrightnessConfiguration build();
method public int getMaxCorrectionsByCategory();
method public int getMaxCorrectionsByPackageName();
- method public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
}
public final class BrightnessCorrection implements android.os.Parcelable {
@@ -5210,11 +5210,11 @@
}
public class Environment {
- method public static java.io.File getOdmDirectory();
- method public static java.io.File getOemDirectory();
- method public static java.io.File getProductDirectory();
- method public static java.io.File getProductServicesDirectory();
- method public static java.io.File getVendorDirectory();
+ method @NonNull public static java.io.File getOdmDirectory();
+ method @NonNull public static java.io.File getOemDirectory();
+ method @NonNull public static java.io.File getProductDirectory();
+ method @NonNull public static java.io.File getProductServicesDirectory();
+ method @NonNull public static java.io.File getVendorDirectory();
}
public class HidlSupport {
@@ -5835,6 +5835,7 @@
method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener);
method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String);
method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(String, String, String, boolean);
+ field public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager";
field public static final String NAMESPACE_AUTOFILL = "autofill";
field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
field public static final String NAMESPACE_GAME_DRIVER = "game_driver";
@@ -5843,19 +5844,6 @@
field public static final String NAMESPACE_SYSTEMUI = "systemui";
}
- public static interface DeviceConfig.ActivityManager {
- field public static final String KEY_COMPACT_ACTION_1 = "compact_action_1";
- field public static final String KEY_COMPACT_ACTION_2 = "compact_action_2";
- field public static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate";
- field public static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
- field public static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
- field public static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
- field public static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
- field public static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
- field public static final String KEY_USE_COMPACTION = "use_compaction";
- field public static final String NAMESPACE = "activity_manager";
- }
-
public static interface DeviceConfig.ActivityManagerNativeBoot {
field public static final String NAMESPACE = "activity_manager_native_boot";
field public static final String OFFLOAD_QUEUE_ENABLED = "offload_queue_enabled";
@@ -6405,9 +6393,8 @@
public static final class FillResponse.Builder {
ctor public FillResponse.Builder();
- method public android.service.autofill.augmented.FillResponse build();
- method public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
- method public android.service.autofill.augmented.FillResponse.Builder setIgnoredIds(@NonNull java.util.List<android.view.autofill.AutofillId>);
+ method @NonNull public android.service.autofill.augmented.FillResponse build();
+ method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
}
public final class FillWindow implements java.lang.AutoCloseable {
@@ -6455,9 +6442,9 @@
public final class SnapshotData implements android.os.Parcelable {
method public int describeContents();
- method public android.app.assist.AssistContent getAssistContent();
- method public android.os.Bundle getAssistData();
- method public android.app.assist.AssistStructure getAssistStructure();
+ method @Nullable public android.app.assist.AssistContent getAssistContent();
+ method @NonNull public android.os.Bundle getAssistData();
+ method @NonNull public android.app.assist.AssistStructure getAssistStructure();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
}
@@ -7701,7 +7688,7 @@
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onCallDisconnectCauseChanged(int, int);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
- method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseDataConnectionStateChanged(android.telephony.PreciseDataConnectionState);
+ method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
method public void onRadioPowerStateChanged(int);
method public void onSrvccStateChanged(int);
method public void onVoiceActivationStateChanged(int);
@@ -7736,7 +7723,7 @@
public final class PreciseDataConnectionState implements android.os.Parcelable {
method public int describeContents();
- method public String getDataConnectionApn();
+ method @Nullable public String getDataConnectionApn();
method public int getDataConnectionApnTypeBitMask();
method public int getDataConnectionFailCause();
method public int getDataConnectionState();
@@ -7891,17 +7878,17 @@
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @NonNull java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean);
- field public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff
field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff
- field public static final android.net.Uri VT_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_MODE_CONTENT_URI;
- field public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
+ field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
}
public static class SubscriptionPlan.Builder {
@@ -8533,14 +8520,14 @@
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isVtSettingEnabled();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerMmTelCapabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback) throws android.telephony.ims.ImsException;
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSetting(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSetting(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSetting(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSetting(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterMmTelCapabilityCallback(@NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback);
field public static final int WIFI_MODE_CELLULAR_PREFERRED = 1; // 0x1
@@ -8555,10 +8542,10 @@
public static class ImsMmTelManager.RegistrationCallback {
ctor public ImsMmTelManager.RegistrationCallback();
- method public void onDeregistered(android.telephony.ims.ImsReasonInfo);
method public void onRegistered(int);
method public void onRegistering(int);
method public void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
+ method public void onUnregistered(android.telephony.ims.ImsReasonInfo);
}
public final class ImsReasonInfo implements android.os.Parcelable {
@@ -9848,7 +9835,7 @@
method public default void onMovedToDisplay(int, android.content.res.Configuration);
method public void onOverScrolled(int, int, boolean, boolean);
method public default void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
- method public default void onProvideContentCaptureStructure(android.view.ViewStructure, int);
+ method public default void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
method public void onProvideVirtualStructure(android.view.ViewStructure);
method public void onScrollChanged(int, int, int, int);
method public void onSizeChanged(int, int, int, int);
diff --git a/api/test-current.txt b/api/test-current.txt
index a1d691e..89a2a4c 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -271,6 +271,10 @@
method public void onOpActiveChanged(int, int, String, boolean);
}
+ public class DownloadManager {
+ field public static final String COLUMN_MEDIASTORE_URI = "mediastore_uri";
+ }
+
public final class NotificationChannel implements android.os.Parcelable {
method public boolean isImportanceLockedByOEM();
method public void setImportanceLockedByOEM(boolean);
@@ -778,12 +782,12 @@
public static class BrightnessConfiguration.Builder {
ctor public BrightnessConfiguration.Builder(float[], float[]);
- method public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
- method public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
- method public android.hardware.display.BrightnessConfiguration build();
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
+ method @NonNull public android.hardware.display.BrightnessConfiguration build();
method public int getMaxCorrectionsByCategory();
method public int getMaxCorrectionsByPackageName();
- method public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+ method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
}
public final class BrightnessCorrection implements android.os.Parcelable {
@@ -1412,8 +1416,8 @@
public class Environment {
method public static java.io.File buildPath(java.io.File, java.lang.String...);
- method public static java.io.File getProductDirectory();
- method public static java.io.File getStorageDirectory();
+ method @NonNull public static java.io.File getProductDirectory();
+ method @NonNull public static java.io.File getStorageDirectory();
}
public final class FileUtils {
@@ -1662,7 +1666,7 @@
}
public static final class StrictMode.ThreadPolicy.Builder {
- method public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
}
public static final class StrictMode.ViolationInfo implements android.os.Parcelable {
@@ -2208,9 +2212,8 @@
public static final class FillResponse.Builder {
ctor public FillResponse.Builder();
- method public android.service.autofill.augmented.FillResponse build();
- method public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
- method public android.service.autofill.augmented.FillResponse.Builder setIgnoredIds(@NonNull java.util.List<android.view.autofill.AutofillId>);
+ method @NonNull public android.service.autofill.augmented.FillResponse build();
+ method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
}
public final class FillWindow implements java.lang.AutoCloseable {
@@ -2248,9 +2251,9 @@
public final class SnapshotData implements android.os.Parcelable {
method public int describeContents();
- method public android.app.assist.AssistContent getAssistContent();
- method public android.os.Bundle getAssistData();
- method public android.app.assist.AssistStructure getAssistStructure();
+ method @Nullable public android.app.assist.AssistContent getAssistContent();
+ method @NonNull public android.os.Bundle getAssistData();
+ method @NonNull public android.app.assist.AssistStructure getAssistStructure();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index b18c4de..b654258 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -182,6 +182,7 @@
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.net.InetAddress;
+import java.nio.file.Files;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -6961,6 +6962,23 @@
}
}
+ private void deleteDeprecatedDataPath(String path) throws ErrnoException {
+ final Uri uri = ContentResolver.translateDeprecatedDataPath(path);
+ Log.v(TAG, "Redirecting " + path + " to " + uri);
+
+ final ContentResolver cr = currentActivityThread().getApplication()
+ .getContentResolver();
+ try {
+ if (cr.delete(uri, null, null) == 0) {
+ throw new FileNotFoundException();
+ }
+ } catch (SecurityException e) {
+ throw new ErrnoException(e.getMessage(), OsConstants.EACCES);
+ } catch (FileNotFoundException e) {
+ throw new ErrnoException(e.getMessage(), OsConstants.ENOENT);
+ }
+ }
+
@Override
public boolean access(String path, int mode) throws ErrnoException {
if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
@@ -6995,6 +7013,42 @@
return super.stat(path);
}
}
+
+ @Override
+ public void unlink(String path) throws ErrnoException {
+ if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
+ deleteDeprecatedDataPath(path);
+ } else {
+ super.unlink(path);
+ }
+ }
+
+ @Override
+ public void remove(String path) throws ErrnoException {
+ if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
+ deleteDeprecatedDataPath(path);
+ } else {
+ super.remove(path);
+ }
+ }
+
+ @Override
+ public void rename(String oldPath, String newPath) throws ErrnoException {
+ try {
+ super.rename(oldPath, newPath);
+ } catch (ErrnoException e) {
+ if (e.errno == OsConstants.EXDEV) {
+ Log.v(TAG, "Recovering failed rename " + oldPath + " to " + newPath);
+ try {
+ Files.move(new File(oldPath).toPath(), new File(newPath).toPath());
+ } catch (IOException e2) {
+ throw e;
+ }
+ } else {
+ throw e;
+ }
+ }
+ }
}
public static void main(String[] args) {
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index fde1d29e..e20c490 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -21,6 +21,7 @@
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.ContentUris;
@@ -163,6 +164,10 @@
*/
public static final String COLUMN_MEDIAPROVIDER_URI = Downloads.Impl.COLUMN_MEDIAPROVIDER_URI;
+ /** @hide */
+ @TestApi
+ public static final String COLUMN_MEDIASTORE_URI = Downloads.Impl.COLUMN_MEDIASTORE_URI;
+
/**
* @hide
*/
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index b01cd0e..b16188f 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -129,6 +129,7 @@
oneway void activityIdle(in IBinder token, in Configuration config,
in boolean stopProfiling);
void activityResumed(in IBinder token);
+ void activityTopResumedStateLost();
void activityPaused(in IBinder token);
void activityStopped(in IBinder token, in Bundle state,
in PersistableBundle persistentState, in CharSequence description);
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index dda5569..4f94209 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -52,6 +52,7 @@
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.view.Window;
+import android.view.WindowManagerGlobal;
import com.android.internal.content.ReferrerIntent;
@@ -1102,8 +1103,11 @@
if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) == 0) {
event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
}
- InputManager.getInstance().injectInputEvent(event,
- InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+ try {
+ WindowManagerGlobal.getWindowManagerService().injectInputAfterTransactionsApplied(event,
+ InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+ } catch (RemoteException e) {
+ }
}
/**
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2e7093d..dd7b629 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -3471,6 +3471,7 @@
* @param shortcutId the {@link ShortcutInfo#getId() id} of the shortcut this notification
* supersedes
*/
+ @NonNull
public Builder setShortcutId(String shortcutId) {
mN.mShortcutId = shortcutId;
return this;
@@ -3484,6 +3485,7 @@
*
* Note: This value might be ignored, for launchers that don't support badge icons.
*/
+ @NonNull
public Builder setBadgeIconType(int icon) {
mN.mBadgeIcon = icon;
return this;
@@ -3499,6 +3501,7 @@
*
* <p> The default value is {@link #GROUP_ALERT_ALL}.</p>
*/
+ @NonNull
public Builder setGroupAlertBehavior(@GroupAlertBehavior int groupAlertBehavior) {
mN.mGroupAlertBehavior = groupAlertBehavior;
return this;
@@ -3515,6 +3518,7 @@
* outside of the notification shade on unlocked devices. When a user interacts with the
* collapsed state, the bubble intent will be invoked and displayed.</b>
*/
+ @NonNull
public Builder setBubbleMetadata(BubbleMetadata data) {
mN.mBubbleMetadata = data;
return this;
@@ -3530,6 +3534,7 @@
/**
* Specifies the channel the notification should be delivered on.
*/
+ @NonNull
public Builder setChannelId(String channelId) {
mN.mChannelId = channelId;
return this;
@@ -3546,6 +3551,7 @@
* Specifies a duration in milliseconds after which this notification should be canceled,
* if it is not already canceled.
*/
+ @NonNull
public Builder setTimeoutAfter(long durationMs) {
mN.mTimeout = durationMs;
return this;
@@ -3560,6 +3566,7 @@
*
* @see Notification#when
*/
+ @NonNull
public Builder setWhen(long when) {
mN.when = when;
return this;
@@ -3571,6 +3578,7 @@
* For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this defaults to
* {@code false}. For earlier apps, the default is {@code true}.
*/
+ @NonNull
public Builder setShowWhen(boolean show) {
mN.extras.putBoolean(EXTRA_SHOW_WHEN, show);
return this;
@@ -3591,6 +3599,7 @@
* @see Notification#when
* @see #setChronometerCountDown(boolean)
*/
+ @NonNull
public Builder setUsesChronometer(boolean b) {
mN.extras.putBoolean(EXTRA_SHOW_CHRONOMETER, b);
return this;
@@ -3604,6 +3613,7 @@
*
* @see #setUsesChronometer(boolean)
*/
+ @NonNull
public Builder setChronometerCountDown(boolean countDown) {
mN.extras.putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN, countDown);
return this;
@@ -3623,6 +3633,7 @@
* A resource ID in the application's package of the drawable to use.
* @see Notification#icon
*/
+ @NonNull
public Builder setSmallIcon(@DrawableRes int icon) {
return setSmallIcon(icon != 0
? Icon.createWithResource(mContext, icon)
@@ -3640,6 +3651,7 @@
* @see Notification#icon
* @see Notification#iconLevel
*/
+ @NonNull
public Builder setSmallIcon(@DrawableRes int icon, int level) {
mN.iconLevel = level;
return setSmallIcon(icon);
@@ -3653,6 +3665,7 @@
* @param icon An Icon object to use.
* @see Notification#icon
*/
+ @NonNull
public Builder setSmallIcon(Icon icon) {
mN.setSmallIcon(icon);
if (icon != null && icon.getType() == Icon.TYPE_RESOURCE) {
@@ -3664,6 +3677,7 @@
/**
* Set the first line of text in the platform notification template.
*/
+ @NonNull
public Builder setContentTitle(CharSequence title) {
mN.extras.putCharSequence(EXTRA_TITLE, safeCharSequence(title));
return this;
@@ -3672,6 +3686,7 @@
/**
* Set the second line of text in the platform notification template.
*/
+ @NonNull
public Builder setContentText(CharSequence text) {
mN.extras.putCharSequence(EXTRA_TEXT, safeCharSequence(text));
return this;
@@ -3695,6 +3710,7 @@
* same time on those versions; they occupy the same place.
* </p>
*/
+ @NonNull
public Builder setSubText(CharSequence text) {
mN.extras.putCharSequence(EXTRA_SUB_TEXT, safeCharSequence(text));
return this;
@@ -3713,6 +3729,7 @@
* @param text
* @return
*/
+ @NonNull
public Builder setSettingsText(CharSequence text) {
mN.mSettingsText = safeCharSequence(text);
return this;
@@ -3732,6 +3749,7 @@
* <p>Note: The reply text will only be shown on notifications that have least one action
* with a {@code RemoteInput}.</p>
*/
+ @NonNull
public Builder setRemoteInputHistory(CharSequence[] text) {
if (text == null) {
mN.extras.putCharSequenceArray(EXTRA_REMOTE_INPUT_HISTORY, null);
@@ -3750,6 +3768,7 @@
* Sets whether remote history entries view should have a spinner.
* @hide
*/
+ @NonNull
public Builder setShowRemoteInputSpinner(boolean showSpinner) {
mN.extras.putBoolean(EXTRA_SHOW_REMOTE_INPUT_SPINNER, showSpinner);
return this;
@@ -3759,6 +3778,7 @@
* Sets whether smart reply buttons should be hidden.
* @hide
*/
+ @NonNull
public Builder setHideSmartReplies(boolean hideSmartReplies) {
mN.extras.putBoolean(EXTRA_HIDE_SMART_REPLIES, hideSmartReplies);
return this;
@@ -3768,6 +3788,7 @@
* Sets the number of items this notification represents. May be displayed as a badge count
* for Launchers that support badging.
*/
+ @NonNull
public Builder setNumber(int number) {
mN.number = number;
return this;
@@ -3794,6 +3815,7 @@
*
* The platform template will represent this using a {@link ProgressBar}.
*/
+ @NonNull
public Builder setProgress(int max, int progress, boolean indeterminate) {
mN.extras.putInt(EXTRA_PROGRESS, progress);
mN.extras.putInt(EXTRA_PROGRESS_MAX, max);
@@ -3817,6 +3839,7 @@
* This will override the layout that would otherwise be constructed by this Builder
* object.
*/
+ @NonNull
public Builder setCustomContentView(RemoteViews contentView) {
mN.contentView = contentView;
return this;
@@ -3828,6 +3851,7 @@
* This will override the expanded layout that would otherwise be constructed by this
* Builder object.
*/
+ @NonNull
public Builder setCustomBigContentView(RemoteViews contentView) {
mN.bigContentView = contentView;
return this;
@@ -3839,6 +3863,7 @@
* This will override the heads-up layout that would otherwise be constructed by this
* Builder object.
*/
+ @NonNull
public Builder setCustomHeadsUpContentView(RemoteViews contentView) {
mN.headsUpContentView = contentView;
return this;
@@ -3855,6 +3880,7 @@
*
* @see Notification#contentIntent Notification.contentIntent
*/
+ @NonNull
public Builder setContentIntent(PendingIntent intent) {
mN.contentIntent = intent;
return this;
@@ -3865,6 +3891,7 @@
*
* @see Notification#deleteIntent
*/
+ @NonNull
public Builder setDeleteIntent(PendingIntent intent) {
mN.deleteIntent = intent;
return this;
@@ -3893,6 +3920,7 @@
*
* @see Notification#fullScreenIntent
*/
+ @NonNull
public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) {
mN.fullScreenIntent = intent;
setFlag(FLAG_HIGH_PRIORITY, highPriority);
@@ -3904,6 +3932,7 @@
*
* @see Notification#tickerText
*/
+ @NonNull
public Builder setTicker(CharSequence tickerText) {
mN.tickerText = safeCharSequence(tickerText);
return this;
@@ -3927,6 +3956,7 @@
* in place of the {@link #setSmallIcon(Icon) small icon} (which will be placed in a small
* badge atop the large icon).
*/
+ @NonNull
public Builder setLargeIcon(Bitmap b) {
return setLargeIcon(b != null ? Icon.createWithBitmap(b) : null);
}
@@ -3938,6 +3968,7 @@
* in place of the {@link #setSmallIcon(Icon) small icon} (which will be placed in a small
* badge atop the large icon).
*/
+ @NonNull
public Builder setLargeIcon(Icon icon) {
mN.mLargeIcon = icon;
mN.extras.putParcelable(EXTRA_LARGE_ICON, icon);
@@ -4045,6 +4076,7 @@
* @see Notification#FLAG_ONGOING_EVENT
*/
+ @NonNull
public Builder setOngoing(boolean ongoing) {
setFlag(FLAG_ONGOING_EVENT, ongoing);
return this;
@@ -4065,6 +4097,7 @@
* @see #setColor(int)
* @see MediaStyle#setMediaSession(MediaSession.Token)
*/
+ @NonNull
public Builder setColorized(boolean colorize) {
mN.extras.putBoolean(EXTRA_COLORIZED, colorize);
return this;
@@ -4076,6 +4109,7 @@
*
* @see Notification#FLAG_ONLY_ALERT_ONCE
*/
+ @NonNull
public Builder setOnlyAlertOnce(boolean onlyAlertOnce) {
setFlag(FLAG_ONLY_ALERT_ONCE, onlyAlertOnce);
return this;
@@ -4086,6 +4120,7 @@
*
* @see Notification#FLAG_AUTO_CANCEL
*/
+ @NonNull
public Builder setAutoCancel(boolean autoCancel) {
setFlag(FLAG_AUTO_CANCEL, autoCancel);
return this;
@@ -4097,6 +4132,7 @@
* <p>Some notifications can be bridged to other devices for remote display.
* This hint can be set to recommend this notification not be bridged.
*/
+ @NonNull
public Builder setLocalOnly(boolean localOnly) {
setFlag(FLAG_LOCAL_ONLY, localOnly);
return this;
@@ -4138,6 +4174,7 @@
*
* @see Notification#category
*/
+ @NonNull
public Builder setCategory(String category) {
mN.category = category;
return this;
@@ -4195,6 +4232,7 @@
* @param person the person to add.
* @see Notification#EXTRA_PEOPLE_LIST
*/
+ @NonNull
public Builder addPerson(Person person) {
mPersonList.add(person);
return this;
@@ -4211,6 +4249,7 @@
* @param groupKey The group key of the group.
* @return this object for method chaining
*/
+ @NonNull
public Builder setGroup(String groupKey) {
mN.mGroupKey = groupKey;
return this;
@@ -4224,6 +4263,7 @@
* @param isGroupSummary Whether this notification should be a group summary.
* @return this object for method chaining
*/
+ @NonNull
public Builder setGroupSummary(boolean isGroupSummary) {
setFlag(FLAG_GROUP_SUMMARY, isGroupSummary);
return this;
@@ -4241,6 +4281,7 @@
*
* @see String#compareTo(String)
*/
+ @NonNull
public Builder setSortKey(String sortKey) {
mN.mSortKey = sortKey;
return this;
@@ -4253,6 +4294,7 @@
*
* @see Notification#extras
*/
+ @NonNull
public Builder addExtras(Bundle extras) {
if (extras != null) {
mUserExtras.putAll(extras);
@@ -4272,6 +4314,7 @@
*
* @see Notification#extras
*/
+ @NonNull
public Builder setExtras(Bundle extras) {
if (extras != null) {
mUserExtras = extras;
@@ -4339,6 +4382,7 @@
*
* @param action The action to add.
*/
+ @NonNull
public Builder addAction(Action action) {
if (action != null) {
mActions.add(action);
@@ -4353,6 +4397,7 @@
* @param actions
* @return
*/
+ @NonNull
public Builder setActions(Action... actions) {
mActions.clear();
for (int i = 0; i < actions.length; i++) {
@@ -4368,6 +4413,7 @@
*
* @param style Object responsible for modifying the notification style.
*/
+ @NonNull
public Builder setStyle(Style style) {
if (mStyle != style) {
mStyle = style;
@@ -4393,6 +4439,7 @@
*
* @return The same Builder.
*/
+ @NonNull
public Builder setVisibility(@Visibility int visibility) {
mN.visibility = visibility;
return this;
@@ -4404,6 +4451,7 @@
* @param n A replacement notification, presumably with some or all info redacted.
* @return The same Builder.
*/
+ @NonNull
public Builder setPublicVersion(Notification n) {
if (n != null) {
mN.publicVersion = new Notification();
@@ -4418,6 +4466,7 @@
* Apply an extender to this notification builder. Extenders may be used to add
* metadata or change options on this builder.
*/
+ @NonNull
public Builder extend(Extender extender) {
extender.extend(this);
return this;
@@ -4426,6 +4475,7 @@
/**
* @hide
*/
+ @NonNull
public Builder setFlag(int mask, boolean value) {
if (value) {
mN.flags |= mask;
@@ -4442,6 +4492,7 @@
*
* @return The same Builder.
*/
+ @NonNull
public Builder setColor(@ColorInt int argb) {
mN.color = argb;
sanitizeColor();
@@ -5674,6 +5725,7 @@
* Apply the unstyled operations and return a new {@link Notification} object.
* @hide
*/
+ @NonNull
public Notification buildUnstyled() {
if (mActions.size() > 0) {
mN.actions = new Action[mActions.size()];
@@ -5694,6 +5746,7 @@
* @param context The context for your application / activity.
* @param n The notification to create a Builder from.
*/
+ @NonNull
public static Notification.Builder recoverBuilder(Context context, Notification n) {
// Re-create notification context so we can access app resources.
ApplicationInfo applicationInfo = n.extras.getParcelable(
@@ -5718,6 +5771,7 @@
* Determines whether the platform can generate contextual actions for a notification.
* By default this is true.
*/
+ @NonNull
public Builder setAllowSystemGeneratedContextualActions(boolean allowed) {
mN.mAllowSystemGeneratedContextualActions = allowed;
return this;
@@ -5735,6 +5789,7 @@
* Combine all of the options that have been set and return a new {@link Notification}
* object.
*/
+ @NonNull
public Notification build() {
// first, add any extras from the calling code
if (mUserExtras != null) {
@@ -5793,7 +5848,8 @@
*
* @hide
*/
- public Notification buildInto(Notification n) {
+ @NonNull
+ public Notification buildInto(@NonNull Notification n) {
build().cloneInto(n, true);
return n;
}
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index 077652c..9ff363d 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -17,7 +17,9 @@
package android.app;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage;
@@ -364,6 +366,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.STATUS_BAR)
public void setDisabledForSetup(boolean disabled) {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
@@ -387,6 +390,8 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.STATUS_BAR)
+ @NonNull
public DisableInfo getDisableInfo() {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
@@ -518,7 +523,7 @@
* @hide
*/
@SystemApi
- public boolean areNoComponentsDisabled() {
+ public boolean areAllComponentsEnabled() {
return !mStatusBarExpansion && !mNavigateHome && !mNotificationPeeking && !mRecents
&& !mSearch;
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index a32e01f..d593ad1 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -59,7 +59,6 @@
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
-import android.os.ParcelableException;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteCallback;
@@ -1453,7 +1452,7 @@
* Constant for {@link #getPasswordComplexity()}: password satisfies one of the following:
* <ul>
* <li>PIN with <b>no</b> repeating (4444) or ordered (1234, 4321, 2468) sequences, length at
- * least 4
+ * least 8
* <li>alphabetic, length at least 6
* <li>alphanumeric, length at least 6
* </ul>
diff --git a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java
index 4064a02..ad2006c 100644
--- a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java
+++ b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java
@@ -17,9 +17,11 @@
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
+import android.app.ActivityTaskManager;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
import android.os.Parcel;
+import android.os.RemoteException;
import android.os.Trace;
/**
@@ -38,6 +40,26 @@
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
+ @Override
+ public void postExecute(ClientTransactionHandler client, IBinder token,
+ PendingTransactionActions pendingActions) {
+ if (mOnTop) {
+ return;
+ }
+
+ // The loss of top resumed state can always be reported immediately in postExecute
+ // because only three cases are possible:
+ // 1. Activity is in RESUMED state now and it just handled the callback in #execute().
+ // 2. Activity wasn't RESUMED yet, which means that it didn't receive the top state yet.
+ // 3. Activity is PAUSED or in other lifecycle state after PAUSED. In this case top resumed
+ // state loss was already called right before pausing.
+ try {
+ ActivityTaskManager.getService().activityTopResumedStateLost();
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
// ObjectPoolItem implementation
diff --git a/core/java/android/app/servertransaction/WindowVisibilityItem.java b/core/java/android/app/servertransaction/WindowVisibilityItem.java
index d9956b1..6bdd313 100644
--- a/core/java/android/app/servertransaction/WindowVisibilityItem.java
+++ b/core/java/android/app/servertransaction/WindowVisibilityItem.java
@@ -34,7 +34,8 @@
@Override
public void execute(ClientTransactionHandler client, IBinder token,
PendingTransactionActions pendingActions) {
- Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityShowWindow");
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ mShowWindow ? "activityShowWindow" : "activityHideWindow");
client.handleWindowVisibility(token, mShowWindow);
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index 9c6bd92..d34e6d3 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -195,6 +195,8 @@
/** @hide */
public static final int REASON_SUB_USAGE_EXEMPTED_SYNC_START = 0x000D;
/** @hide */
+ public static final int REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED = 0x000E;
+ /** @hide */
public static final int REASON_SUB_PREDICTED_RESTORED = 0x0001;
@@ -972,6 +974,9 @@
case REASON_SUB_USAGE_EXEMPTED_SYNC_START:
sb.append("-es");
break;
+ case REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED:
+ sb.append("-uss");
+ break;
}
break;
}
diff --git a/core/java/android/app/usage/UsageStatsManagerInternal.java b/core/java/android/app/usage/UsageStatsManagerInternal.java
index 43ce521..bbec6b3 100644
--- a/core/java/android/app/usage/UsageStatsManagerInternal.java
+++ b/core/java/android/app/usage/UsageStatsManagerInternal.java
@@ -257,12 +257,14 @@
int numDeferredJobs, long timeSinceLastJobRun);
/**
- * Report a sync is scheduled by a foreground app.
+ * Report a sync that was scheduled.
*
* @param packageName name of the package that owns the sync adapter.
* @param userId which user the app is associated with
+ * @param exempted is sync app standby exempted
*/
- public abstract void reportExemptedSyncScheduled(String packageName, @UserIdInt int userId);
+ public abstract void reportSyncScheduled(String packageName, @UserIdInt int userId,
+ boolean exempted);
/**
* Report a sync that was scheduled by a foreground app is about to be executed.
diff --git a/core/java/android/content/LocusId.java b/core/java/android/content/LocusId.java
index 9548f9c..d669728 100644
--- a/core/java/android/content/LocusId.java
+++ b/core/java/android/content/LocusId.java
@@ -101,12 +101,14 @@
public static final Parcelable.Creator<LocusId> CREATOR =
new Parcelable.Creator<LocusId>() {
+ @NonNull
@Override
public LocusId createFromParcel(Parcel source) {
final Uri uri = source.readParcelable(null);
return new LocusId(uri);
}
+ @NonNull
@Override
public LocusId[] newArray(int size) {
return new LocusId[size];
diff --git a/core/java/android/content/pm/BaseParceledListSlice.java b/core/java/android/content/pm/BaseParceledListSlice.java
index a3e5d6d..4178309 100644
--- a/core/java/android/content/pm/BaseParceledListSlice.java
+++ b/core/java/android/content/pm/BaseParceledListSlice.java
@@ -128,8 +128,8 @@
private static void verifySameType(final Class<?> expected, final Class<?> actual) {
if (!actual.equals(expected)) {
throw new IllegalArgumentException("Can't unparcel type "
- + actual.getName() + " in list of type "
- + expected.getName());
+ + (actual == null ? null : actual.getName()) + " in list of type "
+ + (expected == null ? null : expected.getName()));
}
}
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 270e387..2c1842c 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -160,6 +160,14 @@
* @return whether the default browser was successfully set.
*/
boolean setDefaultBrowser(@Nullable String packageName, @UserIdInt int userId);
+
+ /**
+ * Set the package name of the default browser asynchronously.
+ *
+ * @param packageName package name of the default browser, or {@code null} to remove
+ * @param userId the user id
+ */
+ void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId);
}
/**
diff --git a/core/java/android/database/Cursor.java b/core/java/android/database/Cursor.java
index 1379138..2afb755 100644
--- a/core/java/android/database/Cursor.java
+++ b/core/java/android/database/Cursor.java
@@ -17,6 +17,7 @@
package android.database;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.ContentResolver;
import android.net.Uri;
import android.os.Bundle;
@@ -473,7 +474,7 @@
* ContentResolver.registerContentObserver} to find out about changes to this Cursor's
* data. May be null if no notification URI has been set.
*/
- default List<Uri> getNotificationUris() {
+ default @Nullable List<Uri> getNotificationUris() {
final Uri notifyUri = getNotificationUri();
return notifyUri == null ? null : Arrays.asList(notifyUri);
}
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index 03e8507..a73a719 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -89,7 +89,7 @@
*
* @return the list of tables being queried
*/
- public String getTables() {
+ public @Nullable String getTables() {
return mTables;
}
@@ -101,7 +101,7 @@
*
* @param inTables the list of tables to query on
*/
- public void setTables(String inTables) {
+ public void setTables(@Nullable String inTables) {
mTables = inTables;
}
@@ -170,7 +170,7 @@
*
* @param columnMap maps from the user column names to the database column names
*/
- public void setProjectionMap(Map<String, String> columnMap) {
+ public void setProjectionMap(@Nullable Map<String, String> columnMap) {
mProjectionMap = columnMap;
}
@@ -178,7 +178,7 @@
* Gets the projection map for the query, as last configured by
* {@link #setProjectionMap(Map)}.
*/
- public Map<String, String> getProjectionMap() {
+ public @Nullable Map<String, String> getProjectionMap() {
return mProjectionMap;
}
@@ -189,7 +189,7 @@
*
* @hide
*/
- public void setProjectionGreylist(List<Pattern> projectionGreylist) {
+ public void setProjectionGreylist(@Nullable List<Pattern> projectionGreylist) {
mProjectionGreylist = projectionGreylist;
}
@@ -199,7 +199,7 @@
*
* @hide
*/
- public List<Pattern> getProjectionGreylist() {
+ public @Nullable List<Pattern> getProjectionGreylist() {
return mProjectionGreylist;
}
@@ -210,7 +210,7 @@
*
* @param factory the factory to use.
*/
- public void setCursorFactory(SQLiteDatabase.CursorFactory factory) {
+ public void setCursorFactory(@Nullable SQLiteDatabase.CursorFactory factory) {
mFactory = factory;
}
@@ -218,7 +218,7 @@
* Sets the cursor factory to be used for the query, as last configured by
* {@link #setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory)}.
*/
- public SQLiteDatabase.CursorFactory getCursorFactory() {
+ public @Nullable SQLiteDatabase.CursorFactory getCursorFactory() {
return mFactory;
}
diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java
index baf972b..c64e48f 100644
--- a/core/java/android/hardware/biometrics/BiometricPrompt.java
+++ b/core/java/android/hardware/biometrics/BiometricPrompt.java
@@ -139,7 +139,7 @@
* @param title
* @return
*/
- public Builder setTitle(@NonNull CharSequence title) {
+ @NonNull public Builder setTitle(@NonNull CharSequence title) {
mBundle.putCharSequence(KEY_TITLE, title);
return this;
}
@@ -150,7 +150,7 @@
* @hide
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
- public Builder setUseDefaultTitle() {
+ @NonNull public Builder setUseDefaultTitle() {
mBundle.putBoolean(KEY_USE_DEFAULT_TITLE, true);
return this;
}
@@ -160,7 +160,7 @@
* @param subtitle
* @return
*/
- public Builder setSubtitle(@NonNull CharSequence subtitle) {
+ @NonNull public Builder setSubtitle(@NonNull CharSequence subtitle) {
mBundle.putCharSequence(KEY_SUBTITLE, subtitle);
return this;
}
@@ -170,7 +170,7 @@
* @param description
* @return
*/
- public Builder setDescription(@NonNull CharSequence description) {
+ @NonNull public Builder setDescription(@NonNull CharSequence description) {
mBundle.putCharSequence(KEY_DESCRIPTION, description);
return this;
}
@@ -182,7 +182,7 @@
* @return
* @hide
*/
- public Builder setPositiveButton(@NonNull CharSequence text,
+ @NonNull public Builder setPositiveButton(@NonNull CharSequence text,
@NonNull @CallbackExecutor Executor executor,
@NonNull DialogInterface.OnClickListener listener) {
if (TextUtils.isEmpty(text)) {
@@ -210,7 +210,7 @@
* @param text
* @return
*/
- public Builder setNegativeButton(@NonNull CharSequence text,
+ @NonNull public Builder setNegativeButton(@NonNull CharSequence text,
@NonNull @CallbackExecutor Executor executor,
@NonNull DialogInterface.OnClickListener listener) {
if (TextUtils.isEmpty(text)) {
@@ -245,7 +245,7 @@
*
* @param requireConfirmation
*/
- public Builder setRequireConfirmation(boolean requireConfirmation) {
+ @NonNull public Builder setRequireConfirmation(boolean requireConfirmation) {
mBundle.putBoolean(KEY_REQUIRE_CONFIRMATION, requireConfirmation);
return this;
}
@@ -255,7 +255,8 @@
* option to authenticate with their device PIN, pattern, or password. Developers should
* first check {@link KeyguardManager#isDeviceSecure()} before enabling this. If the device
* is not secure, {@link BiometricPrompt#BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL} will be
- * returned in {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)}}
+ * returned in {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)}}.
+ * Defaults to false.
*
* Note that {@link #setNegativeButton(CharSequence, Executor,
* DialogInterface.OnClickListener)} should not be set if this is set to true.
@@ -264,7 +265,7 @@
* credentials (PIN, pattern, or password).
* @return
*/
- public Builder setAllowDeviceCredential(boolean enable) {
+ @NonNull public Builder setAllowDeviceCredential(boolean enable) {
mBundle.putBoolean(KEY_ALLOW_DEVICE_CREDENTIAL, enable);
return this;
}
@@ -274,7 +275,7 @@
* @return a {@link BiometricPrompt}
* @throws IllegalArgumentException if any of the required fields are not set.
*/
- public BiometricPrompt build() {
+ @NonNull public BiometricPrompt build() {
final CharSequence title = mBundle.getCharSequence(KEY_TITLE);
final CharSequence negative = mBundle.getCharSequence(KEY_NEGATIVE_TEXT);
final boolean useDefaultTitle = mBundle.getBoolean(KEY_USE_DEFAULT_TITLE);
@@ -616,8 +617,15 @@
mExecutor = executor;
mAuthenticationCallback = callback;
final long sessionId = crypto != null ? crypto.getOpId() : 0;
- mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver,
- mContext.getOpPackageName(), mBundle);
+ if (BiometricManager.hasBiometrics(mContext)) {
+ mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver,
+ mContext.getOpPackageName(), mBundle);
+ } else {
+ mExecutor.execute(() -> {
+ callback.onAuthenticationError(BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT,
+ mContext.getString(R.string.biometric_error_hw_unavailable));
+ });
+ }
} catch (RemoteException e) {
Log.e(TAG, "Remote exception while authenticating", e);
mExecutor.execute(() -> {
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 0e4ff78..f7b7ef2 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -682,6 +682,7 @@
* @see CaptureRequest#COLOR_CORRECTION_ABERRATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES =
new Key<int[]>("android.colorCorrection.availableAberrationModes", int[].class);
@@ -700,6 +701,7 @@
* @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES =
new Key<int[]>("android.control.aeAvailableAntibandingModes", int[].class);
@@ -725,6 +727,7 @@
* @see CaptureRequest#CONTROL_AE_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AE_AVAILABLE_MODES =
new Key<int[]>("android.control.aeAvailableModes", int[].class);
@@ -764,6 +767,7 @@
* @see CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES =
new Key<android.util.Range<Integer>[]>("android.control.aeAvailableTargetFpsRanges", new TypeReference<android.util.Range<Integer>[]>() {{ }});
@@ -784,6 +788,7 @@
* @see CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_COMPENSATION_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeCompensationRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -801,6 +806,7 @@
* @see CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
*/
@PublicKey
+ @NonNull
public static final Key<Rational> CONTROL_AE_COMPENSATION_STEP =
new Key<Rational>("android.control.aeCompensationStep", Rational.class);
@@ -825,6 +831,7 @@
* @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AF_AVAILABLE_MODES =
new Key<int[]>("android.control.afAvailableModes", int[].class);
@@ -848,6 +855,7 @@
* @see CaptureRequest#CONTROL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_EFFECTS =
new Key<int[]>("android.control.availableEffects", int[].class);
@@ -871,6 +879,7 @@
* @see CameraCharacteristics#STATISTICS_INFO_MAX_FACE_COUNT
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_SCENE_MODES =
new Key<int[]>("android.control.availableSceneModes", int[].class);
@@ -885,6 +894,7 @@
* @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES =
new Key<int[]>("android.control.availableVideoStabilizationModes", int[].class);
@@ -909,6 +919,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AWB_AVAILABLE_MODES =
new Key<int[]>("android.control.awbAvailableModes", int[].class);
@@ -945,6 +956,7 @@
* @see CaptureRequest#CONTROL_AE_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AE =
new Key<Integer>("android.control.maxRegionsAe", int.class);
@@ -961,6 +973,7 @@
* @see CaptureRequest#CONTROL_AWB_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AWB =
new Key<Integer>("android.control.maxRegionsAwb", int.class);
@@ -977,6 +990,7 @@
* @see CaptureRequest#CONTROL_AF_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AF =
new Key<Integer>("android.control.maxRegionsAf", int.class);
@@ -1025,7 +1039,7 @@
* normal capture session, or it will cause request error.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>For each configuration, the fps_max >= 120fps.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1046,6 +1060,7 @@
* @see CaptureRequest#CONTROL_AE_LOCK
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK_AVAILABLE =
new Key<Boolean>("android.control.aeLockAvailable", boolean.class);
@@ -1058,6 +1073,7 @@
* @see CaptureRequest#CONTROL_AWB_LOCK
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK_AVAILABLE =
new Key<Boolean>("android.control.awbLockAvailable", boolean.class);
@@ -1074,6 +1090,7 @@
* @see CaptureRequest#CONTROL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_MODES =
new Key<int[]>("android.control.availableModes", int[].class);
@@ -1088,12 +1105,13 @@
* present, and if a device does not support post RAW sensitivity boost, it will
* list <code>(100, 100)</code> in this key.</p>
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE =
new Key<android.util.Range<Integer>>("android.control.postRawSensitivityBoostRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -1105,7 +1123,7 @@
* list FAST.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#EDGE_MODE android.edge.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1114,6 +1132,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<int[]> EDGE_AVAILABLE_EDGE_MODES =
new Key<int[]>("android.edge.availableEdgeModes", int[].class);
@@ -1126,6 +1145,7 @@
* This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> FLASH_INFO_AVAILABLE =
new Key<Boolean>("android.flash.info.available", boolean.class);
@@ -1135,11 +1155,12 @@
* <p>FULL mode camera devices will always support FAST.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#HOT_PIXEL_MODE android.hotPixel.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#HOT_PIXEL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES =
new Key<int[]>("android.hotPixel.availableHotPixelModes", int[].class);
@@ -1167,6 +1188,7 @@
* @see CaptureRequest#JPEG_THUMBNAIL_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES =
new Key<android.util.Size[]>("android.jpeg.availableThumbnailSizes", android.util.Size[].class);
@@ -1178,7 +1200,7 @@
* <p>If the camera device supports a variable aperture, the aperture values
* in this list will be sorted in ascending order.</p>
* <p><b>Units</b>: The aperture f-number</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1187,6 +1209,7 @@
* @see CaptureRequest#LENS_APERTURE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_APERTURES =
new Key<float[]>("android.lens.info.availableApertures", float[].class);
@@ -1199,7 +1222,7 @@
* <p><b>Units</b>: Exposure value (EV)</p>
* <p><b>Range of valid values:</b><br></p>
* <p>Values are >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1208,6 +1231,7 @@
* @see CaptureRequest#LENS_FILTER_DENSITY
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES =
new Key<float[]>("android.lens.info.availableFilterDensities", float[].class);
@@ -1226,6 +1250,7 @@
* @see CaptureRequest#LENS_FOCAL_LENGTH
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS =
new Key<float[]>("android.lens.info.availableFocalLengths", float[].class);
@@ -1236,7 +1261,7 @@
* contain only OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE android.lens.opticalStabilizationMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1245,6 +1270,7 @@
* @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION =
new Key<int[]>("android.lens.info.availableOpticalStabilization", int[].class);
@@ -1256,7 +1282,7 @@
* <p><b>Range of valid values:</b><br>
* If lens is fixed focus, >= 0. If lens has focuser unit, the value is
* within <code>(0.0f, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}]</code></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1267,6 +1293,7 @@
* @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_INFO_HYPERFOCAL_DISTANCE =
new Key<Float>("android.lens.info.hyperfocalDistance", float.class);
@@ -1278,7 +1305,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1288,6 +1315,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE =
new Key<Float>("android.lens.info.minimumFocusDistance", float.class);
@@ -1297,7 +1325,7 @@
* must be smaller than 64x64.</p>
* <p><b>Range of valid values:</b><br>
* Both values >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1329,7 +1357,7 @@
* <li>{@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE APPROXIMATE}</li>
* <li>{@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED CALIBRATED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1344,6 +1372,7 @@
* @see #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION =
new Key<Integer>("android.lens.info.focusDistanceCalibration", int.class);
@@ -1362,6 +1391,7 @@
* @see #LENS_FACING_EXTERNAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_FACING =
new Key<Integer>("android.lens.facing", int.class);
@@ -1396,10 +1426,11 @@
* <code>p'</code> is in the camera-oriented coordinate system.</p>
* <p><b>Units</b>:
* Quaternion coefficients</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_ROTATION =
new Key<float[]>("android.lens.poseRotation", float[].class);
@@ -1432,7 +1463,7 @@
* the center of the primary gyroscope on the device. The axis definitions are the same as
* with PRIMARY_CAMERA.</p>
* <p><b>Units</b>: Meters</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -1441,6 +1472,7 @@
* @see CameraCharacteristics#LENS_POSE_ROTATION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_TRANSLATION =
new Key<float[]>("android.lens.poseTranslation", float[].class);
@@ -1504,7 +1536,7 @@
* Pixels in the
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* coordinate system.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -1514,6 +1546,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INTRINSIC_CALIBRATION =
new Key<float[]>("android.lens.intrinsicCalibration", float[].class);
@@ -1548,7 +1581,7 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
@@ -1561,6 +1594,7 @@
*/
@Deprecated
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_RADIAL_DISTORTION =
new Key<float[]>("android.lens.radialDistortion", float[].class);
@@ -1573,7 +1607,7 @@
* <li>{@link #LENS_POSE_REFERENCE_PRIMARY_CAMERA PRIMARY_CAMERA}</li>
* <li>{@link #LENS_POSE_REFERENCE_GYROSCOPE GYROSCOPE}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_POSE_TRANSLATION
@@ -1581,6 +1615,7 @@
* @see #LENS_POSE_REFERENCE_GYROSCOPE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_POSE_REFERENCE =
new Key<Integer>("android.lens.poseReference", int.class);
@@ -1615,13 +1650,14 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
* @see CameraCharacteristics#LENS_RADIAL_DISTORTION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_DISTORTION =
new Key<float[]>("android.lens.distortion", float[].class);
@@ -1634,7 +1670,7 @@
* <p>Legacy-capability camera devices will only support FAST mode.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1643,6 +1679,7 @@
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES =
new Key<int[]>("android.noiseReduction.availableNoiseReductionModes", int[].class);
@@ -1655,7 +1692,7 @@
* future versions of camera service. This quirk will stop
* working at that point; DO NOT USE without careful
* consideration of future support.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer; replaced by better partials mechanism</p>
@@ -1728,6 +1765,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_RAW =
new Key<Integer>("android.request.maxNumOutputRaw", int.class);
@@ -1764,6 +1802,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_PROC =
new Key<Integer>("android.request.maxNumOutputProc", int.class);
@@ -1790,6 +1829,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING =
new Key<Integer>("android.request.maxNumOutputProcStalling", int.class);
@@ -1809,7 +1849,7 @@
* should be JPEG.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>0 or 1.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1817,6 +1857,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REQUEST_MAX_NUM_INPUT_STREAMS =
new Key<Integer>("android.request.maxNumInputStreams", int.class);
@@ -1841,6 +1882,7 @@
* @see CaptureResult#REQUEST_PIPELINE_DEPTH
*/
@PublicKey
+ @NonNull
public static final Key<Byte> REQUEST_PIPELINE_MAX_DEPTH =
new Key<Byte>("android.request.pipelineMaxDepth", byte.class);
@@ -1861,9 +1903,10 @@
* partial results.</p>
* <p><b>Range of valid values:</b><br>
* >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REQUEST_PARTIAL_RESULT_COUNT =
new Key<Integer>("android.request.partialResultCount", int.class);
@@ -1923,6 +1966,7 @@
* @see #REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
*/
@PublicKey
+ @NonNull
public static final Key<int[]> REQUEST_AVAILABLE_CAPABILITIES =
new Key<int[]>("android.request.availableCapabilities", int[].class);
@@ -2036,7 +2080,7 @@
* {@link CaptureRequest.Builder#getPhysicalCameraKey }. Capture requests that contain
* individual physical device requests must be built via
* {@link android.hardware.camera2.CameraDevice#createCaptureRequest(int, Set)}.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2067,7 +2111,7 @@
* camera device for output streams.</p>
* <p>All camera devices will support JPEG and YUV_420_888 formats.</p>
* <p>When set to YUV_420_888, application can access the YUV420 data directly.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2089,7 +2133,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* TODO: Remove property.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2105,7 +2149,7 @@
* sensor maximum resolution (defined by {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}).</p>
* <p><b>Range of valid values:</b><br>
* TODO: Remove property.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @deprecated
@@ -2135,6 +2179,7 @@
* @see CaptureRequest#SCALER_CROP_REGION
*/
@PublicKey
+ @NonNull
public static final Key<Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM =
new Key<Float>("android.scaler.availableMaxDigitalZoom", float.class);
@@ -2148,7 +2193,7 @@
* <p>When multiple streams are configured, the minimum frame duration will
* be >= max(individual stream min durations).</p>
* <p><b>Units</b>: Nanoseconds</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2172,7 +2217,7 @@
* can provide.</p>
* <p>Please reference the documentation for the image data destination to
* check if it limits the maximum size for image data.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2257,7 +2302,7 @@
* </tr>
* </tbody>
* </table>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
@@ -2551,6 +2596,7 @@
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP =
new Key<android.hardware.camera2.params.StreamConfigurationMap>("android.scaler.streamConfigurationMap", android.hardware.camera2.params.StreamConfigurationMap.class);
@@ -2579,6 +2625,7 @@
* @see #SCALER_CROPPING_TYPE_FREEFORM
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SCALER_CROPPING_TYPE =
new Key<Integer>("android.scaler.croppingType", int.class);
@@ -2591,7 +2638,7 @@
* power and performance efficient for specific use cases. For more information about
* retrieving the suggestions see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.RecommendedStreamConfiguration[]> SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS =
@@ -2607,7 +2654,7 @@
* If set, the information will be available in the ZERO_SHUTTER_LAG recommended stream
* configuration see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.ReprocessFormatsMap> SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP =
@@ -2634,7 +2681,7 @@
* physical camera not independently exposed in
* {@link android.hardware.camera2.CameraManager#getCameraIdList } or is not backward
* compatible.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2642,6 +2689,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS =
new Key<android.hardware.camera2.params.MandatoryStreamCombination[]>("android.scaler.mandatoryStreamCombinations", android.hardware.camera2.params.MandatoryStreamCombination[].class);
@@ -2681,6 +2729,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE =
new Key<android.graphics.Rect>("android.sensor.info.activeArraySize", android.graphics.Rect.class);
@@ -2691,7 +2740,7 @@
* as defined in ISO 12232:2006.</p>
* <p><b>Range of valid values:</b><br>
* Min <= 100, Max >= 800</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2700,6 +2749,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> SENSOR_INFO_SENSITIVITY_RANGE =
new Key<android.util.Range<Integer>>("android.sensor.info.sensitivityRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -2718,7 +2768,7 @@
* <li>{@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO MONO}</li>
* <li>{@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR NIR}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2733,6 +2783,7 @@
* @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT =
new Key<Integer>("android.sensor.info.colorFilterArrangement", int.class);
@@ -2744,7 +2795,7 @@
* The minimum exposure time will be less than 100 us. For FULL
* capability devices ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL),
* the maximum exposure time will be greater than 100ms.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2753,6 +2804,7 @@
* @see CaptureRequest#SENSOR_EXPOSURE_TIME
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE =
new Key<android.util.Range<Long>>("android.sensor.info.exposureTimeRange", new TypeReference<android.util.Range<Long>>() {{ }});
@@ -2768,7 +2820,7 @@
* <p><b>Range of valid values:</b><br>
* For FULL capability devices
* ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL), at least 100ms.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2777,6 +2829,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_INFO_MAX_FRAME_DURATION =
new Key<Long>("android.sensor.info.maxFrameDuration", long.class);
@@ -2791,6 +2844,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE =
new Key<android.util.SizeF>("android.sensor.info.physicalSize", android.util.SizeF.class);
@@ -2816,6 +2870,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE =
new Key<android.util.Size>("android.sensor.info.pixelArraySize", android.util.Size.class);
@@ -2837,13 +2892,14 @@
* by the camera device, which provides more accurate white level values.</p>
* <p><b>Range of valid values:</b><br>
* > 255 (8-bit output)</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_WHITE_LEVEL =
new Key<Integer>("android.sensor.info.whiteLevel", int.class);
@@ -2863,6 +2919,7 @@
* @see #SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_TIMESTAMP_SOURCE =
new Key<Integer>("android.sensor.info.timestampSource", int.class);
@@ -2875,11 +2932,12 @@
* See {@link CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_RAW android.request.maxNumOutputRaw} for a list of RAW image formats.</p>
* <p>This key will be <code>null</code> for all devices do not report this information.
* Devices with RAW capability will always report this information in this key.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_RAW
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> SENSOR_INFO_LENS_SHADING_APPLIED =
new Key<Boolean>("android.sensor.info.lensShadingApplied", boolean.class);
@@ -2945,6 +3003,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE =
new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class);
@@ -2986,7 +3045,7 @@
* <li>{@link #SENSOR_REFERENCE_ILLUMINANT1_D50 D50}</li>
* <li>{@link #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN ISO_STUDIO_TUNGSTEN}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1
@@ -3014,6 +3073,7 @@
* @see #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_REFERENCE_ILLUMINANT1 =
new Key<Integer>("android.sensor.referenceIlluminant1", int.class);
@@ -3030,7 +3090,7 @@
* the camera device has RAW capability.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2
@@ -3039,6 +3099,7 @@
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<Byte> SENSOR_REFERENCE_ILLUMINANT2 =
new Key<Byte>("android.sensor.referenceIlluminant2", byte.class);
@@ -3055,12 +3116,13 @@
* ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}).</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.calibrationTransform1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3080,12 +3142,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.calibrationTransform2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3106,12 +3169,13 @@
* (i.e. no chromatic adaptation will be applied by this transform).</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.colorTransform1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3134,12 +3198,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.colorTransform2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3158,12 +3223,13 @@
* CIE XYZ colorspace.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.forwardMatrix1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3184,12 +3250,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.forwardMatrix2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3215,7 +3282,7 @@
* <p>For a MONOCHROME camera device, all of the 2x2 channels must have the same values.</p>
* <p><b>Range of valid values:</b><br>
* >= 0 for each.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
@@ -3224,6 +3291,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN =
new Key<android.hardware.camera2.params.BlackLevelPattern>("android.sensor.blackLevelPattern", android.hardware.camera2.params.BlackLevelPattern.class);
@@ -3234,7 +3302,7 @@
* equal to this, all applied gain must be analog. For
* values above this, the gain applied can be a mix of analog and
* digital.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3243,6 +3311,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_MAX_ANALOG_SENSITIVITY =
new Key<Integer>("android.sensor.maxAnalogSensitivity", int.class);
@@ -3258,6 +3327,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_ORIENTATION =
new Key<Integer>("android.sensor.orientation", int.class);
@@ -3267,11 +3337,12 @@
* <p>Defaults to OFF, and always includes OFF if defined.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES =
new Key<int[]>("android.sensor.availableTestPatternModes", int[].class);
@@ -3291,13 +3362,14 @@
* black level of each captured raw images.</p>
* <p>When this key is reported, the {@link CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL android.sensor.dynamicBlackLevel} and
* {@link CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL android.sensor.dynamicWhiteLevel} will also be reported.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL
* @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS =
new Key<android.graphics.Rect[]>("android.sensor.opticalBlackRegions", android.graphics.Rect[].class);
@@ -3314,6 +3386,7 @@
* @see CaptureRequest#SHADING_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SHADING_AVAILABLE_MODES =
new Key<int[]>("android.shading.availableModes", int[].class);
@@ -3328,6 +3401,7 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES =
new Key<int[]>("android.statistics.info.availableFaceDetectModes", int[].class);
@@ -3341,6 +3415,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_INFO_MAX_FACE_COUNT =
new Key<Integer>("android.statistics.info.maxFaceCount", int.class);
@@ -3352,11 +3427,12 @@
* <p>ON is always supported on devices with the RAW capability.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE android.statistics.hotPixelMapMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES =
new Key<boolean[]>("android.statistics.info.availableHotPixelMapModes", boolean[].class);
@@ -3369,11 +3445,12 @@
* LEGACY mode devices will always only support OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES =
new Key<int[]>("android.statistics.info.availableLensShadingMapModes", int[].class);
@@ -3384,11 +3461,12 @@
* contain only OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_OIS_DATA_MODE android.statistics.oisDataMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_OIS_DATA_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES =
new Key<int[]>("android.statistics.info.availableOisDataModes", int[].class);
@@ -3401,7 +3479,7 @@
* <p>The output curves in the result metadata may have a different number
* of points than the input curves, and will represent the actual
* hardware curves used as closely as possible when linearly interpolated.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3410,6 +3488,7 @@
* @see CaptureRequest#TONEMAP_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MAX_CURVE_POINTS =
new Key<Integer>("android.tonemap.maxCurvePoints", int.class);
@@ -3425,7 +3504,7 @@
* <p>This includes all FULL level devices.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3434,6 +3513,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES =
new Key<int[]>("android.tonemap.availableToneMapModes", int[].class);
@@ -3443,7 +3523,7 @@
* <ul>
* <li>{@link #LED_AVAILABLE_LEDS_TRANSMIT TRANSMIT}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @see #LED_AVAILABLE_LEDS_TRANSMIT
* @hide
*/
@@ -3534,6 +3614,7 @@
* @see #INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> INFO_SUPPORTED_HARDWARE_LEVEL =
new Key<Integer>("android.info.supportedHardwareLevel", int.class);
@@ -3543,9 +3624,10 @@
* <p>This can be used in {@link android.media.ExifInterface#TAG_IMAGE_DESCRIPTION TAG_IMAGE_DESCRIPTION}
* in jpeg EXIF. This key may be absent if no version information is available on the
* device.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<String> INFO_VERSION =
new Key<String>("android.info.version", String.class);
@@ -3572,6 +3654,7 @@
* @see #SYNC_MAX_LATENCY_UNKNOWN
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SYNC_MAX_LATENCY =
new Key<Integer>("android.sync.maxLatency", int.class);
@@ -3598,7 +3681,7 @@
* <p><b>Units</b>: Number of frames.</p>
* <p><b>Range of valid values:</b><br>
* <= 4</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3607,6 +3690,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REPROCESS_MAX_CAPTURE_STALL =
new Key<Integer>("android.reprocess.maxCaptureStall", int.class);
@@ -3625,7 +3709,7 @@
* the format in this list as <code>(HAL_PIXEL_FORMAT_BLOB,
* android.depth.maxDepthSamples, 1, OUTPUT)</code> in addition to
* the entries for HAL_PIXEL_FORMAT_Y16.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3650,7 +3734,7 @@
* android.scaler.availableStallDurations for more details about
* calculating the max frame rate.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3674,7 +3758,7 @@
* <p>All depth output stream formats may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3697,7 +3781,7 @@
* need to emit a specific pattern or wavelength of light to
* measure depth values, which causes the color image to be
* corrupted during depth measurement.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3705,6 +3789,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> DEPTH_DEPTH_IS_EXCLUSIVE =
new Key<Boolean>("android.depth.depthIsExclusive", boolean.class);
@@ -3717,7 +3802,7 @@
* power and performance efficient for specific use cases. For more information about
* retrieving the suggestions see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.RecommendedStreamConfiguration[]> DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS =
@@ -3736,7 +3821,7 @@
* the same aspect ratio can have dynamic depth dataspace
* stream configuration. {@link CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE android.depth.depthIsExclusive} also
* needs to be set to FALSE.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE
* @hide
@@ -3755,7 +3840,7 @@
* <p>The minimum frame duration of a stream (of a particular format, size)
* is the same regardless of whether the stream is input or output.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS =
@@ -3770,7 +3855,7 @@
* <p>All dynamic depth output streams may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS =
@@ -3785,7 +3870,7 @@
* value of this tag will be ['2', '\0', '3', '\0'].</p>
* <p>The number of physical camera IDs must be no less than 2.</p>
* <p><b>Units</b>: UTF-8 null-terminated string</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3811,7 +3896,7 @@
* <li>{@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE APPROXIMATE}</li>
* <li>{@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED CALIBRATED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3821,6 +3906,7 @@
* @see #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE =
new Key<Integer>("android.logicalMultiCamera.sensorSyncType", int.class);
@@ -3831,11 +3917,12 @@
* All devices that support this API will list both FAST and HIGH_QUALITY.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#DISTORTION_CORRECTION_MODE android.distortionCorrection.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES =
new Key<int[]>("android.distortionCorrection.availableModes", int[].class);
@@ -3849,7 +3936,7 @@
* image format as required by the device's hardware level and capabilities.</p>
* <p>All the static, control, and dynamic metadata tags related to JPEG apply to HEIC formats.
* Configuring JPEG and HEIC streams at the same time is not supported.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3872,7 +3959,7 @@
* android.scaler.availableStallDurations for more details about
* calculating the max frame rate.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3896,7 +3983,7 @@
* <p>All HEIC output stream formats may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3913,4 +4000,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 5250701..792ec25 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -978,7 +978,7 @@
* <li>{@link #COLOR_CORRECTION_MODE_FAST FAST}</li>
* <li>{@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -992,6 +992,7 @@
* @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_MODE =
new Key<Integer>("android.colorCorrection.mode", int.class);
@@ -1010,7 +1011,7 @@
* <p>The valid range of each matrix element varies on different devices, but
* values within [-1.5, 3.0] are guaranteed not to be clipped.</p>
* <p><b>Units</b>: Unitless scale factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1019,6 +1020,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -1037,7 +1039,7 @@
* device allows gains below 1.0, this is usually not recommended because
* this can create color artifacts.</p>
* <p><b>Units</b>: Unitless gain factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1046,6 +1048,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS =
new Key<android.hardware.camera2.params.RggbChannelVector>("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class);
@@ -1078,6 +1081,7 @@
* @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_ABERRATION_MODE =
new Key<Integer>("android.colorCorrection.aberrationMode", int.class);
@@ -1134,6 +1138,7 @@
* @see #CONTROL_AE_ANTIBANDING_MODE_AUTO
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_ANTIBANDING_MODE =
new Key<Integer>("android.control.aeAntibandingMode", int.class);
@@ -1167,6 +1172,7 @@
* @see CaptureResult#CONTROL_AE_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION =
new Key<Integer>("android.control.aeExposureCompensation", int.class);
@@ -1217,6 +1223,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK =
new Key<Boolean>("android.control.aeLock", boolean.class);
@@ -1269,6 +1276,7 @@
* @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_MODE =
new Key<Integer>("android.control.aeMode", int.class);
@@ -1320,7 +1328,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1329,6 +1337,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1349,6 +1358,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_TARGET_FPS_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeTargetFpsRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -1407,7 +1417,7 @@
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}</li>
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1422,6 +1432,7 @@
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_PRECAPTURE_TRIGGER =
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
@@ -1463,6 +1474,7 @@
* @see #CONTROL_AF_MODE_EDOF
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_MODE =
new Key<Integer>("android.control.afMode", int.class);
@@ -1515,7 +1527,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1524,6 +1536,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1561,6 +1574,7 @@
* @see #CONTROL_AF_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_TRIGGER =
new Key<Integer>("android.control.afTrigger", int.class);
@@ -1591,6 +1605,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
@@ -1651,6 +1666,7 @@
* @see #CONTROL_AWB_MODE_SHADE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_MODE =
new Key<Integer>("android.control.awbMode", int.class);
@@ -1703,7 +1719,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1712,6 +1728,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1754,6 +1771,7 @@
* @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_CAPTURE_INTENT =
new Key<Integer>("android.control.captureIntent", int.class);
@@ -1793,6 +1811,7 @@
* @see #CONTROL_EFFECT_MODE_AQUA
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_EFFECT_MODE =
new Key<Integer>("android.control.effectMode", int.class);
@@ -1833,6 +1852,7 @@
* @see #CONTROL_MODE_OFF_KEEP_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_MODE =
new Key<Integer>("android.control.mode", int.class);
@@ -1900,6 +1920,7 @@
* @see #CONTROL_SCENE_MODE_HDR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_SCENE_MODE =
new Key<Integer>("android.control.sceneMode", int.class);
@@ -1943,6 +1964,7 @@
* @see #CONTROL_VIDEO_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_VIDEO_STABILIZATION_MODE =
new Key<Integer>("android.control.videoStabilizationMode", int.class);
@@ -1969,7 +1991,7 @@
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_MODE
@@ -1978,6 +2000,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
@@ -2005,12 +2028,13 @@
* <p>For applications targeting SDK versions older than O, the value of enableZsl in all
* capture templates is always <code>false</code> if present.</p>
* <p>For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
* @see CaptureResult#SENSOR_TIMESTAMP
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_ENABLE_ZSL =
new Key<Boolean>("android.control.enableZsl", boolean.class);
@@ -2045,7 +2069,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2059,6 +2083,7 @@
* @see #EDGE_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> EDGE_MODE =
new Key<Integer>("android.edge.mode", int.class);
@@ -2094,6 +2119,7 @@
* @see #FLASH_MODE_TORCH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_MODE =
new Key<Integer>("android.flash.mode", int.class);
@@ -2110,7 +2136,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
* @see #HOT_PIXEL_MODE_OFF
@@ -2118,6 +2144,7 @@
* @see #HOT_PIXEL_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> HOT_PIXEL_MODE =
new Key<Integer>("android.hotPixel.mode", int.class);
@@ -2130,6 +2157,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.location.Location> JPEG_GPS_LOCATION =
new Key<android.location.Location>("android.jpeg.gpsLocation", android.location.Location.class);
@@ -2211,6 +2239,7 @@
* @see CameraCharacteristics#SENSOR_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<Integer> JPEG_ORIENTATION =
new Key<Integer>("android.jpeg.orientation", int.class);
@@ -2224,6 +2253,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
@@ -2236,6 +2266,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
@@ -2275,6 +2306,7 @@
* @see CaptureRequest#JPEG_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> JPEG_THUMBNAIL_SIZE =
new Key<android.util.Size>("android.jpeg.thumbnailSize", android.util.Size.class);
@@ -2298,7 +2330,7 @@
* <p><b>Units</b>: The f-number (f/N)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2312,6 +2344,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_APERTURE =
new Key<Float>("android.lens.aperture", float.class);
@@ -2332,7 +2365,7 @@
* <p><b>Units</b>: Exposure Value (EV)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2342,6 +2375,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FILTER_DENSITY =
new Key<Float>("android.lens.filterDensity", float.class);
@@ -2367,6 +2401,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCAL_LENGTH =
new Key<Float>("android.lens.focalLength", float.class);
@@ -2387,7 +2422,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2399,6 +2434,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCUS_DISTANCE =
new Key<Float>("android.lens.focusDistance", float.class);
@@ -2429,7 +2465,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2441,6 +2477,7 @@
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_OPTICAL_STABILIZATION_MODE =
new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
@@ -2481,7 +2518,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2496,6 +2533,7 @@
* @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> NOISE_REDUCTION_MODE =
new Key<Integer>("android.noiseReduction.mode", int.class);
@@ -2506,7 +2544,7 @@
* <p><b>Units</b>: arbitrary integer assigned by application</p>
* <p><b>Range of valid values:</b><br>
* Any int</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Integer> REQUEST_ID =
@@ -2570,6 +2608,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -2584,7 +2623,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2595,6 +2634,7 @@
* @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_EXPOSURE_TIME =
new Key<Long>("android.sensor.exposureTime", long.class);
@@ -2665,7 +2705,7 @@
* <p><b>Range of valid values:</b><br>
* See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }.
* The duration is capped to <code>max(duration, exposureTime + overhead)</code>.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2676,6 +2716,7 @@
* @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_FRAME_DURATION =
new Key<Long>("android.sensor.frameDuration", long.class);
@@ -2696,7 +2737,7 @@
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2708,6 +2749,7 @@
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
@@ -2720,11 +2762,12 @@
* output.</p>
* <p>For example, a sensor with RAW10 Bayer output would use the
* 10 most significant bits from each color channel.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_TEST_PATTERN_DATA =
new Key<int[]>("android.sensor.testPatternData", int[].class);
@@ -2749,7 +2792,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES
* @see #SENSOR_TEST_PATTERN_MODE_OFF
@@ -2760,6 +2803,7 @@
* @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
new Key<Integer>("android.sensor.testPatternMode", int.class);
@@ -2797,7 +2841,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2813,6 +2857,7 @@
* @see #SHADING_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SHADING_MODE =
new Key<Integer>("android.shading.mode", int.class);
@@ -2838,6 +2883,7 @@
* @see #STATISTICS_FACE_DETECT_MODE_FULL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_FACE_DETECT_MODE =
new Key<Integer>("android.statistics.faceDetectMode", int.class);
@@ -2847,12 +2893,13 @@
* If set to <code>false</code>, no hot pixel map will be returned.</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
@@ -2870,7 +2917,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2881,6 +2928,7 @@
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_LENS_SHADING_MAP_MODE =
new Key<Integer>("android.statistics.lensShadingMapMode", int.class);
@@ -2900,13 +2948,14 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES
* @see #STATISTICS_OIS_DATA_MODE_OFF
* @see #STATISTICS_OIS_DATA_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_OIS_DATA_MODE =
new Key<Integer>("android.statistics.oisDataMode", int.class);
@@ -2915,7 +2964,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2932,7 +2981,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2993,7 +3042,7 @@
* <p><b>Range of valid values:</b><br>
* 0-1 on both input and output coordinates, normalized
* as a floating-point value such that 0 == black and 1 == white.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3054,7 +3103,7 @@
* (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ]
* </code></pre>
* <p><img alt="sRGB tonemapping curve" src="/reference/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3064,6 +3113,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE =
new Key<android.hardware.camera2.params.TonemapCurve>("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class);
@@ -3098,7 +3148,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3114,6 +3164,7 @@
* @see #TONEMAP_MODE_PRESET_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MODE =
new Key<Integer>("android.tonemap.mode", int.class);
@@ -3130,11 +3181,12 @@
* value will be returned in capture result.</p>
* <p>The valid range of gamma value varies on different devices, but values
* within [1.0, 5.0] are guaranteed not to be clipped.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Float> TONEMAP_GAMMA =
new Key<Float>("android.tonemap.gamma", float.class);
@@ -3153,13 +3205,14 @@
* <li>{@link #TONEMAP_PRESET_CURVE_SRGB SRGB}</li>
* <li>{@link #TONEMAP_PRESET_CURVE_REC709 REC709}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
* @see #TONEMAP_PRESET_CURVE_SRGB
* @see #TONEMAP_PRESET_CURVE_REC709
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_PRESET_CURVE =
new Key<Integer>("android.tonemap.presetCurve", int.class);
@@ -3174,7 +3227,7 @@
* data is stored locally on the device.</p>
* <p>The LED <em>may</em> be off if a trusted application is using the data that
* doesn't violate the above rules.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Boolean> LED_TRANSMIT =
@@ -3218,7 +3271,7 @@
* possible, only overriding the lock to OFF when changes to
* other request parameters require a black level recalculation
* or reset.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3226,6 +3279,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> BLACK_LEVEL_LOCK =
new Key<Boolean>("android.blackLevel.lock", boolean.class);
@@ -3265,7 +3319,7 @@
* <p><b>Units</b>: Relative exposure time increase factor.</p>
* <p><b>Range of valid values:</b><br>
* >= 1.0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3276,6 +3330,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR =
new Key<Float>("android.reprocess.effectiveExposureFactor", float.class);
@@ -3322,7 +3377,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_REGIONS
* @see CaptureRequest#CONTROL_AF_REGIONS
@@ -3338,6 +3393,7 @@
* @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> DISTORTION_CORRECTION_MODE =
new Key<Integer>("android.distortionCorrection.mode", int.class);
@@ -3347,4 +3403,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 13ad092..0900f3b 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -437,7 +437,7 @@
* <li>{@link #COLOR_CORRECTION_MODE_FAST FAST}</li>
* <li>{@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -451,6 +451,7 @@
* @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_MODE =
new Key<Integer>("android.colorCorrection.mode", int.class);
@@ -469,7 +470,7 @@
* <p>The valid range of each matrix element varies on different devices, but
* values within [-1.5, 3.0] are guaranteed not to be clipped.</p>
* <p><b>Units</b>: Unitless scale factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -478,6 +479,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -496,7 +498,7 @@
* device allows gains below 1.0, this is usually not recommended because
* this can create color artifacts.</p>
* <p><b>Units</b>: Unitless gain factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -505,6 +507,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS =
new Key<android.hardware.camera2.params.RggbChannelVector>("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class);
@@ -537,6 +540,7 @@
* @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_ABERRATION_MODE =
new Key<Integer>("android.colorCorrection.aberrationMode", int.class);
@@ -593,6 +597,7 @@
* @see #CONTROL_AE_ANTIBANDING_MODE_AUTO
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_ANTIBANDING_MODE =
new Key<Integer>("android.control.aeAntibandingMode", int.class);
@@ -626,6 +631,7 @@
* @see CaptureResult#CONTROL_AE_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION =
new Key<Integer>("android.control.aeExposureCompensation", int.class);
@@ -676,6 +682,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK =
new Key<Boolean>("android.control.aeLock", boolean.class);
@@ -728,6 +735,7 @@
* @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_MODE =
new Key<Integer>("android.control.aeMode", int.class);
@@ -779,7 +787,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -788,6 +796,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -808,6 +817,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_TARGET_FPS_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeTargetFpsRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -866,7 +876,7 @@
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}</li>
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -881,6 +891,7 @@
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_PRECAPTURE_TRIGGER =
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
@@ -1108,7 +1119,7 @@
* <li>{@link #CONTROL_AE_STATE_FLASH_REQUIRED FLASH_REQUIRED}</li>
* <li>{@link #CONTROL_AE_STATE_PRECAPTURE PRECAPTURE}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1129,6 +1140,7 @@
* @see #CONTROL_AE_STATE_PRECAPTURE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_STATE =
new Key<Integer>("android.control.aeState", int.class);
@@ -1170,6 +1182,7 @@
* @see #CONTROL_AF_MODE_EDOF
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_MODE =
new Key<Integer>("android.control.afMode", int.class);
@@ -1222,7 +1235,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1231,6 +1244,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1268,6 +1282,7 @@
* @see #CONTROL_AF_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_TRIGGER =
new Key<Integer>("android.control.afTrigger", int.class);
@@ -1677,6 +1692,7 @@
* @see #CONTROL_AF_STATE_PASSIVE_UNFOCUSED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_STATE =
new Key<Integer>("android.control.afState", int.class);
@@ -1707,6 +1723,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
@@ -1767,6 +1784,7 @@
* @see #CONTROL_AWB_MODE_SHADE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_MODE =
new Key<Integer>("android.control.awbMode", int.class);
@@ -1819,7 +1837,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1828,6 +1846,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1870,6 +1889,7 @@
* @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_CAPTURE_INTENT =
new Key<Integer>("android.control.captureIntent", int.class);
@@ -1997,7 +2017,7 @@
* <li>{@link #CONTROL_AWB_STATE_CONVERGED CONVERGED}</li>
* <li>{@link #CONTROL_AWB_STATE_LOCKED LOCKED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2013,6 +2033,7 @@
* @see #CONTROL_AWB_STATE_LOCKED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_STATE =
new Key<Integer>("android.control.awbState", int.class);
@@ -2052,6 +2073,7 @@
* @see #CONTROL_EFFECT_MODE_AQUA
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_EFFECT_MODE =
new Key<Integer>("android.control.effectMode", int.class);
@@ -2092,6 +2114,7 @@
* @see #CONTROL_MODE_OFF_KEEP_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_MODE =
new Key<Integer>("android.control.mode", int.class);
@@ -2159,6 +2182,7 @@
* @see #CONTROL_SCENE_MODE_HDR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_SCENE_MODE =
new Key<Integer>("android.control.sceneMode", int.class);
@@ -2202,6 +2226,7 @@
* @see #CONTROL_VIDEO_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_VIDEO_STABILIZATION_MODE =
new Key<Integer>("android.control.videoStabilizationMode", int.class);
@@ -2228,7 +2253,7 @@
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_MODE
@@ -2237,6 +2262,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
@@ -2264,12 +2290,13 @@
* <p>For applications targeting SDK versions older than O, the value of enableZsl in all
* capture templates is always <code>false</code> if present.</p>
* <p>For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
* @see CaptureResult#SENSOR_TIMESTAMP
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_ENABLE_ZSL =
new Key<Boolean>("android.control.enableZsl", boolean.class);
@@ -2287,11 +2314,12 @@
* <li>{@link #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED NOT_DETECTED}</li>
* <li>{@link #CONTROL_AF_SCENE_CHANGE_DETECTED DETECTED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @see #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED
* @see #CONTROL_AF_SCENE_CHANGE_DETECTED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_SCENE_CHANGE =
new Key<Integer>("android.control.afSceneChange", int.class);
@@ -2326,7 +2354,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2340,6 +2368,7 @@
* @see #EDGE_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> EDGE_MODE =
new Key<Integer>("android.edge.mode", int.class);
@@ -2375,6 +2404,7 @@
* @see #FLASH_MODE_TORCH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_MODE =
new Key<Integer>("android.flash.mode", int.class);
@@ -2402,7 +2432,7 @@
* <li>{@link #FLASH_STATE_FIRED FIRED}</li>
* <li>{@link #FLASH_STATE_PARTIAL PARTIAL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2418,6 +2448,7 @@
* @see #FLASH_STATE_PARTIAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_STATE =
new Key<Integer>("android.flash.state", int.class);
@@ -2434,7 +2465,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
* @see #HOT_PIXEL_MODE_OFF
@@ -2442,6 +2473,7 @@
* @see #HOT_PIXEL_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> HOT_PIXEL_MODE =
new Key<Integer>("android.hotPixel.mode", int.class);
@@ -2454,6 +2486,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.location.Location> JPEG_GPS_LOCATION =
new Key<android.location.Location>("android.jpeg.gpsLocation", android.location.Location.class);
@@ -2535,6 +2568,7 @@
* @see CameraCharacteristics#SENSOR_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<Integer> JPEG_ORIENTATION =
new Key<Integer>("android.jpeg.orientation", int.class);
@@ -2548,6 +2582,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
@@ -2560,6 +2595,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
@@ -2599,6 +2635,7 @@
* @see CaptureRequest#JPEG_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> JPEG_THUMBNAIL_SIZE =
new Key<android.util.Size>("android.jpeg.thumbnailSize", android.util.Size.class);
@@ -2622,7 +2659,7 @@
* <p><b>Units</b>: The f-number (f/N)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2636,6 +2673,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_APERTURE =
new Key<Float>("android.lens.aperture", float.class);
@@ -2656,7 +2694,7 @@
* <p><b>Units</b>: Exposure Value (EV)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2666,6 +2704,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FILTER_DENSITY =
new Key<Float>("android.lens.filterDensity", float.class);
@@ -2691,6 +2730,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCAL_LENGTH =
new Key<Float>("android.lens.focalLength", float.class);
@@ -2701,7 +2741,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2710,6 +2750,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCUS_DISTANCE =
new Key<Float>("android.lens.focusDistance", float.class);
@@ -2722,7 +2763,7 @@
* far); see {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details.</p>
* <p><b>Range of valid values:</b><br>
* >=0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2731,6 +2772,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Pair<Float,Float>> LENS_FOCUS_RANGE =
new Key<android.util.Pair<Float,Float>>("android.lens.focusRange", new TypeReference<android.util.Pair<Float,Float>>() {{ }});
@@ -2761,7 +2803,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2773,6 +2815,7 @@
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_OPTICAL_STABILIZATION_MODE =
new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
@@ -2802,7 +2845,7 @@
* <li>{@link #LENS_STATE_STATIONARY STATIONARY}</li>
* <li>{@link #LENS_STATE_MOVING MOVING}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2820,6 +2863,7 @@
* @see #LENS_STATE_MOVING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_STATE =
new Key<Integer>("android.lens.state", int.class);
@@ -2854,10 +2898,11 @@
* <code>p'</code> is in the camera-oriented coordinate system.</p>
* <p><b>Units</b>:
* Quaternion coefficients</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_ROTATION =
new Key<float[]>("android.lens.poseRotation", float[].class);
@@ -2890,7 +2935,7 @@
* the center of the primary gyroscope on the device. The axis definitions are the same as
* with PRIMARY_CAMERA.</p>
* <p><b>Units</b>: Meters</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -2899,6 +2944,7 @@
* @see CameraCharacteristics#LENS_POSE_ROTATION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_TRANSLATION =
new Key<float[]>("android.lens.poseTranslation", float[].class);
@@ -2962,7 +3008,7 @@
* Pixels in the
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* coordinate system.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -2972,6 +3018,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INTRINSIC_CALIBRATION =
new Key<float[]>("android.lens.intrinsicCalibration", float[].class);
@@ -3006,7 +3053,7 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
@@ -3019,6 +3066,7 @@
*/
@Deprecated
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_RADIAL_DISTORTION =
new Key<float[]>("android.lens.radialDistortion", float[].class);
@@ -3053,13 +3101,14 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
* @see CameraCharacteristics#LENS_RADIAL_DISTORTION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_DISTORTION =
new Key<float[]>("android.lens.distortion", float[].class);
@@ -3100,7 +3149,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3115,6 +3164,7 @@
* @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> NOISE_REDUCTION_MODE =
new Key<Integer>("android.noiseReduction.mode", int.class);
@@ -3134,7 +3184,7 @@
* only be used by the camera device if quirks.usePartialResult is set to 1.</p>
* <p><b>Range of valid values:</b><br>
* Optional. Default value is FINAL.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -3152,7 +3202,7 @@
* <p><b>Units</b>: count of frames</p>
* <p><b>Range of valid values:</b><br>
* > 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -3169,7 +3219,7 @@
* <p><b>Units</b>: arbitrary integer assigned by application</p>
* <p><b>Range of valid values:</b><br>
* Any int</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Integer> REQUEST_ID =
@@ -3190,6 +3240,7 @@
* @see CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH
*/
@PublicKey
+ @NonNull
public static final Key<Byte> REQUEST_PIPELINE_DEPTH =
new Key<Byte>("android.request.pipelineDepth", byte.class);
@@ -3251,6 +3302,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -3265,7 +3317,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3276,6 +3328,7 @@
* @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_EXPOSURE_TIME =
new Key<Long>("android.sensor.exposureTime", long.class);
@@ -3346,7 +3399,7 @@
* <p><b>Range of valid values:</b><br>
* See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }.
* The duration is capped to <code>max(duration, exposureTime + overhead)</code>.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3357,6 +3410,7 @@
* @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_FRAME_DURATION =
new Key<Long>("android.sensor.frameDuration", long.class);
@@ -3377,7 +3431,7 @@
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3389,6 +3443,7 @@
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
@@ -3419,6 +3474,7 @@
* @see CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_TIMESTAMP =
new Key<Long>("android.sensor.timestamp", long.class);
@@ -3433,9 +3489,10 @@
* <p>The order of the values is R, G, B; where R is in the lowest index.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Rational[]> SENSOR_NEUTRAL_COLOR_POINT =
new Key<Rational[]>("android.sensor.neutralColorPoint", Rational[].class);
@@ -3460,11 +3517,12 @@
* Adobe DNG specification for the NoiseProfile tag.</p>
* <p>For a MONOCHROME camera, there is only one color channel. So the noise model coefficients
* will only contain one S and one O.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Pair<Double,Double>[]> SENSOR_NOISE_PROFILE =
new Key<android.util.Pair<Double,Double>[]>("android.sensor.noiseProfile", new TypeReference<android.util.Pair<Double,Double>[]>() {{ }});
@@ -3504,9 +3562,10 @@
* the camera device has RAW capability.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>>= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Float> SENSOR_GREEN_SPLIT =
new Key<Float>("android.sensor.greenSplit", float.class);
@@ -3519,11 +3578,12 @@
* output.</p>
* <p>For example, a sensor with RAW10 Bayer output would use the
* 10 most significant bits from each color channel.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_TEST_PATTERN_DATA =
new Key<int[]>("android.sensor.testPatternData", int[].class);
@@ -3548,7 +3608,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES
* @see #SENSOR_TEST_PATTERN_MODE_OFF
@@ -3559,6 +3619,7 @@
* @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
new Key<Integer>("android.sensor.testPatternMode", int.class);
@@ -3575,7 +3636,7 @@
* <p><b>Range of valid values:</b><br>
* >= 0 and <
* {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputMinFrameDuration }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3584,6 +3645,7 @@
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_ROLLING_SHUTTER_SKEW =
new Key<Long>("android.sensor.rollingShutterSkew", long.class);
@@ -3617,7 +3679,7 @@
* camera device advertises this key via {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureResultKeys }.</p>
* <p><b>Range of valid values:</b><br>
* >= 0 for each.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
@@ -3625,6 +3687,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL =
new Key<float[]>("android.sensor.dynamicBlackLevel", float[].class);
@@ -3640,7 +3703,7 @@
* {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureRequestKeys }.</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
@@ -3648,6 +3711,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_DYNAMIC_WHITE_LEVEL =
new Key<Integer>("android.sensor.dynamicWhiteLevel", int.class);
@@ -3685,7 +3749,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3701,6 +3765,7 @@
* @see #SHADING_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SHADING_MODE =
new Key<Integer>("android.shading.mode", int.class);
@@ -3726,6 +3791,7 @@
* @see #STATISTICS_FACE_DETECT_MODE_FULL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_FACE_DETECT_MODE =
new Key<Integer>("android.statistics.faceDetectMode", int.class);
@@ -3818,6 +3884,7 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES =
new Key<android.hardware.camera2.params.Face[]>("android.statistics.faces", android.hardware.camera2.params.Face[].class);
@@ -3886,7 +3953,7 @@
* </code></pre>
* <p><b>Range of valid values:</b><br>
* Each gain factor is >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3896,6 +3963,7 @@
* @see CameraCharacteristics#SENSOR_INFO_LENS_SHADING_APPLIED
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP =
new Key<android.hardware.camera2.params.LensShadingMap>("android.statistics.lensShadingCorrectionMap", android.hardware.camera2.params.LensShadingMap.class);
@@ -3976,7 +4044,7 @@
* formats.</p>
* <p><b>Range of valid values:</b><br>
* Each gain factor is >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4001,7 +4069,7 @@
* see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.</p>
* <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#COLOR_CORRECTION_GAINS
* @deprecated
@@ -4029,7 +4097,7 @@
* capture settings and color transforms are set by the application.</p>
* <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Never fully implemented or specified; do not use</p>
@@ -4061,7 +4129,7 @@
* <li>{@link #STATISTICS_SCENE_FLICKER_50HZ 50HZ}</li>
* <li>{@link #STATISTICS_SCENE_FLICKER_60HZ 60HZ}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4075,6 +4143,7 @@
* @see #STATISTICS_SCENE_FLICKER_60HZ
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_SCENE_FLICKER =
new Key<Integer>("android.statistics.sceneFlicker", int.class);
@@ -4084,12 +4153,13 @@
* If set to <code>false</code>, no hot pixel map will be returned.</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
@@ -4105,12 +4175,13 @@
* <p>n <= number of pixels on the sensor.
* The <code>(x, y)</code> coordinates must be bounded by
* {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP =
new Key<android.graphics.Point[]>("android.statistics.hotPixelMap", android.graphics.Point[].class);
@@ -4128,7 +4199,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4139,6 +4210,7 @@
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_LENS_SHADING_MAP_MODE =
new Key<Integer>("android.statistics.lensShadingMapMode", int.class);
@@ -4158,13 +4230,14 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES
* @see #STATISTICS_OIS_DATA_MODE_OFF
* @see #STATISTICS_OIS_DATA_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_OIS_DATA_MODE =
new Key<Integer>("android.statistics.oisDataMode", int.class);
@@ -4173,7 +4246,7 @@
* <p>The array contains the timestamps of OIS samples. The timestamps are in the same
* timebase as and comparable to {@link CaptureResult#SENSOR_TIMESTAMP android.sensor.timestamp}.</p>
* <p><b>Units</b>: nanoseconds</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#SENSOR_TIMESTAMP
* @hide
@@ -4194,7 +4267,7 @@
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
* <p><b>Units</b>: Pixels in active array.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<float[]> STATISTICS_OIS_X_SHIFTS =
@@ -4213,7 +4286,7 @@
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
* <p><b>Units</b>: Pixels in active array.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<float[]> STATISTICS_OIS_Y_SHIFTS =
@@ -4235,9 +4308,10 @@
* supporting devices). They are always reported in pre-correction active array coordinates,
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES =
new Key<android.hardware.camera2.params.OisSample[]>("android.statistics.oisSamples", android.hardware.camera2.params.OisSample[].class);
@@ -4247,7 +4321,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4264,7 +4338,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4325,7 +4399,7 @@
* <p><b>Range of valid values:</b><br>
* 0-1 on both input and output coordinates, normalized
* as a floating-point value such that 0 == black and 1 == white.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4386,7 +4460,7 @@
* (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ]
* </code></pre>
* <p><img alt="sRGB tonemapping curve" src="/reference/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4396,6 +4470,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE =
new Key<android.hardware.camera2.params.TonemapCurve>("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class);
@@ -4430,7 +4505,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4446,6 +4521,7 @@
* @see #TONEMAP_MODE_PRESET_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MODE =
new Key<Integer>("android.tonemap.mode", int.class);
@@ -4462,11 +4538,12 @@
* value will be returned in capture result.</p>
* <p>The valid range of gamma value varies on different devices, but values
* within [1.0, 5.0] are guaranteed not to be clipped.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Float> TONEMAP_GAMMA =
new Key<Float>("android.tonemap.gamma", float.class);
@@ -4485,13 +4562,14 @@
* <li>{@link #TONEMAP_PRESET_CURVE_SRGB SRGB}</li>
* <li>{@link #TONEMAP_PRESET_CURVE_REC709 REC709}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
* @see #TONEMAP_PRESET_CURVE_SRGB
* @see #TONEMAP_PRESET_CURVE_REC709
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_PRESET_CURVE =
new Key<Integer>("android.tonemap.presetCurve", int.class);
@@ -4506,7 +4584,7 @@
* data is stored locally on the device.</p>
* <p>The LED <em>may</em> be off if a trusted application is using the data that
* doesn't violate the above rules.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Boolean> LED_TRANSMIT =
@@ -4519,7 +4597,7 @@
* ON if {@link CaptureRequest#BLACK_LEVEL_LOCK android.blackLevel.lock} was ON in the capture request, unless
* a change in other capture settings forced the camera device to
* perform a black level reset.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4528,6 +4606,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> BLACK_LEVEL_LOCK =
new Key<Boolean>("android.blackLevel.lock", boolean.class);
@@ -4637,7 +4716,7 @@
* <p><b>Units</b>: Relative exposure time increase factor.</p>
* <p><b>Range of valid values:</b><br>
* >= 1.0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4648,6 +4727,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR =
new Key<Float>("android.reprocess.effectiveExposureFactor", float.class);
@@ -4662,9 +4742,10 @@
* cameras when application changes FOCAL_LENGTH or SCALER_CROP_REGION.
* At the time of lens switch, this result metadata reflects the new active physical camera
* ID.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID =
new Key<String>("android.logicalMultiCamera.activePhysicalId", String.class);
@@ -4711,7 +4792,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_REGIONS
* @see CaptureRequest#CONTROL_AF_REGIONS
@@ -4727,6 +4808,7 @@
* @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> DISTORTION_CORRECTION_MODE =
new Key<Integer>("android.distortionCorrection.mode", int.class);
@@ -4736,4 +4818,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/display/BrightnessConfiguration.java b/core/java/android/hardware/display/BrightnessConfiguration.java
index ed8a97c..316c0c6 100644
--- a/core/java/android/hardware/display/BrightnessConfiguration.java
+++ b/core/java/android/hardware/display/BrightnessConfiguration.java
@@ -444,6 +444,7 @@
* {@link #getMaxCorrectionsByPackageName}).
*
*/
+ @NonNull
public Builder addCorrectionByPackageName(@NonNull String packageName,
@NonNull BrightnessCorrection correction) {
Objects.requireNonNull(packageName, "packageName must not be null");
@@ -472,6 +473,7 @@
* {@link #getMaxCorrectionsByCategory}).
*
*/
+ @NonNull
public Builder addCorrectionByCategory(@ApplicationInfo.Category int category,
@NonNull BrightnessCorrection correction) {
Objects.requireNonNull(correction, "correction must not be null");
@@ -488,6 +490,7 @@
* @param description brief text describing the curve pushed. It maybe truncated
* and will not be displayed in the UI
*/
+ @NonNull
public Builder setDescription(@Nullable String description) {
mDescription = description;
return this;
@@ -496,6 +499,7 @@
/**
* Builds the {@link BrightnessConfiguration}.
*/
+ @NonNull
public BrightnessConfiguration build() {
if (mCurveLux == null || mCurveNits == null) {
throw new IllegalStateException("A curve must be set!");
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index bd2b4eb..6728712 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -133,8 +133,6 @@
LegacyVpnInfo getLegacyVpnInfo(int userId);
- VpnInfo[] getAllVpnInfo();
-
boolean updateLockdownVpn();
boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);
boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown,
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index 92b685c..41efc50 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -19,11 +19,13 @@
import android.net.DataUsageRequest;
import android.net.INetworkStatsSession;
import android.net.Network;
+import android.net.NetworkState;
import android.net.NetworkStats;
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
import android.os.IBinder;
import android.os.Messenger;
+import com.android.internal.net.VpnInfo;
/** {@hide} */
interface INetworkStatsService {
@@ -62,7 +64,11 @@
void incrementOperationCount(int uid, int tag, int operationCount);
/** Force update of ifaces. */
- void forceUpdateIfaces(in Network[] defaultNetworks);
+ void forceUpdateIfaces(
+ in Network[] defaultNetworks,
+ in VpnInfo[] vpnArray,
+ in NetworkState[] networkStates,
+ in String activeIface);
/** Force update of statistics. */
@UnsupportedAppUsage
void forceUpdate();
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 0aed981..b3e35b6 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.admin.DevicePolicyManager;
@@ -155,13 +156,13 @@
* Return root of the "system" partition holding the core Android OS.
* Always present and mounted read-only.
*/
- public static File getRootDirectory() {
+ public static @NonNull File getRootDirectory() {
return DIR_ANDROID_ROOT;
}
/** {@hide} */
@TestApi
- public static File getStorageDirectory() {
+ public static @NonNull File getStorageDirectory() {
return DIR_ANDROID_STORAGE;
}
@@ -172,7 +173,7 @@
* @hide
*/
@SystemApi
- public static File getOemDirectory() {
+ public static @NonNull File getOemDirectory() {
return DIR_OEM_ROOT;
}
@@ -183,7 +184,7 @@
* @hide
*/
@SystemApi
- public static File getOdmDirectory() {
+ public static @NonNull File getOdmDirectory() {
return DIR_ODM_ROOT;
}
@@ -193,7 +194,7 @@
* @hide
*/
@SystemApi
- public static File getVendorDirectory() {
+ public static @NonNull File getVendorDirectory() {
return DIR_VENDOR_ROOT;
}
@@ -205,7 +206,7 @@
*/
@SystemApi
@TestApi
- public static File getProductDirectory() {
+ public static @NonNull File getProductDirectory() {
return DIR_PRODUCT_ROOT;
}
@@ -216,7 +217,7 @@
* @hide
*/
@SystemApi
- public static File getProductServicesDirectory() {
+ public static @NonNull File getProductServicesDirectory() {
return DIR_PRODUCT_SERVICES_ROOT;
}
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 91ddf82..4b32df7 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -694,9 +694,11 @@
ServiceType.BATTERY_STATS,
ServiceType.DATA_SAVER,
ServiceType.FORCE_ALL_APPS_STANDBY,
+ ServiceType.FORCE_BACKGROUND_CHECK,
ServiceType.OPTIONAL_SENSORS,
ServiceType.AOD,
ServiceType.QUICK_DOZE,
+ ServiceType.NIGHT_MODE,
})
public @interface ServiceType {
int NULL = 0;
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 5ff6e55..49d95df 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -482,7 +482,7 @@
* <p>As of the Gingerbread release this includes network and disk operations but will
* likely expand in future releases.
*/
- public Builder detectAll() {
+ public @NonNull Builder detectAll() {
detectDiskReads();
detectDiskWrites();
detectNetwork();
@@ -501,52 +501,52 @@
}
/** Disable the detection of everything. */
- public Builder permitAll() {
+ public @NonNull Builder permitAll() {
return disable(DETECT_THREAD_ALL);
}
/** Enable detection of network operations. */
- public Builder detectNetwork() {
+ public @NonNull Builder detectNetwork() {
return enable(DETECT_THREAD_NETWORK);
}
/** Disable detection of network operations. */
- public Builder permitNetwork() {
+ public @NonNull Builder permitNetwork() {
return disable(DETECT_THREAD_NETWORK);
}
/** Enable detection of disk reads. */
- public Builder detectDiskReads() {
+ public @NonNull Builder detectDiskReads() {
return enable(DETECT_THREAD_DISK_READ);
}
/** Disable detection of disk reads. */
- public Builder permitDiskReads() {
+ public @NonNull Builder permitDiskReads() {
return disable(DETECT_THREAD_DISK_READ);
}
/** Enable detection of slow calls. */
- public Builder detectCustomSlowCalls() {
+ public @NonNull Builder detectCustomSlowCalls() {
return enable(DETECT_THREAD_CUSTOM);
}
/** Disable detection of slow calls. */
- public Builder permitCustomSlowCalls() {
+ public @NonNull Builder permitCustomSlowCalls() {
return disable(DETECT_THREAD_CUSTOM);
}
/** Disable detection of mismatches between defined resource types and getter calls. */
- public Builder permitResourceMismatches() {
+ public @NonNull Builder permitResourceMismatches() {
return disable(DETECT_THREAD_RESOURCE_MISMATCH);
}
/** Detect unbuffered input/output operations. */
- public Builder detectUnbufferedIo() {
+ public @NonNull Builder detectUnbufferedIo() {
return enable(DETECT_THREAD_UNBUFFERED_IO);
}
/** Disable detection of unbuffered input/output operations. */
- public Builder permitUnbufferedIo() {
+ public @NonNull Builder permitUnbufferedIo() {
return disable(DETECT_THREAD_UNBUFFERED_IO);
}
@@ -562,17 +562,17 @@
* call will return a value without crashing; however, the developer should format the
* resource as an integer to avoid unnecessary type conversion.
*/
- public Builder detectResourceMismatches() {
+ public @NonNull Builder detectResourceMismatches() {
return enable(DETECT_THREAD_RESOURCE_MISMATCH);
}
/** Enable detection of disk writes. */
- public Builder detectDiskWrites() {
+ public @NonNull Builder detectDiskWrites() {
return enable(DETECT_THREAD_DISK_WRITE);
}
/** Disable detection of disk writes. */
- public Builder permitDiskWrites() {
+ public @NonNull Builder permitDiskWrites() {
return disable(DETECT_THREAD_DISK_WRITE);
}
@@ -582,7 +582,7 @@
* @hide
*/
@TestApi
- public Builder detectExplicitGc() {
+ public @NonNull Builder detectExplicitGc() {
// TODO(b/3400644): Un-hide this for next API update
// TODO(b/3400644): Un-hide ExplicitGcViolation for next API update
// TODO(b/3400644): Make DETECT_EXPLICIT_GC a @TestApi for next API update
@@ -595,7 +595,7 @@
*
* @hide
*/
- public Builder permitExplicitGc() {
+ public @NonNull Builder permitExplicitGc() {
// TODO(b/3400644): Un-hide this for next API update
return disable(DETECT_THREAD_EXPLICIT_GC);
}
@@ -604,7 +604,7 @@
* Show an annoying dialog to the developer on detected violations, rate-limited to be
* only a little annoying.
*/
- public Builder penaltyDialog() {
+ public @NonNull Builder penaltyDialog() {
return enable(PENALTY_DIALOG);
}
@@ -616,7 +616,7 @@
* <p>Unlike {@link #penaltyDeathOnNetwork}, this applies to disk reads, disk writes,
* and network usage if their corresponding detect flags are set.
*/
- public Builder penaltyDeath() {
+ public @NonNull Builder penaltyDeath() {
return enable(PENALTY_DEATH);
}
@@ -627,17 +627,17 @@
*
* <p>In the Honeycomb or later SDKs, this is on by default.
*/
- public Builder penaltyDeathOnNetwork() {
+ public @NonNull Builder penaltyDeathOnNetwork() {
return enable(PENALTY_DEATH_ON_NETWORK);
}
/** Flash the screen during a violation. */
- public Builder penaltyFlashScreen() {
+ public @NonNull Builder penaltyFlashScreen() {
return enable(PENALTY_FLASH);
}
/** Log detected violations to the system log. */
- public Builder penaltyLog() {
+ public @NonNull Builder penaltyLog() {
return enable(PENALTY_LOG);
}
@@ -646,7 +646,7 @@
* android.os.DropBoxManager DropBox} on policy violation. Intended mostly for platform
* integrators doing beta user field data collection.
*/
- public Builder penaltyDropBox() {
+ public @NonNull Builder penaltyDropBox() {
return enable(PENALTY_DROPBOX);
}
@@ -654,7 +654,7 @@
* Call #{@link OnThreadViolationListener#onThreadViolation(Violation)} on specified
* executor every violation.
*/
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull Executor executor, @NonNull OnThreadViolationListener listener) {
if (executor == null) {
throw new NullPointerException("executor must not be null");
@@ -665,7 +665,7 @@
}
/** @removed */
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull OnThreadViolationListener listener, @NonNull Executor executor) {
return penaltyListener(executor, listener);
}
@@ -782,7 +782,7 @@
* Set an upper bound on how many instances of a class can be in memory at once. Helps
* to prevent object leaks.
*/
- public Builder setClassInstanceLimit(Class klass, int instanceLimit) {
+ public @NonNull Builder setClassInstanceLimit(Class klass, int instanceLimit) {
if (klass == null) {
throw new NullPointerException("klass == null");
}
@@ -803,12 +803,12 @@
}
/** Detect leaks of {@link android.app.Activity} subclasses. */
- public Builder detectActivityLeaks() {
+ public @NonNull Builder detectActivityLeaks() {
return enable(DETECT_VM_ACTIVITY_LEAKS);
}
/** @hide */
- public Builder permitActivityLeaks() {
+ public @NonNull Builder permitActivityLeaks() {
return disable(DETECT_VM_ACTIVITY_LEAKS);
}
@@ -819,7 +819,7 @@
* enabled may not be detected. To ensure that all such API accesses are detected,
* you should apply this policy as early as possible after process creation.
*/
- public Builder detectNonSdkApiUsage() {
+ public @NonNull Builder detectNonSdkApiUsage() {
return enable(DETECT_VM_NON_SDK_API_USAGE);
}
@@ -829,7 +829,7 @@
* continue to restrict or warn on access to methods that are not part of the
* public SDK.
*/
- public Builder permitNonSdkApiUsage() {
+ public @NonNull Builder permitNonSdkApiUsage() {
return disable(DETECT_VM_NON_SDK_API_USAGE);
}
@@ -839,7 +839,7 @@
* <p>In the Honeycomb release this includes leaks of SQLite cursors, Activities, and
* other closable objects but will likely expand in future releases.
*/
- public Builder detectAll() {
+ public @NonNull Builder detectAll() {
detectLeakedSqlLiteObjects();
final int targetSdk = VMRuntime.getRuntime().getTargetSdkVersion();
@@ -881,7 +881,7 @@
* <p>You always want to explicitly close your SQLite cursors to avoid unnecessary
* database contention and temporary memory leaks.
*/
- public Builder detectLeakedSqlLiteObjects() {
+ public @NonNull Builder detectLeakedSqlLiteObjects() {
return enable(DETECT_VM_CURSOR_LEAKS);
}
@@ -892,7 +892,7 @@
* <p>You always want to explicitly close such objects to avoid unnecessary resources
* leaks.
*/
- public Builder detectLeakedClosableObjects() {
+ public @NonNull Builder detectLeakedClosableObjects() {
return enable(DETECT_VM_CLOSABLE_LEAKS);
}
@@ -900,7 +900,7 @@
* Detect when a {@link BroadcastReceiver} or {@link ServiceConnection} is leaked during
* {@link Context} teardown.
*/
- public Builder detectLeakedRegistrationObjects() {
+ public @NonNull Builder detectLeakedRegistrationObjects() {
return enable(DETECT_VM_REGISTRATION_LEAKS);
}
@@ -919,7 +919,7 @@
* @see android.support.v4.content.FileProvider
* @see Intent#FLAG_GRANT_READ_URI_PERMISSION
*/
- public Builder detectFileUriExposure() {
+ public @NonNull Builder detectFileUriExposure() {
return enable(DETECT_VM_FILE_URI_EXPOSURE);
}
@@ -938,7 +938,7 @@
* <p>This inspects both IPv4/IPv6 and TCP/UDP network traffic, but it may be subject to
* false positives, such as when STARTTLS protocols or HTTP proxies are used.
*/
- public Builder detectCleartextNetwork() {
+ public @NonNull Builder detectCleartextNetwork() {
return enable(DETECT_VM_CLEARTEXT_NETWORK);
}
@@ -954,7 +954,7 @@
* @see Intent#FLAG_GRANT_READ_URI_PERMISSION
* @see Intent#FLAG_GRANT_WRITE_URI_PERMISSION
*/
- public Builder detectContentUriWithoutPermission() {
+ public @NonNull Builder detectContentUriWithoutPermission() {
return enable(DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION);
}
@@ -969,12 +969,12 @@
* @see TrafficStats#tagSocket(java.net.Socket)
* @see TrafficStats#tagDatagramSocket(java.net.DatagramSocket)
*/
- public Builder detectUntaggedSockets() {
+ public @NonNull Builder detectUntaggedSockets() {
return enable(DETECT_VM_UNTAGGED_SOCKET);
}
/** @hide */
- public Builder permitUntaggedSockets() {
+ public @NonNull Builder permitUntaggedSockets() {
return disable(DETECT_VM_UNTAGGED_SOCKET);
}
@@ -992,12 +992,12 @@
* <li>{@link PackageManager#MATCH_DIRECT_BOOT_AUTO}
* </ul>
*/
- public Builder detectImplicitDirectBoot() {
+ public @NonNull Builder detectImplicitDirectBoot() {
return enable(DETECT_VM_IMPLICIT_DIRECT_BOOT);
}
/** @hide */
- public Builder permitImplicitDirectBoot() {
+ public @NonNull Builder permitImplicitDirectBoot() {
return disable(DETECT_VM_IMPLICIT_DIRECT_BOOT);
}
@@ -1014,12 +1014,12 @@
* @see Context#createCredentialProtectedStorageContext()
* @see Context#createDeviceProtectedStorageContext()
*/
- public Builder detectCredentialProtectedWhileLocked() {
+ public @NonNull Builder detectCredentialProtectedWhileLocked() {
return enable(DETECT_VM_CREDENTIAL_PROTECTED_WHILE_LOCKED);
}
/** @hide */
- public Builder permitCredentialProtectedWhileLocked() {
+ public @NonNull Builder permitCredentialProtectedWhileLocked() {
return disable(DETECT_VM_CREDENTIAL_PROTECTED_WHILE_LOCKED);
}
@@ -1028,7 +1028,7 @@
* penalties so you'll still get your logging or other violations before the process
* dies.
*/
- public Builder penaltyDeath() {
+ public @NonNull Builder penaltyDeath() {
return enable(PENALTY_DEATH);
}
@@ -1037,7 +1037,7 @@
*
* @see #detectCleartextNetwork()
*/
- public Builder penaltyDeathOnCleartextNetwork() {
+ public @NonNull Builder penaltyDeathOnCleartextNetwork() {
return enable(PENALTY_DEATH_ON_CLEARTEXT_NETWORK);
}
@@ -1047,12 +1047,12 @@
*
* @see #detectFileUriExposure()
*/
- public Builder penaltyDeathOnFileUriExposure() {
+ public @NonNull Builder penaltyDeathOnFileUriExposure() {
return enable(PENALTY_DEATH_ON_FILE_URI_EXPOSURE);
}
/** Log detected violations to the system log. */
- public Builder penaltyLog() {
+ public @NonNull Builder penaltyLog() {
return enable(PENALTY_LOG);
}
@@ -1061,14 +1061,14 @@
* android.os.DropBoxManager DropBox} on policy violation. Intended mostly for platform
* integrators doing beta user field data collection.
*/
- public Builder penaltyDropBox() {
+ public @NonNull Builder penaltyDropBox() {
return enable(PENALTY_DROPBOX);
}
/**
* Call #{@link OnVmViolationListener#onVmViolation(Violation)} on every violation.
*/
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull Executor executor, @NonNull OnVmViolationListener listener) {
if (executor == null) {
throw new NullPointerException("executor must not be null");
@@ -1079,7 +1079,7 @@
}
/** @removed */
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull OnVmViolationListener listener, @NonNull Executor executor) {
return penaltyListener(executor, listener);
}
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 3e5bd4b..5d34aa6 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -183,6 +183,22 @@
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
/**
+ * The content:// style URL for the top-level cross-profile calendar uris.
+ * {@link android.database.ContentObserver} for this URL in the primary profile will be
+ * notified when there is a change in the managed profile calendar provider.
+ *
+ * @see Events#ENTERPRISE_CONTENT_URI
+ * @see Calendars#ENTERPRISE_CONTENT_URI
+ * @see Instances#ENTERPRISE_CONTENT_URI
+ * @see Instances#ENTERPRISE_CONTENT_BY_DAY_URI
+ * @see Instances#ENTERPRISE_CONTENT_SEARCH_URI
+ * @see Instances#ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI
+ * @hide
+ */
+ public static final Uri ENTERPRISE_CONTENT_URI = Uri.parse(
+ "content://" + AUTHORITY + "/enterprise");
+
+ /**
* An optional insert, update or delete URI parameter that allows the caller
* to specify that it is a sync adapter. The default value is false. If set
* to true, the modified row is not marked as "dirty" (needs to be synced)
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index a57d292e..fc89e2c 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -55,6 +55,15 @@
public static final Uri CONTENT_URI = Uri.parse("content://" + Settings.AUTHORITY + "/config");
/**
+ * Namespace for activity manager related features. These features will be applied
+ * immediately upon change.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager";
+
+ /**
* Namespace for all Game Driver features.
*
* @hide
@@ -281,35 +290,6 @@
}
/**
- * Namespace for activity manager related features. These features will be applied
- * immediately upon change.
- *
- * @hide
- */
- @SystemApi
- public interface ActivityManager {
- String NAMESPACE = "activity_manager";
-
- /**
- * App compaction flags. See {@link com.android.server.am.AppCompactor}.
- */
- String KEY_USE_COMPACTION = "use_compaction";
- String KEY_COMPACT_ACTION_1 = "compact_action_1";
- String KEY_COMPACT_ACTION_2 = "compact_action_2";
- String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
- String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
- String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
- String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
- String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate";
-
- /**
- * Maximum number of cached processes. See
- * {@link com.android.server.am.ActivityManagerConstants}.
- */
- String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
- }
-
- /**
* Namespace for {@link AttentionManagerService} related features.
*
* @hide
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 643307e..a34ac70 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -529,7 +529,6 @@
*
* @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
- * @see MediaStore#createPending(Context, PendingParams)
*/
public static @NonNull Uri setIncludePending(@NonNull Uri uri) {
return setIncludePending(uri.buildUpon()).build();
@@ -586,7 +585,9 @@
* @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
* @see MediaStore#createPending(Context, PendingParams)
+ * @removed
*/
+ @Deprecated
public static @NonNull Uri createPending(@NonNull Context context,
@NonNull PendingParams params) {
return context.getContentResolver().insert(params.insertUri, params.insertValues);
@@ -599,14 +600,19 @@
*
* @param uri token which was previously returned from
* {@link #createPending(Context, PendingParams)}.
+ * @removed
*/
+ @Deprecated
public static @NonNull PendingSession openPending(@NonNull Context context, @NonNull Uri uri) {
return new PendingSession(context, uri);
}
/**
* Parameters that describe a pending media item.
+ *
+ * @removed
*/
+ @Deprecated
public static class PendingParams {
/** {@hide} */
public final Uri insertUri;
@@ -711,7 +717,10 @@
* expected to have a short lifetime, and owners should either
* {@link PendingSession#publish()} or {@link PendingSession#abandon()} a
* pending item within a few hours after first creating it.
+ *
+ * @removed
*/
+ @Deprecated
public static class PendingSession implements AutoCloseable {
/** {@hide} */
private final Context mContext;
@@ -976,9 +985,7 @@
* Flag indicating if a media item is pending, and still being inserted
* by its owner.
*
- * @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
- * @see MediaStore#createPending(Context, PendingParams)
*/
@Column(Cursor.FIELD_TYPE_INTEGER)
public static final String IS_PENDING = "is_pending";
@@ -998,12 +1005,8 @@
/**
* The time the media item should be considered expired. Typically only
- * meaningful in the context of {@link #IS_PENDING} or
- * {@link #IS_TRASHED}.
- *
- * @removed
+ * meaningful in the context of {@link #IS_PENDING}.
*/
- @Deprecated
@CurrentTimeSecondsLong
@Column(Cursor.FIELD_TYPE_INTEGER)
public static final String DATE_EXPIRES = "date_expires";
@@ -1030,8 +1033,6 @@
/**
* The primary directory name this media exists under. The value may be
* {@code NULL} if the media doesn't have a primary directory name.
- *
- * @see PendingParams#setPrimaryDirectory(String)
*/
@Column(Cursor.FIELD_TYPE_STRING)
public static final String PRIMARY_DIRECTORY = "primary_directory";
@@ -1039,8 +1040,6 @@
/**
* The secondary directory name this media exists under. The value may
* be {@code NULL} if the media doesn't have a secondary directory name.
- *
- * @see PendingParams#setSecondaryDirectory(String)
*/
@Column(Cursor.FIELD_TYPE_STRING)
public static final String SECONDARY_DIRECTORY = "secondary_directory";
@@ -1292,12 +1291,7 @@
}
/**
- * Container for downloaded files.
- *
- * <p>
- * Querying for downloads from this table will return files contributed via
- * {@link PendingSession} and also ones which were downloaded using
- * {@link android.app.DownloadManager} APIs.
+ * Collection of downloaded items.
*/
public static final class Downloads implements DownloadColumns {
private Downloads() {}
@@ -1305,6 +1299,7 @@
/**
* The content:// style URI for the internal storage.
*/
+ @NonNull
public static final Uri INTERNAL_CONTENT_URI =
getContentUri("internal");
@@ -1312,6 +1307,7 @@
* The content:// style URI for the "primary" external storage
* volume.
*/
+ @NonNull
public static final Uri EXTERNAL_CONTENT_URI =
getContentUri("external");
@@ -1336,13 +1332,13 @@
* @param volumeName the name of the volume to get the URI for
* @return the URI to the image media table on the given volume
*/
- public static Uri getContentUri(String volumeName) {
+ public static @NonNull Uri getContentUri(@NonNull String volumeName) {
return AUTHORITY_URI.buildUpon().appendPath(volumeName)
.appendPath("downloads").build();
}
/** @hide */
- public static Uri getContentUriForPath(@NonNull String path) {
+ public static @NonNull Uri getContentUriForPath(@NonNull String path) {
return getContentUri(getVolumeName(new File(path)));
}
@@ -1620,9 +1616,9 @@
* @param name The name of the image
* @param description The description of the image
* @return The URL to the newly created image
- * @deprecated inserting of images should be performed through
- * {@link MediaStore#createPending(Context, PendingParams)},
- * which offers richer control over lifecycle.
+ * @deprecated inserting of images should be performed using
+ * {@link MediaColumns#IS_PENDING}, which offers richer
+ * control over lifecycle.
*/
@Deprecated
public static final String insertImage(ContentResolver cr, String imagePath,
@@ -1651,9 +1647,9 @@
* @param description The description of the image
* @return The URL to the newly created image, or <code>null</code> if the image failed to be stored
* for any reason.
- * @deprecated inserting of images should be performed through
- * {@link MediaStore#createPending(Context, PendingParams)},
- * which offers richer control over lifecycle.
+ * @deprecated inserting of images should be performed using
+ * {@link MediaColumns#IS_PENDING}, which offers richer
+ * control over lifecycle.
*/
@Deprecated
public static final String insertImage(ContentResolver cr, Bitmap source,
@@ -3180,7 +3176,7 @@
* {@link MediaStore.Images.Media#getContentUri(String)} to query media at
* that location.
*/
- public static @NonNull Set<String> getAllVolumeNames(Context context) {
+ public static @NonNull Set<String> getAllVolumeNames(@NonNull Context context) {
final StorageManager sm = context.getSystemService(StorageManager.class);
final Set<String> volumeNames = new ArraySet<>();
volumeNames.add(VOLUME_INTERNAL);
@@ -3354,7 +3350,7 @@
* if no equivalent was found.
* @see #getMediaUri(Context, Uri)
*/
- public static Uri getDocumentUri(Context context, Uri mediaUri) {
+ public static @Nullable Uri getDocumentUri(@NonNull Context context, @NonNull Uri mediaUri) {
final ContentResolver resolver = context.getContentResolver();
final List<UriPermission> uriPermissions = resolver.getPersistedUriPermissions();
@@ -3384,7 +3380,7 @@
* equivalent was found.
* @see #getDocumentUri(Context, Uri)
*/
- public static Uri getMediaUri(Context context, Uri documentUri) {
+ public static @Nullable Uri getMediaUri(@NonNull Context context, @NonNull Uri documentUri) {
final ContentResolver resolver = context.getContentResolver();
final List<UriPermission> uriPermissions = resolver.getPersistedUriPermissions();
diff --git a/core/java/android/service/autofill/FillContext.java b/core/java/android/service/autofill/FillContext.java
index 535c00b..5ed978e 100644
--- a/core/java/android/service/autofill/FillContext.java
+++ b/core/java/android/service/autofill/FillContext.java
@@ -49,6 +49,7 @@
public final class FillContext implements Parcelable {
private final int mRequestId;
private final @NonNull AssistStructure mStructure;
+ private final @NonNull AutofillId mFocusedId;
/**
* Lookup table AutofillId->ViewNode to speed up {@link #findViewNodesByAutofillIds}
@@ -58,13 +59,15 @@
/** @hide */
- public FillContext(int requestId, @NonNull AssistStructure structure) {
+ public FillContext(int requestId, @NonNull AssistStructure structure,
+ @NonNull AutofillId autofillId) {
mRequestId = requestId;
mStructure = structure;
+ mFocusedId = autofillId;
}
private FillContext(Parcel parcel) {
- this(parcel.readInt(), parcel.readParcelable(null));
+ this(parcel.readInt(), parcel.readParcelable(null), parcel.readParcelable(null));
}
/**
@@ -82,15 +85,24 @@
/**
* @return The screen content.
*/
+ @NonNull
public AssistStructure getStructure() {
return mStructure;
}
+ /**
+ * @return the AutofillId of the view that triggered autofill.
+ */
+ @NonNull
+ public AutofillId getFocusedId() {
+ return mFocusedId;
+ }
+
@Override
public String toString() {
if (!sDebug) return super.toString();
- return "FillContext [reqId=" + mRequestId + "]";
+ return "FillContext [reqId=" + mRequestId + ", focusedId=" + mFocusedId + "]";
}
@Override
@@ -102,6 +114,7 @@
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mRequestId);
parcel.writeParcelable(mStructure, flags);
+ parcel.writeParcelable(mFocusedId, flags);
}
/**
@@ -180,11 +193,13 @@
public static final Parcelable.Creator<FillContext> CREATOR =
new Parcelable.Creator<FillContext>() {
@Override
+ @NonNull
public FillContext createFromParcel(Parcel parcel) {
return new FillContext(parcel);
}
@Override
+ @NonNull
public FillContext[] newArray(int size) {
return new FillContext[size];
}
diff --git a/core/java/android/service/autofill/VisibilitySetterAction.java b/core/java/android/service/autofill/VisibilitySetterAction.java
index 9f977d7..81f5d38 100644
--- a/core/java/android/service/autofill/VisibilitySetterAction.java
+++ b/core/java/android/service/autofill/VisibilitySetterAction.java
@@ -70,7 +70,7 @@
/**
* Builder for {@link VisibilitySetterAction} objects.
*/
- public static class Builder {
+ public static final class Builder {
private final SparseIntArray mVisibilities = new SparseIntArray();
private boolean mDestroyed;
@@ -96,6 +96,7 @@
* @throws IllegalArgumentException if visibility is not one of {@link View#VISIBLE},
* {@link View#INVISIBLE}, or {@link View#GONE}.
*/
+ @NonNull
public Builder setVisibility(@IdRes int id, @Visibility int visibility) {
throwIfDestroyed();
switch (visibility) {
@@ -111,6 +112,7 @@
/**
* Creates a new {@link VisibilitySetterAction} instance.
*/
+ @NonNull
public VisibilitySetterAction build() {
throwIfDestroyed();
mDestroyed = true;
@@ -147,6 +149,8 @@
public static final Parcelable.Creator<VisibilitySetterAction> CREATOR =
new Parcelable.Creator<VisibilitySetterAction>() {
+
+ @NonNull
@Override
public VisibilitySetterAction createFromParcel(Parcel parcel) {
// Always go through the builder to ensure the data ingested by
@@ -165,6 +169,7 @@
return builder == null ? null : builder.build();
}
+ @NonNull
@Override
public VisibilitySetterAction[] newArray(int size) {
return new VisibilitySetterAction[size];
diff --git a/core/java/android/service/autofill/augmented/FillResponse.java b/core/java/android/service/autofill/augmented/FillResponse.java
index 2ac406c..48a3c1b 100644
--- a/core/java/android/service/autofill/augmented/FillResponse.java
+++ b/core/java/android/service/autofill/augmented/FillResponse.java
@@ -19,9 +19,6 @@
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
-import android.view.autofill.AutofillId;
-
-import java.util.List;
/**
* Response to a {@link FillRequest}.
@@ -63,6 +60,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder setFillWindow(@NonNull FillWindow fillWindow) {
// TODO(b/123100712): check not null / unit test / throw exception if FillWindow not
// updated yet
@@ -71,19 +69,6 @@
}
/**
- * Tells the Android System that the given {@code ids} should not trigger further
- * {@link FillRequest requests} when focused.
- *
- * @param ids ids of the fields that should be ignored
- *
- * @return this builder
- */
- public Builder setIgnoredIds(@NonNull List<AutofillId> ids) {
- // TODO(b/123100695): implement / check not null / unit test
- return this;
- }
-
- /**
* Builds a new {@link FillResponse} instance.
*
* @throws IllegalStateException if any of the following conditions occur:
@@ -95,6 +80,7 @@
*
* @return A built response.
*/
+ @NonNull
public FillResponse build() {
// TODO(b/123100712): check conditions / add unit test
return new FillResponse(this);
diff --git a/core/java/android/service/carrier/CarrierMessagingClientService.java b/core/java/android/service/carrier/CarrierMessagingClientService.java
index 13f4fc4..767c1d1 100644
--- a/core/java/android/service/carrier/CarrierMessagingClientService.java
+++ b/core/java/android/service/carrier/CarrierMessagingClientService.java
@@ -15,6 +15,8 @@
*/
package android.service.carrier;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
@@ -71,7 +73,8 @@
}
@Override
- public final IBinder onBind(Intent intent) {
+ @NonNull
+ public final IBinder onBind(@Nullable Intent intent) {
return mImpl.asBinder();
}
diff --git a/core/java/android/service/contentcapture/SnapshotData.java b/core/java/android/service/contentcapture/SnapshotData.java
index c3af1f0..58ec2ff 100644
--- a/core/java/android/service/contentcapture/SnapshotData.java
+++ b/core/java/android/service/contentcapture/SnapshotData.java
@@ -60,6 +60,7 @@
/**
* Returns the assist data for this snapshot.
*/
+ @NonNull
public Bundle getAssistData() {
return mAssistData;
}
@@ -67,6 +68,7 @@
/**
* Returns the assist structure for this snapshot.
*/
+ @NonNull
public AssistStructure getAssistStructure() {
return mAssistStructure;
}
@@ -74,6 +76,7 @@
/**
* Returns the assist context for this snapshot.
*/
+ @Nullable
public AssistContent getAssistContent() {
return mAssistContent;
}
@@ -94,11 +97,13 @@
new Creator<SnapshotData>() {
@Override
+ @NonNull
public SnapshotData createFromParcel(@NonNull Parcel parcel) {
return new SnapshotData(parcel);
}
@Override
+ @NonNull
public SnapshotData[] newArray(int size) {
return new SnapshotData[size];
}
diff --git a/core/java/android/view/GestureExclusionTracker.java b/core/java/android/view/GestureExclusionTracker.java
new file mode 100644
index 0000000..8eccc04
--- /dev/null
+++ b/core/java/android/view/GestureExclusionTracker.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Rect;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Used by {@link ViewRootImpl} to track system gesture exclusion rects reported by views.
+ */
+class GestureExclusionTracker {
+ private boolean mGestureExclusionViewsChanged = false;
+ private List<GestureExclusionViewInfo> mGestureExclusionViewInfos = new ArrayList<>();
+ private List<Rect> mGestureExclusionRects = Collections.emptyList();
+
+ public void updateRectsForView(@NonNull View view) {
+ boolean found = false;
+ final Iterator<GestureExclusionViewInfo> i = mGestureExclusionViewInfos.iterator();
+ while (i.hasNext()) {
+ final GestureExclusionViewInfo info = i.next();
+ final View v = info.getView();
+ if (v == null || !v.isAttachedToWindow()) {
+ mGestureExclusionViewsChanged = true;
+ i.remove();
+ continue;
+ }
+ if (v == view) {
+ found = true;
+ info.mDirty = true;
+ break;
+ }
+ }
+ if (!found && view.isAttachedToWindow()) {
+ mGestureExclusionViewInfos.add(new GestureExclusionViewInfo(view));
+ mGestureExclusionViewsChanged = true;
+ }
+ }
+
+ @Nullable
+ public List<Rect> computeChangedRects() {
+ boolean changed = false;
+ final Iterator<GestureExclusionViewInfo> i = mGestureExclusionViewInfos.iterator();
+ final List<Rect> rects = new ArrayList<>();
+ while (i.hasNext()) {
+ final GestureExclusionViewInfo info = i.next();
+ switch (info.update()) {
+ case GestureExclusionViewInfo.CHANGED:
+ changed = true;
+ // Deliberate fall-through
+ case GestureExclusionViewInfo.UNCHANGED:
+ rects.addAll(info.mExclusionRects);
+ break;
+ case GestureExclusionViewInfo.GONE:
+ mGestureExclusionViewsChanged = true;
+ i.remove();
+ break;
+ }
+ }
+ if (changed || mGestureExclusionViewsChanged) {
+ mGestureExclusionViewsChanged = false;
+ if (!mGestureExclusionRects.equals(rects)) {
+ mGestureExclusionRects = rects;
+ return rects;
+ }
+ }
+ return null;
+ }
+
+ private static class GestureExclusionViewInfo {
+ public static final int CHANGED = 0;
+ public static final int UNCHANGED = 1;
+ public static final int GONE = 2;
+
+ private final WeakReference<View> mView;
+ boolean mDirty = true;
+ List<Rect> mExclusionRects = Collections.emptyList();
+
+ GestureExclusionViewInfo(View view) {
+ mView = new WeakReference<>(view);
+ }
+
+ public View getView() {
+ return mView.get();
+ }
+
+ public int update() {
+ final View excludedView = getView();
+ if (excludedView == null || !excludedView.isAttachedToWindow()) return GONE;
+ final List<Rect> localRects = excludedView.getSystemGestureExclusionRects();
+ final List<Rect> newRects = new ArrayList<>(localRects.size());
+ for (Rect src : localRects) {
+ Rect mappedRect = new Rect(src);
+ ViewParent p = excludedView.getParent();
+ if (p != null && p.getChildVisibleRect(excludedView, mappedRect, null)) {
+ newRects.add(mappedRect);
+ }
+ }
+
+ if (mExclusionRects.equals(localRects)) return UNCHANGED;
+ mExclusionRects = newRects;
+ return CHANGED;
+ }
+ }
+}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index fe9aa23..ee8d663 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -210,7 +210,7 @@
public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- mRenderNode.requestPositionUpdates(mPositionListener);
+ mRenderNode.addPositionUpdateListener(mPositionListener);
setWillNotDraw(true);
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 7afdc70..cc585b0 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -881,12 +881,6 @@
private static boolean sAlwaysRemeasureExactly = false;
/**
- * Relax constraints around whether setLayoutParams() must be called after
- * modifying the layout params.
- */
- private static boolean sLayoutParamsAlwaysChanged = false;
-
- /**
* Allow setForeground/setBackground to be called (and ignored) on a textureview,
* without throwing
*/
@@ -4603,6 +4597,16 @@
private ArrayList<OnUnhandledKeyEventListener> mUnhandledKeyListeners;
private WindowInsetsAnimationListener mWindowInsetsAnimationListener;
+
+ /**
+ * This lives here since it's only valid for interactive views.
+ */
+ private List<Rect> mSystemGestureExclusionRects;
+
+ /**
+ * Used to track {@link #mSystemGestureExclusionRects}
+ */
+ public RenderNode.PositionUpdateListener mPositionUpdateListener;
}
@UnsupportedAppUsage
@@ -5170,11 +5174,6 @@
// modes, so we always need to run an additional EXACTLY pass.
sAlwaysRemeasureExactly = targetSdkVersion <= Build.VERSION_CODES.M;
- // Prior to N, layout params could change without requiring a
- // subsequent call to setLayoutParams() and they would usually
- // work. Partial layout breaks this assumption.
- sLayoutParamsAlwaysChanged = targetSdkVersion <= Build.VERSION_CODES.M;
-
// Prior to N, TextureView would silently ignore calls to setBackground/setForeground.
// On N+, we throw, but that breaks compatibility with apps that use these methods.
sTextureViewIgnoresDrawableSetters = targetSdkVersion <= Build.VERSION_CODES.M;
@@ -10974,6 +10973,95 @@
}
/**
+ * Sets a list of areas within this view's post-layout coordinate space where the system
+ * should not intercept touch or other pointing device gestures. <em>This method should
+ * be called by {@link #onLayout(boolean, int, int, int, int)} or {@link #onDraw(Canvas)}.</em>
+ *
+ * <p>Use this to tell the system which specific sub-areas of a view need to receive gesture
+ * input in order to function correctly in the presence of global system gestures that may
+ * conflict. For example, if the system wishes to capture swipe-in-from-screen-edge gestures
+ * to provide system-level navigation functionality, a view such as a navigation drawer
+ * container can mark the left (or starting) edge of itself as requiring gesture capture
+ * priority using this API. The system may then choose to relax its own gesture recognition
+ * to allow the app to consume the user's gesture. It is not necessary for an app to register
+ * exclusion rects for broadly spanning regions such as the entirety of a
+ * <code>ScrollView</code> or for simple press and release click targets such as
+ * <code>Button</code>. Mark an exclusion rect when interacting with a view requires
+ * a precision touch gesture in a small area in either the X or Y dimension, such as
+ * an edge swipe or dragging a <code>SeekBar</code> thumb.</p>
+ *
+ * <p>Do not modify the provided list after this method is called.</p>
+ *
+ * @param rects A list of precision gesture regions that this view needs to function correctly
+ */
+ public void setSystemGestureExclusionRects(@NonNull List<Rect> rects) {
+ if (rects.isEmpty() && mListenerInfo == null) return;
+
+ final ListenerInfo info = getListenerInfo();
+ if (rects.isEmpty()) {
+ info.mSystemGestureExclusionRects = null;
+ if (info.mPositionUpdateListener != null) {
+ mRenderNode.removePositionUpdateListener(info.mPositionUpdateListener);
+ }
+ } else {
+ info.mSystemGestureExclusionRects = rects;
+ if (info.mPositionUpdateListener == null) {
+ info.mPositionUpdateListener = new RenderNode.PositionUpdateListener() {
+ @Override
+ public void positionChanged(long n, int l, int t, int r, int b) {
+ postUpdateSystemGestureExclusionRects();
+ }
+
+ @Override
+ public void positionLost(long frameNumber) {
+ postUpdateSystemGestureExclusionRects();
+ }
+ };
+ mRenderNode.addPositionUpdateListener(info.mPositionUpdateListener);
+ }
+ }
+ postUpdateSystemGestureExclusionRects();
+ }
+
+ /**
+ * WARNING: this can be called by a hwui worker thread, not just the UI thread!
+ */
+ void postUpdateSystemGestureExclusionRects() {
+ // Potentially racey from a background thread. It's ok if it's not perfect.
+ final Handler h = getHandler();
+ if (h != null) {
+ h.postAtFrontOfQueue(this::updateSystemGestureExclusionRects);
+ }
+ }
+
+ void updateSystemGestureExclusionRects() {
+ final AttachInfo ai = mAttachInfo;
+ if (ai != null) {
+ ai.mViewRootImpl.updateSystemGestureExclusionRectsForView(this);
+ }
+ }
+
+ /**
+ * Retrieve the list of areas within this view's post-layout coordinate space where the system
+ * should not intercept touch or other pointing device gestures.
+ *
+ * <p>Do not modify the returned list.</p>
+ *
+ * @return the list set by {@link #setSystemGestureExclusionRects(List)}
+ */
+ @NonNull
+ public List<Rect> getSystemGestureExclusionRects() {
+ final ListenerInfo info = mListenerInfo;
+ if (info != null) {
+ final List<Rect> list = info.mSystemGestureExclusionRects;
+ if (list != null) {
+ return list;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ /**
* Compute the view's coordinate within the surface.
*
* <p>Computes the coordinates of this view in its surface. The argument
@@ -17988,21 +18076,6 @@
}
/**
- * Utility method to transform a given Rect by the current matrix of this view.
- */
- void transformRect(final Rect rect) {
- if (!getMatrix().isIdentity()) {
- RectF boundingRect = mAttachInfo.mTmpTransformRect;
- boundingRect.set(rect);
- getMatrix().mapRect(boundingRect);
- rect.set((int) Math.floor(boundingRect.left),
- (int) Math.floor(boundingRect.top),
- (int) Math.ceil(boundingRect.right),
- (int) Math.ceil(boundingRect.bottom));
- }
- }
-
- /**
* Used to indicate that the parent of this view should clear its caches. This functionality
* is used to force the parent to rebuild its display list (when hardware-accelerated),
* which is necessary when various parent-managed properties of the view change, such as
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index ad0aaa6..65b1abd 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -605,6 +605,8 @@
private final InsetsController mInsetsController = new InsetsController(this);
+ private final GestureExclusionTracker mGestureExclusionTracker = new GestureExclusionTracker();
+
static final class SystemUiVisibilityInfo {
int seq;
int globalVisibility;
@@ -3977,6 +3979,20 @@
return mAttachInfo.mAccessibilityFocusDrawable;
}
+ void updateSystemGestureExclusionRectsForView(View view) {
+ mGestureExclusionTracker.updateRectsForView(view);
+ mHandler.sendEmptyMessage(MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED);
+ }
+
+ void systemGestureExclusionChanged() {
+ final List<Rect> rectsForWindowManager = mGestureExclusionTracker.computeChangedRects();
+ if (rectsForWindowManager != null) {
+ // TODO Send to WM
+ mAttachInfo.mTreeObserver
+ .dispatchOnSystemGestureExclusionRectsChanged(rectsForWindowManager);
+ }
+ }
+
/**
* Requests that the root render node is invalidated next time we perform a draw, such that
* {@link WindowCallbacks#onPostDraw} gets called.
@@ -4433,35 +4449,36 @@
}
}
- private final static int MSG_INVALIDATE = 1;
- private final static int MSG_INVALIDATE_RECT = 2;
- private final static int MSG_DIE = 3;
- private final static int MSG_RESIZED = 4;
- private final static int MSG_RESIZED_REPORT = 5;
- private final static int MSG_WINDOW_FOCUS_CHANGED = 6;
- private final static int MSG_DISPATCH_INPUT_EVENT = 7;
- private final static int MSG_DISPATCH_APP_VISIBILITY = 8;
- private final static int MSG_DISPATCH_GET_NEW_SURFACE = 9;
- private final static int MSG_DISPATCH_KEY_FROM_IME = 11;
- private final static int MSG_DISPATCH_KEY_FROM_AUTOFILL = 12;
- private final static int MSG_CHECK_FOCUS = 13;
- private final static int MSG_CLOSE_SYSTEM_DIALOGS = 14;
- private final static int MSG_DISPATCH_DRAG_EVENT = 15;
- private final static int MSG_DISPATCH_DRAG_LOCATION_EVENT = 16;
- private final static int MSG_DISPATCH_SYSTEM_UI_VISIBILITY = 17;
- private final static int MSG_UPDATE_CONFIGURATION = 18;
- private final static int MSG_PROCESS_INPUT_EVENTS = 19;
- private final static int MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST = 21;
- private final static int MSG_INVALIDATE_WORLD = 22;
- private final static int MSG_WINDOW_MOVED = 23;
- private final static int MSG_SYNTHESIZE_INPUT_EVENT = 24;
- private final static int MSG_DISPATCH_WINDOW_SHOWN = 25;
- private final static int MSG_REQUEST_KEYBOARD_SHORTCUTS = 26;
- private final static int MSG_UPDATE_POINTER_ICON = 27;
- private final static int MSG_POINTER_CAPTURE_CHANGED = 28;
- private final static int MSG_DRAW_FINISHED = 29;
- private final static int MSG_INSETS_CHANGED = 30;
- private final static int MSG_INSETS_CONTROL_CHANGED = 31;
+ private static final int MSG_INVALIDATE = 1;
+ private static final int MSG_INVALIDATE_RECT = 2;
+ private static final int MSG_DIE = 3;
+ private static final int MSG_RESIZED = 4;
+ private static final int MSG_RESIZED_REPORT = 5;
+ private static final int MSG_WINDOW_FOCUS_CHANGED = 6;
+ private static final int MSG_DISPATCH_INPUT_EVENT = 7;
+ private static final int MSG_DISPATCH_APP_VISIBILITY = 8;
+ private static final int MSG_DISPATCH_GET_NEW_SURFACE = 9;
+ private static final int MSG_DISPATCH_KEY_FROM_IME = 11;
+ private static final int MSG_DISPATCH_KEY_FROM_AUTOFILL = 12;
+ private static final int MSG_CHECK_FOCUS = 13;
+ private static final int MSG_CLOSE_SYSTEM_DIALOGS = 14;
+ private static final int MSG_DISPATCH_DRAG_EVENT = 15;
+ private static final int MSG_DISPATCH_DRAG_LOCATION_EVENT = 16;
+ private static final int MSG_DISPATCH_SYSTEM_UI_VISIBILITY = 17;
+ private static final int MSG_UPDATE_CONFIGURATION = 18;
+ private static final int MSG_PROCESS_INPUT_EVENTS = 19;
+ private static final int MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST = 21;
+ private static final int MSG_INVALIDATE_WORLD = 22;
+ private static final int MSG_WINDOW_MOVED = 23;
+ private static final int MSG_SYNTHESIZE_INPUT_EVENT = 24;
+ private static final int MSG_DISPATCH_WINDOW_SHOWN = 25;
+ private static final int MSG_REQUEST_KEYBOARD_SHORTCUTS = 26;
+ private static final int MSG_UPDATE_POINTER_ICON = 27;
+ private static final int MSG_POINTER_CAPTURE_CHANGED = 28;
+ private static final int MSG_DRAW_FINISHED = 29;
+ private static final int MSG_INSETS_CHANGED = 30;
+ private static final int MSG_INSETS_CONTROL_CHANGED = 31;
+ private static final int MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED = 32;
final class ViewRootHandler extends Handler {
@Override
@@ -4519,6 +4536,10 @@
return "MSG_DRAW_FINISHED";
case MSG_INSETS_CHANGED:
return "MSG_INSETS_CHANGED";
+ case MSG_INSETS_CONTROL_CHANGED:
+ return "MSG_INSETS_CONTROL_CHANGED";
+ case MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED:
+ return "MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED";
}
return super.getMessageName(message);
}
@@ -4750,6 +4771,9 @@
case MSG_DRAW_FINISHED: {
pendingDrawFinished();
} break;
+ case MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED: {
+ systemGestureExclusionChanged();
+ } break;
}
}
}
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index 763ce4f..2896bd0 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -26,7 +26,9 @@
import android.util.Log;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Consumer;
/**
* A view tree observer is used to register listeners that can be notified of global
@@ -57,6 +59,7 @@
private CopyOnWriteArray<OnScrollChangedListener> mOnScrollChangedListeners;
private CopyOnWriteArray<OnPreDrawListener> mOnPreDrawListeners;
private CopyOnWriteArray<OnWindowShownListener> mOnWindowShownListeners;
+ private CopyOnWriteArray<Consumer<List<Rect>>> mGestureExclusionListeners;
// These listeners cannot be mutated during dispatch
private boolean mInDispatchOnDraw;
@@ -450,6 +453,14 @@
}
}
+ if (observer.mGestureExclusionListeners != null) {
+ if (mGestureExclusionListeners != null) {
+ mGestureExclusionListeners.addAll(observer.mGestureExclusionListeners);
+ } else {
+ mGestureExclusionListeners = observer.mGestureExclusionListeners;
+ }
+ }
+
observer.kill();
}
@@ -913,6 +924,35 @@
mOnEnterAnimationCompleteListeners.remove(listener);
}
+ /**
+ * Add a listener to be notified when the tree's <em>transformed</em> gesture exclusion rects
+ * change. This could be the result of an animation or other layout change, or a view calling
+ * {@link View#setSystemGestureExclusionRects(List)}.
+ *
+ * @param listener listener to add
+ * @see View#setSystemGestureExclusionRects(List)
+ */
+ public void addOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener) {
+ checkIsAlive();
+ if (mGestureExclusionListeners == null) {
+ mGestureExclusionListeners = new CopyOnWriteArray<>();
+ }
+ mGestureExclusionListeners.add(listener);
+ }
+
+ /**
+ * Unsubscribe the given listener from gesture exclusion rect changes.
+ * @see #addOnSystemGestureExclusionRectsChangedListener(Consumer)
+ * @see View#setSystemGestureExclusionRects(List)
+ */
+ public void removeOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener) {
+ checkIsAlive();
+ if (mGestureExclusionListeners == null) {
+ return;
+ }
+ mGestureExclusionListeners.remove(listener);
+ }
+
private void checkIsAlive() {
if (!mAlive) {
throw new IllegalStateException("This ViewTreeObserver is not alive, call "
@@ -1178,6 +1218,21 @@
}
}
+ void dispatchOnSystemGestureExclusionRectsChanged(@NonNull List<Rect> rects) {
+ final CopyOnWriteArray<Consumer<List<Rect>>> listeners = mGestureExclusionListeners;
+ if (listeners != null && listeners.size() > 0) {
+ CopyOnWriteArray.Access<Consumer<List<Rect>>> access = listeners.start();
+ try {
+ final int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).accept(rects);
+ }
+ } finally {
+ listeners.end();
+ }
+ }
+ }
+
/**
* Copy on write array. This array is not thread safe, and only one loop can
* iterate over this array at any given time. This class avoids allocations
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
index 87e18b7..5d59e42 100644
--- a/core/java/android/view/accessibility/AccessibilityCache.java
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -424,20 +424,28 @@
*
* @param nodes The nodes in the hosting window.
* @param rootNodeId The id of the root to evict.
+ *
+ * @return {@code true} if the cache was cleared
*/
- private void clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes,
+ private boolean clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes,
long rootNodeId) {
AccessibilityNodeInfo current = nodes.get(rootNodeId);
if (current == null) {
- return;
+ // The node isn't in the cache, but its descendents might be.
+ clear();
+ return true;
}
nodes.remove(rootNodeId);
final int childCount = current.getChildCount();
for (int i = 0; i < childCount; i++) {
final long childNodeId = current.getChildId(i);
- clearSubTreeRecursiveLocked(nodes, childNodeId);
+ if (clearSubTreeRecursiveLocked(nodes, childNodeId)) {
+ current.recycle();
+ return true;
+ }
}
current.recycle();
+ return false;
}
/**
diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java
index e095094..3b60aee 100644
--- a/core/java/android/view/animation/Animation.java
+++ b/core/java/android/view/animation/Animation.java
@@ -207,6 +207,7 @@
private float mScaleFactor = 1f;
private boolean mShowWallpaper;
+ private boolean mHasRoundedCorners;
private boolean mMore = true;
private boolean mOneMoreTime = true;
@@ -263,6 +264,8 @@
a.getBoolean(com.android.internal.R.styleable.Animation_detachWallpaper, false));
setShowWallpaper(
a.getBoolean(com.android.internal.R.styleable.Animation_showWallpaper, false));
+ setHasRoundedCorners(
+ a.getBoolean(com.android.internal.R.styleable.Animation_hasRoundedCorners, false));
final int resID = a.getResourceId(com.android.internal.R.styleable.Animation_interpolator, 0);
@@ -678,6 +681,19 @@
}
/**
+ * If this is a window animation, the window will have rounded corners matching the display
+ * corner radius.
+ *
+ * @param hasRoundedCorners Whether the window should have rounded corners or not.
+ * @attr ref android.R.styleable#Animation_hasRoundedCorners
+ * @see com.android.internal.policy.ScreenDecorationsUtils#getWindowCornerRadius(Resources)
+ * @hide
+ */
+ public void setHasRoundedCorners(boolean hasRoundedCorners) {
+ mHasRoundedCorners = hasRoundedCorners;
+ }
+
+ /**
* Gets the acceleration curve type for this animation.
*
* @return the {@link Interpolator} associated to this animation
@@ -804,6 +820,16 @@
}
/**
+ * @return if a window animation should have rounded corners or not.
+ *
+ * @attr ref android.R.styleable#Animation_hasRoundedCorners
+ * @hide
+ */
+ public boolean hasRoundedCorners() {
+ return mHasRoundedCorners;
+ }
+
+ /**
* <p>Indicates whether or not this animation will affect the transformation
* matrix. For instance, a fade animation will not affect the matrix whereas
* a scale animation will.</p>
diff --git a/core/java/android/view/contentcapture/ContentCaptureContext.java b/core/java/android/view/contentcapture/ContentCaptureContext.java
index 8bb4d21..f2d958f 100644
--- a/core/java/android/view/contentcapture/ContentCaptureContext.java
+++ b/core/java/android/view/contentcapture/ContentCaptureContext.java
@@ -214,6 +214,7 @@
/**
* Helper that creates a {@link ContentCaptureContext} associated with the given {@code uri}.
*/
+ @NonNull
public static ContentCaptureContext forLocusId(@NonNull Uri uri) {
return new Builder(new LocusId(uri)).build();
}
@@ -269,6 +270,7 @@
*
* @return the built {@code ContentCaptureContext}
*/
+ @NonNull
public ContentCaptureContext build() {
throwIfDestroyed();
mDestroyed = true;
@@ -355,6 +357,7 @@
new Parcelable.Creator<ContentCaptureContext>() {
@Override
+ @NonNull
public ContentCaptureContext createFromParcel(Parcel parcel) {
final boolean hasClientContext = parcel.readInt() == 1;
@@ -383,6 +386,7 @@
}
@Override
+ @NonNull
public ContentCaptureContext[] newArray(int size) {
return new ContentCaptureContext[size];
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureEvent.java b/core/java/android/view/contentcapture/ContentCaptureEvent.java
index 2585b74..46c3414 100644
--- a/core/java/android/view/contentcapture/ContentCaptureEvent.java
+++ b/core/java/android/view/contentcapture/ContentCaptureEvent.java
@@ -387,6 +387,7 @@
new Parcelable.Creator<ContentCaptureEvent>() {
@Override
+ @NonNull
public ContentCaptureEvent createFromParcel(Parcel parcel) {
final String sessionId = parcel.readString();
final int type = parcel.readInt();
@@ -415,6 +416,7 @@
}
@Override
+ @NonNull
public ContentCaptureEvent[] newArray(int size) {
return new ContentCaptureEvent[size];
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureSession.java b/core/java/android/view/contentcapture/ContentCaptureSession.java
index ab8f346..6bf1eba 100644
--- a/core/java/android/view/contentcapture/ContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/ContentCaptureSession.java
@@ -208,6 +208,7 @@
/**
* Gets the id used to identify this session.
*/
+ @NonNull
public final ContentCaptureSessionId getContentCaptureSessionId() {
if (mContentCaptureSessionId == null) {
mContentCaptureSessionId = new ContentCaptureSessionId(mId);
diff --git a/core/java/android/view/contentcapture/ContentCaptureSessionId.java b/core/java/android/view/contentcapture/ContentCaptureSessionId.java
index d7f9fcc..9b1f172 100644
--- a/core/java/android/view/contentcapture/ContentCaptureSessionId.java
+++ b/core/java/android/view/contentcapture/ContentCaptureSessionId.java
@@ -100,11 +100,13 @@
new Parcelable.Creator<ContentCaptureSessionId>() {
@Override
+ @NonNull
public ContentCaptureSessionId createFromParcel(Parcel parcel) {
return new ContentCaptureSessionId(parcel.readString());
}
@Override
+ @NonNull
public ContentCaptureSessionId[] newArray(int size) {
return new ContentCaptureSessionId[size];
}
diff --git a/core/java/android/view/contentcapture/UserDataRemovalRequest.java b/core/java/android/view/contentcapture/UserDataRemovalRequest.java
index 7d66af9..170a3a9 100644
--- a/core/java/android/view/contentcapture/UserDataRemovalRequest.java
+++ b/core/java/android/view/contentcapture/UserDataRemovalRequest.java
@@ -121,6 +121,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder addLocusId(@NonNull LocusId locusId, boolean recursive) {
throwIfDestroyed();
Preconditions.checkState(!mForEverything, "Already is for everything");
@@ -178,11 +179,13 @@
new Parcelable.Creator<UserDataRemovalRequest>() {
@Override
+ @NonNull
public UserDataRemovalRequest createFromParcel(Parcel parcel) {
return new UserDataRemovalRequest(parcel);
}
@Override
+ @NonNull
public UserDataRemovalRequest[] newArray(int size) {
return new UserDataRemovalRequest[size];
}
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index baf5826..4c8f72a 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -351,7 +351,7 @@
}
default void onProvideContentCaptureStructure(
- @SuppressWarnings("unused") android.view.ViewStructure structure,
+ @NonNull @SuppressWarnings("unused") android.view.ViewStructure structure,
@SuppressWarnings("unused") int flags) {
}
diff --git a/core/java/android/widget/ZoomControls.java b/core/java/android/widget/ZoomControls.java
index dd6a27b8f..7a5b7e8 100644
--- a/core/java/android/widget/ZoomControls.java
+++ b/core/java/android/widget/ZoomControls.java
@@ -30,7 +30,11 @@
/**
* The {@code ZoomControls} class displays a simple set of controls used for zooming and
- * provides callbacks to register for events. */
+ * provides callbacks to register for events.
+ * @deprecated This functionality and UI is better handled with custom views and layouts
+ * rather than a dedicated zoom-control widget
+ */
+@Deprecated
@Widget
public class ZoomControls extends LinearLayout {
diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
index 74c6651..f3bf913 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
@@ -81,5 +81,13 @@
*/
public static final String SSIN_MAX_NUM_ACTIONS = "ssin_max_num_actions";
+ // Flags related to media notifications
+
+ /**
+ * (boolean) If {@code true}, enables the seekbar in compact media notifications.
+ */
+ public static final String COMPACT_MEDIA_SEEKBAR_ENABLED =
+ "compact_media_notification_seekbar_enabled";
+
private SystemUiDeviceConfigFlags() { }
}
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index fb6dd93..7975c86 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -23,10 +23,9 @@
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
-#include <utils/Log.h>
+#include <log/log.h>
#include <utils/Looper.h>
#include <utils/Vector.h>
-#include <utils/threads.h>
#include <input/InputTransport.h>
#include "android_os_MessageQueue.h"
#include "android_view_InputChannel.h"
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index aa10a2f..2542286 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -21,10 +21,8 @@
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
-#include <utils/Log.h>
+#include <log/log.h>
#include <utils/Looper.h>
-#include <utils/threads.h>
-#include <utils/KeyedVector.h>
#include <input/InputTransport.h>
#include "android_os_MessageQueue.h"
#include "android_view_InputChannel.h"
@@ -32,6 +30,7 @@
#include "android_view_MotionEvent.h"
#include <nativehelper/ScopedLocalRef.h>
+#include <unordered_map>
#include "core_jni_helpers.h"
@@ -65,7 +64,8 @@
jobject mSenderWeakGlobal;
InputPublisher mInputPublisher;
sp<MessageQueue> mMessageQueue;
- KeyedVector<uint32_t, uint32_t> mPublishedSeqMap;
+ std::unordered_map<uint32_t, uint32_t> mPublishedSeqMap;
+
uint32_t mNextPublishedSeq;
const std::string getInputChannelName() {
@@ -122,7 +122,7 @@
getInputChannelName().c_str(), status);
return status;
}
- mPublishedSeqMap.add(publishedSeq, seq);
+ mPublishedSeqMap.emplace(publishedSeq, seq);
return OK;
}
@@ -150,7 +150,7 @@
return status;
}
}
- mPublishedSeqMap.add(publishedSeq, seq);
+ mPublishedSeqMap.emplace(publishedSeq, seq);
return OK;
}
@@ -199,35 +199,37 @@
return status;
}
- ssize_t index = mPublishedSeqMap.indexOfKey(publishedSeq);
- if (index >= 0) {
- uint32_t seq = mPublishedSeqMap.valueAt(index);
- mPublishedSeqMap.removeItemsAt(index);
+ auto it = mPublishedSeqMap.find(publishedSeq);
+ if (it == mPublishedSeqMap.end()) {
+ continue;
+ }
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, "
- "pendingEvents=%zu.",
- getInputChannelName().c_str(), seq, handled ? "true" : "false",
- mPublishedSeqMap.size());
+ uint32_t seq = it->second;
+ mPublishedSeqMap.erase(it);
+
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, "
+ "pendingEvents=%zu.",
+ getInputChannelName().c_str(), seq, handled ? "true" : "false",
+ mPublishedSeqMap.size());
+ }
+
+ if (!skipCallbacks) {
+ if (!senderObj.get()) {
+ senderObj.reset(jniGetReferent(env, mSenderWeakGlobal));
+ if (!senderObj.get()) {
+ ALOGW("channel '%s' ~ Sender object was finalized "
+ "without being disposed.", getInputChannelName().c_str());
+ return DEAD_OBJECT;
+ }
}
- if (!skipCallbacks) {
- if (!senderObj.get()) {
- senderObj.reset(jniGetReferent(env, mSenderWeakGlobal));
- if (!senderObj.get()) {
- ALOGW("channel '%s' ~ Sender object was finalized "
- "without being disposed.", getInputChannelName().c_str());
- return DEAD_OBJECT;
- }
- }
-
- env->CallVoidMethod(senderObj.get(),
- gInputEventSenderClassInfo.dispatchInputEventFinished,
- jint(seq), jboolean(handled));
- if (env->ExceptionCheck()) {
- ALOGE("Exception dispatching finished signal.");
- skipCallbacks = true;
- }
+ env->CallVoidMethod(senderObj.get(),
+ gInputEventSenderClassInfo.dispatchInputEventFinished,
+ jint(seq), jboolean(handled));
+ if (env->ExceptionCheck()) {
+ ALOGE("Exception dispatching finished signal.");
+ skipCallbacks = true;
}
}
}
diff --git a/core/proto/android/hardware/biometrics/enums.proto b/core/proto/android/hardware/biometrics/enums.proto
index 973e3e6..f2e0638 100644
--- a/core/proto/android/hardware/biometrics/enums.proto
+++ b/core/proto/android/hardware/biometrics/enums.proto
@@ -55,4 +55,6 @@
// When the HAL has a template that doesn't exist in Android Framework. The framework
// is expected to notify the HAL to remove this template to stay in sync with the framework.
ISSUE_UNKNOWN_TEMPLATE_ENROLLED_HAL = 3;
+ // When the HAL has not sent ERROR_CANCELED within the specified timeout.
+ ISSUE_CANCEL_TIMED_OUT = 4;
}
\ No newline at end of file
diff --git a/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml b/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
index 6f3dc8c..5add19b 100644
--- a/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
+++ b/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
@@ -18,7 +18,9 @@
-->
<!-- This should be kept in sync with task_open_enter.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false" android:zAdjustment="top">
+ android:hasRoundedCorners="true"
+ android:shareInterpolator="false"
+ android:zAdjustment="top">
<alpha
android:fromAlpha="1"
diff --git a/core/res/res/anim-ldrtl/task_close_enter.xml b/core/res/res/anim-ldrtl/task_close_enter.xml
index 7abada3..e00141a 100644
--- a/core/res/res/anim-ldrtl/task_close_enter.xml
+++ b/core/res/res/anim-ldrtl/task_close_enter.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_close_exit.xml b/core/res/res/anim-ldrtl/task_close_exit.xml
index a017820..71a44ae 100644
--- a/core/res/res/anim-ldrtl/task_close_exit.xml
+++ b/core/res/res/anim-ldrtl/task_close_exit.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_enter.xml b/core/res/res/anim-ldrtl/task_open_enter.xml
index 0433664..7815f7d 100644
--- a/core/res/res/anim-ldrtl/task_open_enter.xml
+++ b/core/res/res/anim-ldrtl/task_open_enter.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml b/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
index 45ca80e..5fccd6df 100644
--- a/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
+++ b/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_exit.xml b/core/res/res/anim-ldrtl/task_open_exit.xml
index f50494d..025e1bd 100644
--- a/core/res/res/anim-ldrtl/task_open_exit.xml
+++ b/core/res/res/anim-ldrtl/task_open_exit.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml b/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
index 4c2559f..2cfeecf 100644
--- a/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
+++ b/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
@@ -18,7 +18,9 @@
-->
<!-- This should be kept in sync with task_open_enter.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false" android:zAdjustment="top">
+ android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
+ android:zAdjustment="top">
<alpha
android:fromAlpha="1"
diff --git a/core/res/res/anim/task_close_enter.xml b/core/res/res/anim/task_close_enter.xml
index b059aa9..487ff5c 100644
--- a/core/res/res/anim/task_close_enter.xml
+++ b/core/res/res/anim/task_close_enter.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_close_exit.xml b/core/res/res/anim/task_close_exit.xml
index c9ade22..afc3256c 100644
--- a/core/res/res/anim/task_close_exit.xml
+++ b/core/res/res/anim/task_close_exit.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_enter.xml b/core/res/res/anim/task_open_enter.xml
index 5c61859..0aafc1c 100644
--- a/core/res/res/anim/task_open_enter.xml
+++ b/core/res/res/anim/task_open_enter.xml
@@ -20,6 +20,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_enter_cross_profile_apps.xml b/core/res/res/anim/task_open_enter_cross_profile_apps.xml
index 6441047..702f7ba 100644
--- a/core/res/res/anim/task_open_enter_cross_profile_apps.xml
+++ b/core/res/res/anim/task_open_enter_cross_profile_apps.xml
@@ -20,6 +20,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_exit.xml b/core/res/res/anim/task_open_exit.xml
index 9394c57..691317d 100644
--- a/core/res/res/anim/task_open_exit.xml
+++ b/core/res/res/anim/task_open_exit.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 088669d..743496f 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -6488,6 +6488,9 @@
<!-- Special option for window animations: show the wallpaper behind when running this
animation. -->
<attr name="showWallpaper" format="boolean" />
+ <!-- Special option for window animations: whether window should have rounded corners.
+ @see ScreenDecorationsUtils#getWindowCornerRadius(Resources) -->
+ <attr name="hasRoundedCorners" format="boolean" />
</declare-styleable>
<declare-styleable name="AnimationSet">
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index f1a7059..4e174c4 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -127,7 +127,7 @@
<bool name="config_sendAudioBecomingNoisy">true</bool>
<!-- Whether Hearing Aid profile is supported -->
- <bool name="config_hearing_aid_profile_supported">true</bool>
+ <bool name="config_hearing_aid_profile_supported">false</bool>
<!-- Flag to disable all transition animations -->
<bool name="config_disableTransitionAnimation">false</bool>
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
index e3852e1..a88968b 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
@@ -301,6 +301,26 @@
}
@Test
+ public void subTreeChangeEventFromUncachedNode_clearsNodeInCache() {
+ AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(CHILD_VIEW_ID, WINDOW_ID_1);
+ long id = nodeInfo.getSourceNodeId();
+ mAccessibilityCache.add(nodeInfo);
+ nodeInfo.recycle();
+
+ AccessibilityEvent event = AccessibilityEvent
+ .obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
+ event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE);
+ event.setSource(getMockViewWithA11yAndWindowIds(PARENT_VIEW_ID, WINDOW_ID_1));
+
+ mAccessibilityCache.onAccessibilityEvent(event);
+ AccessibilityNodeInfo shouldBeNull = mAccessibilityCache.getNode(WINDOW_ID_1, id);
+ if (shouldBeNull != null) {
+ shouldBeNull.recycle();
+ }
+ assertNull(shouldBeNull);
+ }
+
+ @Test
public void scrollEvent_clearsNodeAndChild() {
AccessibilityEvent event = AccessibilityEvent
.obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED);
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 920fb4c..c064402 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -1845,6 +1845,7 @@
* @throws IllegalStateException if the bitmap's config is {@link Config#HARDWARE}
*
*/
+ @NonNull
public Color getColor(int x, int y) {
checkRecycled("Can't call getColor() on a recycled bitmap");
checkHardware("unable to getColor(), "
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index e98879d..42b6acd 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -27,6 +27,8 @@
import android.view.Surface;
import android.view.View;
+import com.android.internal.util.ArrayUtils;
+
import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
@@ -179,6 +181,10 @@
private final AnimationHost mAnimationHost;
private RecordingCanvas mCurrentRecordingCanvas;
+ // Will be null if not currently registered
+ @Nullable
+ private CompositePositionUpdateListener mCompositePositionUpdateListener;
+
/**
* Creates a new RenderNode that can be used to record batches of
* drawing operations, and store / apply render properties when drawn.
@@ -248,15 +254,70 @@
}
+ private static final class CompositePositionUpdateListener implements PositionUpdateListener {
+ private final PositionUpdateListener[] mListeners;
+
+ CompositePositionUpdateListener(PositionUpdateListener... listeners) {
+ mListeners = listeners;
+ }
+
+ public CompositePositionUpdateListener with(PositionUpdateListener listener) {
+ return new CompositePositionUpdateListener(
+ ArrayUtils.appendElement(PositionUpdateListener.class, mListeners, listener));
+ }
+
+ public CompositePositionUpdateListener without(PositionUpdateListener listener) {
+ return new CompositePositionUpdateListener(
+ ArrayUtils.removeElement(PositionUpdateListener.class, mListeners, listener));
+ }
+
+ @Override
+ public void positionChanged(long frameNumber, int left, int top, int right, int bottom) {
+ for (PositionUpdateListener pul : mListeners) {
+ pul.positionChanged(frameNumber, left, top, right, bottom);
+ }
+ }
+
+ @Override
+ public void positionLost(long frameNumber) {
+ for (PositionUpdateListener pul : mListeners) {
+ pul.positionLost(frameNumber);
+ }
+ }
+ }
+
/**
- * Enable callbacks for position changes.
+ * Enable callbacks for position changes. Call only from the UI thread or with
+ * external synchronization.
*
* @hide
*/
- public void requestPositionUpdates(PositionUpdateListener listener) {
- nRequestPositionUpdates(mNativeRenderNode, listener);
+ public void addPositionUpdateListener(@NonNull PositionUpdateListener listener) {
+ CompositePositionUpdateListener comp = mCompositePositionUpdateListener;
+ if (comp == null) {
+ comp = new CompositePositionUpdateListener(listener);
+ } else {
+ comp = comp.with(listener);
+ }
+ mCompositePositionUpdateListener = comp;
+ nRequestPositionUpdates(mNativeRenderNode, comp);
}
+ /**
+ * Disable a callback for position changes. Call only from the UI thread or with
+ * external synchronization.
+ *
+ * @param listener Callback to remove
+ * @hide
+ */
+ public void removePositionUpdateListener(@NonNull PositionUpdateListener listener) {
+ CompositePositionUpdateListener comp = mCompositePositionUpdateListener;
+ if (comp != null) {
+ comp = comp.without(listener);
+ mCompositePositionUpdateListener = comp;
+ nRequestPositionUpdates(mNativeRenderNode, comp);
+ }
+ }
/**
* Starts recording a display list for the render node. All
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 3b43f12..5af660c 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -254,10 +254,36 @@
float queuePriorities[1] = { 0.0 };
+ void* queueNextPtr = nullptr;
+
+ VkDeviceQueueGlobalPriorityCreateInfoEXT queuePriorityCreateInfo;
+
+ if (Properties::contextPriority != 0
+ && grExtensions.hasExtension(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, 2)) {
+ memset(&queuePriorityCreateInfo, 0, sizeof(VkDeviceQueueGlobalPriorityCreateInfoEXT));
+ queuePriorityCreateInfo.sType =
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT;
+ queuePriorityCreateInfo.pNext = nullptr;
+ switch (Properties::contextPriority) {
+ case EGL_CONTEXT_PRIORITY_LOW_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_MEDIUM_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_HIGH_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT;
+ break;
+ default:
+ LOG_ALWAYS_FATAL("Unsupported context priority");
+ }
+ queueNextPtr = &queuePriorityCreateInfo;
+ }
+
const VkDeviceQueueCreateInfo queueInfo[2] = {
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mGraphicsQueueIndex, // queueFamilyIndex
1, // queueCount
@@ -265,7 +291,7 @@
},
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mPresentQueueIndex, // queueFamilyIndex
1, // queueCount
diff --git a/media/java/android/media/AudioPresentation.java b/media/java/android/media/AudioPresentation.java
index fca7074..894fbba 100644
--- a/media/java/android/media/AudioPresentation.java
+++ b/media/java/android/media/AudioPresentation.java
@@ -45,6 +45,9 @@
* accessibility, end point mastering and dialogue enhancement. An audio presentation may also have
* a set of description labels in different languages to help the user to make an informed
* selection.
+ *
+ * Applications that parse media streams and extract presentation information on their own
+ * can create instances of AudioPresentation by using {@link AudioPresentation.Builder} class.
*/
public final class AudioPresentation {
private final int mPresentationId;
@@ -66,7 +69,7 @@
private final boolean mAudioDescriptionAvailable;
private final boolean mSpokenSubtitlesAvailable;
private final boolean mDialogueEnhancementAvailable;
- private final Map<ULocale, String> mLabels;
+ private final Map<ULocale, CharSequence> mLabels;
/**
* No preferred reproduction channel layout.
@@ -131,7 +134,7 @@
boolean audioDescriptionAvailable,
boolean spokenSubtitlesAvailable,
boolean dialogueEnhancementAvailable,
- @NonNull Map<ULocale, String> labels) {
+ @NonNull Map<ULocale, CharSequence> labels) {
mPresentationId = presentationId;
mProgramId = programId;
mLanguage = language;
@@ -139,7 +142,7 @@
mAudioDescriptionAvailable = audioDescriptionAvailable;
mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
- mLabels = new HashMap<ULocale, String>(labels);
+ mLabels = new HashMap<ULocale, CharSequence>(labels);
}
/**
@@ -164,14 +167,14 @@
* or ISO 639-2/T could be used.
*/
public Map<Locale, String> getLabels() {
- Map<Locale, String> localeLabels = new HashMap<Locale, String>();
- for (Map.Entry<ULocale, String> entry : mLabels.entrySet()) {
- localeLabels.put(entry.getKey().toLocale(), entry.getValue());
+ Map<Locale, String> localeLabels = new HashMap<Locale, String>(mLabels.size());
+ for (Map.Entry<ULocale, CharSequence> entry : mLabels.entrySet()) {
+ localeLabels.put(entry.getKey().toLocale(), entry.getValue().toString());
}
return localeLabels;
}
- private Map<ULocale, String> getULabels() {
+ private Map<ULocale, CharSequence> getULabels() {
return mLabels;
}
@@ -273,7 +276,7 @@
/**
* A builder class for creating {@link AudioPresentation} objects.
*/
- public static class Builder {
+ public static final class Builder {
private final int mPresentationId;
private int mProgramId = UNKNOWN_ID;
private ULocale mLanguage = new ULocale("");
@@ -281,13 +284,13 @@
private boolean mAudioDescriptionAvailable = false;
private boolean mSpokenSubtitlesAvailable = false;
private boolean mDialogueEnhancementAvailable = false;
- private Map<ULocale, String> mLabels = new HashMap<ULocale, String>();
+ private Map<ULocale, CharSequence> mLabels = new HashMap<ULocale, CharSequence>();
/**
* Create a {@link Builder}. Any field that should be included in the
* {@link AudioPresentation} must be added.
*
- * @param presentationId the presentation ID of this audio presentation
+ * @param presentationId The presentation ID of this audio presentation.
*/
public Builder(int presentationId) {
mPresentationId = presentationId;
@@ -295,7 +298,7 @@
/**
* Sets the ProgramId to which this audio presentation refers.
*
- * @param programId
+ * @param programId The program ID to be decoded.
*/
public @NonNull Builder setProgramId(int programId) {
mProgramId = programId;
@@ -304,9 +307,9 @@
/**
* Sets the language information of the audio presentation.
*
- * @param language code
+ * @param language Locale corresponding to ISO 639-1/639-2 language code.
*/
- public @NonNull Builder setLocale(ULocale language) {
+ public @NonNull Builder setLocale(@NonNull ULocale language) {
mLanguage = language;
return this;
}
@@ -339,17 +342,17 @@
/**
* Sets locale / text label pairs describing the presentation.
*
- * @param labels
+ * @param labels Text label indexed by its locale corresponding to the language code.
*/
- public @NonNull Builder setLabels(@NonNull Map<ULocale, String> labels) {
- mLabels = new HashMap<ULocale, String>(labels);
+ public @NonNull Builder setLabels(@NonNull Map<ULocale, CharSequence> labels) {
+ mLabels = new HashMap<ULocale, CharSequence>(labels);
return this;
}
/**
* Indicate whether the presentation contains audio description for the visually impaired.
*
- * @param audioDescriptionAvailable
+ * @param audioDescriptionAvailable Audio description for the visually impaired.
*/
public @NonNull Builder setHasAudioDescription(boolean audioDescriptionAvailable) {
mAudioDescriptionAvailable = audioDescriptionAvailable;
@@ -359,7 +362,7 @@
/**
* Indicate whether the presentation contains spoken subtitles for the visually impaired.
*
- * @param spokenSubtitlesAvailable
+ * @param spokenSubtitlesAvailable Spoken subtitles for the visually impaired.
*/
public @NonNull Builder setHasSpokenSubtitles(boolean spokenSubtitlesAvailable) {
mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
@@ -369,7 +372,7 @@
/**
* Indicate whether the presentation supports dialogue enhancement.
*
- * @param dialogueEnhancementAvailable
+ * @param dialogueEnhancementAvailable Dialogue enhancement.
*/
public @NonNull Builder setHasDialogueEnhancement(boolean dialogueEnhancementAvailable) {
mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
index 5f324f7..d724762 100644
--- a/media/java/android/media/MediaHTTPConnection.java
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -37,7 +37,6 @@
import java.net.UnknownServiceException;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
/** @hide */
public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
@@ -67,7 +66,6 @@
// from com.squareup.okhttp.internal.http
private final static int HTTP_TEMP_REDIRECT = 307;
private final static int MAX_REDIRECTS = 20;
- private AtomicBoolean mIsConnected = new AtomicBoolean(false);
@UnsupportedAppUsage
public MediaHTTPConnection() {
@@ -91,7 +89,6 @@
mAllowCrossDomainRedirect = true;
mURL = new URL(uri);
mHeaders = convertHeaderStringToMap(headers);
- mIsConnected.set(true);
} catch (MalformedURLException e) {
return null;
}
@@ -142,14 +139,7 @@
@Override
@UnsupportedAppUsage
public void disconnect() {
- if (mIsConnected.getAndSet(false)) {
- (new Thread() {
- @Override
- public void run() {
- teardownConnection();
- }
- }).start();
- }
+ teardownConnection();
mHeaders = null;
mURL = null;
}
@@ -334,14 +324,7 @@
@Override
@UnsupportedAppUsage
public int readAt(long offset, int size) {
- if (!mIsConnected.get()) {
- return -1;
- }
- int result = native_readAt(offset, size);
- if (!mIsConnected.get()) {
- return -1;
- }
- return result;
+ return native_readAt(offset, size);
}
private int readAt(long offset, byte[] data, int size) {
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
index 38bf77d..7b7657a 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
@@ -13,6 +13,7 @@
*/
package com.android.systemui.plugins;
+import android.graphics.Bitmap;
import android.graphics.Paint.Style;
import android.view.View;
@@ -21,13 +22,30 @@
import java.util.TimeZone;
/**
- * This plugin is used to replace main clock in keyguard.
+ * Plugin used to replace main clock in keyguard.
*/
@ProvidesInterface(action = ClockPlugin.ACTION, version = ClockPlugin.VERSION)
public interface ClockPlugin extends Plugin {
String ACTION = "com.android.systemui.action.PLUGIN_CLOCK";
- int VERSION = 1;
+ int VERSION = 2;
+
+ /**
+ * Get the name of the clock face.
+ *
+ * This name should not be translated.
+ */
+ String getName();
+
+ /**
+ * Get the title of the clock face to be shown in the picker app.
+ */
+ String getTitle();
+
+ /**
+ * Get thumbnail of clock face to be shown in the picker app.
+ */
+ Bitmap getThumbnail();
/**
* Get clock view.
@@ -62,18 +80,22 @@
default void setColorPalette(boolean supportsDarkText, int[] colors) {}
/**
- * Notifies that time tick alarm from doze service fired.
- */
- default void dozeTimeTick() {}
-
- /**
* Set the amount (ratio) that the device has transitioned to doze.
* @param darkAmount Amount of transition to doze: 1f for doze and 0f for awake.
*/
default void setDarkAmount(float darkAmount) {}
/**
+ * Notifies that time tick alarm from doze service fired.
+ *
+ * Implement this method instead of registering a broadcast listener for TIME_TICK.
+ */
+ default void onTimeTick() {}
+
+ /**
* Notifies that the time zone has changed.
+ *
+ * Implement this method instead of registering a broadcast listener for TIME_ZONE_CHANGED.
*/
default void onTimeZoneChanged(TimeZone timeZone) {}
diff --git a/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
new file mode 100644
index 0000000..3e6dd13
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+ <TextClock
+ android:id="@+id/time"
+ style="@style/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_above="@id/date"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="@string/keyguard_widget_12_hours_format"
+ android:format24Hour="@string/keyguard_widget_24_hours_format"
+ />
+
+ <TextClock
+ android:id="@+id/date"
+ style="@stype/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="EEE, MMM d"
+ android:format24Hour="EEE, MMM d"
+ />
+</RelativeLayout>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index 8de84bf..563b007 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -279,7 +279,7 @@
*/
public void dozeTimeTick() {
if (mClockPlugin != null) {
- mClockPlugin.dozeTimeTick();
+ mClockPlugin.onTimeTick();
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
index 3114708..870ac87 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +34,16 @@
public class BubbleClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mView;
@@ -48,25 +61,22 @@
*/
private CrossFadeDarkController mDarkController;
- private BubbleClockController() { }
-
/**
* Create a BubbleClockController instance.
*
* @param layoutInflater Inflater used to inflate custom clock views.
*/
- public static BubbleClockController build(LayoutInflater layoutInflater) {
- BubbleClockController controller = new BubbleClockController();
- controller.createViews(layoutInflater);
- return controller;
+ public BubbleClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater layoutInflater) {
- mView = layoutInflater.inflate(R.layout.bubble_clock, null);
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.bubble_clock, null);
mDigitalClock = (TextClock) mView.findViewById(R.id.digital_clock);
mAnalogClock = (ImageClock) mView.findViewById(R.id.analog_clock);
- mLockClockContainer = layoutInflater.inflate(R.layout.digital_clock, null);
+ mLockClockContainer = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClock = (TextClock) mLockClockContainer.findViewById(R.id.lock_screen_clock);
mLockClock.setVisibility(View.GONE);
@@ -74,12 +84,33 @@
}
@Override
+ public String getName() {
+ return "bubble";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_bubble);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.bubble_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mLockClockContainer == null) {
+ createViews();
+ }
return mLockClockContainer;
}
@Override
public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@@ -103,13 +134,13 @@
}
@Override
- public void dozeTimeTick() {
- mAnalogClock.onTimeChanged();
+ public void setDarkAmount(float darkAmount) {
+ mDarkController.setDarkAmount(darkAmount);
}
@Override
- public void setDarkAmount(float darkAmount) {
- mDarkController.setDarkAmount(darkAmount);
+ public void onTimeTick() {
+ mAnalogClock.onTimeChanged();
}
@Override
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index 3827e44..294c725 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -23,7 +23,6 @@
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
@@ -31,6 +30,7 @@
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
@@ -39,17 +39,19 @@
import androidx.annotation.VisibleForTesting;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.keyguard.R;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManager.DockEventListener;
import com.android.systemui.plugins.ClockPlugin;
+import com.android.systemui.plugins.PluginListener;
+import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.InjectionInflationController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.function.Supplier;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -60,26 +62,49 @@
@Singleton
public final class ClockManager {
+ private static final String TAG = "ClockOptsProvider";
+ private static final String DEFAULT_CLOCK_ID = "default";
+
private final List<ClockInfo> mClockInfos = new ArrayList<>();
/**
* Map from expected value stored in settings to supplier of custom clock face.
*/
- private final Map<String, Supplier<ClockPlugin>> mClocks = new ArrayMap<>();
+ private final Map<String, ClockPlugin> mClocks = new ArrayMap<>();
@Nullable private ClockPlugin mCurrentClock;
private final ContentResolver mContentResolver;
private final SettingsWrapper mSettingsWrapper;
+ private final Handler mMainHandler = new Handler(Looper.getMainLooper());
+
/**
* Observe settings changes to know when to switch the clock face.
*/
private final ContentObserver mContentObserver =
- new ContentObserver(new Handler(Looper.getMainLooper())) {
+ new ContentObserver(mMainHandler) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
reload();
}
};
+
+ private final PluginListener<ClockPlugin> mClockPluginListener =
+ new PluginListener<ClockPlugin>() {
+ @Override
+ public void onPluginConnected(ClockPlugin plugin, Context pluginContext) {
+ addClockPlugin(plugin);
+ reload();
+ }
+
+ @Override
+ public void onPluginDisconnected(ClockPlugin plugin) {
+ removeClockPlugin(plugin);
+ reload();
+ }
+ };
+
+ private final PluginManager mPluginManager;
+
/**
* Observe changes to dock state to know when to switch the clock face.
*/
@@ -107,56 +132,29 @@
@Inject
public ClockManager(Context context, InjectionInflationController injectionInflater,
- @Nullable DockManager dockManager, SysuiColorExtractor colorExtractor) {
- this(context, injectionInflater, dockManager, colorExtractor, context.getContentResolver(),
- new SettingsWrapper(context.getContentResolver()));
+ PluginManager pluginManager, @Nullable DockManager dockManager,
+ SysuiColorExtractor colorExtractor) {
+ this(context, injectionInflater, pluginManager, dockManager, colorExtractor,
+ context.getContentResolver(), new SettingsWrapper(context.getContentResolver()));
}
ClockManager(Context context, InjectionInflationController injectionInflater,
- @Nullable DockManager dockManager, SysuiColorExtractor colorExtractor,
- ContentResolver contentResolver, SettingsWrapper settingsWrapper) {
+ PluginManager pluginManager, @Nullable DockManager dockManager,
+ SysuiColorExtractor colorExtractor, ContentResolver contentResolver,
+ SettingsWrapper settingsWrapper) {
+ mPluginManager = pluginManager;
mDockManager = dockManager;
mColorExtractor = colorExtractor;
mContentResolver = contentResolver;
mSettingsWrapper = settingsWrapper;
Resources res = context.getResources();
- mClockInfos.add(ClockInfo.builder()
- .setName("default")
- .setTitle(res.getString(R.string.clock_title_default))
- .setId("default")
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.default_thumbnail))
- .setPreview(() -> BitmapFactory.decodeResource(res, R.drawable.default_preview))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("bubble")
- .setTitle(res.getString(R.string.clock_title_bubble))
- .setId(BubbleClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.bubble_thumbnail))
- .setPreview(() -> getClockPreview(BubbleClockController.class.getName()))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("stretch")
- .setTitle(res.getString(R.string.clock_title_stretch))
- .setId(StretchAnalogClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.stretch_thumbnail))
- .setPreview(() -> getClockPreview(StretchAnalogClockController.class.getName()))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("type")
- .setTitle(res.getString(R.string.clock_title_type))
- .setId(TypeClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.type_thumbnail))
- .setPreview(() -> getClockPreview(TypeClockController.class.getName()))
- .build());
-
LayoutInflater layoutInflater = injectionInflater.injectable(LayoutInflater.from(context));
- mClocks.put(BubbleClockController.class.getName(),
- () -> BubbleClockController.build(layoutInflater));
- mClocks.put(StretchAnalogClockController.class.getName(),
- () -> StretchAnalogClockController.build(layoutInflater));
- mClocks.put(TypeClockController.class.getName(),
- () -> TypeClockController.build(layoutInflater));
+
+ addClockPlugin(new DefaultClockController(res, layoutInflater));
+ addClockPlugin(new BubbleClockController(res, layoutInflater));
+ addClockPlugin(new StretchAnalogClockController(res, layoutInflater));
+ addClockPlugin(new TypeClockController(res, layoutInflater));
// Store the size of the display for generation of clock preview.
DisplayMetrics dm = res.getDisplayMetrics();
@@ -211,6 +209,29 @@
return mContentObserver;
}
+ private void addClockPlugin(ClockPlugin plugin) {
+ final String id = plugin.getClass().getName();
+ mClocks.put(plugin.getClass().getName(), plugin);
+ mClockInfos.add(ClockInfo.builder()
+ .setName(plugin.getName())
+ .setTitle(plugin.getTitle())
+ .setId(id)
+ .setThumbnail(() -> plugin.getThumbnail())
+ .setPreview(() -> getClockPreview(id))
+ .build());
+ }
+
+ private void removeClockPlugin(ClockPlugin plugin) {
+ final String id = plugin.getClass().getName();
+ mClocks.remove(id);
+ for (int i = 0; i < mClockInfos.size(); i++) {
+ if (id.equals(mClockInfos.get(i).getId())) {
+ mClockInfos.remove(i);
+ break;
+ }
+ }
+ }
+
/**
* Generate a realistic preview of a clock face.
* @param clockId ID of clock to use for preview, should be obtained from {@link getClockInfos}.
@@ -218,38 +239,54 @@
*/
@Nullable
private Bitmap getClockPreview(String clockId) {
- Supplier<ClockPlugin> supplier = mClocks.get(clockId);
- if (supplier == null) {
- return null;
- }
- ClockPlugin plugin = supplier.get();
+ FutureTask<Bitmap> task = new FutureTask<>(new Callable<Bitmap>() {
+ @Override
+ public Bitmap call() {
+ Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
+ ClockPlugin plugin = mClocks.get(clockId);
+ if (plugin == null) {
+ return null;
+ }
- // Use the big clock view for the preview
- View clockView = plugin.getBigClockView();
- if (clockView == null) {
- return null;
+ // Use the big clock view for the preview
+ View clockView = plugin.getBigClockView();
+ if (clockView == null) {
+ return null;
+ }
+
+ // Initialize state of plugin before generating preview.
+ plugin.setDarkAmount(1f);
+ plugin.setTextColor(Color.WHITE);
+
+ ColorExtractor.GradientColors colors = mColorExtractor.getColors(
+ WallpaperManager.FLAG_LOCK, true);
+ plugin.setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
+ plugin.onTimeTick();
+
+ // Draw clock view hierarchy to canvas.
+ Canvas canvas = new Canvas(bitmap);
+ canvas.drawColor(Color.BLACK);
+ dispatchVisibilityAggregated(clockView, true);
+ clockView.measure(MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY));
+ clockView.layout(0, 0, mWidth, mHeight);
+ clockView.draw(canvas);
+ return bitmap;
+ }
+ });
+
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ task.run();
+ } else {
+ mMainHandler.post(task);
}
- // Initialize state of plugin before generating preview.
- plugin.setDarkAmount(1f);
- plugin.setTextColor(Color.WHITE);
-
- ColorExtractor.GradientColors colors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
- true);
- plugin.setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
- plugin.dozeTimeTick();
-
- // Draw clock view hierarchy to canvas.
- Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- dispatchVisibilityAggregated(clockView, true);
- clockView.measure(MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY));
- clockView.layout(0, 0, mWidth, mHeight);
- canvas.drawColor(Color.BLACK);
- clockView.draw(canvas);
-
- return bitmap;
+ try {
+ return task.get();
+ } catch (Exception e) {
+ Log.e(TAG, "Error completing task", e);
+ return null;
+ }
}
private void dispatchVisibilityAggregated(View view, boolean isVisible) {
@@ -279,6 +316,7 @@
}
private void register() {
+ mPluginManager.addPluginListener(mClockPluginListener, ClockPlugin.class, true);
mContentResolver.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE),
false, mContentObserver);
@@ -291,6 +329,7 @@
}
private void unregister() {
+ mPluginManager.removePluginListener(mClockPluginListener);
mContentResolver.unregisterContentObserver(mContentObserver);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
@@ -299,7 +338,11 @@
private void reload() {
mCurrentClock = getClockPlugin();
- notifyClockChanged(mCurrentClock);
+ if (mCurrentClock instanceof DefaultClockController) {
+ notifyClockChanged(null);
+ } else {
+ notifyClockChanged(mCurrentClock);
+ }
}
private ClockPlugin getClockPlugin() {
@@ -307,21 +350,15 @@
if (mIsDocked) {
final String name = mSettingsWrapper.getDockedClockFace();
if (name != null) {
- Supplier<ClockPlugin> supplier = mClocks.get(name);
- if (supplier != null) {
- plugin = supplier.get();
- if (plugin != null) {
- return plugin;
- }
+ plugin = mClocks.get(name);
+ if (plugin != null) {
+ return plugin;
}
}
}
final String name = mSettingsWrapper.getLockScreenCustomClockFace();
if (name != null) {
- Supplier<ClockPlugin> supplier = mClocks.get(name);
- if (supplier != null) {
- plugin = supplier.get();
- }
+ plugin = mClocks.get(name);
}
return plugin;
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
new file mode 100644
index 0000000..8a6a4cd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.keyguard.clock;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Paint.Style;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.keyguard.R;
+import com.android.systemui.plugins.ClockPlugin;
+
+import java.util.TimeZone;
+
+/**
+ * Plugin for the default clock face used only to provide a preview.
+ */
+public class DefaultClockController implements ClockPlugin {
+
+ /**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
+ * Root view of preview.
+ */
+ private View mView;
+
+ /**
+ * Text clock in preview view hierarchy.
+ */
+ private TextView mTextTime;
+
+ /**
+ * Date showing below time in preview view hierarchy.
+ */
+ private TextView mTextDate;
+
+ /**
+ * Create a DefaultClockController instance.
+ *
+ * @param inflater Inflater used to inflate custom clock views.
+ */
+ public DefaultClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
+ }
+
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.default_clock_preview, null);
+ mTextTime = mView.findViewById(R.id.time);
+ mTextDate = mView.findViewById(R.id.date);
+ }
+
+ @Override
+ public String getName() {
+ return "default";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_default);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.default_thumbnail);
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+
+ @Override
+ public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
+ return mView;
+ }
+
+ @Override
+ public void setStyle(Style style) {}
+
+ @Override
+ public void setTextColor(int color) {
+ mTextTime.setTextColor(color);
+ mTextDate.setTextColor(color);
+ }
+
+ @Override
+ public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
+
+ @Override
+ public void onTimeTick() {
+ }
+
+ @Override
+ public void setDarkAmount(float darkAmount) {}
+
+ @Override
+ public void onTimeZoneChanged(TimeZone timeZone) {}
+
+ @Override
+ public boolean shouldShowStatusArea() {
+ return true;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
index c465114..7401819 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +34,16 @@
public class StretchAnalogClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mBigClockView;
@@ -48,25 +61,22 @@
*/
private CrossFadeDarkController mDarkController;
- private StretchAnalogClockController() { }
-
/**
* Create a BubbleClockController instance.
*
* @param layoutInflater Inflater used to inflate custom clock views.
*/
- public static StretchAnalogClockController build(LayoutInflater layoutInflater) {
- StretchAnalogClockController controller = new StretchAnalogClockController();
- controller.createViews(layoutInflater);
- return controller;
+ public StretchAnalogClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater layoutInflater) {
- mBigClockView = layoutInflater.inflate(R.layout.stretchanalog_clock, null);
+ private void createViews() {
+ mBigClockView = mLayoutInflater.inflate(R.layout.stretchanalog_clock, null);
mAnalogClock = mBigClockView.findViewById(R.id.analog_clock);
mDigitalClock = mBigClockView.findViewById(R.id.digital_clock);
- mView = layoutInflater.inflate(R.layout.digital_clock, null);
+ mView = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClock = mView.findViewById(R.id.lock_screen_clock);
mLockClock.setVisibility(View.GONE);
@@ -74,12 +84,33 @@
}
@Override
+ public String getName() {
+ return "stretch";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_stretch);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.stretch_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@Override
public View getBigClockView() {
+ if (mBigClockView == null) {
+ createViews();
+ }
return mBigClockView;
}
@@ -103,7 +134,7 @@
}
@Override
- public void dozeTimeTick() {
+ public void onTimeTick() {
mAnalogClock.onTimeChanged();
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
index 2ea39c4..69f86c7 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -30,6 +33,16 @@
public class TypeClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mView;
@@ -45,36 +58,54 @@
*/
private CrossFadeDarkController mDarkController;
- private TypeClockController() {}
-
/**
* Create a TypeClockController instance.
*
* @param inflater Inflater used to inflate custom clock views.
*/
- public static TypeClockController build(LayoutInflater inflater) {
- TypeClockController controller = new TypeClockController();
- controller.createViews(inflater);
- return controller;
+ TypeClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater inflater) {
- mView = inflater.inflate(R.layout.type_clock, null);
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.type_clock, null);
mTypeClock = mView.findViewById(R.id.type_clock);
// For now, this view is used to hide the default digital clock.
// Need better transition to lock screen.
- mLockClockContainer = inflater.inflate(R.layout.digital_clock, null);
+ mLockClockContainer = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClockContainer.setVisibility(View.GONE);
}
@Override
+ public String getName() {
+ return "type";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_type);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.type_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mLockClockContainer == null) {
+ createViews();
+ }
return mLockClockContainer;
}
@Override
public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@@ -96,7 +127,7 @@
}
@Override
- public void dozeTimeTick() {
+ public void onTimeTick() {
mTypeClock.onTimeChanged();
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
index 165eb1d..c8eebac 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
@@ -81,8 +81,7 @@
// anything, collapse the stack.
if (action == MotionEvent.ACTION_OUTSIDE || mTouchedView == null) {
mStack.collapseStack();
- cleanUpDismissTarget();
- mTouchedView = null;
+ resetForNextGesture();
return false;
}
@@ -135,8 +134,7 @@
break;
case MotionEvent.ACTION_CANCEL:
- mTouchedView = null;
- cleanUpDismissTarget();
+ resetForNextGesture();
break;
case MotionEvent.ACTION_UP:
@@ -144,7 +142,7 @@
if (mInDismissTarget && isStack) {
mController.dismissStack();
} else if (mMovedEnough) {
- mVelocityTracker.computeCurrentVelocity(1000);
+ mVelocityTracker.computeCurrentVelocity(/* maxVelocity */ 1000);
final float velX = mVelocityTracker.getXVelocity();
final float velY = mVelocityTracker.getYVelocity();
if (isStack) {
@@ -157,7 +155,7 @@
mController.removeBubble(((BubbleView) mTouchedView).getKey());
}
}
- } else if (mTouchedView.equals(mStack.getExpandedBubbleView())) {
+ } else if (mTouchedView == mStack.getExpandedBubbleView()) {
mStack.collapseStack();
} else if (isStack) {
if (mStack.isExpanded()) {
@@ -169,17 +167,25 @@
mStack.setExpandedBubble(((BubbleView) mTouchedView).getKey());
}
- cleanUpDismissTarget();
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- mTouchedView = null;
- mMovedEnough = false;
+ resetForNextGesture();
break;
}
return true;
}
+ /** Clears all touch-related state. */
+ private void resetForNextGesture() {
+ cleanUpDismissTarget();
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ mTouchedView = null;
+ mMovedEnough = false;
+ mInDismissTarget = false;
+ }
+
/**
* Removes the dismiss target and cancels any pending callbacks to show it.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index 490317b..fa22367 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -38,10 +38,12 @@
import android.os.Handler;
import android.os.Trace;
import android.os.UserHandle;
+import android.provider.DeviceConfig;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
@@ -115,6 +117,20 @@
private ImageView mBackdropFront;
private ImageView mBackdropBack;
+ private boolean mShowCompactMediaSeekbar;
+ private final DeviceConfig.OnPropertyChangedListener mPropertyChangedListener =
+ new DeviceConfig.OnPropertyChangedListener() {
+ @Override
+ public void onPropertyChanged(String namespace, String name, String value) {
+ if (SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED.equals(name)) {
+ if (DEBUG_MEDIA) {
+ Log.v(TAG, "DEBUG_MEDIA: compact media seekbar flag updated: " + value);
+ }
+ mShowCompactMediaSeekbar = "true".equals(value);
+ }
+ }
+ };
+
private final MediaController.Callback mMediaListener = new MediaController.Callback() {
@Override
public void onPlaybackStateChanged(PlaybackState state) {
@@ -168,6 +184,14 @@
onNotificationRemoved(entry.key);
}
});
+
+ mShowCompactMediaSeekbar = "true".equals(
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED));
+
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
+ mContext.getMainExecutor(),
+ mPropertyChangedListener);
}
public void setUpWithPresenter(NotificationPresenter presenter) {
@@ -189,6 +213,10 @@
return mMediaMetadata;
}
+ public boolean getShowCompactMediaSeekbar() {
+ return mShowCompactMediaSeekbar;
+ }
+
public Icon getMediaIcon() {
if (mMediaNotificationKey == null) {
return null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 2b643d0..0fbc55b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -81,6 +81,7 @@
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
import com.android.systemui.shared.plugins.PluginManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.notification.AboveShelfChangedListener;
@@ -90,7 +91,6 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.logging.NotificationCounters;
import com.android.systemui.statusbar.notification.row.NotificationContentInflater.InflationFlag;
-import com.android.systemui.statusbar.notification.row.wrapper.NotificationMediaTemplateViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.notification.stack.AmbientState;
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
@@ -331,6 +331,7 @@
private boolean mWasChildInGroupWhenRemoved;
private int mNotificationColorAmbient;
private NotificationInlineImageResolver mImageResolver;
+ private NotificationMediaManager mMediaManager;
private SystemNotificationAsyncTask mSystemNotificationAsyncTask =
new SystemNotificationAsyncTask();
@@ -658,10 +659,11 @@
View expandedView = layout.getExpandedChild();
boolean isMediaLayout = expandedView != null
&& expandedView.findViewById(com.android.internal.R.id.media_actions) != null;
+ boolean showCompactMediaSeekbar = mMediaManager.getShowCompactMediaSeekbar();
if (customView && beforeP && !mIsSummaryWithChildren) {
minHeight = beforeN ? mNotificationMinHeightBeforeN : mNotificationMinHeightBeforeP;
- } else if (isMediaLayout && !NotificationMediaTemplateViewWrapper.HIDE_COMPACT_SCRUBBER) {
+ } else if (isMediaLayout && showCompactMediaSeekbar) {
minHeight = mNotificationMinHeightMedia;
} else if (mUseIncreasedCollapsedHeight && layout == mPrivateLayout) {
minHeight = mNotificationMinHeightLarge;
@@ -1635,6 +1637,7 @@
mMenuRow = new NotificationMenuRow(mContext);
mImageResolver = new NotificationInlineImageResolver(context,
new NotificationInlineImageCache());
+ mMediaManager = Dependency.get(NotificationMediaManager.class);
initDimens();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
index ddda3e5..99f5874 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
@@ -36,6 +36,7 @@
import com.android.internal.R;
import com.android.systemui.Dependency;
+import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -58,12 +59,10 @@
private TextView mSeekBarTotalTime;
private long mDuration = 0;
private MediaController mMediaController;
+ private NotificationMediaManager mMediaManager;
private View mSeekBarView;
private Context mContext;
- // TODO: implement as phenotype flag
- public static final boolean HIDE_COMPACT_SCRUBBER = true;
-
private SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -102,6 +101,7 @@
ExpandableNotificationRow row) {
super(ctx, view, row);
mContext = ctx;
+ mMediaManager = Dependency.get(NotificationMediaManager.class);
}
private void resolveViews() {
@@ -110,7 +110,8 @@
final MediaSession.Token token = mRow.getEntry().notification.getNotification().extras
.getParcelable(Notification.EXTRA_MEDIA_SESSION);
- if (token == null || (COMPACT_MEDIA_TAG.equals(mView.getTag()) && HIDE_COMPACT_SCRUBBER)) {
+ boolean showCompactSeekbar = mMediaManager.getShowCompactMediaSeekbar();
+ if (token == null || (COMPACT_MEDIA_TAG.equals(mView.getTag()) && !showCompactSeekbar)) {
if (mSeekBarView != null) {
mSeekBarView.setVisibility(View.GONE);
}
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 f846036..e0b1846 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -42,6 +42,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
@@ -122,7 +123,7 @@
// Remove all the icons.
for (int i = currentSlots.size() - 1; i >= 0; i--) {
Slot s = currentSlots.get(i);
- slotsToReAdd.put(s, s.getHolderListInViewOrder());
+ slotsToReAdd.put(s, s.getHolderList());
removeAllIconsForSlot(s.getName());
}
@@ -200,6 +201,10 @@
Slot mobileSlot = getSlot(slot);
int slotIndex = getSlotIndex(slot);
+ // Reverse the sort order to show icons with left to right([Slot1][Slot2]..).
+ // StatusBarIconList has UI design that first items go to the right of second items.
+ Collections.reverse(iconStates);
+
for (MobileIconState state : iconStates) {
StatusBarIconHolder holder = mobileSlot.getHolderForTag(state.subId);
if (holder == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
index 2e41617..c876c32 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
@@ -250,6 +250,25 @@
return holders;
}
+ /**
+ * Build a list of the {@link StatusBarIconHolder}s in the same order.
+ * This provides a safe list that can be iterated and inserted into its group.
+ *
+ * @return all holders contained here
+ */
+ public List<StatusBarIconHolder> getHolderList() {
+ ArrayList<StatusBarIconHolder> holders = new ArrayList<>();
+ if (mHolder != null) {
+ holders.add(mHolder);
+ }
+
+ if (mSubSlots != null) {
+ holders.addAll(mSubSlots);
+ }
+
+ return holders;
+ }
+
@Override
public String toString() {
return String.format("(%s) %s", mName, subSlotsString());
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
index 9e946fa..267468f 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.res.Resources;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -40,8 +41,9 @@
@Before
public void setUp() {
+ Resources res = getContext().getResources();
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
- mClockController = BubbleClockController.build(layoutInflater);
+ mClockController = new BubbleClockController(res, layoutInflater);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
index 58701e7..36265d4 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
@@ -31,6 +31,7 @@
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
+import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.InjectionInflationController;
import org.junit.After;
@@ -52,6 +53,7 @@
private ContentObserver mContentObserver;
private DockManagerFake mFakeDockManager;
@Mock InjectionInflationController mMockInjectionInflationController;
+ @Mock PluginManager mMockPluginManager;
@Mock SysuiColorExtractor mMockColorExtractor;
@Mock ContentResolver mMockContentResolver;
@Mock SettingsWrapper mMockSettingsWrapper;
@@ -66,7 +68,8 @@
mFakeDockManager = new DockManagerFake();
mClockManager = new ClockManager(getContext(), mMockInjectionInflationController,
- mFakeDockManager, mMockColorExtractor, mMockContentResolver, mMockSettingsWrapper);
+ mMockPluginManager, mFakeDockManager, mMockColorExtractor, mMockContentResolver,
+ mMockSettingsWrapper);
mClockManager.addOnClockChangedListener(mMockListener);
mContentObserver = mClockManager.getContentObserver();
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
index 8de8f3d..0659b4f 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.res.Resources;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -40,8 +41,9 @@
@Before
public void setUp() {
+ Resources res = getContext().getResources();
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
- mClockController = StretchAnalogClockController.build(layoutInflater);
+ mClockController = new StretchAnalogClockController(res, layoutInflater);
}
@Test
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 2b94d10d6..7fbfc42 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -335,7 +335,7 @@
if (mContexts == null) {
mContexts = new ArrayList<>(1);
}
- mContexts.add(new FillContext(requestId, structure));
+ mContexts.add(new FillContext(requestId, structure, mCurrentViewId));
cancelCurrentRequestLocked();
diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
index 385bc6c..a18686d 100644
--- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
+++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
@@ -80,12 +80,7 @@
@Override // from PerUserSystemService
protected boolean updateLocked(boolean disabled) {
final boolean enabledChanged = super.updateLocked(disabled);
- if (enabledChanged) {
- if (!isEnabledLocked()) {
- // Clear the remote service for the next call
- mRemoteService = null;
- }
- }
+ updateRemoteServiceLocked();
return enabledChanged;
}
@@ -133,6 +128,15 @@
}
@GuardedBy("mLock")
+ private void updateRemoteServiceLocked() {
+ if (mRemoteService != null) {
+ mRemoteService.destroy();
+ mRemoteService = null;
+ }
+ }
+
+
+ @GuardedBy("mLock")
@Nullable
private RemoteContentSuggestionsService getRemoteServiceLocked() {
if (mRemoteService == null) {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 0d4fbb8..9dc673b 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -4130,12 +4130,14 @@
}
/**
- * Return the information of all ongoing VPNs. This method is used by NetworkStatsService
- * and not available in ConnectivityManager.
+ * Return the information of all ongoing VPNs.
+ *
+ * <p>This method is used to update NetworkStatsService.
+ *
+ * <p>Must be called on the handler thread.
*/
- @Override
- public VpnInfo[] getAllVpnInfo() {
- enforceConnectivityInternalPermission();
+ private VpnInfo[] getAllVpnInfo() {
+ ensureRunningOnConnectivityServiceThread();
synchronized (mVpns) {
if (mLockdownEnabled) {
return new VpnInfo[0];
@@ -6469,6 +6471,7 @@
* Must be called on the handler thread.
*/
private Network[] getDefaultNetworks() {
+ ensureRunningOnConnectivityServiceThread();
ArrayList<Network> defaultNetworks = new ArrayList<>();
NetworkAgentInfo defaultNetwork = getDefaultNetwork();
for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
@@ -6484,8 +6487,15 @@
* properties tracked by NetworkStatsService on an active iface has changed.
*/
private void notifyIfacesChangedForNetworkStats() {
+ ensureRunningOnConnectivityServiceThread();
+ String activeIface = null;
+ LinkProperties activeLinkProperties = getActiveLinkProperties();
+ if (activeLinkProperties != null) {
+ activeIface = activeLinkProperties.getInterfaceName();
+ }
try {
- mStatsService.forceUpdateIfaces(getDefaultNetworks());
+ mStatsService.forceUpdateIfaces(
+ getDefaultNetworks(), getAllVpnInfo(), getAllNetworkState(), activeIface);
} catch (Exception ignored) {
}
}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 98f260c..c8e8ef8 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -2983,7 +2983,9 @@
@Override
public void mkdirs(String callingPkg, String appPath) {
- final int userId = UserHandle.getUserId(Binder.getCallingUid());
+ final int callingPid = Binder.getCallingPid();
+ final int callingUid = Binder.getCallingUid();
+ final int userId = UserHandle.getUserId(callingUid);
final UserEnvironment userEnv = new UserEnvironment(userId);
final String propertyName = "sys.user." + userId + ".ce_available";
@@ -3001,7 +3003,7 @@
// Validate that reported package name belongs to caller
final AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(
Context.APP_OPS_SERVICE);
- appOps.checkPackage(Binder.getCallingUid(), callingPkg);
+ appOps.checkPackage(callingUid, callingPkg);
File appFile = null;
try {
@@ -3020,11 +3022,13 @@
appPath = appPath + "/";
}
+ final String systemPath = translateAppToSystem(appPath, callingPid, callingUid);
+
try {
- mVold.mkdirs(appPath);
+ mVold.mkdirs(systemPath);
return;
} catch (Exception e) {
- throw new IllegalStateException("Failed to prepare " + appPath + ": " + e);
+ throw new IllegalStateException("Failed to prepare " + systemPath + ": " + e);
}
}
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 5633082c..0955cc5 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -1455,7 +1455,7 @@
synchronized (mRecords) {
mPreciseDataConnectionState = new PreciseDataConnectionState(
TelephonyManager.DATA_UNKNOWN,TelephonyManager.NETWORK_TYPE_UNKNOWN,
- ApnSetting.getApnTypesBitmaskFromString(apnType), "", null,
+ ApnSetting.getApnTypesBitmaskFromString(apnType), null, null,
DataFailCause.NONE);
for (Record r : mRecords) {
if (r.matchPhoneStateListenerEvent(
@@ -1471,7 +1471,7 @@
}
broadcastDataConnectionFailed(apnType, subId);
broadcastPreciseDataConnectionStateChanged(TelephonyManager.DATA_UNKNOWN,
- TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, "", null,
+ TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, null, null,
DataFailCause.NONE);
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index de41152..415a892 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -16,8 +16,6 @@
package com.android.server.am;
-import static android.provider.DeviceConfig.ActivityManager.KEY_MAX_CACHED_PROCESSES;
-
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
import android.app.ActivityThread;
@@ -105,6 +103,12 @@
private static final long DEFAULT_MEMORY_INFO_THROTTLE_TIME = 5*60*1000;
private static final long DEFAULT_TOP_TO_FGS_GRACE_DURATION = 15 * 1000;
+ // Flag stored in the DeviceConfig API.
+ /**
+ * Maximum number of cached processes.
+ */
+ private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
+
// Maximum number of cached processes we will allow.
public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES;
@@ -292,7 +296,7 @@
updateConstants();
updateActivityStartsLoggingEnabled();
updateBackgroundActivityStartsEnabled();
- DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
ActivityThread.currentApplication().getMainExecutor(),
mOnDeviceConfigChangedListener);
updateMaxCachedProcesses();
@@ -412,7 +416,7 @@
private void updateMaxCachedProcesses() {
String maxCachedProcessesFlag = DeviceConfig.getProperty(
- DeviceConfig.ActivityManager.NAMESPACE, KEY_MAX_CACHED_PROCESSES);
+ DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MAX_CACHED_PROCESSES);
try {
CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0
? (TextUtils.isEmpty(maxCachedProcessesFlag)
diff --git a/services/core/java/com/android/server/am/AppCompactor.java b/services/core/java/com/android/server/am/AppCompactor.java
index 17ffd9c..1f21160 100644
--- a/services/core/java/com/android/server/am/AppCompactor.java
+++ b/services/core/java/com/android/server/am/AppCompactor.java
@@ -17,14 +17,6 @@
package com.android.server.am;
import static android.os.Process.THREAD_PRIORITY_FOREGROUND;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4;
-import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION;
import android.app.ActivityManager;
import android.app.ActivityThread;
@@ -51,6 +43,17 @@
public final class AppCompactor {
+ // Flags stored in the DeviceConfig API.
+ @VisibleForTesting static final String KEY_USE_COMPACTION = "use_compaction";
+ @VisibleForTesting static final String KEY_COMPACT_ACTION_1 = "compact_action_1";
+ @VisibleForTesting static final String KEY_COMPACT_ACTION_2 = "compact_action_2";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
+ @VisibleForTesting static final String KEY_COMPACT_STATSD_SAMPLE_RATE =
+ "compact_statsd_sample_rate";
+
// Phenotype sends int configurations and we map them to the strings we'll use on device,
// preventing a weird string value entering the kernel.
private static final int COMPACT_ACTION_FILE_FLAG = 1;
@@ -165,7 +168,7 @@
* starts the background thread if necessary.
*/
public void init() {
- DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
ActivityThread.currentApplication().getMainExecutor(), mOnFlagsChangedListener);
synchronized (mPhenotypeFlagLock) {
updateUseCompaction();
@@ -228,7 +231,7 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateUseCompaction() {
String useCompactionFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_USE_COMPACTION);
mUseCompaction = TextUtils.isEmpty(useCompactionFlag)
? DEFAULT_USE_COMPACTION : Boolean.parseBoolean(useCompactionFlag);
@@ -241,10 +244,10 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateCompactionActions() {
String compactAction1Flag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_ACTION_1);
String compactAction2Flag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_ACTION_2);
int compactAction1 = DEFAULT_COMPACT_ACTION_1;
@@ -271,16 +274,16 @@
private void updateCompactionThrottles() {
boolean useThrottleDefaults = false;
String throttleSomeSomeFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_1);
String throttleSomeFullFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_2);
String throttleFullSomeFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_3);
String throttleFullFullFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_4);
if (TextUtils.isEmpty(throttleSomeSomeFlag) || TextUtils.isEmpty(throttleSomeFullFlag)
@@ -309,7 +312,7 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateStatsdSampleRate() {
- String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_STATSD_SAMPLE_RATE);
try {
mStatsdSampleRate = TextUtils.isEmpty(sampleRateFlag)
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
index 92a8d93..d787758 100644
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
@@ -542,6 +542,9 @@
+ " failed to respond to cancel, starting client "
+ (mPendingClient != null ? mPendingClient.getOwnerString() : "null"));
+ StatsLog.write(StatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
+ statsModality(), BiometricsProtoEnums.ISSUE_CANCEL_TIMED_OUT);
+
mCurrentClient = null;
startClient(mPendingClient, false);
}
@@ -817,6 +820,7 @@
mHandler.post(() -> {
ClientMonitor client = mCurrentClient;
if (client instanceof EnrollClient && client.getToken() == token) {
+ if (DEBUG) Slog.v(getTag(), "Cancelling enrollment");
client.stop(client.getToken() == token);
}
});
diff --git a/services/core/java/com/android/server/biometrics/ClientMonitor.java b/services/core/java/com/android/server/biometrics/ClientMonitor.java
index 89fa2de..87b9eaa 100644
--- a/services/core/java/com/android/server/biometrics/ClientMonitor.java
+++ b/services/core/java/com/android/server/biometrics/ClientMonitor.java
@@ -158,6 +158,7 @@
*/
public boolean onAcquired(int acquiredInfo, int vendorCode) {
super.logOnAcquired(acquiredInfo, vendorCode, getTargetUserId());
+ if (DEBUG) Slog.v(getLogTag(), "Acquired: " + acquiredInfo + " " + vendorCode);
try {
if (mListener != null) {
mListener.onAcquired(getHalDeviceId(), acquiredInfo, vendorCode);
diff --git a/services/core/java/com/android/server/biometrics/EnrollClient.java b/services/core/java/com/android/server/biometrics/EnrollClient.java
index 882a929..d5e626a 100644
--- a/services/core/java/com/android/server/biometrics/EnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/EnrollClient.java
@@ -76,7 +76,10 @@
}
mMetricsLogger.action(mMetrics.actionBiometricEnroll());
try {
- getListener().onEnrollResult(identifier, remaining);
+ final BiometricServiceBase.ServiceListener listener = getListener();
+ if (listener != null) {
+ listener.onEnrollResult(identifier, remaining);
+ }
return remaining == 0;
} catch (RemoteException e) {
Slog.w(getLogTag(), "Failed to notify EnrollResult:", e);
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 8a208a5..9f80a83 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -1639,13 +1639,12 @@
}
}
- if (syncOperation.isAppStandbyExempted()) {
- final UsageStatsManagerInternal usmi = LocalServices.getService(
- UsageStatsManagerInternal.class);
- if (usmi != null) {
- usmi.reportExemptedSyncScheduled(syncOperation.owningPackage,
- UserHandle.getUserId(syncOperation.owningUid));
- }
+ final UsageStatsManagerInternal usmi =
+ LocalServices.getService(UsageStatsManagerInternal.class);
+ if (usmi != null) {
+ usmi.reportSyncScheduled(syncOperation.owningPackage,
+ UserHandle.getUserId(syncOperation.owningUid),
+ syncOperation.isAppStandbyExempted());
}
getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage,
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index d57431e..1f28a6c 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -288,6 +288,10 @@
return mScreenAutoBrightness;
}
+ public boolean hasValidAmbientLux() {
+ return mAmbientLuxValid;
+ }
+
public float getAutomaticScreenBrightnessAdjustment() {
return mBrightnessMapper.getAutoBrightnessAdjustment();
}
@@ -648,9 +652,9 @@
mLightSensorWarmUpTimeConfig + mLightSensorEnableTime;
if (time < timeWhenSensorWarmedUp) {
if (mLoggingEnabled) {
- Slog.d(TAG, "updateAmbientLux: Sensor not ready yet: " +
- "time=" + time + ", " +
- "timeWhenSensorWarmedUp=" + timeWhenSensorWarmedUp);
+ Slog.d(TAG, "updateAmbientLux: Sensor not ready yet: "
+ + "time=" + time + ", "
+ + "timeWhenSensorWarmedUp=" + timeWhenSensorWarmedUp);
}
mHandler.sendEmptyMessageAtTime(MSG_UPDATE_AMBIENT_LUX,
timeWhenSensorWarmedUp);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 15c7ef7..74cda9d 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -874,7 +874,7 @@
// If the brightness is already set then it's been overridden by something other than the
// user, or is a temporary adjustment.
- final boolean userInitiatedChange = brightness < 0
+ boolean userInitiatedChange = brightness < 0
&& (autoBrightnessAdjustmentChanged || userSetBrightnessChanged);
boolean hadUserBrightnessPoint = false;
@@ -1010,6 +1010,12 @@
}
if (!brightnessIsTemporary) {
+ if (userInitiatedChange && (mAutomaticBrightnessController == null
+ || !mAutomaticBrightnessController.hasValidAmbientLux())) {
+ // If we don't have a valid lux reading we can't report a valid
+ // slider event so notify as if the system changed the brightness.
+ userInitiatedChange = false;
+ }
notifyBrightnessChanged(brightness, userInitiatedChange, hadUserBrightnessPoint);
}
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index bffd60b..205ddb0 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -82,7 +82,6 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.DataUsageRequest;
-import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
@@ -196,8 +195,6 @@
private final boolean mUseBpfTrafficStats;
- private IConnectivityManager mConnManager;
-
@VisibleForTesting
public static final String ACTION_NETWORK_STATS_POLL =
"com.android.server.action.NETWORK_STATS_POLL";
@@ -259,6 +256,7 @@
private final ArrayMap<String, NetworkIdentitySet> mActiveUidIfaces = new ArrayMap<>();
/** Current default active iface. */
+ @GuardedBy("mStatsLock")
private String mActiveIface;
/** Set of any ifaces associated with mobile networks since boot. */
@@ -269,6 +267,10 @@
@GuardedBy("mStatsLock")
private Network[] mDefaultNetworks = new Network[0];
+ /** Set containing info about active VPNs and their underlying networks. */
+ @GuardedBy("mStatsLock")
+ private VpnInfo[] mVpnInfos = new VpnInfo[0];
+
private final DropBoxNonMonotonicObserver mNonMonotonicObserver =
new DropBoxNonMonotonicObserver();
@@ -382,10 +384,6 @@
mHandlerCallback = callback;
}
- public void bindConnectivityManager(IConnectivityManager connManager) {
- mConnManager = checkNotNull(connManager, "missing IConnectivityManager");
- }
-
public void systemReady() {
mSystemReady = true;
@@ -864,13 +862,17 @@
}
@Override
- public void forceUpdateIfaces(Network[] defaultNetworks) {
+ public void forceUpdateIfaces(
+ Network[] defaultNetworks,
+ VpnInfo[] vpnArray,
+ NetworkState[] networkStates,
+ String activeIface) {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
assertBandwidthControlEnabled();
final long token = Binder.clearCallingIdentity();
try {
- updateIfaces(defaultNetworks);
+ updateIfaces(defaultNetworks, vpnArray, networkStates, activeIface);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -1134,11 +1136,17 @@
}
};
- private void updateIfaces(Network[] defaultNetworks) {
+ private void updateIfaces(
+ Network[] defaultNetworks,
+ VpnInfo[] vpnArray,
+ NetworkState[] networkStates,
+ String activeIface) {
synchronized (mStatsLock) {
mWakeLock.acquire();
try {
- updateIfacesLocked(defaultNetworks);
+ mVpnInfos = vpnArray;
+ mActiveIface = activeIface;
+ updateIfacesLocked(defaultNetworks, networkStates);
} finally {
mWakeLock.release();
}
@@ -1152,7 +1160,7 @@
* {@link NetworkIdentitySet}.
*/
@GuardedBy("mStatsLock")
- private void updateIfacesLocked(Network[] defaultNetworks) {
+ private void updateIfacesLocked(Network[] defaultNetworks, NetworkState[] states) {
if (!mSystemReady) return;
if (LOGV) Slog.v(TAG, "updateIfacesLocked()");
@@ -1164,18 +1172,6 @@
// will be persisted during next alarm poll event.
performPollLocked(FLAG_PERSIST_NETWORK);
- final NetworkState[] states;
- final LinkProperties activeLink;
- try {
- states = mConnManager.getAllNetworkState();
- activeLink = mConnManager.getActiveLinkProperties();
- } catch (RemoteException e) {
- // ignored; service lives in system_server
- return;
- }
-
- mActiveIface = activeLink != null ? activeLink.getInterfaceName() : null;
-
// Rebuild active interfaces based on connected networks
mActiveIfaces.clear();
mActiveUidIfaces.clear();
@@ -1287,7 +1283,7 @@
Trace.traceEnd(TRACE_TAG_NETWORK);
// For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps.
- VpnInfo[] vpnArray = mConnManager.getAllVpnInfo();
+ VpnInfo[] vpnArray = mVpnInfos;
Trace.traceBegin(TRACE_TAG_NETWORK, "recordUid");
mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveUidIfaces, vpnArray, currentTime);
Trace.traceEnd(TRACE_TAG_NETWORK);
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b3b7f25..6fe085b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1935,7 +1935,7 @@
final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
if (pkgSetting.getInstallReason(userId)
!= PackageManager.INSTALL_REASON_DEVICE_RESTORE) {
- setDefaultBrowserPackageName(null, userId);
+ setDefaultBrowserAsyncLPw(null, userId);
}
}
@@ -13687,6 +13687,23 @@
return true;
}
+ private void setDefaultBrowserAsyncLPw(@Nullable String packageName, @UserIdInt int userId) {
+ if (userId == UserHandle.USER_ALL) {
+ return;
+ }
+ if (mDefaultBrowserProvider == null) {
+ Slog.e(TAG, "mDefaultBrowserProvider is null");
+ return;
+ }
+ mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId);
+ if (packageName != null) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
+ userId);
+ }
+ }
+ }
+
@Override
public String getDefaultBrowserPackageName(int userId) {
if (UserHandle.getCallingUserId() != userId) {
diff --git a/services/core/java/com/android/server/power/AttentionDetector.java b/services/core/java/com/android/server/power/AttentionDetector.java
index 8740256..406cbc1 100644
--- a/services/core/java/com/android/server/power/AttentionDetector.java
+++ b/services/core/java/com/android/server/power/AttentionDetector.java
@@ -19,9 +19,13 @@
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.util.Slog;
import android.util.StatsLog;
@@ -44,6 +48,8 @@
private static final String TAG = "AttentionDetector";
private static final boolean DEBUG = false;
+ private boolean mIsSettingEnabled;
+
/**
* Invoked whenever user attention is detected.
*/
@@ -128,15 +134,35 @@
mWakefulness = PowerManagerInternal.WAKEFULNESS_AWAKE;
}
+ @VisibleForTesting
+ void updateEnabledFromSettings(Context context) {
+ mIsSettingEnabled = Settings.System.getIntForUser(context.getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
+ }
+
public void systemReady(Context context) {
+ updateEnabledFromSettings(context);
mAttentionManager = LocalServices.getService(AttentionManagerInternal.class);
mMaximumExtensionMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionMaximumExtension);
mMaxAttentionApiTimeoutMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionApiTimeout);
+
+ context.getContentResolver().registerContentObserver(Settings.System.getUriFor(
+ Settings.System.ADAPTIVE_SLEEP),
+ false, new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateEnabledFromSettings(context);
+ }
+ }, UserHandle.USER_ALL);
}
public long updateUserActivity(long nextScreenDimming) {
+ if (!mIsSettingEnabled) {
+ return nextScreenDimming;
+ }
+
if (!isAttentionServiceSupported()) {
return nextScreenDimming;
}
@@ -182,7 +208,7 @@
* the activity happened.
*
* @param eventTime Activity time, in uptime millis.
- * @param event Activity type as defined in {@link PowerManager}.
+ * @param event Activity type as defined in {@link PowerManager}.
* @return 0 when activity was ignored, 1 when handled, -1 when invalid.
*/
public int onUserActivity(long eventTime, int event) {
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 89d24b1..bb23bc0 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -715,6 +715,15 @@
NativeWrapper createNativeWrapper() {
return new NativeWrapper();
}
+
+ WirelessChargerDetector createWirelessChargerDetector(
+ SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+ return new WirelessChargerDetector(sensorManager, suspendBlocker, handler);
+ }
+
+ AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+ return new AmbientDisplayConfiguration(context);
+ }
}
final Constants mConstants;
@@ -747,7 +756,7 @@
mHandlerThread.start();
mHandler = new PowerManagerHandler(mHandlerThread.getLooper());
mConstants = new Constants(mHandler);
- mAmbientDisplayConfiguration = new AmbientDisplayConfiguration(mContext);
+ mAmbientDisplayConfiguration = mInjector.createAmbientDisplayConfiguration(context);
mAttentionDetector = new AttentionDetector(this::onUserAttention, mLock);
mBatterySavingStats = new BatterySavingStats(mLock);
@@ -833,7 +842,7 @@
mInjector.createSuspendBlocker(this, "PowerManagerService.Broadcasts"),
mPolicy);
- mWirelessChargerDetector = new WirelessChargerDetector(sensorManager,
+ mWirelessChargerDetector = mInjector.createWirelessChargerDetector(sensorManager,
mInjector.createSuspendBlocker(
this, "PowerManagerService.WirelessChargerDetector"),
mHandler);
@@ -932,7 +941,8 @@
mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);
}
- private void readConfigurationLocked() {
+ @VisibleForTesting
+ void readConfigurationLocked() {
final Resources resources = mContext.getResources();
mDecoupleHalAutoSuspendModeFromDisplayConfig = resources.getBoolean(
@@ -3865,7 +3875,8 @@
return workSource != null ? new WorkSource(workSource) : null;
}
- private final class BatteryReceiver extends BroadcastReceiver {
+ @VisibleForTesting
+ final class BatteryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (mLock) {
@@ -3883,7 +3894,8 @@
}
}
- private final class UserSwitchedReceiver extends BroadcastReceiver {
+ @VisibleForTesting
+ final class UserSwitchedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (mLock) {
diff --git a/services/core/java/com/android/server/power/WirelessChargerDetector.java b/services/core/java/com/android/server/power/WirelessChargerDetector.java
index 18e5ce4..e8e9c67 100644
--- a/services/core/java/com/android/server/power/WirelessChargerDetector.java
+++ b/services/core/java/com/android/server/power/WirelessChargerDetector.java
@@ -28,6 +28,8 @@
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.io.PrintWriter;
/**
@@ -70,7 +72,8 @@
* sensor to detect this case.
* </p>
*/
-final class WirelessChargerDetector {
+@VisibleForTesting
+public class WirelessChargerDetector {
private static final String TAG = "WirelessChargerDetector";
private static final boolean DEBUG = false;
diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java
index 17d3066..f533ad1 100644
--- a/services/core/java/com/android/server/role/RoleManagerService.java
+++ b/services/core/java/com/android/server/role/RoleManagerService.java
@@ -743,6 +743,25 @@
return false;
}
}
+
+ @Override
+ public void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId) {
+ IRoleManagerCallback callback = new IRoleManagerCallback.Stub() {
+ @Override
+ public void onSuccess() {}
+ @Override
+ public void onFailure() {
+ Slog.e(LOG_TAG, "Failed to set default browser: " + packageName);
+ }
+ };
+ if (packageName != null) {
+ getOrCreateControllerService(userId).onAddRoleHolder(RoleManager.ROLE_BROWSER,
+ packageName, 0, callback);
+ } else {
+ getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_BROWSER, 0,
+ callback);
+ }
+ }
}
private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index e976975..f70adef 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -289,10 +289,11 @@
private int windowFlags; // custom window flags for preview window.
private TaskRecord task; // the task this is in.
private long createTime = System.currentTimeMillis();
- long lastVisibleTime; // last time this activity became visible
- long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
- long pauseTime; // last time we started pausing the activity
- long launchTickTime; // base time for launch tick messages
+ long lastVisibleTime; // last time this activity became visible
+ long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
+ long pauseTime; // last time we started pausing the activity
+ long launchTickTime; // base time for launch tick messages
+ long topResumedStateLossTime; // last time we reported top resumed state loss to an activity
// Last configuration reported to the activity in the client process.
private MergedConfiguration mLastReportedConfiguration;
private int mLastReportedDisplayId;
@@ -694,14 +695,14 @@
void scheduleTopResumedActivityChanged(boolean onTop) {
if (!attachedToProcess()) {
- if (DEBUG_CONFIGURATION) {
+ if (DEBUG_STATES) {
Slog.w(TAG, "Can't report activity position update - client not running"
+ ", activityRecord=" + this);
}
return;
}
try {
- if (DEBUG_CONFIGURATION) {
+ if (DEBUG_STATES) {
Slog.v(TAG, "Sending position change to " + this + ", onTop: " + onTop);
}
@@ -3285,7 +3286,7 @@
transaction.addCallback(callbackItem);
transaction.setLifecycleStateRequest(lifecycleItem);
mAtmService.getLifecycleManager().scheduleTransaction(transaction);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
// Note: don't need to call pauseIfSleepingLocked() here, because the caller will only
// request resume if this activity is currently resumed, which implies we aren't
// sleeping.
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index a4457e2..ea2aff2 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -1491,6 +1491,7 @@
+ " callers=" + Debug.getCallers(5));
r.setState(RESUMED, "minimalResumeActivityLocked");
r.completeResumeLocked();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
if (DEBUG_SAVED_STATE) Slog.i(TAG_SAVED_STATE,
"Launch completed; removing icicle of " + r.icicle);
}
@@ -2575,7 +2576,7 @@
// Protect against recursion.
mInResumeTopActivity = true;
result = resumeTopActivityInnerLocked(prev, options);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
// When resuming the top activity, it may be necessary to pause the top activity (for
// example, returning to the lock screen. We suppress the normal pause logic in
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index 7ae48a5..758a765 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -170,6 +170,9 @@
// How long we can hold the launch wake lock before giving up.
static final int LAUNCH_TIMEOUT = 10 * 1000;
+ /** How long we wait until giving up on the activity telling us it released the top state. */
+ static final int TOP_RESUMED_STATE_LOSS_TIMEOUT = 500;
+
static final int IDLE_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG;
static final int IDLE_NOW_MSG = FIRST_SUPERVISOR_STACK_MSG + 1;
static final int RESUME_TOP_ACTIVITY_MSG = FIRST_SUPERVISOR_STACK_MSG + 2;
@@ -179,6 +182,7 @@
static final int REPORT_MULTI_WINDOW_MODE_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 14;
static final int REPORT_PIP_MODE_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 15;
static final int REPORT_HOME_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 16;
+ static final int TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 17;
// Used to indicate that windows of activities should be preserved during the resize.
static final boolean PRESERVE_WINDOWS = true;
@@ -300,6 +304,18 @@
*/
final ArrayList<ActivityRecord> mNoAnimActivities = new ArrayList<>();
+ /**
+ * Cached value of the topmost resumed activity in the system. Updated when new activity is
+ * resumed.
+ */
+ private ActivityRecord mTopResumedActivity;
+
+ /**
+ * Flag indicating whether we're currently waiting for the previous top activity to handle the
+ * loss of the state and report back before making new activity top resumed.
+ */
+ private boolean mTopResumedActivityWaitingForPrev;
+
/** The target stack bounds for the picture-in-picture mode changed that we need to report to
* the application */
Rect mPipModeChangedTargetStackBounds;
@@ -844,7 +860,7 @@
// Schedule transaction.
mService.getLifecycleManager().scheduleTransaction(clientTransaction);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ updateTopResumedActivityIfNeeded();
if ((proc.mInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0
&& mService.mHasHeavyWeightFeature) {
@@ -2296,6 +2312,73 @@
mHandler.sendEmptyMessage(IDLE_NOW_MSG);
}
+ /**
+ * Updates the record of top resumed activity when it changes and handles reporting of the
+ * state changes to previous and new top activities. It will immediately dispatch top resumed
+ * state loss message to previous top activity (if haven't done it already). After the previous
+ * activity releases the top state and reports back, message about acquiring top state will be
+ * sent to the new top resumed activity.
+ */
+ void updateTopResumedActivityIfNeeded() {
+ final ActivityRecord prevTopActivity = mTopResumedActivity;
+ final ActivityStack topStack = mRootActivityContainer.getTopDisplayFocusedStack();
+ if (topStack == null || topStack.mResumedActivity == prevTopActivity) {
+ return;
+ }
+
+ // Ask previous activity to release the top state.
+ final boolean prevActivityReceivedTopState =
+ prevTopActivity != null && !mTopResumedActivityWaitingForPrev;
+ // mTopResumedActivityWaitingForPrev == true at this point would mean that an activity
+ // before the prevTopActivity one hasn't reported back yet. So server never sent the top
+ // resumed state change message to prevTopActivity.
+ if (prevActivityReceivedTopState) {
+ prevTopActivity.scheduleTopResumedActivityChanged(false /* onTop */);
+ scheduleTopResumedStateLossTimeout(prevTopActivity);
+ mTopResumedActivityWaitingForPrev = true;
+ }
+
+ // Update the current top activity.
+ mTopResumedActivity = topStack.mResumedActivity;
+ scheduleTopResumedActivityStateIfNeeded();
+ }
+
+ /** Schedule top resumed state change if previous top activity already reported back. */
+ private void scheduleTopResumedActivityStateIfNeeded() {
+ if (mTopResumedActivity != null && !mTopResumedActivityWaitingForPrev) {
+ mTopResumedActivity.scheduleTopResumedActivityChanged(true /* onTop */);
+ }
+ }
+
+ /**
+ * Limit the time given to the app to report handling of the state loss.
+ */
+ private void scheduleTopResumedStateLossTimeout(ActivityRecord r) {
+ final Message msg = mHandler.obtainMessage(TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG);
+ msg.obj = r;
+ r.topResumedStateLossTime = SystemClock.uptimeMillis();
+ mHandler.sendMessageDelayed(msg, TOP_RESUMED_STATE_LOSS_TIMEOUT);
+ if (DEBUG_STATES) Slog.v(TAG_STATES, "Waiting for top state to be released by " + r);
+ }
+
+ /**
+ * Handle a loss of top resumed state by an activity - update internal state and inform next top
+ * activity if needed.
+ */
+ void handleTopResumedStateReleased(boolean timeout) {
+ if (DEBUG_STATES) {
+ Slog.v(TAG_STATES, "Top resumed state released "
+ + (timeout ? " (due to timeout)" : " (transition complete)"));
+ }
+ mHandler.removeMessages(TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG);
+ if (!mTopResumedActivityWaitingForPrev) {
+ // Top resumed activity state loss already handled.
+ return;
+ }
+ mTopResumedActivityWaitingForPrev = false;
+ scheduleTopResumedActivityStateIfNeeded();
+ }
+
void removeTimeoutsForActivityLocked(ActivityRecord r) {
if (DEBUG_IDLE) Slog.d(TAG_IDLE, "removeTimeoutsForActivity: Callers="
+ Debug.getCallers(4));
@@ -2590,8 +2673,18 @@
// Start home activities on displays with no activities.
mRootActivityContainer.startHomeOnEmptyDisplays("homeChanged");
}
- }
- break;
+ } break;
+ case TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG: {
+ ActivityRecord r = (ActivityRecord) msg.obj;
+ Slog.w(TAG, "Activity top resumed state loss timeout for " + r);
+ synchronized (mService.mGlobalLock) {
+ if (r.hasProcess()) {
+ mService.logAppTooSlow(r.app, r.topResumedStateLossTime,
+ "top state loss for " + r);
+ }
+ }
+ handleTopResumedStateReleased(true /* timeout */);
+ } break;
}
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 486a4ea..d747198 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -1634,6 +1634,15 @@
}
@Override
+ public final void activityTopResumedStateLost() {
+ final long origId = Binder.clearCallingIdentity();
+ synchronized (mGlobalLock) {
+ mStackSupervisor.handleTopResumedStateReleased(false /* timeout */);
+ }
+ Binder.restoreCallingIdentity(origId);
+ }
+
+ @Override
public final void activityPaused(IBinder token) {
final long origId = Binder.clearCallingIdentity();
synchronized (mGlobalLock) {
diff --git a/services/core/java/com/android/server/wm/AppWindowThumbnail.java b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
index 5519729..bbbf11d 100644
--- a/services/core/java/com/android/server/wm/AppWindowThumbnail.java
+++ b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
@@ -118,7 +118,8 @@
anim.scaleCurrentDuration(mAppToken.mWmService.getTransitionAnimationScaleLocked());
mSurfaceAnimator.startAnimation(t, new LocalAnimationAdapter(
new WindowAnimationSpec(anim, position,
- mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame()),
+ mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame(),
+ mAppToken.mWmService.mWindowCornerRadius),
mAppToken.mWmService.mSurfaceAnimationRunner), false /* hidden */);
}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 05c4c27..78199d44 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -582,6 +582,8 @@
}
}
}
+ // Changes in opening apps and closing apps may cause orientation change.
+ reportDescendantOrientationChangeIfNeeded();
return;
}
@@ -729,11 +731,31 @@
}
SurfaceControl.closeTransaction();
}
+
+ // Visibility changes may cause orientation request change.
+ reportDescendantOrientationChangeIfNeeded();
}
return delayed;
}
+ private void reportDescendantOrientationChangeIfNeeded() {
+ // Orientation request is exposed only when we're visible. Therefore visibility change
+ // will change requested orientation. Notify upward the hierarchy ladder to adjust
+ // configuration. This is important to cases where activities with incompatible
+ // orientations launch, or user goes back from an activity of bi-orientation to an
+ // activity with specified orientation.
+ if (mActivityRecord.getRequestedConfigurationOrientation() == getConfiguration().orientation
+ || getOrientationIgnoreVisibility() == SCREEN_ORIENTATION_UNSET) {
+ return;
+ }
+
+ final IBinder freezeToken =
+ mActivityRecord.mayFreezeScreenLocked(mActivityRecord.app)
+ ? mActivityRecord.appToken : null;
+ onDescendantOrientationChanged(freezeToken, mActivityRecord);
+ }
+
/**
* @return The to top most child window for which {@link LayoutParams#isFullscreen()} returns
* true.
@@ -2526,7 +2548,8 @@
new WindowAnimationSpec(a, mTmpPoint, mTmpRect,
getDisplayContent().mAppTransition.canSkipFirstFrame(),
appStackClipMode,
- true /* isAppAnimation */),
+ true /* isAppAnimation */,
+ mWmService.mWindowCornerRadius),
mWmService.mSurfaceAnimationRunner);
if (a.getZAdjustment() == Animation.ZORDER_TOP) {
mNeedsZBoost = true;
diff --git a/services/core/java/com/android/server/wm/RootActivityContainer.java b/services/core/java/com/android/server/wm/RootActivityContainer.java
index 6988357..e3beb19 100644
--- a/services/core/java/com/android/server/wm/RootActivityContainer.java
+++ b/services/core/java/com/android/server/wm/RootActivityContainer.java
@@ -175,12 +175,6 @@
private ActivityDisplay mDefaultDisplay;
private final SparseArray<IntArray> mDisplayAccessUIDs = new SparseArray<>();
- /**
- * Cached value of the topmost resumed activity in the system. Updated when new activity is
- * resumed.
- */
- private ActivityRecord mTopResumedActivity;
-
/** The current user */
int mCurrentUser;
/** Stack id of the front stack when user switched, indexed by userId. */
@@ -1155,23 +1149,6 @@
return result;
}
- void updateTopResumedActivityIfNeeded() {
- final ActivityRecord prevTopActivity = mTopResumedActivity;
- final ActivityStack topStack = getTopDisplayFocusedStack();
- if (topStack == null || topStack.mResumedActivity == prevTopActivity) {
- return;
- }
- // Clear previous top state
- if (prevTopActivity != null) {
- prevTopActivity.scheduleTopResumedActivityChanged(false /* onTop */);
- }
- // Update the current top activity
- mTopResumedActivity = topStack.mResumedActivity;
- if (mTopResumedActivity != null) {
- mTopResumedActivity.scheduleTopResumedActivityChanged(true /* onTop */);
- }
- }
-
void applySleepTokens(boolean applyToStacks) {
for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
// Set the sleeping state of the display.
@@ -1434,7 +1411,7 @@
mActivityDisplays.remove(display);
mActivityDisplays.add(position, display);
}
- updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
}
@VisibleForTesting
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 888d741..499cbaf 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -330,7 +330,7 @@
// No one in higher hierarchy handles this request, let's adjust our bounds to fulfill
// it if possible.
// TODO: Move to TaskRecord after unification is done.
- if (mTaskRecord != null) {
+ if (mTaskRecord != null && mTaskRecord.getParent() != null) {
mTaskRecord.onConfigurationChanged(mTaskRecord.getParent().getConfiguration());
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowAnimationSpec.java b/services/core/java/com/android/server/wm/WindowAnimationSpec.java
index 98c77ac..57311e1 100644
--- a/services/core/java/com/android/server/wm/WindowAnimationSpec.java
+++ b/services/core/java/com/android/server/wm/WindowAnimationSpec.java
@@ -17,10 +17,10 @@
package com.android.server.wm;
import static com.android.server.wm.AnimationAdapter.STATUS_BAR_TRANSITION_DURATION;
-import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
-import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
import static com.android.server.wm.AnimationSpecProto.WINDOW;
import static com.android.server.wm.WindowAnimationSpecProto.ANIMATION;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
import android.graphics.Point;
import android.graphics.Rect;
@@ -51,18 +51,22 @@
private final Rect mStackBounds = new Rect();
private int mStackClipMode;
private final Rect mTmpRect = new Rect();
+ private final float mWindowCornerRadius;
- public WindowAnimationSpec(Animation animation, Point position, boolean canSkipFirstFrame) {
+ public WindowAnimationSpec(Animation animation, Point position, boolean canSkipFirstFrame,
+ float windowCornerRadius) {
this(animation, position, null /* stackBounds */, canSkipFirstFrame, STACK_CLIP_NONE,
- false /* isAppAnimation */);
+ false /* isAppAnimation */, windowCornerRadius);
}
public WindowAnimationSpec(Animation animation, Point position, Rect stackBounds,
- boolean canSkipFirstFrame, int stackClipMode, boolean isAppAnimation) {
+ boolean canSkipFirstFrame, int stackClipMode, boolean isAppAnimation,
+ float windowCornerRadius) {
mAnimation = animation;
if (position != null) {
mPosition.set(position.x, position.y);
}
+ mWindowCornerRadius = windowCornerRadius;
mCanSkipFirstFrame = canSkipFirstFrame;
mIsAppAnimation = isAppAnimation;
mStackClipMode = stackClipMode;
@@ -101,6 +105,9 @@
mTmpRect.intersect(tmp.transformation.getClipRect());
t.setWindowCrop(leash, mTmpRect);
}
+ if (mAnimation.hasRoundedCorners() && mWindowCornerRadius > 0) {
+ t.setCornerRadius(leash, mWindowCornerRadius);
+ }
}
@Override
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 474a9da..1bd1795 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -145,6 +145,7 @@
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerInternal;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -234,6 +235,7 @@
import com.android.internal.os.IResultReceiver;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.policy.IShortcutService;
+import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.LatencyTracker;
@@ -753,24 +755,27 @@
final DisplayManager mDisplayManager;
final ActivityTaskManagerService mAtmService;
- // Indicates whether this device supports wide color gamut / HDR rendering
+ /** Corner radius that windows should have in order to match the display. */
+ final float mWindowCornerRadius;
+
+ /** Indicates whether this device supports wide color gamut / HDR rendering */
private boolean mHasWideColorGamutSupport;
private boolean mHasHdrSupport;
- // Who is holding the screen on.
+ /** Who is holding the screen on. */
private Session mHoldingScreenOn;
private PowerManager.WakeLock mHoldingScreenWakeLock;
- // Whether or not a layout can cause a wake up when theater mode is enabled.
+ /** Whether or not a layout can cause a wake up when theater mode is enabled. */
boolean mAllowTheaterModeWakeFromLayout;
final TaskPositioningController mTaskPositioningController;
final DragDropController mDragDropController;
- // For frozen screen animations.
+ /** For frozen screen animations. */
private int mExitAnimId, mEnterAnimId;
- // The display that the rotation animation is applying to.
+ /** The display that the rotation animation is applying to. */
private int mFrozenDisplayId;
/** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this
@@ -977,7 +982,7 @@
mInputManager = inputManager; // Must be before createDisplayContentLocked.
mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
mDisplayWindowSettings = new DisplayWindowSettings(this);
-
+ mWindowCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context.getResources());
mTransactionFactory = transactionFactory;
mTransaction = mTransactionFactory.make();
@@ -7434,7 +7439,7 @@
new SurfaceControl.Transaction().syncInputWindows().apply(true);
- return mInputManager.injectInputEvent(ev, mode);
+ return LocalServices.getService(InputManagerInternal.class).injectInputEvent(ev, mode);
}
private void waitForAnimationsToComplete() {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a13086d..b7925f20 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -4458,7 +4458,8 @@
anim.restrictDuration(MAX_ANIMATION_DURATION);
anim.scaleCurrentDuration(mWmService.getWindowAnimationScaleLocked());
final AnimationAdapter adapter = new LocalAnimationAdapter(
- new WindowAnimationSpec(anim, mSurfacePosition, false /* canSkipFirstFrame */),
+ new WindowAnimationSpec(anim, mSurfacePosition, false /* canSkipFirstFrame */,
+ mWmService.mWindowCornerRadius),
mWmService.mSurfaceAnimationRunner);
startAnimation(mPendingTransaction, adapter);
commitPendingTransaction();
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 512a745..a19d5d5 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -1366,7 +1366,6 @@
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity,
/* allowIsolated= */ false,
DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL);
- networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
} catch (Throwable e) {
reportWtf("starting Connectivity Service", e);
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java b/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
index d32f1f7..e100d16 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
@@ -16,15 +16,6 @@
package com.android.server.am;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4;
-import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION;
-
import static com.android.server.am.ActivityManagerService.Injector;
import static com.android.server.am.AppCompactor.compactActionIntToString;
@@ -117,28 +108,28 @@
// When the DeviceConfig already has a flag value stored (note this test will need to
// change if the default value changes from false).
assertThat(AppCompactor.DEFAULT_USE_COMPACTION).isFalse();
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "true", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "true", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1,
Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_1 + 1 % 4) + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2,
Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_2 + 1 % 4) + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
// Then calling init will read and set that flag.
@@ -169,8 +160,8 @@
// When we call init and change some the flag value...
mCompactorUnderTest.init();
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "true", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "true", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then that new flag value is updated in the implementation.
@@ -179,8 +170,8 @@
// And again, setting the flag the other way.
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "false", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "false", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.useCompaction()).isFalse();
}
@@ -193,8 +184,8 @@
// When we push an invalid flag value...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "foobar", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "foobar", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then we set the default.
@@ -212,11 +203,11 @@
for (int i = 1; i < 5; i++) {
mCountDown = new CountDownLatch(2);
int expectedSome = (AppCompactor.DEFAULT_COMPACT_ACTION_1 + i) % 4 + 1;
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false);
int expectedFull = (AppCompactor.DEFAULT_COMPACT_ACTION_2 + i) % 4 + 1;
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then the updates are reflected in the flags.
@@ -233,10 +224,10 @@
// When we override new values for the compaction action with bad values ...
mCountDown = new CountDownLatch(2);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, "foo", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then the default values are reflected in the flag
@@ -246,10 +237,10 @@
compactActionIntToString(AppCompactor.DEFAULT_COMPACT_ACTION_2));
mCountDown = new CountDownLatch(2);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, "", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, "", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, "", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, "", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactActionSome).isEqualTo(
@@ -264,17 +255,17 @@
// When we override new reasonable throttle values after init...
mCountDown = new CountDownLatch(4);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -296,8 +287,8 @@
// When one of the throttles is overridden with a bad value...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1, "foo", false);
// Then all the throttles have the defaults set.
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
@@ -311,8 +302,8 @@
// Repeat for each of the throttle keys.
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -324,8 +315,8 @@
AppCompactor.DEFAULT_COMPACT_THROTTLE_4);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -337,8 +328,8 @@
AppCompactor.DEFAULT_COMPACT_THROTTLE_4);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -356,8 +347,8 @@
// When we override mStatsdSampleRate with a reasonable values ...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -373,8 +364,8 @@
// When we override mStatsdSampleRate with a reasonable values ...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then that override is reflected in the compactor.
@@ -389,8 +380,8 @@
// When we override mStatsdSampleRate with an value outside of [0..1]...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(-1.0f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -398,8 +389,8 @@
assertThat(mCompactorUnderTest.mStatsdSampleRate).isEqualTo(0.0f);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(1.01f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
diff --git a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
index 6a937fa..a2f1f01 100644
--- a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
@@ -32,10 +32,13 @@
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -49,6 +52,7 @@
private TestableAttentionDetector mAttentionDetector;
private long mAttentionTimeout;
private long mNextDimming;
+ private int mIsSettingEnabled;
@Before
public void setUp() {
@@ -59,6 +63,20 @@
mAttentionDetector.onWakefulnessChangeStarted(PowerManagerInternal.WAKEFULNESS_AWAKE);
mAttentionDetector.setAttentionServiceSupported(true);
mNextDimming = SystemClock.uptimeMillis() + 3000L;
+
+ // Save the existing state.
+ mIsSettingEnabled = Settings.System.getIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ }
+
+ @After
+ public void tearDown() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, mIsSettingEnabled, UserHandle.USER_CURRENT);
}
@Test
@@ -69,6 +87,16 @@
}
@Test
+ public void testOnUserActivity_doesntCheckIfNotEnabled() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ long when = registerAttention();
+ verify(mAttentionManagerInternal, never()).checkAttention(anyInt(), anyLong(), any());
+ assertThat(mNextDimming).isEqualTo(when);
+ }
+
+ @Test
public void testOnUserActivity_doesntCheckIfNotSupported() {
mAttentionDetector.setAttentionServiceSupported(false);
long when = registerAttention();
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 911c4a2..1bda412 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -18,44 +18,67 @@
import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.ActivityManagerInternal;
import android.attention.AttentionManagerInternal;
import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.hardware.SensorManager;
+import android.hardware.display.AmbientDisplayConfiguration;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
+import android.os.BatteryManager;
import android.os.BatteryManagerInternal;
import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.os.SystemClock;
import android.os.SystemProperties;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import androidx.test.InstrumentationRegistry;
import com.android.internal.app.IBatteryStats;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.lights.LightsManager;
import com.android.server.policy.WindowManagerPolicy;
+import com.android.server.power.PowerManagerService.BatteryReceiver;
import com.android.server.power.PowerManagerService.Injector;
import com.android.server.power.PowerManagerService.NativeWrapper;
+import com.android.server.power.PowerManagerService.UserSwitchedReceiver;
import com.android.server.power.batterysaver.BatterySaverPolicy;
import com.android.server.power.batterysaver.BatterySavingStats;
-import org.junit.Rule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -65,29 +88,54 @@
/**
* Tests for {@link com.android.server.power.PowerManagerService}
*/
-public class PowerManagerServiceTest extends AndroidTestCase {
+public class PowerManagerServiceTest {
private static final float PRECISION = 0.001f;
private static final float BRIGHTNESS_FACTOR = 0.7f;
private static final boolean BATTERY_SAVER_ENABLED = true;
private static final String TEST_LAST_REBOOT_PROPERTY = "test.sys.boot.reason";
- private @Mock BatterySaverPolicy mBatterySaverPolicyMock;
- private @Mock LightsManager mLightsManagerMock;
- private @Mock DisplayManagerInternal mDisplayManagerInternalMock;
- private @Mock BatteryManagerInternal mBatteryManagerInternalMock;
- private @Mock ActivityManagerInternal mActivityManagerInternalMock;
- private @Mock AttentionManagerInternal mAttentionManagerInternalMock;
- private @Mock PowerManagerService.NativeWrapper mNativeWrapperMock;
- private @Mock Notifier mNotifierMock;
+ @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
+ @Mock private LightsManager mLightsManagerMock;
+ @Mock private DisplayManagerInternal mDisplayManagerInternalMock;
+ @Mock private BatteryManagerInternal mBatteryManagerInternalMock;
+ @Mock private ActivityManagerInternal mActivityManagerInternalMock;
+ @Mock private AttentionManagerInternal mAttentionManagerInternalMock;
+ @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
+ @Mock private Notifier mNotifierMock;
+ @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
+ @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
+
private PowerManagerService mService;
private PowerSaveState mPowerSaveState;
private DisplayPowerRequest mDisplayPowerRequest;
+ private ContextWrapper mContextSpy;
+ private BatteryReceiver mBatteryReceiver;
+ private UserSwitchedReceiver mUserSwitchedReceiver;
+ private Resources mResourcesSpy;
+ private class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> {
+ private final IntentFilter mFilter;
+ IntentFilterMatcher(IntentFilter filter) {
+ mFilter = filter;
+ }
- @Rule
+ @Override
+ public boolean matches(IntentFilter other) {
+ if (other.countActions() != mFilter.countActions()) {
+ return false;
+ }
+ for (int i = 0; i < mFilter.countActions(); i++) {
+ if (!mFilter.getAction(i).equals(other.getAction(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ @Before
public void setUp() throws Exception {
- super.setUp();
MockitoAnnotations.initMocks(this);
mPowerSaveState = new PowerSaveState.Builder()
@@ -105,33 +153,54 @@
addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
addLocalServiceMock(AttentionManagerInternal.class, mAttentionManagerInternalMock);
- mService = new PowerManagerService(getContext(), new Injector() {
+ mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+ mResourcesSpy = spy(mContextSpy.getResources());
+ when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
+
+ mService = new PowerManagerService(mContextSpy, new Injector() {
+ @Override
Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
SuspendBlocker suspendBlocker, WindowManagerPolicy policy) {
return mNotifierMock;
}
+ @Override
SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
return mock(SuspendBlocker.class);
}
+ @Override
BatterySaverPolicy createBatterySaverPolicy(
Object lock, Context context, BatterySavingStats batterySavingStats) {
return mBatterySaverPolicyMock;
}
+ @Override
NativeWrapper createNativeWrapper() {
return mNativeWrapperMock;
}
+
+ @Override
+ WirelessChargerDetector createWirelessChargerDetector(
+ SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+ return mWirelessChargerDetectorMock;
+ }
+
+ @Override
+ AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+ return mAmbientDisplayConfigurationMock;
+ }
});
}
- @Override
+ @After
public void tearDown() throws Exception {
LocalServices.removeServiceForTest(LightsManager.class);
LocalServices.removeServiceForTest(DisplayManagerInternal.class);
LocalServices.removeServiceForTest(BatteryManagerInternal.class);
LocalServices.removeServiceForTest(ActivityManagerInternal.class);
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
}
/**
@@ -142,7 +211,56 @@
LocalServices.addService(clazz, mock);
}
- @SmallTest
+ private void startSystem() throws Exception {
+ mService.systemReady(null);
+
+ // Grab the BatteryReceiver
+ ArgumentCaptor<BatteryReceiver> batCaptor = ArgumentCaptor.forClass(BatteryReceiver.class);
+ IntentFilter batFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ batFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ verify(mContextSpy).registerReceiver(batCaptor.capture(),
+ argThat(new IntentFilterMatcher(batFilter)), isNull(), isA(Handler.class));
+ mBatteryReceiver = batCaptor.getValue();
+
+ // Grab the UserSwitchedReceiver
+ ArgumentCaptor<UserSwitchedReceiver> userSwitchedCaptor =
+ ArgumentCaptor.forClass(UserSwitchedReceiver.class);
+ IntentFilter usFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
+ verify(mContextSpy).registerReceiver(userSwitchedCaptor.capture(),
+ argThat(new IntentFilterMatcher(usFilter)), isNull(), isA(Handler.class));
+ mUserSwitchedReceiver = userSwitchedCaptor.getValue();
+
+ mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+ }
+
+ private void forceSleep() {
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+ }
+
+ private void forceDream() {
+ mService.getBinderServiceInstance().nap(SystemClock.uptimeMillis());
+ }
+
+ private void forceAwake() {
+ mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(),
+ PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+ }
+
+ private void forceDozing() {
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+ }
+
+ private void setPluggedIn(boolean isPluggedIn) {
+ // Set the callback to return the new state
+ when(mBatteryManagerInternalMock.isPowered(BatteryManager.BATTERY_PLUGGED_ANY))
+ .thenReturn(isPluggedIn);
+ // Trigger PowerManager to reread the plug-in state
+ mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
+ }
+
+ @Test
public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() {
mService.updatePowerRequestFromBatterySaverPolicy(mDisplayPowerRequest);
assertThat(mDisplayPowerRequest.lowPowerMode).isEqualTo(BATTERY_SAVER_ENABLED);
@@ -150,7 +268,7 @@
.isWithin(PRECISION).of(BRIGHTNESS_FACTOR);
}
- @SmallTest
+ @Test
public void testGetLastShutdownReasonInternal() {
SystemProperties.set(TEST_LAST_REBOOT_PROPERTY, "shutdown,thermal");
int reason = mService.getLastShutdownReasonInternal(TEST_LAST_REBOOT_PROPERTY);
@@ -158,7 +276,7 @@
assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN);
}
- @SmallTest
+ @Test
public void testGetDesiredScreenPolicy_WithVR() throws Exception {
// Brighten up the screen
mService.setWakefulnessLocked(WAKEFULNESS_AWAKE, PowerManager.WAKE_REASON_UNKNOWN, 0);
@@ -187,42 +305,171 @@
DisplayPowerRequest.POLICY_BRIGHT);
}
- @SmallTest
+ @Test
public void testWakefulnessAwake_InitialValue() throws Exception {
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
}
- @SmallTest
+ @Test
public void testWakefulnessSleep_NoDozeSleepFlag() throws Exception {
// Start with AWAKE state
+ startSystem();
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
- mService.systemReady(null);
- mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
- // Take a nap with a flag.
+ // Take a nap and verify.
mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
- PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
}
- @MediumTest
+ @Test
+ public void testWakefulnessAwake_AcquireCausesWakeup() throws Exception {
+ startSystem();
+ forceSleep();
+
+ IBinder token = new Binder();
+ String tag = "acq_causes_wakeup";
+ String packageName = "pkg.name";
+
+ // First, ensure that a normal full wake lock does not cause a wakeup
+ int flags = PowerManager.FULL_WAKE_LOCK;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+ // Ensure that the flag does *NOT* work with a partial wake lock.
+ flags = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+ // Verify that flag forces a wakeup when paired to a FULL_WAKE_LOCK
+ flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+ }
+
+ @Test
+ public void testWakefulnessAwake_IPowerManagerWakeUp() throws Exception {
+ startSystem();
+ forceSleep();
+ mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(),
+ PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ }
+
+ /**
+ * Tests a series of variants that control whether a device wakes-up when it is plugged in
+ * or docked.
+ */
+ @Test
+ public void testWakefulnessAwake_ShouldWakeUpWhenPluggedIn() throws Exception {
+ boolean powerState;
+ startSystem();
+ forceSleep();
+
+ // Test 1:
+ // Set config to prevent it wake up, test, verify, reset config value.
+ when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+ .thenReturn(false);
+ mService.readConfigurationLocked();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+ .thenReturn(true);
+ mService.readConfigurationLocked();
+
+ // Test 2:
+ // Turn the power off, sleep, then plug into a wireless charger.
+ // Verify that we do not wake up if the phone is being plugged into a wireless charger.
+ setPluggedIn(false);
+ forceSleep();
+ when(mBatteryManagerInternalMock.getPlugType())
+ .thenReturn(BatteryManager.BATTERY_PLUGGED_WIRELESS);
+ when(mWirelessChargerDetectorMock.update(true /* isPowered */,
+ BatteryManager.BATTERY_PLUGGED_WIRELESS)).thenReturn(false);
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+ // Test 3:
+ // Do not wake up if the phone is being REMOVED from a wireless charger
+ when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+ // Test 4:
+ // Do not wake if we are dreaming.
+ forceAwake(); // Needs to be awake first before it can dream.
+ forceDream();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DREAMING);
+ forceSleep();
+
+ // Test 5:
+ // Don't wake if the device is configured not to wake up in theater mode (and theater
+ // mode is enabled).
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 1);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+ when(mResourcesSpy.getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug))
+ .thenReturn(false);
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+
+ // Test 6:
+ // Don't wake up if we are Dozing away and always-on is enabled.
+ when(mAmbientDisplayConfigurationMock.alwaysOnEnabled(UserHandle.USER_CURRENT))
+ .thenReturn(true);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+ forceAwake();
+ forceDozing();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+
+ // Test 7:
+ // Finally, take away all the factors above and ensure the device wakes up!
+ forceAwake();
+ forceSleep();
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ }
+
+ @Test
+ public void testWakefulnessDoze_goToSleep() throws Exception {
+ // Start with AWAKE state
+ startSystem();
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+
+ // Take a nap and verify.
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+ }
+
+ @Test
public void testWasDeviceIdleFor_true() {
int interval = 1000;
mService.onUserActivity();
- SystemClock.sleep(interval);
+ SystemClock.sleep(interval + 1 /* just a little more */);
assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue();
}
- @SmallTest
+ @Test
public void testWasDeviceIdleFor_false() {
int interval = 1000;
mService.onUserActivity();
assertThat(mService.wasDeviceIdleForInternal(interval)).isFalse();
}
- @SmallTest
+ @Test
public void testForceSuspend_putsDeviceToSleep() {
mService.systemReady(null);
mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
@@ -244,11 +491,11 @@
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
}
- @SmallTest
+ @Test
public void testForceSuspend_pakeLocksDisabled() {
final String tag = "TestWakelockTag_098213";
final int flags = PowerManager.PARTIAL_WAKE_LOCK;
- final String pkg = getContext().getOpPackageName();
+ final String pkg = mContextSpy.getOpPackageName();
// Set up the Notification mock to keep track of the wakelocks that are currently
// active or disabled. We'll use this to verify that wakelocks are disabled when
@@ -292,7 +539,7 @@
}
- @SmallTest
+ @Test
public void testForceSuspend_forceSuspendFailurePropogated() {
when(mNativeWrapperMock.nativeForceSuspend()).thenReturn(false);
assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse();
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
index 2c575f5..68b40b9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -18,11 +18,11 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.content.ActivityInfoProto.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
@@ -42,12 +42,16 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.verify;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
+import android.view.Display;
import android.view.Surface;
import android.view.WindowManager;
@@ -55,6 +59,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* Tests for the {@link AppWindowToken} class.
@@ -332,6 +337,46 @@
}
@Test
+ public void testReportOrientationChangeOnVisibilityChange() {
+ synchronized (mWm.mGlobalLock) {
+ mToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDisplayContent.getDisplayRotation().setFixedToUserRotation(
+ DisplayRotation.FIXED_TO_USER_ROTATION_ENABLED);
+
+ doReturn(Configuration.ORIENTATION_LANDSCAPE).when(mToken.mActivityRecord)
+ .getRequestedConfigurationOrientation();
+
+ mTask.mTaskRecord = Mockito.mock(TaskRecord.class, RETURNS_DEEP_STUBS);
+ mToken.commitVisibility(null, false /* visible */, TRANSIT_UNSET,
+ true /* performLayout */, false /* isVoiceInteraction */);
+ }
+
+ verify(mTask.mTaskRecord).onConfigurationChanged(any(Configuration.class));
+ }
+
+ @Test
+ public void testReportOrientationChangeOnOpeningClosingAppChange() {
+ synchronized (mWm.mGlobalLock) {
+ mToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDisplayContent.getDisplayRotation().setFixedToUserRotation(
+ DisplayRotation.FIXED_TO_USER_ROTATION_ENABLED);
+ mDisplayContent.getDisplayInfo().state = Display.STATE_ON;
+ mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_CLOSE,
+ false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
+
+ doReturn(Configuration.ORIENTATION_LANDSCAPE).when(mToken.mActivityRecord)
+ .getRequestedConfigurationOrientation();
+
+ mTask.mTaskRecord = Mockito.mock(TaskRecord.class, RETURNS_DEEP_STUBS);
+ mToken.setVisibility(false, false);
+ }
+
+ verify(mTask.mTaskRecord).onConfigurationChanged(any(Configuration.class));
+ }
+
+ @Test
public void testCreateRemoveStartingWindow() {
mToken.addStartingWindow(mPackageName,
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
index 6cce9f0..c483489 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
@@ -213,7 +213,8 @@
final Animation a = new TranslateAnimation(-10, 10, 0, 0);
a.initialize(0, 0, 0, 0);
a.setDuration(50);
- return new WindowAnimationSpec(a, new Point(0, 0), false /* canSkipFirstFrame */);
+ return new WindowAnimationSpec(a, new Point(0, 0), false /* canSkipFirstFrame */,
+ 0 /* windowCornerRadius */);
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java b/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
index 9a825e0..897f0a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
@@ -24,6 +24,8 @@
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.when;
import android.graphics.Point;
import android.graphics.Rect;
@@ -56,7 +58,7 @@
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_NONE,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(windowCrop)));
@@ -66,7 +68,7 @@
public void testApply_clipAfter() {
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_AFTER_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@@ -76,8 +78,7 @@
// Stack bounds is (0, 0, 10, 10) position is (20, 40)
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation,
new Point(20, 40), mStackBounds, false /* canSkipFirstFrame */,
- STACK_CLIP_AFTER_ANIM,
- true /* isAppAnimation */);
+ STACK_CLIP_AFTER_ANIM, true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@@ -87,7 +88,7 @@
// Stack bounds is (0, 0, 10, 10) animation clip is (0, 0, 0, 0)
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(mStackBounds)));
@@ -101,19 +102,32 @@
a.initialize(0, 0, 0, 0);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
null, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@Test
+ public void testApply_setCornerRadius() {
+ final float windowCornerRadius = 30f;
+ WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
+ mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
+ true /* isAppAnimation */, windowCornerRadius);
+ windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
+ verify(mTransaction, never()).setCornerRadius(eq(mSurfaceControl), eq(windowCornerRadius));
+ when(mAnimation.hasRoundedCorners()).thenReturn(true);
+ windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
+ verify(mTransaction).setCornerRadius(eq(mSurfaceControl), eq(windowCornerRadius));
+ }
+
+ @Test
public void testApply_clipBeforeSmallerAnimationClip() {
// Stack bounds is (0, 0, 10, 10) animation clip is (0, 0, 5, 5)
Rect windowCrop = new Rect(0, 0, 5, 5);
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(windowCrop)));
@@ -126,7 +140,7 @@
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(mStackBounds)));
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
index da1defa..0dec8ee 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
@@ -82,6 +82,8 @@
}, new ComponentName("", ""), false, dc, true /* fillsParent */);
mTargetSdk = Build.VERSION_CODES.CUR_DEVELOPMENT;
mSkipOnParentChanged = skipOnParentChanged;
+ mActivityRecord = mock(ActivityRecord.class);
+ mActivityRecord.app = mock(WindowProcessController.class);
}
int getWindowsCount() {
diff --git a/services/usage/java/com/android/server/usage/AppStandbyController.java b/services/usage/java/com/android/server/usage/AppStandbyController.java
index 65ed85d..ffafb6d 100644
--- a/services/usage/java/com/android/server/usage/AppStandbyController.java
+++ b/services/usage/java/com/android/server/usage/AppStandbyController.java
@@ -35,6 +35,7 @@
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYNC_ADAPTER;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYSTEM_INTERACTION;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYSTEM_UPDATE;
+import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_USER_INTERACTION;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_ACTIVE;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_EXEMPTED;
@@ -197,7 +198,7 @@
static final int MSG_ONE_TIME_CHECK_IDLE_STATES = 10;
/** Check the state of one app: arg1 = userId, arg2 = uid, obj = (String) packageName */
static final int MSG_CHECK_PACKAGE_IDLE_STATE = 11;
- static final int MSG_REPORT_EXEMPTED_SYNC_SCHEDULED = 12;
+ static final int MSG_REPORT_SYNC_SCHEDULED = 12;
static final int MSG_REPORT_EXEMPTED_SYNC_START = 13;
static final int MSG_UPDATE_STABLE_CHARGING= 14;
@@ -231,6 +232,10 @@
* Maximum time an exempted sync should keep the buckets elevated, when sync is started.
*/
long mExemptedSyncStartTimeoutMillis;
+ /**
+ * Maximum time an unexempted sync should keep the buckets elevated, when sync is scheduled
+ */
+ long mUnexemptedSyncScheduledTimeoutMillis;
/** Maximum time a system interaction should keep the buckets elevated. */
long mSystemInteractionTimeoutMillis;
/** The length of time phone must be charging before considered stable enough to run jobs */
@@ -447,6 +452,25 @@
}
}
+ void reportUnexemptedSyncScheduled(String packageName, int userId) {
+ if (!mAppIdleEnabled) return;
+
+ final long elapsedRealtime = mInjector.elapsedRealtime();
+ synchronized (mAppIdleLock) {
+ final int currentBucket =
+ mAppIdleHistory.getAppStandbyBucket(packageName, userId, elapsedRealtime);
+ if (currentBucket == STANDBY_BUCKET_NEVER) {
+ // Bring the app out of the never bucket
+ AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
+ STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED,
+ 0,
+ elapsedRealtime + mUnexemptedSyncScheduledTimeoutMillis);
+ maybeInformListeners(packageName, userId, elapsedRealtime,
+ appUsage.currentBucket, appUsage.bucketingReason, false);
+ }
+ }
+ }
+
void reportExemptedSyncStart(String packageName, int userId) {
if (!mAppIdleEnabled) return;
@@ -1423,8 +1447,8 @@
.sendToTarget();
}
- void postReportExemptedSyncScheduled(String packageName, int userId) {
- mHandler.obtainMessage(MSG_REPORT_EXEMPTED_SYNC_SCHEDULED, userId, 0, packageName)
+ void postReportSyncScheduled(String packageName, int userId, boolean exempted) {
+ mHandler.obtainMessage(MSG_REPORT_SYNC_SCHEDULED, userId, exempted ? 1 : 0, packageName)
.sendToTarget();
}
@@ -1492,6 +1516,9 @@
pw.print(" mExemptedSyncStartTimeoutMillis=");
TimeUtils.formatDuration(mExemptedSyncStartTimeoutMillis, pw);
pw.println();
+ pw.print(" mUnexemptedSyncScheduledTimeoutMillis=");
+ TimeUtils.formatDuration(mUnexemptedSyncScheduledTimeoutMillis, pw);
+ pw.println();
pw.print(" mSystemUpdateUsageTimeoutMillis=");
TimeUtils.formatDuration(mSystemUpdateUsageTimeoutMillis, pw);
@@ -1706,8 +1733,13 @@
mInjector.elapsedRealtime());
break;
- case MSG_REPORT_EXEMPTED_SYNC_SCHEDULED:
- reportExemptedSyncScheduled((String) msg.obj, msg.arg1);
+ case MSG_REPORT_SYNC_SCHEDULED:
+ final boolean exempted = msg.arg1 > 0 ? true : false;
+ if (exempted) {
+ reportExemptedSyncScheduled((String) msg.obj, msg.arg1);
+ } else {
+ reportUnexemptedSyncScheduled((String) msg.obj, msg.arg1);
+ }
break;
case MSG_REPORT_EXEMPTED_SYNC_START:
@@ -1799,12 +1831,14 @@
"system_update_usage_duration";
private static final String KEY_PREDICTION_TIMEOUT = "prediction_timeout";
private static final String KEY_SYNC_ADAPTER_HOLD_DURATION = "sync_adapter_duration";
- private static final String KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION
- = "exempted_sync_scheduled_nd_duration";
- private static final String KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION
- = "exempted_sync_scheduled_d_duration";
- private static final String KEY_EXEMPTED_SYNC_START_HOLD_DURATION
- = "exempted_sync_start_duration";
+ private static final String KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION =
+ "exempted_sync_scheduled_nd_duration";
+ private static final String KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION =
+ "exempted_sync_scheduled_d_duration";
+ private static final String KEY_EXEMPTED_SYNC_START_HOLD_DURATION =
+ "exempted_sync_start_duration";
+ private static final String KEY_UNEXEMPTED_SYNC_SCHEDULED_HOLD_DURATION =
+ "unexempted_sync_scheduled_duration";
private static final String KEY_SYSTEM_INTERACTION_HOLD_DURATION =
"system_interaction_duration";
private static final String KEY_STABLE_CHARGING_THRESHOLD = "stable_charging_threshold";
@@ -1816,6 +1850,7 @@
public static final long DEFAULT_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_TIMEOUT = 10 * ONE_MINUTE;
public static final long DEFAULT_EXEMPTED_SYNC_SCHEDULED_DOZE_TIMEOUT = 4 * ONE_HOUR;
public static final long DEFAULT_EXEMPTED_SYNC_START_TIMEOUT = 10 * ONE_MINUTE;
+ public static final long DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT = 10 * ONE_MINUTE;
public static final long DEFAULT_STABLE_CHARGING_THRESHOLD = 10 * ONE_MINUTE;
private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -1883,42 +1918,47 @@
ELAPSED_TIME_THRESHOLDS);
mCheckIdleIntervalMillis = Math.min(mAppStandbyElapsedThresholds[1] / 4,
COMPRESS_TIME ? ONE_MINUTE : 4 * 60 * ONE_MINUTE); // 4 hours
- mStrongUsageTimeoutMillis = mParser.getDurationMillis
- (KEY_STRONG_USAGE_HOLD_DURATION,
+ mStrongUsageTimeoutMillis = mParser.getDurationMillis(
+ KEY_STRONG_USAGE_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STRONG_USAGE_TIMEOUT);
- mNotificationSeenTimeoutMillis = mParser.getDurationMillis
- (KEY_NOTIFICATION_SEEN_HOLD_DURATION,
+ mNotificationSeenTimeoutMillis = mParser.getDurationMillis(
+ KEY_NOTIFICATION_SEEN_HOLD_DURATION,
COMPRESS_TIME ? 12 * ONE_MINUTE : DEFAULT_NOTIFICATION_TIMEOUT);
- mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis
- (KEY_SYSTEM_UPDATE_HOLD_DURATION,
+ mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYSTEM_UPDATE_HOLD_DURATION,
COMPRESS_TIME ? 2 * ONE_MINUTE : DEFAULT_SYSTEM_UPDATE_TIMEOUT);
- mPredictionTimeoutMillis = mParser.getDurationMillis
- (KEY_PREDICTION_TIMEOUT,
+ mPredictionTimeoutMillis = mParser.getDurationMillis(
+ KEY_PREDICTION_TIMEOUT,
COMPRESS_TIME ? 10 * ONE_MINUTE : DEFAULT_PREDICTION_TIMEOUT);
- mSyncAdapterTimeoutMillis = mParser.getDurationMillis
- (KEY_SYNC_ADAPTER_HOLD_DURATION,
+ mSyncAdapterTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYNC_ADAPTER_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYNC_ADAPTER_TIMEOUT);
- mExemptedSyncScheduledNonDozeTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION,
+ mExemptedSyncScheduledNonDozeTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION,
COMPRESS_TIME ? (ONE_MINUTE / 2)
: DEFAULT_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_TIMEOUT);
- mExemptedSyncScheduledDozeTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
+ mExemptedSyncScheduledDozeTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE
: DEFAULT_EXEMPTED_SYNC_SCHEDULED_DOZE_TIMEOUT);
- mExemptedSyncStartTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_START_HOLD_DURATION,
+ mExemptedSyncStartTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_START_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE
: DEFAULT_EXEMPTED_SYNC_START_TIMEOUT);
- mSystemInteractionTimeoutMillis = mParser.getDurationMillis
- (KEY_SYSTEM_INTERACTION_HOLD_DURATION,
+ mUnexemptedSyncScheduledTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
+ COMPRESS_TIME ? ONE_MINUTE
+ : DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT); // TODO
+
+ mSystemInteractionTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYSTEM_INTERACTION_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYSTEM_INTERACTION_TIMEOUT);
- mStableChargingThresholdMillis = mParser.getDurationMillis
- (KEY_STABLE_CHARGING_THRESHOLD,
+ mStableChargingThresholdMillis = mParser.getDurationMillis(
+ KEY_STABLE_CHARGING_THRESHOLD,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STABLE_CHARGING_THRESHOLD);
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index ebb0210..b14d722 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -1751,8 +1751,8 @@
}
@Override
- public void reportExemptedSyncScheduled(String packageName, int userId) {
- mAppStandby.postReportExemptedSyncScheduled(packageName, userId);
+ public void reportSyncScheduled(String packageName, int userId, boolean exempted) {
+ mAppStandby.postReportSyncScheduled(packageName, userId, exempted);
}
@Override
diff --git a/telecomm/java/android/telecom/ConnectionRequest.java b/telecomm/java/android/telecom/ConnectionRequest.java
index b6e6b0e..d69d2cd 100644
--- a/telecomm/java/android/telecom/ConnectionRequest.java
+++ b/telecomm/java/android/telecom/ConnectionRequest.java
@@ -337,7 +337,31 @@
mAddress == null
? Uri.EMPTY
: Connection.toLogSafePhoneNumber(mAddress.toString()),
- mExtras == null ? "" : mExtras);
+ bundleToString(mExtras));
+ }
+
+ private static String bundleToString(Bundle extras){
+ if (extras == null) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append("Bundle[");
+ for (String key : extras.keySet()) {
+ sb.append(key);
+ sb.append("=");
+ switch (key) {
+ case TelecomManager.EXTRA_INCOMING_CALL_ADDRESS:
+ case TelecomManager.EXTRA_UNKNOWN_CALL_HANDLE:
+ sb.append(Log.pii(extras.get(key)));
+ break;
+ default:
+ sb.append(extras.get(key));
+ break;
+ }
+ sb.append(", ");
+ }
+ sb.append("]");
+ return sb.toString();
}
public static final Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () {
diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java
index fecdb08..79b7807 100644
--- a/telephony/java/android/provider/Telephony.java
+++ b/telephony/java/android/provider/Telephony.java
@@ -17,6 +17,7 @@
package android.provider;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -4340,6 +4341,7 @@
* @param subscriptionId the subscriptionId to receive updates on
* @return the Uri used to observe precise carrier identity changes
*/
+ @NonNull
public static Uri getPreciseCarrierIdUriForSubscriptionId(int subscriptionId) {
return Uri.withAppendedPath(Uri.withAppendedPath(CONTENT_URI, "precise"),
String.valueOf(subscriptionId));
diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java
index 856f081..19bc0ce 100644
--- a/telephony/java/android/telephony/CellIdentityNr.java
+++ b/telephony/java/android/telephony/CellIdentityNr.java
@@ -81,7 +81,8 @@
/**
* Get the NR Cell Identity.
*
- * @return The NR Cell Identity in range [0, 68719476735] or Long.MAX_VALUE if unknown.
+ * @return The 36-bit NR Cell Identity in range [0, 68719476735] or
+ * {@link CellInfo#UNAVAILABLE_LONG} if unknown.
*/
public long getNci() {
return mNci;
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index 8ce5c54..c7853f1 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -40,6 +40,11 @@
public static final int UNAVAILABLE = Integer.MAX_VALUE;
/**
+ * This value indicates that the long field is unreported.
+ */
+ public static final long UNAVAILABLE_LONG = Long.MAX_VALUE;
+
+ /**
* Cell identity type
* @hide
*/
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index bb0673f..5fd36f4 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -609,7 +609,7 @@
@RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))
@SystemApi
public void onPreciseDataConnectionStateChanged(
- PreciseDataConnectionState dataConnectionState) {
+ @NonNull PreciseDataConnectionState dataConnectionState) {
// default implementation empty
}
diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java
index 57a1826..d593678 100644
--- a/telephony/java/android/telephony/PreciseDataConnectionState.java
+++ b/telephony/java/android/telephony/PreciseDataConnectionState.java
@@ -16,6 +16,8 @@
package android.telephony;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.net.LinkProperties;
@@ -25,6 +27,7 @@
import java.util.Objects;
+
/**
* Contains precise data connection state.
*
@@ -119,6 +122,7 @@
/**
* Returns APN {@link ApnSetting} of this data connection.
*/
+ @Nullable
public String getDataConnectionApn() {
return mAPN;
}
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index d6d3a89..e0b7fc4 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -154,6 +154,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ENABLED_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc");
@@ -172,6 +173,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri ADVANCED_CALLING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "advanced_calling");
@@ -189,6 +191,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_MODE_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc_mode");
@@ -205,6 +208,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ROAMING_MODE_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_mode");
@@ -223,6 +227,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri VT_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "vt_enabled");
@@ -240,6 +245,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ROAMING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_enabled");
diff --git a/telephony/java/android/telephony/ims/ImsConferenceState.java b/telephony/java/android/telephony/ims/ImsConferenceState.java
index 66d2f8d..8af8cff 100644
--- a/telephony/java/android/telephony/ims/ImsConferenceState.java
+++ b/telephony/java/android/telephony/ims/ImsConferenceState.java
@@ -16,17 +16,18 @@
package android.telephony.ims;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map.Entry;
-import java.util.Set;
-
import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.telecom.Call;
import android.telecom.Connection;
+import android.telecom.Log;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
/**
* Provides the conference information (defined in RFC 4575) for IMS conference call.
@@ -189,7 +190,7 @@
sb.append("<");
while (iterator.hasNext()) {
Entry<String, Bundle> entry = iterator.next();
- sb.append(entry.getKey());
+ sb.append(Log.pii(entry.getKey()));
sb.append(": ");
Bundle participantData = entry.getValue();
@@ -197,7 +198,7 @@
sb.append(key);
sb.append("=");
if (ENDPOINT.equals(key) || USER.equals(key)) {
- sb.append(android.telecom.Log.pii(participantData.get(key)));
+ sb.append(Log.pii(participantData.get(key)));
} else {
sb.append(participantData.get(key));
}
diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java
index eb99d5d..bb85be1 100644
--- a/telephony/java/android/telephony/ims/ImsMmTelManager.java
+++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java
@@ -139,7 +139,7 @@
if (mLocalCallback == null) return;
Binder.withCleanCallingIdentity(() ->
- mExecutor.execute(() -> mLocalCallback.onDeregistered(info)));
+ mExecutor.execute(() -> mLocalCallback.onUnregistered(info)));
}
@Override
@@ -199,7 +199,7 @@
*
* @param info the {@link ImsReasonInfo} associated with why registration was disconnected.
*/
- public void onDeregistered(ImsReasonInfo info) {
+ public void onUnregistered(ImsReasonInfo info) {
}
/**
@@ -485,7 +485,7 @@
* @see android.telephony.CarrierConfigManager#KEY_HIDE_ENHANCED_4G_LTE_BOOL
* @see android.telephony.CarrierConfigManager#KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL
* @see android.telephony.CarrierConfigManager#KEY_CARRIER_VOLTE_AVAILABLE_BOOL
- * @see #setAdvancedCallingSetting(boolean)
+ * @see #setAdvancedCallingSettingEnabled(boolean)
* @return true if the user's setting for advanced calling is enabled, false otherwise.
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
@@ -519,9 +519,9 @@
* @see #isAdvancedCallingSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setAdvancedCallingSetting(boolean isEnabled) {
+ public void setAdvancedCallingSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setAdvancedCallingSetting(mSubId, isEnabled);
+ getITelephony().setAdvancedCallingSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -589,7 +589,7 @@
/**
* The user's setting for whether or not they have enabled the "Video Calling" setting.
* @return true if the user’s “Video Calling” setting is currently enabled.
- * @see #setVtSetting(boolean)
+ * @see #setVtSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVtSettingEnabled() {
@@ -605,9 +605,9 @@
* @see #isVtSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVtSetting(boolean isEnabled) {
+ public void setVtSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVtSetting(mSubId, isEnabled);
+ getITelephony().setVtSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -616,7 +616,7 @@
/**
* @return true if the user's setting for Voice over WiFi is enabled and false if it is not.
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVoWiFiSettingEnabled() {
@@ -633,9 +633,9 @@
* @see #isVoWiFiSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVoWiFiSetting(boolean isEnabled) {
+ public void setVoWiFiSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVoWiFiSetting(mSubId, isEnabled);
+ getITelephony().setVoWiFiSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -645,7 +645,7 @@
/**
* @return true if the user's setting for Voice over WiFi while roaming is enabled, false
* if disabled.
- * @see #setVoWiFiRoamingSetting(boolean)
+ * @see #setVoWiFiRoamingSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVoWiFiRoamingSettingEnabled() {
@@ -663,9 +663,9 @@
* @see #isVoWiFiRoamingSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVoWiFiRoamingSetting(boolean isEnabled) {
+ public void setVoWiFiRoamingSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVoWiFiRoamingSetting(mSubId, isEnabled);
+ getITelephony().setVoWiFiRoamingSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -682,7 +682,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiNonPersistent(boolean isCapable, int mode) {
@@ -700,7 +700,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @WiFiCallingMode int getVoWiFiModeSetting() {
@@ -739,7 +739,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiRoamingSetting(boolean)
+ * @see #setVoWiFiRoamingSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @WiFiCallingMode int getVoWiFiRoamingModeSetting() {
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 0a8890f..5c5d44a 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1701,7 +1701,7 @@
/**
* Modify the user's setting for whether or not 4G LTE is enabled.
*/
- void setAdvancedCallingSetting(int subId, boolean isEnabled);
+ void setAdvancedCallingSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for VT is enabled for the subscription.
@@ -1711,7 +1711,7 @@
/**
* Modify the user's setting for whether or not VT is available for the subscrption specified.
*/
- void setVtSetting(int subId, boolean isEnabled);
+ void setVtSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for whether or not Voice over WiFi is currently enabled.
@@ -1721,7 +1721,7 @@
/**
* sets the user's setting for Voice over WiFi enabled state.
*/
- void setVoWiFiSetting(int subId, boolean isEnabled);
+ void setVoWiFiSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for Voice over WiFi while roaming is enabled.
@@ -1732,7 +1732,7 @@
* Sets the user's preference for whether or not Voice over WiFi is enabled for the current
* subscription while roaming.
*/
- void setVoWiFiRoamingSetting(int subId, boolean isEnabled);
+ void setVoWiFiRoamingSettingEnabled(int subId, boolean isEnabled);
/**
* Set the Voice over WiFi enabled state, but do not persist the setting.
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 77b7979..5205973 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -470,6 +470,7 @@
int RIL_REQUEST_START_KEEPALIVE = 144;
int RIL_REQUEST_STOP_KEEPALIVE = 145;
int RIL_REQUEST_ENABLE_MODEM = 146;
+ int RIL_REQUEST_GET_MODEM_STATUS = 147;
/* The following requests are not defined in RIL.h */
int RIL_REQUEST_HAL_NON_RIL_BASE = 200;
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
index 316aad3..818d899 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
@@ -53,7 +53,7 @@
MyPositionReporter(Context c) {
super(c);
mNode = new RenderNode("positionListener");
- mNode.requestPositionUpdates(this);
+ mNode.addPositionUpdateListener(this);
setTextAlignment(TEXT_ALIGNMENT_VIEW_START);
}
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index 129416f..1a0e8fa 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -125,6 +125,7 @@
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
import android.net.NetworkStackClient;
+import android.net.NetworkState;
import android.net.NetworkUtils;
import android.net.ProxyInfo;
import android.net.RouteInfo;
@@ -157,6 +158,7 @@
import android.util.SparseArray;
import com.android.internal.net.VpnConfig;
+import com.android.internal.net.VpnInfo;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.WakeupMessage;
import com.android.internal.util.test.BroadcastInterceptingContext;
@@ -4362,48 +4364,91 @@
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
- Network[] onlyCell = new Network[]{mCellNetworkAgent.getNetwork()};
- Network[] onlyWifi = new Network[]{mWiFiNetworkAgent.getNetwork()};
+ Network[] onlyCell = new Network[] {mCellNetworkAgent.getNetwork()};
+ Network[] onlyWifi = new Network[] {mWiFiNetworkAgent.getNetwork()};
+
+ LinkProperties cellLp = new LinkProperties();
+ cellLp.setInterfaceName(MOBILE_IFNAME);
+ LinkProperties wifiLp = new LinkProperties();
+ wifiLp.setInterfaceName(WIFI_IFNAME);
// Simple connection should have updated ifaces
mCellNetworkAgent.connect(false);
+ mCellNetworkAgent.sendLinkProperties(cellLp);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Default network switch should update ifaces.
mWiFiNetworkAgent.connect(false);
+ mWiFiNetworkAgent.sendLinkProperties(wifiLp);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyWifi);
+ assertEquals(wifiLp, mService.getActiveLinkProperties());
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyWifi),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(WIFI_IFNAME));
reset(mStatsService);
// Disconnect should update ifaces.
mWiFiNetworkAgent.disconnect();
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Metered change should update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
mCellNetworkAgent.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Captive portal change shouldn't update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
waitForIdle();
- verify(mStatsService, never()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, never())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Roaming change should update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
}
diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
index f89f303..d91d3eb 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
@@ -70,7 +70,6 @@
import android.content.Context;
import android.content.Intent;
import android.net.DataUsageRequest;
-import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsSession;
import android.net.LinkProperties;
@@ -163,7 +162,6 @@
private @Mock INetworkManagementService mNetManager;
private @Mock NetworkStatsSettings mSettings;
- private @Mock IConnectivityManager mConnManager;
private @Mock IBinder mBinder;
private @Mock AlarmManager mAlarmManager;
private HandlerThread mHandlerThread;
@@ -205,7 +203,6 @@
Handler.Callback callback = new NetworkStatsService.HandlerCallback(mService);
mHandler = new Handler(mHandlerThread.getLooper(), callback);
mService.setHandler(mHandler, callback);
- mService.bindConnectivityManager(mConnManager);
mElapsedRealtime = 0L;
@@ -234,7 +231,6 @@
mNetManager = null;
mSettings = null;
- mConnManager = null;
mSession.close();
mService = null;
@@ -245,12 +241,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -289,12 +285,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -363,12 +359,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// modify some number on wifi, and trigger poll event
@@ -405,12 +401,12 @@
public void testUidStatsAcrossNetworks() throws Exception {
// pretend first mobile network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some traffic on first network
@@ -437,7 +433,7 @@
// disappearing, to verify we don't count backwards.
incrementCurrentTime(HOUR_IN_MILLIS);
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_2));
+ states = new NetworkState[] {buildMobile3gState(IMSI_2)};
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
.addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3)
@@ -446,7 +442,7 @@
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
forcePollAndWaitForIdle();
@@ -481,12 +477,12 @@
public void testUidRemovedIsMoved() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some traffic
@@ -540,12 +536,12 @@
public void testUid3g4gCombinedByTemplate() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some traffic
@@ -566,14 +562,14 @@
// now switch over to 4g network
incrementCurrentTime(HOUR_IN_MILLIS);
expectDefaultSettings();
- expectNetworkState(buildMobile4gState(TEST_IFACE2));
+ states = new NetworkState[] {buildMobile4gState(TEST_IFACE2)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
forcePollAndWaitForIdle();
@@ -598,12 +594,12 @@
public void testSummaryForAllUid() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some traffic for two apps
@@ -657,12 +653,12 @@
public void testDetailedUidStats() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
NetworkStats.Entry entry1 = new NetworkStats.Entry(
TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L);
@@ -700,13 +696,13 @@
stackedProp.setInterfaceName(stackedIface);
final NetworkState wifiState = buildWifiState();
wifiState.linkProperties.addStackedLink(stackedProp);
- expectNetworkState(wifiState);
+ NetworkState[] states = new NetworkState[] {wifiState};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
NetworkStats.Entry uidStats = new NetworkStats.Entry(
TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xF00D, 1024L, 8L, 512L, 4L, 0L);
@@ -745,12 +741,12 @@
public void testForegroundBackground() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some initial traffic
@@ -803,12 +799,12 @@
public void testMetered() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState(true /* isMetered */));
+ NetworkState[] states = new NetworkState[] {buildWifiState(true /* isMetered */)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some initial traffic
@@ -843,12 +839,13 @@
public void testRoaming() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1, true /* isRoaming */));
+ NetworkState[] states =
+ new NetworkState[] {buildMobile3gState(IMSI_1, true /* isRoaming */)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// Create some traffic
@@ -882,12 +879,12 @@
public void testTethering() throws Exception {
// pretend first mobile network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some tethering traffic
@@ -925,12 +922,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -1077,11 +1074,11 @@
expectBandwidthControlCheck();
}
- private void expectNetworkState(NetworkState... state) throws Exception {
- when(mConnManager.getAllNetworkState()).thenReturn(state);
-
- final LinkProperties linkProp = state.length > 0 ? state[0].linkProperties : null;
- when(mConnManager.getActiveLinkProperties()).thenReturn(linkProp);
+ private String getActiveIface(NetworkState... states) throws Exception {
+ if (states == null || states.length == 0 || states[0].linkProperties == null) {
+ return null;
+ }
+ return states[0].linkProperties.getInterfaceName();
}
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
@@ -1090,8 +1087,6 @@
private void expectNetworkStatsSummary(NetworkStats summary, NetworkStats tetherStats)
throws Exception {
- when(mConnManager.getAllVpnInfo()).thenReturn(new VpnInfo[0]);
-
expectNetworkStatsTethering(STATS_PER_IFACE, tetherStats);
expectNetworkStatsSummaryDev(summary.clone());
expectNetworkStatsSummaryXt(summary.clone());