diff --git a/Android.bp b/Android.bp index a41f8155d1914b7c3aa3a158cf6400e1383aea38..e28ae32c22f0db5aa97d35f3b2de639f76aad1cb 100755 --- a/Android.bp +++ b/Android.bp @@ -352,12 +352,8 @@ java_defaults { "core/java/android/service/chooser/IChooserTargetResult.aidl", "core/java/android/service/resolver/IResolverRankerService.aidl", "core/java/android/service/resolver/IResolverRankerResult.aidl", - "core/java/android/service/textclassifier/IConversationActionsCallback.aidl", - "core/java/android/service/textclassifier/ITextClassificationCallback.aidl", + "core/java/android/service/textclassifier/ITextClassifierCallback.aidl", "core/java/android/service/textclassifier/ITextClassifierService.aidl", - "core/java/android/service/textclassifier/ITextLanguageCallback.aidl", - "core/java/android/service/textclassifier/ITextLinksCallback.aidl", - "core/java/android/service/textclassifier/ITextSelectionCallback.aidl", "core/java/android/service/attention/IAttentionService.aidl", "core/java/android/service/attention/IAttentionCallback.aidl", "core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl", @@ -1790,3 +1786,10 @@ filegroup { ], } +// Creates an index of AIDL methods; used for adding UnsupportedAppUsage +// annotations to private apis +aidl_mapping { + name: "framework-aidl-mappings", + srcs: [":framework-defaults"], + output: "framework-aidl-mappings.txt" +} \ No newline at end of file diff --git a/api/current.txt b/api/current.txt index 35486e0f551963d41a8e8b6494004c7245eca1fe..1b805dc936b9aaa8f3c2300fd441e4c7f093ca94 100644 --- a/api/current.txt +++ b/api/current.txt @@ -287,6 +287,7 @@ package android { field public static final int alertDialogTheme = 16843529; // 0x1010309 field public static final int alignmentMode = 16843642; // 0x101037a field public static final int allContactsName = 16843468; // 0x10102cc + field public static final int allowAudioPlaybackCapture = 16844199; // 0x10105a7 field public static final int allowBackup = 16843392; // 0x1010280 field public static final int allowClearUserData = 16842757; // 0x1010005 field public static final int allowEmbedded = 16843765; // 0x10103f5 @@ -2925,7 +2926,7 @@ package android.accessibilityservice { field public static final int CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES = 64; // 0x40 field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2 field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DEFAULT = 1; // 0x1 field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff field public static final int FEEDBACK_AUDIBLE = 4; // 0x4 @@ -3019,7 +3020,7 @@ package android.accounts { ctor public Account(android.os.Parcel); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final String name; field public final String type; } @@ -3036,7 +3037,7 @@ package android.accounts { method public void onRequestContinued(); method public void onResult(android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class AccountManager { @@ -3153,7 +3154,7 @@ package android.accounts { method public int describeContents(); method public static android.accounts.AuthenticatorDescription newKey(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final int accountPreferencesId; field public final boolean customTokens; field public final int iconId; @@ -3980,7 +3981,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public long availMem; field public boolean lowMemory; field public long threshold; @@ -3993,7 +3994,7 @@ package android.app { method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); field public static final int CRASHED = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int NOT_RESPONDING = 2; // 0x2 field public static final int NO_ERROR = 0; // 0x0 field public int condition; @@ -4012,7 +4013,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public int affiliatedTaskId; field @Deprecated public CharSequence description; field @Deprecated public int id; @@ -4025,7 +4026,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public static final int IMPORTANCE_BACKGROUND = 400; // 0x190 field public static final int IMPORTANCE_CACHED = 400; // 0x190 field public static final int IMPORTANCE_CANT_SAVE_STATE = 350; // 0x15e @@ -4059,7 +4060,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_FOREGROUND = 2; // 0x2 field public static final int FLAG_PERSISTENT_PROCESS = 8; // 0x8 field public static final int FLAG_STARTED = 1; // 0x1 @@ -4085,7 +4086,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public CharSequence description; field @Deprecated public int id; field @Deprecated public int numRunning; @@ -4106,7 +4107,7 @@ package android.app { method public int getPrimaryColor(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ActivityOptions { @@ -4167,7 +4168,7 @@ package android.app { method public android.app.PendingIntent getShowIntent(); method public long getTriggerTime(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static interface AlarmManager.OnAlarmListener { @@ -4267,6 +4268,7 @@ package android.app { method public int noteOpNoThrow(String, int, String); method public int noteProxyOp(String, String); method public int noteProxyOpNoThrow(String, String); + method public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int); method public static String permissionToOp(String); method public int startOp(String, int, String); method public int startOpNoThrow(String, int, String); @@ -4275,7 +4277,8 @@ package android.app { method public void stopWatchingMode(android.app.AppOpsManager.OnOpChangedListener); method public int unsafeCheckOp(String, int, String); method public int unsafeCheckOpNoThrow(String, int, String); - method public int unsafeCheckOpRaw(String, int, String); + method public int unsafeCheckOpRaw(@NonNull String, int, String); + method public int unsafeCheckOpRawNoThrow(@NonNull String, int, @NonNull String); field public static final int MODE_ALLOWED = 0; // 0x0 field public static final int MODE_DEFAULT = 3; // 0x3 field public static final int MODE_ERRORED = 2; // 0x2 @@ -4371,7 +4374,7 @@ package android.app { method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, String, int); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ANR = 2; // 0x2 field public static final int TYPE_BATTERY = 3; // 0x3 field public static final int TYPE_CRASH = 1; // 0x1 @@ -4439,12 +4442,12 @@ package android.app { method public int describeContents(); method public android.app.PendingIntent getUserAction(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AutomaticZenRule implements android.os.Parcelable { ctor @Deprecated public AutomaticZenRule(String, android.content.ComponentName, android.net.Uri, int, boolean); - ctor public AutomaticZenRule(String, android.content.ComponentName, android.content.ComponentName, android.net.Uri, android.service.notification.ZenPolicy, int, boolean); + ctor public AutomaticZenRule(@NonNull String, @Nullable android.content.ComponentName, @Nullable android.content.ComponentName, @NonNull android.net.Uri, @Nullable android.service.notification.ZenPolicy, int, boolean); ctor public AutomaticZenRule(android.os.Parcel); method public int describeContents(); method public android.net.Uri getConditionId(); @@ -4462,7 +4465,7 @@ package android.app { method public void setName(String); method public void setZenPolicy(android.service.notification.ZenPolicy); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener { @@ -5288,7 +5291,7 @@ package android.app { field public static final String CATEGORY_SYSTEM = "sys"; field public static final String CATEGORY_TRANSPORT = "transport"; field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DEFAULT_ALL = -1; // 0xffffffff field public static final int DEFAULT_LIGHTS = 4; // 0x4 field public static final int DEFAULT_SOUND = 1; // 0x1 @@ -5397,7 +5400,7 @@ package android.app { method public int getSemanticAction(); method public boolean isContextual(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5 field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4 @@ -5418,14 +5421,14 @@ package android.app { ctor @Deprecated public Notification.Action.Builder(int, CharSequence, android.app.PendingIntent); ctor public Notification.Action.Builder(android.graphics.drawable.Icon, CharSequence, android.app.PendingIntent); ctor public Notification.Action.Builder(android.app.Notification.Action); - method public android.app.Notification.Action.Builder addExtras(android.os.Bundle); - method public android.app.Notification.Action.Builder addRemoteInput(android.app.RemoteInput); - method public android.app.Notification.Action build(); - method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Extender); + method @NonNull public android.app.Notification.Action.Builder addExtras(android.os.Bundle); + method @NonNull public android.app.Notification.Action.Builder addRemoteInput(android.app.RemoteInput); + method @NonNull public android.app.Notification.Action build(); + method @NonNull public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Extender); method public android.os.Bundle getExtras(); - method public android.app.Notification.Action.Builder setAllowGeneratedReplies(boolean); - method public android.app.Notification.Action.Builder setContextual(boolean); - method public android.app.Notification.Action.Builder setSemanticAction(int); + method @NonNull public android.app.Notification.Action.Builder setAllowGeneratedReplies(boolean); + method @NonNull public android.app.Notification.Action.Builder setContextual(boolean); + method @NonNull public android.app.Notification.Action.Builder setSemanticAction(int); } public static interface Notification.Action.Extender { @@ -5479,7 +5482,7 @@ package android.app { method public boolean getSuppressInitialNotification(); method @Deprecated public CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class Notification.BubbleMetadata.Builder { @@ -5498,74 +5501,74 @@ package android.app { 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 { @@ -5761,7 +5764,7 @@ package android.app { method public boolean shouldShowLights(); method public boolean shouldVibrate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String DEFAULT_CHANNEL_ID = "miscellaneous"; } @@ -5776,7 +5779,7 @@ package android.app { method public boolean isBlocked(); method public void setDescription(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class NotificationManager { @@ -5784,7 +5787,7 @@ package android.app { method public boolean areBubblesAllowed(); method public boolean areNotificationsEnabled(); method public boolean areNotificationsPaused(); - method public boolean canNotifyAsPackage(String); + method public boolean canNotifyAsPackage(@NonNull String); method public void cancel(int); method public void cancel(String, int); method public void cancelAll(); @@ -5805,15 +5808,15 @@ package android.app { method public java.util.List getNotificationChannels(); method @Nullable public String getNotificationDelegate(); method public android.app.NotificationManager.Policy getNotificationPolicy(); - method public boolean isNotificationAssistantAccessGranted(android.content.ComponentName); + method public boolean isNotificationAssistantAccessGranted(@NonNull android.content.ComponentName); method public boolean isNotificationListenerAccessGranted(android.content.ComponentName); method public boolean isNotificationPolicyAccessGranted(); method public void notify(int, android.app.Notification); method public void notify(String, int, android.app.Notification); - method public void notifyAsPackage(@NonNull String, @NonNull String, int, android.app.Notification); + method public void notifyAsPackage(@NonNull String, @NonNull String, int, @NonNull android.app.Notification); method public boolean removeAutomaticZenRule(String); method public void revokeNotificationDelegate(); - method public void setAutomaticZenRuleState(String, android.service.notification.Condition); + method public void setAutomaticZenRuleState(@NonNull String, @NonNull android.service.notification.Condition); method public final void setInterruptionFilter(int); method public void setNotificationDelegate(@NonNull String); method public void setNotificationPolicy(@NonNull android.app.NotificationManager.Policy); @@ -5854,7 +5857,7 @@ package android.app { method public static String prioritySendersToString(int); method public static String suppressedEffectsToString(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PRIORITY_CATEGORY_ALARMS = 32; // 0x20 field public static final int PRIORITY_CATEGORY_CALLS = 8; // 0x8 field public static final int PRIORITY_CATEGORY_EVENTS = 2; // 0x2 @@ -5906,7 +5909,7 @@ package android.app { method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler, @Nullable String, @Nullable android.os.Bundle) throws android.app.PendingIntent.CanceledException; method public static void writePendingIntentOrNullToParcel(@Nullable android.app.PendingIntent, @NonNull android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_CANCEL_CURRENT = 268435456; // 0x10000000 field public static final int FLAG_IMMUTABLE = 67108864; // 0x4000000 field public static final int FLAG_NO_CREATE = 536870912; // 0x20000000 @@ -5934,7 +5937,7 @@ package android.app { method public boolean isImportant(); method public android.app.Person.Builder toBuilder(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class Person.Builder { @@ -5951,7 +5954,7 @@ package android.app { public final class PictureInPictureParams implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class PictureInPictureParams.Builder { @@ -6004,7 +6007,7 @@ package android.app { method @NonNull public android.app.RemoteAction getUserAction(); method @NonNull public CharSequence getUserMessage(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RemoteAction implements android.os.Parcelable { @@ -6021,7 +6024,7 @@ package android.app { method public void setShouldShowIcon(boolean); method public boolean shouldShowIcon(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RemoteInput implements android.os.Parcelable { @@ -6041,7 +6044,7 @@ package android.app { method public boolean isDataOnly(); method public static void setResultsSource(android.content.Intent, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0 field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1 field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2 @@ -6163,7 +6166,7 @@ package android.app { method public boolean shouldRewriteQueryFromData(); method public boolean shouldRewriteQueryFromText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 { @@ -6370,7 +6373,7 @@ package android.app { method public CharSequence getSynonymAt(int); method public void setExtras(android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class VoiceInteractor.Prompt implements android.os.Parcelable { @@ -6381,7 +6384,7 @@ package android.app { method @NonNull public CharSequence getVisualPrompt(); method @NonNull public CharSequence getVoicePromptAt(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract static class VoiceInteractor.Request { @@ -6404,7 +6407,7 @@ package android.app { method @Nullable public android.graphics.Color getSecondaryColor(); method @Nullable public android.graphics.Color getTertiaryColor(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class WallpaperInfo implements android.os.Parcelable { @@ -6427,7 +6430,7 @@ package android.app { method public android.graphics.drawable.Drawable loadThumbnail(android.content.pm.PackageManager); method public boolean supportsMultipleDisplays(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class WallpaperManager { @@ -6498,7 +6501,7 @@ package android.app.admin { method public java.net.InetAddress getInetAddress(); method public int getPort(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class DelegatedAdminReceiver extends android.content.BroadcastReceiver { @@ -6524,7 +6527,7 @@ package android.app.admin { method public boolean supportsTransferOwnership(); method public boolean usesPolicy(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7 field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8 field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9 @@ -6974,7 +6977,7 @@ package android.app.admin { method public java.util.List getInetAddresses(); method public int getTotalResolvedAddressCount(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class FreezePeriod { @@ -6988,7 +6991,7 @@ package android.app.admin { method public long getId(); method public String getPackageName(); method public long getTimestamp(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class SecurityLog { @@ -7039,7 +7042,7 @@ package android.app.admin { method public int getTag(); method public long getTimeNanos(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SystemUpdateInfo implements android.os.Parcelable { @@ -7047,7 +7050,7 @@ package android.app.admin { method public long getReceivedTime(); method public int getSecurityPatchState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SECURITY_PATCH_STATE_FALSE = 1; // 0x1 field public static final int SECURITY_PATCH_STATE_TRUE = 2; // 0x2 field public static final int SECURITY_PATCH_STATE_UNKNOWN = 0; // 0x0 @@ -7064,7 +7067,7 @@ package android.app.admin { method public int getPolicyType(); method public android.app.admin.SystemUpdatePolicy setFreezePeriods(java.util.List); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_INSTALL_AUTOMATIC = 1; // 0x1 field public static final int TYPE_INSTALL_WINDOWED = 2; // 0x2 field public static final int TYPE_POSTPONE = 3; // 0x3 @@ -7074,7 +7077,7 @@ package android.app.admin { method public int describeContents(); method public int getErrorCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE = 6; // 0x6 field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG = 5; // 0x5 field public static final int ERROR_DUPLICATE_OR_OVERLAP = 2; // 0x2 @@ -7102,7 +7105,7 @@ package android.app.assist { method public void setStructuredData(String); method public void setWebUri(android.net.Uri); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class AssistStructure implements android.os.Parcelable { @@ -7115,7 +7118,7 @@ package android.app.assist { method public int getWindowNodeCount(); method public boolean isHomeActivity(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class AssistStructure.ViewNode { @@ -7321,7 +7324,7 @@ package android.app.job { method public void writeToParcel(android.os.Parcel, int); field public static final int BACKOFF_POLICY_EXPONENTIAL = 1; // 0x1 field public static final int BACKOFF_POLICY_LINEAR = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 30000L; // 0x7530L field public static final long MAX_BACKOFF_DELAY_MILLIS = 18000000L; // 0x112a880L field public static final int NETWORK_BYTES_UNKNOWN = -1; // 0xffffffff @@ -7365,7 +7368,7 @@ package android.app.job { method public int getFlags(); method public android.net.Uri getUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_NOTIFY_FOR_DESCENDANTS = 1; // 0x1 } @@ -7383,7 +7386,7 @@ package android.app.job { method @Nullable public android.net.Uri[] getTriggeredContentUris(); method public boolean isOverrideDeadlineExpired(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class JobScheduler { @@ -7424,7 +7427,7 @@ package android.app.job { method public long getEstimatedNetworkUploadBytes(); method public android.content.Intent getIntent(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -7460,7 +7463,7 @@ package android.app.slice { method public android.net.Uri getUri(); method public boolean isCallerNeeded(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_RANGE_VALUE = "android.app.slice.extra.RANGE_VALUE"; field public static final String EXTRA_TOGGLE_STATE = "android.app.slice.extra.TOGGLE_STATE"; field public static final String HINT_ACTIONS = "actions"; @@ -7524,7 +7527,7 @@ package android.app.slice { method public CharSequence getText(); method public boolean hasHint(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String FORMAT_ACTION = "action"; field public static final String FORMAT_BUNDLE = "bundle"; field public static final String FORMAT_IMAGE = "image"; @@ -7584,7 +7587,7 @@ package android.app.slice { method public int getRevision(); method public String getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -7601,7 +7604,7 @@ package android.app.usage { method public long getLastTimeStamp(); method public long getTotalTimeActive(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class EventStats implements android.os.Parcelable { @@ -7615,7 +7618,7 @@ package android.app.usage { method public long getLastTimeStamp(); method public long getTotalTime(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ExternalStorageStats implements android.os.Parcelable { @@ -7626,7 +7629,7 @@ package android.app.usage { method public long getTotalBytes(); method public long getVideoBytes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NetworkStats implements java.lang.AutoCloseable { @@ -7691,7 +7694,7 @@ package android.app.usage { method public long getCacheBytes(); method public long getDataBytes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class StorageStatsManager { @@ -7708,7 +7711,7 @@ package android.app.usage { method public boolean getNextEvent(android.app.usage.UsageEvents.Event); method public boolean hasNextEvent(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class UsageEvents.Event { @@ -7753,7 +7756,7 @@ package android.app.usage { method public long getTotalTimeInForeground(); method public long getTotalTimeVisible(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class UsageStatsManager { @@ -7886,7 +7889,7 @@ package android.appwidget { method public final String loadLabel(android.content.pm.PackageManager); method public final android.graphics.drawable.Drawable loadPreviewImage(@NonNull android.content.Context, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int RESIZE_BOTH = 3; // 0x3 field public static final int RESIZE_HORIZONTAL = 1; // 0x1 field public static final int RESIZE_NONE = 0; // 0x0 @@ -8237,7 +8240,7 @@ package android.bluetooth { method public int getMajorDeviceClass(); method public boolean hasService(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class BluetoothClass.Device { @@ -8355,7 +8358,7 @@ package android.bluetooth { field public static final int BOND_BONDED = 12; // 0xc field public static final int BOND_BONDING = 11; // 0xb field public static final int BOND_NONE = 10; // 0xa - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DEVICE_TYPE_CLASSIC = 1; // 0x1 field public static final int DEVICE_TYPE_DUAL = 3; // 0x3 field public static final int DEVICE_TYPE_LE = 2; // 0x2 @@ -8464,7 +8467,7 @@ package android.bluetooth { method public boolean setValue(String); method public void setWriteType(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FORMAT_FLOAT = 52; // 0x34 field public static final int FORMAT_SFLOAT = 50; // 0x32 field public static final int FORMAT_SINT16 = 34; // 0x22 @@ -8504,7 +8507,7 @@ package android.bluetooth { method public byte[] getValue(); method public boolean setValue(byte[]); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final byte[] DISABLE_NOTIFICATION_VALUE; field public static final byte[] ENABLE_INDICATION_VALUE; field public static final byte[] ENABLE_NOTIFICATION_VALUE; @@ -8563,7 +8566,7 @@ package android.bluetooth { method public int getType(); method public java.util.UUID getUuid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SERVICE_TYPE_PRIMARY = 0; // 0x0 field public static final int SERVICE_TYPE_SECONDARY = 1; // 0x1 field protected java.util.List mCharacteristics; @@ -8627,7 +8630,7 @@ package android.bluetooth { method @Deprecated public String getName(); method @Deprecated public int getRole(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public abstract class BluetoothHealthCallback { @@ -8700,7 +8703,7 @@ package android.bluetooth { method public int getTokenBucketSize(); method public int getTokenRate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MAX = -1; // 0xffffffff field public static final int SERVICE_BEST_EFFORT = 1; // 0x1 field public static final int SERVICE_GUARANTEED = 2; // 0x2 @@ -8716,7 +8719,7 @@ package android.bluetooth { method public String getProvider(); method public byte getSubclass(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class BluetoothManager { @@ -8797,7 +8800,7 @@ package android.bluetooth.le { method public java.util.Map getServiceData(); method public java.util.List getServiceUuids(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AdvertiseData.Builder { @@ -8824,7 +8827,7 @@ package android.bluetooth.le { field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1 field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2 field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AdvertiseSettings.Builder { @@ -8877,7 +8880,7 @@ package android.bluetooth.le { method public boolean isLegacy(); method public boolean isScannable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int INTERVAL_HIGH = 1600; // 0x640 field public static final int INTERVAL_LOW = 160; // 0xa0 field public static final int INTERVAL_MAX = 16777215; // 0xffffff @@ -8970,7 +8973,7 @@ package android.bluetooth.le { method @Nullable public android.os.ParcelUuid getServiceUuidMask(); method public boolean matches(android.bluetooth.le.ScanResult); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class ScanFilter.Builder { @@ -9018,7 +9021,7 @@ package android.bluetooth.le { method public boolean isConnectable(); method public boolean isLegacy(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DATA_COMPLETE = 0; // 0x0 field public static final int DATA_TRUNCATED = 2; // 0x2 field public static final int PERIODIC_INTERVAL_NOT_PRESENT = 0; // 0x0 @@ -9039,7 +9042,7 @@ package android.bluetooth.le { field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1 field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2 field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MATCH_MODE_AGGRESSIVE = 1; // 0x1 field public static final int MATCH_MODE_STICKY = 2; // 0x2 field public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2; // 0x2 @@ -9071,7 +9074,7 @@ package android.companion { public final class AssociationRequest implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AssociationRequest.Builder { @@ -9084,7 +9087,7 @@ package android.companion { public final class BluetoothDeviceFilter implements android.companion.DeviceFilter { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class BluetoothDeviceFilter.Builder { @@ -9099,7 +9102,7 @@ package android.companion { method public int describeContents(); method public static int getRenamePrefixLengthLimit(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class BluetoothLeDeviceFilter.Builder { @@ -9133,7 +9136,7 @@ package android.companion { public final class WifiDeviceFilter implements android.companion.DeviceFilter { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class WifiDeviceFilter.Builder { @@ -9257,7 +9260,7 @@ package android.content { method public static android.content.ClipData newRawUri(CharSequence, android.net.Uri); method public static android.content.ClipData newUri(android.content.ContentResolver, CharSequence, android.net.Uri); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class ClipData.Item { @@ -9290,7 +9293,7 @@ package android.content { method public boolean hasMimeType(String); method public void setExtras(android.os.PersistableBundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String MIMETYPE_TEXT_HTML = "text/html"; field public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent"; field public static final String MIMETYPE_TEXT_PLAIN = "text/plain"; @@ -9350,7 +9353,7 @@ package android.content { method @Nullable public static android.content.ComponentName unflattenFromString(@NonNull String); method public void writeToParcel(android.os.Parcel, int); method public static void writeToParcel(android.content.ComponentName, android.os.Parcel); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class ContentProvider implements android.content.ComponentCallbacks2 { @@ -9453,7 +9456,7 @@ package android.content { method public String[] resolveSelectionArgsBackReferences(android.content.ContentProviderResult[], int); method public android.content.ContentValues resolveValueBackReferences(android.content.ContentProviderResult[], int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class ContentProviderOperation.Builder { @@ -9474,7 +9477,7 @@ package android.content { ctor public ContentProviderResult(android.os.Parcel); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final Integer count; field public final android.net.Uri uri; } @@ -9643,13 +9646,13 @@ package android.content { method public int size(); method public java.util.Set> valueSet(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String TAG = "ContentValues"; } public abstract class Context { ctor public Context(); - method public boolean bindIsolatedService(@RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull String); + method public boolean bindIsolatedService(@RequiresPermission @NonNull android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull String); method public abstract boolean bindService(@RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int); method @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") public abstract int checkCallingOrSelfPermission(@NonNull String); method @CheckResult(suggest="#enforceCallingOrSelfUriPermission(Uri,int,String)") public abstract int checkCallingOrSelfUriPermission(android.net.Uri, int); @@ -9702,7 +9705,7 @@ package android.content { method public abstract java.io.File getNoBackupFilesDir(); method public abstract java.io.File getObbDir(); method public abstract java.io.File[] getObbDirs(); - method public String getOpPackageName(); + method @NonNull public String getOpPackageName(); method public abstract String getPackageCodePath(); method public abstract android.content.pm.PackageManager getPackageManager(); method public abstract String getPackageName(); @@ -10337,7 +10340,7 @@ package android.content { field public static final String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; field public static final String CATEGORY_VOICE = "android.intent.category.VOICE"; field public static final String CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; field public static final String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; field @Deprecated public static final String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; @@ -10475,7 +10478,7 @@ package android.content { method public int describeContents(); method public static android.content.Intent.ShortcutIconResource fromContext(android.content.Context, @AnyRes int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public String packageName; field public String resourceName; } @@ -10534,7 +10537,7 @@ package android.content { method public final java.util.Iterator typesIterator(); method public final void writeToParcel(android.os.Parcel, int); method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MATCH_ADJUSTMENT_MASK = 65535; // 0xffff field public static final int MATCH_ADJUSTMENT_NORMAL = 32768; // 0x8000 field public static final int MATCH_CATEGORY_EMPTY = 1048576; // 0x100000 @@ -10576,7 +10579,7 @@ package android.content { method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, String) throws android.content.IntentSender.SendIntentException; method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static interface IntentSender.OnFinished { @@ -10635,11 +10638,11 @@ package android.content { } public final class LocusId implements android.os.Parcelable { - ctor public LocusId(@NonNull android.net.Uri); + ctor public LocusId(@NonNull String); method public int describeContents(); - method @NonNull public android.net.Uri getUri(); + method @NonNull public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class MutableContextWrapper extends android.content.ContextWrapper { @@ -10661,7 +10664,7 @@ package android.content { ctor public PeriodicSync(android.accounts.Account, String, android.os.Bundle, long); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final android.accounts.Account account; field public final String authority; field public final android.os.Bundle extras; @@ -10715,7 +10718,7 @@ package android.content { method public void setTitle(String); method public void setType(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_BOOLEAN = 1; // 0x1 field public static final int TYPE_BUNDLE = 7; // 0x7 field public static final int TYPE_BUNDLE_ARRAY = 8; // 0x8 @@ -10828,7 +10831,7 @@ package android.content { method public static android.content.SyncAdapterType newKey(String, String); method public boolean supportsUploading(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final String accountType; field public final String authority; field public final boolean isKey; @@ -10850,7 +10853,7 @@ package android.content { public class SyncRequest implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class SyncRequest.Builder { @@ -10880,7 +10883,7 @@ package android.content { method public String toDebugString(); method public void writeToParcel(android.os.Parcel, int); field public static final android.content.SyncResult ALREADY_IN_PROGRESS; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public boolean databaseError; field public long delayUntil; field public boolean fullSyncRequested; @@ -10898,7 +10901,7 @@ package android.content { method public void clear(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public long numAuthExceptions; field public long numConflictDetectedExceptions; field public long numDeletes; @@ -10928,7 +10931,7 @@ package android.content { method public boolean isReadPermission(); method public boolean isWritePermission(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L } @@ -10961,7 +10964,7 @@ package android.content.pm { field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800 field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8 field public static final int CONFIG_UI_MODE = 512; // 0x200 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2 field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1 field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3 @@ -11053,7 +11056,7 @@ package android.content.pm { field public static final int CATEGORY_SOCIAL = 4; // 0x4 field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff field public static final int CATEGORY_VIDEO = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000 field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40 field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 @@ -11128,7 +11131,7 @@ package android.content.pm { method @NonNull public java.util.List getPackageNames(); method public int getSequenceNumber(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ComponentInfo extends android.content.pm.PackageItemInfo { @@ -11154,7 +11157,7 @@ package android.content.pm { method public int describeContents(); method public String getGlEsVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 field public static final int INPUT_FEATURE_FIVE_WAY_NAV = 2; // 0x2 field public static final int INPUT_FEATURE_HARD_KEYBOARD = 1; // 0x1 @@ -11177,7 +11180,7 @@ package android.content.pm { ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public android.content.pm.FeatureInfo[] features; } @@ -11187,7 +11190,7 @@ package android.content.pm { method public int describeContents(); method public String getGlEsVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_REQUIRED = 1; // 0x1 field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 field public int flags; @@ -11200,7 +11203,7 @@ package android.content.pm { ctor public InstrumentationInfo(); ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo); method public int describeContents(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public String dataDir; field public boolean functionalTest; field public boolean handleProfiling; @@ -11224,7 +11227,7 @@ package android.content.pm { method public String getSourcePackage(); method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public CharSequence loadLabel(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class LauncherActivityInfo { @@ -11277,7 +11280,7 @@ package android.content.pm { method public long getTotalUsageLimit(); method public long getUsageRemaining(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract static class LauncherApps.Callback { @@ -11303,7 +11306,7 @@ package android.content.pm { method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo(); method public boolean isValid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int REQUEST_TYPE_APPWIDGET = 2; // 0x2 field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1 } @@ -11328,7 +11331,7 @@ package android.content.pm { method @Nullable public String getPackageName(); method public boolean isHidden(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class PackageInfo implements android.os.Parcelable { @@ -11337,7 +11340,7 @@ package android.content.pm { method public long getLongVersionCode(); method public void setLongVersionCode(long); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int INSTALL_LOCATION_AUTO = 0; // 0x0 field public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; // 0x1 field public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; // 0x2 @@ -11801,7 +11804,7 @@ package android.content.pm { ctor @Deprecated public PackageStats(android.content.pm.PackageStats); method @Deprecated public int describeContents(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public long cacheSize; field @Deprecated public long codeSize; field @Deprecated public long dataSize; @@ -11818,19 +11821,19 @@ package android.content.pm { ctor public PathPermission(android.os.Parcel); method public String getReadPermission(); method public String getWritePermission(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { - ctor public PermissionGroupInfo(); - ctor public PermissionGroupInfo(android.content.pm.PermissionGroupInfo); + ctor @Deprecated public PermissionGroupInfo(); + ctor @Deprecated public PermissionGroupInfo(@NonNull android.content.pm.PermissionGroupInfo); method public int describeContents(); - method public CharSequence loadDescription(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_PERSONAL_INFO = 1; // 0x1 - field public int descriptionRes; + field @StringRes public int descriptionRes; field public int flags; - field public CharSequence nonLocalizedDescription; + field @Nullable public CharSequence nonLocalizedDescription; field public int priority; } @@ -11841,7 +11844,7 @@ package android.content.pm { method public int getProtection(); method public int getProtectionFlags(); method public CharSequence loadDescription(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_COSTS_MONEY = 1; // 0x1 field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000 field public static final int PROTECTION_DANGEROUS = 1; // 0x1 @@ -11873,7 +11876,7 @@ package android.content.pm { ctor public ProviderInfo(android.content.pm.ProviderInfo); method public int describeContents(); method public void dump(android.util.Printer, String); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public String authority; field public int flags; @@ -11897,7 +11900,7 @@ package android.content.pm { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public android.content.pm.ActivityInfo activityInfo; field public android.content.IntentFilter filter; field public int icon; @@ -11925,7 +11928,7 @@ package android.content.pm { method public int describeContents(); method public void dump(android.util.Printer, String); method public int getForegroundServiceType(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_EXTERNAL_SERVICE = 4; // 0x4 field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2 field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 @@ -11951,7 +11954,7 @@ package android.content.pm { method public int getType(); method @Deprecated @IntRange(from=0xffffffff) public int getVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_BUILTIN = 0; // 0x0 field public static final int TYPE_DYNAMIC = 1; // 0x1 field public static final int TYPE_STATIC = 2; // 0x2 @@ -11981,7 +11984,7 @@ package android.content.pm { method public boolean isImmutable(); method public boolean isPinned(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DISABLED_REASON_APP_CHANGED = 2; // 0x2 field public static final int DISABLED_REASON_BACKUP_NOT_SUPPORTED = 101; // 0x65 field public static final int DISABLED_REASON_BY_APP = 1; // 0x1 @@ -12042,7 +12045,7 @@ package android.content.pm { method public char[] toChars(char[], int[]); method public String toCharsString(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SigningInfo implements android.os.Parcelable { @@ -12054,7 +12057,7 @@ package android.content.pm { method public boolean hasMultipleSigners(); method public boolean hasPastSigningCertificates(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class VersionedPackage implements android.os.Parcelable { @@ -12065,7 +12068,7 @@ package android.content.pm { method @NonNull public String getPackageName(); method @Deprecated public int getVersionCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -12086,7 +12089,7 @@ package android.content.res { method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); method public long getStartOffset(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL } @@ -12132,7 +12135,7 @@ package android.content.res { method @NonNull public static android.content.res.ColorStateList valueOf(@ColorInt int); method @NonNull public android.content.res.ColorStateList withAlpha(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class Configuration implements java.lang.Comparable android.os.Parcelable { @@ -12167,7 +12170,7 @@ package android.content.res { field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1 field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0 field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0 field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1 field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0 @@ -12255,7 +12258,7 @@ package android.content.res { public class ObbInfo implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int OBB_OVERLAY = 1; // 0x1 field public String filename; field public int flags; @@ -12334,7 +12337,7 @@ package android.content.res { public final class Resources.Theme { method public void applyStyle(int, boolean); method public void dump(int, String, String); - method public int[] getAttributeResolutionStack(@AttrRes int, @StyleRes int, @StyleRes int); + method @NonNull public int[] getAttributeResolutionStack(@AttrRes int, @StyleRes int, @StyleRes int); method public int getChangingConfigurations(); method public android.graphics.drawable.Drawable getDrawable(@DrawableRes int) throws android.content.res.Resources.NotFoundException; method @StyleRes public int getExplicitStyle(@Nullable android.util.AttributeSet); @@ -12512,7 +12515,7 @@ package android.database { method public int getInt(int); method public long getLong(int); method public android.net.Uri getNotificationUri(); - method public default java.util.List getNotificationUris(); + method @Nullable public default java.util.List getNotificationUris(); method public int getPosition(); method public short getShort(int); method public String getString(int); @@ -12598,7 +12601,7 @@ package android.database { method public boolean setNumColumns(int); method public void setStartPosition(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class CursorWrapper implements android.database.Cursor { @@ -13071,19 +13074,19 @@ package android.database.sqlite { method public String buildUnionSubQuery(String, String[], java.util.Set, int, String, String, String, String); method @Deprecated public String buildUnionSubQuery(String, String[], java.util.Set, 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 getProjectionMap(); + method @Nullable public java.util.Map 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); + method public void setProjectionMap(@Nullable java.util.Map); 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[]); } @@ -13359,7 +13362,7 @@ package android.gesture { method public android.graphics.Path toPath(int, int, int, int); method public android.graphics.Path toPath(android.graphics.Path, int, int, int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class GestureLibraries { @@ -13553,7 +13556,7 @@ package android.graphics { 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(); @@ -13591,7 +13594,7 @@ package android.graphics { method public void setWidth(int); method @Nullable public static android.graphics.Bitmap wrapHardwareBuffer(@NonNull android.hardware.HardwareBuffer, @Nullable android.graphics.ColorSpace); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DENSITY_NONE = 0; // 0x0 } @@ -14110,14 +14113,14 @@ package android.graphics { public class HardwareRenderer { ctor public HardwareRenderer(); method public void clearContent(); - method public android.graphics.HardwareRenderer.FrameRenderRequest createRenderRequest(); + method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest createRenderRequest(); method public void destroy(); method public boolean isOpaque(); method public void notifyFramePending(); method public void setContentRoot(@Nullable android.graphics.RenderNode); method public void setLightSourceAlpha(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float); method public void setLightSourceGeometry(float, float, float, float); - method public void setName(String); + method public void setName(@NonNull String); method public void setOpaque(boolean); method public void setStopped(boolean); method public void setSurface(@Nullable android.view.Surface); @@ -14129,9 +14132,9 @@ package android.graphics { } public final class HardwareRenderer.FrameRenderRequest { - method public android.graphics.HardwareRenderer.FrameRenderRequest setFrameCommitCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable); - method public android.graphics.HardwareRenderer.FrameRenderRequest setVsyncTime(long); - method public android.graphics.HardwareRenderer.FrameRenderRequest setWaitForPresent(boolean); + method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setFrameCommitCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable); + method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setVsyncTime(long); + method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setWaitForPresent(boolean); method public int syncAndDraw(); } @@ -14153,6 +14156,7 @@ package android.graphics { method @Nullable public android.graphics.ImageDecoder.OnPartialImageListener getOnPartialImageListener(); method @Nullable public android.graphics.PostProcessor getPostProcessor(); method public boolean isDecodeAsAlphaMaskEnabled(); + method public static boolean isMimeTypeSupported(@NonNull String); method public boolean isMutableRequired(); method public boolean isUnpremultipliedRequired(); method public void setAllocator(int); @@ -14236,7 +14240,7 @@ package android.graphics { method @NonNull public static android.graphics.Insets of(@Nullable android.graphics.Rect); method @NonNull public static android.graphics.Insets subtract(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.graphics.Insets NONE; field public final int bottom; field public final int left; @@ -14740,7 +14744,7 @@ package android.graphics { method public void readFromParcel(@NonNull android.os.Parcel); method public void set(int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int x; field public int y; } @@ -14759,7 +14763,7 @@ package android.graphics { method public final void set(float, float); method public final void set(@NonNull android.graphics.PointF); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public float x; field public float y; } @@ -14848,7 +14852,7 @@ package android.graphics { method public void union(int, int); method public int width(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int bottom; field public int left; field public int right; @@ -14890,7 +14894,7 @@ package android.graphics { method public void union(float, float); method public final float width(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public float bottom; field public float left; field public float right; @@ -14930,7 +14934,7 @@ package android.graphics { method public void translate(int, int, android.graphics.Region); method public final boolean union(@NonNull android.graphics.Rect); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public enum Region.Op { @@ -14949,8 +14953,8 @@ package android.graphics { public final class RenderNode { ctor public RenderNode(@Nullable String); - method public android.graphics.RecordingCanvas beginRecording(int, int); - method public android.graphics.RecordingCanvas beginRecording(); + method @NonNull public android.graphics.RecordingCanvas beginRecording(int, int); + method @NonNull public android.graphics.RecordingCanvas beginRecording(); method public long computeApproximateMemoryUsage(); method public void discardDisplayList(); method public void endRecording(); @@ -15003,7 +15007,7 @@ package android.graphics { method public boolean setPivotX(float); method public boolean setPivotY(float); method public boolean setPosition(int, int, int, int); - method public boolean setPosition(android.graphics.Rect); + method public boolean setPosition(@NonNull android.graphics.Rect); method public boolean setProjectBackwards(boolean); method public boolean setProjectionReceiver(boolean); method public boolean setRotationX(float); @@ -15272,18 +15276,18 @@ package android.graphics.drawable { public class ColorStateListDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { ctor public ColorStateListDrawable(); - ctor public ColorStateListDrawable(android.content.res.ColorStateList); + ctor public ColorStateListDrawable(@NonNull android.content.res.ColorStateList); method public void clearAlpha(); - method public void draw(android.graphics.Canvas); + method public void draw(@NonNull android.graphics.Canvas); method @NonNull public android.content.res.ColorStateList getColorStateList(); method public int getOpacity(); method public boolean hasFocusStateSpecified(); - method public void invalidateDrawable(android.graphics.drawable.Drawable); - method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long); + method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable); + method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long); method public void setAlpha(@IntRange(from=0, to=255) int); - method public void setColorFilter(android.graphics.ColorFilter); - method public void setColorStateList(android.content.res.ColorStateList); - method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable); + method public void setColorFilter(@Nullable android.graphics.ColorFilter); + method public void setColorStateList(@NonNull android.content.res.ColorStateList); + method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable); } public abstract class Drawable { @@ -15442,38 +15446,38 @@ package android.graphics.drawable { method public float getGradientCenterY(); method public float getGradientRadius(); method public int getGradientType(); - method public int getInnerRadius(); + method @Px public int getInnerRadius(); method public float getInnerRadiusRatio(); method public int getOpacity(); method public android.graphics.drawable.GradientDrawable.Orientation getOrientation(); method public int getShape(); - method public int getThickness(); + method @Px public int getThickness(); method public float getThicknessRatio(); method public boolean getUseLevel(); method public void setAlpha(int); method public void setColor(@ColorInt int); method public void setColor(@Nullable android.content.res.ColorStateList); method public void setColorFilter(@Nullable android.graphics.ColorFilter); - method public void setColors(@ColorInt int[]); - method public void setColors(@ColorInt int[], @Nullable float[]); + method public void setColors(@Nullable @ColorInt int[]); + method public void setColors(@Nullable @ColorInt int[], @Nullable float[]); method public void setCornerRadii(@Nullable float[]); method public void setCornerRadius(float); method public void setDither(boolean); method public void setGradientCenter(float, float); method public void setGradientRadius(float); method public void setGradientType(int); - method public void setInnerRadius(int); - method public void setInnerRadiusRatio(float); + method public void setInnerRadius(@Px int); + method public void setInnerRadiusRatio(@FloatRange(from=0.0f, fromInclusive=false) float); method public void setOrientation(android.graphics.drawable.GradientDrawable.Orientation); - method public void setPadding(int, int, int, int); + method public void setPadding(@Px int, @Px int, @Px int, @Px int); method public void setShape(int); method public void setSize(int, int); method public void setStroke(int, @ColorInt int); method public void setStroke(int, android.content.res.ColorStateList); method public void setStroke(int, @ColorInt int, float, float); method public void setStroke(int, android.content.res.ColorStateList, float, float); - method public void setThickness(int); - method public void setThicknessRatio(float); + method public void setThickness(@Px int); + method public void setThicknessRatio(@FloatRange(from=0.0f, fromInclusive=false) float); method public void setUseLevel(boolean); field public static final int LINE = 2; // 0x2 field public static final int LINEAR_GRADIENT = 0; // 0x0 @@ -15516,7 +15520,7 @@ package android.graphics.drawable { method public android.graphics.drawable.Icon setTintList(android.content.res.ColorStateList); method public android.graphics.drawable.Icon setTintMode(android.graphics.PorterDuff.Mode); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5 field public static final int TYPE_BITMAP = 1; // 0x1 field public static final int TYPE_DATA = 3; // 0x3 @@ -15686,10 +15690,10 @@ package android.graphics.drawable { public class StateListDrawable extends android.graphics.drawable.DrawableContainer { ctor public StateListDrawable(); method public void addState(int[], android.graphics.drawable.Drawable); - method public int findStateDrawableIndex(int[]); + method public int findStateDrawableIndex(@NonNull int[]); method public int getStateCount(); - method public android.graphics.drawable.Drawable getStateDrawable(int); - method public int[] getStateSet(int); + method @Nullable public android.graphics.drawable.Drawable getStateDrawable(int); + method @NonNull public int[] getStateSet(int); } public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback { @@ -16233,7 +16237,7 @@ package android.hardware { method public static boolean isSupported(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long); method public void writeToParcel(android.os.Parcel, int); field public static final int BLOB = 33; // 0x21 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DS_24UI8 = 50; // 0x32 field public static final int DS_FP32UI8 = 52; // 0x34 field public static final int D_16 = 48; // 0x30 @@ -16557,13 +16561,13 @@ package android.hardware.biometrics { 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 setConfirmationRequired(boolean); + method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence); + method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDeviceCredentialAllowed(boolean); + 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 setSubtitle(@NonNull CharSequence); + method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence); } public static final class BiometricPrompt.CryptoObject { @@ -16642,96 +16646,96 @@ package android.hardware.camera2 { method public java.util.List> getAvailablePhysicalCameraRequestKeys(); method public java.util.List> getAvailableSessionKeys(); method @NonNull public java.util.List> getKeys(); - method public java.util.List> getKeysNeedingPermission(); + method @NonNull public java.util.List> getKeysNeedingPermission(); method @NonNull public java.util.Set getPhysicalCameraIds(); method @Nullable public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int); - field public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES; - field public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_AE_COMPENSATION_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_LOCK_AVAILABLE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_LOCK_AVAILABLE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AF; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AWB; - field public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key DEPTH_DEPTH_IS_EXCLUSIVE; - field public static final android.hardware.camera2.CameraCharacteristics.Key DISTORTION_CORRECTION_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key EDGE_AVAILABLE_EDGE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key FLASH_INFO_AVAILABLE; - field public static final android.hardware.camera2.CameraCharacteristics.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key INFO_SUPPORTED_HARDWARE_LEVEL; - field public static final android.hardware.camera2.CameraCharacteristics.Key INFO_VERSION; - field public static final android.hardware.camera2.CameraCharacteristics.Key JPEG_AVAILABLE_THUMBNAIL_SIZES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_DISTORTION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_FACING; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_APERTURES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_HYPERFOCAL_DISTANCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INTRINSIC_CALIBRATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_REFERENCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_ROTATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_TRANSLATION; - field @Deprecated public static final android.hardware.camera2.CameraCharacteristics.Key LENS_RADIAL_DISTORTION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE; - field public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key REPROCESS_MAX_CAPTURE_STALL; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_INPUT_STREAMS; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PARTIAL_RESULT_COUNT; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PIPELINE_MAX_DEPTH; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_CROPPING_TYPE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_MANDATORY_STREAM_COMBINATIONS; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_STREAM_CONFIGURATION_MAP; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_BLACK_LEVEL_PATTERN; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT; - field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_EXPOSURE_TIME_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_LENS_SHADING_APPLIED; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_MAX_FRAME_DURATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PHYSICAL_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PIXEL_ARRAY_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_SENSITIVITY_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_TIMESTAMP_SOURCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_WHITE_LEVEL; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_MAX_ANALOG_SENSITIVITY; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_OPTICAL_BLACK_REGIONS; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_ORIENTATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SHADING_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_MAX_FACE_COUNT; - field public static final android.hardware.camera2.CameraCharacteristics.Key SYNC_MAX_LATENCY; - field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_AVAILABLE_TONE_MAP_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_MAX_CURVE_POINTS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_AE_COMPENSATION_RANGE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_LOCK_AVAILABLE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_LOCK_AVAILABLE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AF; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AWB; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key DEPTH_DEPTH_IS_EXCLUSIVE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key DISTORTION_CORRECTION_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key EDGE_AVAILABLE_EDGE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key FLASH_INFO_AVAILABLE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key INFO_SUPPORTED_HARDWARE_LEVEL; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key INFO_VERSION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key JPEG_AVAILABLE_THUMBNAIL_SIZES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_DISTORTION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_FACING; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_APERTURES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_HYPERFOCAL_DISTANCE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INTRINSIC_CALIBRATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_REFERENCE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_ROTATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_POSE_TRANSLATION; + field @Deprecated @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LENS_RADIAL_DISTORTION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REPROCESS_MAX_CAPTURE_STALL; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_INPUT_STREAMS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PARTIAL_RESULT_COUNT; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PIPELINE_MAX_DEPTH; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_CROPPING_TYPE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_MANDATORY_STREAM_COMBINATIONS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_STREAM_CONFIGURATION_MAP; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_BLACK_LEVEL_PATTERN; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM1; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM2; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM1; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM2; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX1; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX2; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_EXPOSURE_TIME_RANGE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_LENS_SHADING_APPLIED; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_MAX_FRAME_DURATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PHYSICAL_SIZE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PIXEL_ARRAY_SIZE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_SENSITIVITY_RANGE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_TIMESTAMP_SOURCE; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_WHITE_LEVEL; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_MAX_ANALOG_SENSITIVITY; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_OPTICAL_BLACK_REGIONS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_ORIENTATION; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT1; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT2; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SHADING_AVAILABLE_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_MAX_FACE_COUNT; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key SYNC_MAX_LATENCY; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_AVAILABLE_TONE_MAP_MODES; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_MAX_CURVE_POINTS; } public static final class CameraCharacteristics.Key { @@ -16794,6 +16798,7 @@ package android.hardware.camera2 { public abstract static class CameraManager.AvailabilityCallback { ctor public CameraManager.AvailabilityCallback(); + method public void onCameraAccessPrioritiesChanged(); method public void onCameraAvailable(@NonNull String); method public void onCameraUnavailable(@NonNull String); } @@ -17037,63 +17042,63 @@ package android.hardware.camera2 { 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 BLACK_LEVEL_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_ABERRATION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_GAINS; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_TRANSFORM; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_ANTIBANDING_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_EXPOSURE_COMPENSATION; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_PRECAPTURE_TRIGGER; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key> CONTROL_AE_TARGET_FPS_RANGE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_TRIGGER; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_ENABLE_ZSL; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_VIDEO_STABILIZATION_MODE; - field public static final android.os.Parcelable.Creator CREATOR; - field public static final android.hardware.camera2.CaptureRequest.Key DISTORTION_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key EDGE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key FLASH_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key HOT_PIXEL_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_GPS_LOCATION; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_ORIENTATION; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_QUALITY; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_QUALITY; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_SIZE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_APERTURE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FILTER_DENSITY; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCAL_LENGTH; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_OPTICAL_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key NOISE_REDUCTION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR; - field public static final android.hardware.camera2.CaptureRequest.Key SCALER_CROP_REGION; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_EXPOSURE_TIME; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_FRAME_DURATION; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_SENSITIVITY; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_DATA; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key SHADING_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_FACE_DETECT_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_HOT_PIXEL_MAP_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_LENS_SHADING_MAP_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_OIS_DATA_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_CURVE; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_GAMMA; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_PRESET_CURVE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key BLACK_LEVEL_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_ABERRATION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_GAINS; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_TRANSFORM; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_ANTIBANDING_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key> CONTROL_AE_TARGET_FPS_RANGE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_TRIGGER; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_ENABLE_ZSL; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_VIDEO_STABILIZATION_MODE; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key DISTORTION_CORRECTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key EDGE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key FLASH_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key HOT_PIXEL_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key JPEG_GPS_LOCATION; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key JPEG_ORIENTATION; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key JPEG_QUALITY; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_QUALITY; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_SIZE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key LENS_APERTURE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key LENS_FILTER_DENSITY; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCAL_LENGTH; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCUS_DISTANCE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key LENS_OPTICAL_STABILIZATION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key NOISE_REDUCTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SCALER_CROP_REGION; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SENSOR_EXPOSURE_TIME; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SENSOR_FRAME_DURATION; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SENSOR_SENSITIVITY; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_DATA; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key SHADING_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_FACE_DETECT_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_LENS_SHADING_MAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_OIS_DATA_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_CURVE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_GAMMA; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_PRESET_CURVE; } public static final class CaptureRequest.Builder { @@ -17118,88 +17123,88 @@ package android.hardware.camera2 { method @NonNull public java.util.List> getKeys(); method @NonNull public android.hardware.camera2.CaptureRequest getRequest(); method public int getSequenceId(); - field public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_ABERRATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_GAINS; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_TRANSFORM; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_ANTIBANDING_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_EXPOSURE_COMPENSATION; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_PRECAPTURE_TRIGGER; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_STATE; - field public static final android.hardware.camera2.CaptureResult.Key> CONTROL_AE_TARGET_FPS_RANGE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_SCENE_CHANGE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_STATE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_TRIGGER; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_ENABLE_ZSL; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_VIDEO_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key DISTORTION_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key EDGE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key FLASH_MODE; - field public static final android.hardware.camera2.CaptureResult.Key FLASH_STATE; - field public static final android.hardware.camera2.CaptureResult.Key HOT_PIXEL_MODE; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_GPS_LOCATION; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_ORIENTATION; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_QUALITY; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_QUALITY; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_SIZE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_APERTURE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_DISTORTION; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FILTER_DENSITY; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCAL_LENGTH; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CaptureResult.Key> LENS_FOCUS_RANGE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_INTRINSIC_CALIBRATION; - field public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_POSE_ROTATION; - field public static final android.hardware.camera2.CaptureResult.Key LENS_POSE_TRANSLATION; - field @Deprecated public static final android.hardware.camera2.CaptureResult.Key LENS_RADIAL_DISTORTION; - field public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; - field public static final android.hardware.camera2.CaptureResult.Key LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID; - field public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR; - field public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; - field public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_DYNAMIC_BLACK_LEVEL; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_DYNAMIC_WHITE_LEVEL; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_FRAME_DURATION; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_GREEN_SPLIT; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_NEUTRAL_COLOR_POINT; - field public static final android.hardware.camera2.CaptureResult.Key[]> SENSOR_NOISE_PROFILE; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_ROLLING_SHUTTER_SKEW; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_SENSITIVITY; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_DATA; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_MODE; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TIMESTAMP; - field public static final android.hardware.camera2.CaptureResult.Key SHADING_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACES; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACE_DETECT_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_CORRECTION_MAP; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_MAP_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_OIS_DATA_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_OIS_SAMPLES; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_SCENE_FLICKER; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_CURVE; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_GAMMA; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_MODE; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_PRESET_CURVE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_ABERRATION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_GAINS; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_TRANSFORM; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_ANTIBANDING_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_STATE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key> CONTROL_AE_TARGET_FPS_RANGE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_SCENE_CHANGE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_STATE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_TRIGGER; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_LOCK; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_ENABLE_ZSL; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_VIDEO_STABILIZATION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key DISTORTION_CORRECTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key EDGE_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key FLASH_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key FLASH_STATE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key HOT_PIXEL_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key JPEG_GPS_LOCATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key JPEG_ORIENTATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key JPEG_QUALITY; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_QUALITY; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_SIZE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_APERTURE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_DISTORTION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_FILTER_DENSITY; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_FOCAL_LENGTH; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_DISTANCE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key> LENS_FOCUS_RANGE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_INTRINSIC_CALIBRATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_POSE_ROTATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_POSE_TRANSLATION; + field @Deprecated @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_RADIAL_DISTORTION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_DYNAMIC_BLACK_LEVEL; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_DYNAMIC_WHITE_LEVEL; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_FRAME_DURATION; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_GREEN_SPLIT; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_NEUTRAL_COLOR_POINT; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key[]> SENSOR_NOISE_PROFILE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_ROLLING_SHUTTER_SKEW; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_SENSITIVITY; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_DATA; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SENSOR_TIMESTAMP; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key SHADING_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACES; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACE_DETECT_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_CORRECTION_MAP; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_MAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_OIS_DATA_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_OIS_SAMPLES; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key STATISTICS_SCENE_FLICKER; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key TONEMAP_CURVE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key TONEMAP_GAMMA; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key TONEMAP_MODE; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key TONEMAP_PRESET_CURVE; } public static final class CaptureResult.Key { @@ -17274,13 +17279,13 @@ package android.hardware.camera2.params { } public final class MandatoryStreamCombination { - method public String getDescription(); - method public java.util.List getStreamsInformation(); + method @NonNull public CharSequence getDescription(); + method @NonNull public java.util.List getStreamsInformation(); method public boolean isReprocessable(); } public static final class MandatoryStreamCombination.MandatoryStreamInformation { - method public java.util.List getAvailableSizes(); + method @NonNull public java.util.List getAvailableSizes(); method public int getFormat(); method public boolean isInput(); } @@ -17324,7 +17329,7 @@ package android.hardware.camera2.params { method public void removeSurface(@NonNull android.view.Surface); method public void setPhysicalCameraId(@Nullable String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SURFACE_GROUP_ID_NONE = -1; // 0xffffffff } @@ -17382,7 +17387,7 @@ package android.hardware.camera2.params { method public void setInputConfiguration(@NonNull android.hardware.camera2.params.InputConfiguration); method public void setSessionParameters(android.hardware.camera2.CaptureRequest); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SESSION_HIGH_SPEED = 1; // 0x1 field public static final int SESSION_REGULAR = 0; // 0x0 } @@ -17542,7 +17547,7 @@ package android.hardware.usb { method @Nullable public String getUri(); method @Nullable public String getVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UsbConfiguration implements android.os.Parcelable { @@ -17555,7 +17560,7 @@ package android.hardware.usb { method public boolean isRemoteWakeup(); method public boolean isSelfPowered(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class UsbConstants { @@ -17615,7 +17620,7 @@ package android.hardware.usb { method public int getVendorId(); method @NonNull public String getVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UsbDeviceConnection { @@ -17645,7 +17650,7 @@ package android.hardware.usb { method public int getMaxPacketSize(); method public int getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UsbInterface implements android.os.Parcelable { @@ -17659,7 +17664,7 @@ package android.hardware.usb { method public int getInterfaceSubclass(); method @Nullable public String getName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UsbManager { @@ -22582,7 +22587,7 @@ package android.location { method public void setThoroughfare(String); method public void setUrl(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class Criteria implements android.os.Parcelable { @@ -22615,7 +22620,7 @@ package android.location { field public static final int ACCURACY_HIGH = 3; // 0x3 field public static final int ACCURACY_LOW = 1; // 0x1 field public static final int ACCURACY_MEDIUM = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int NO_REQUIREMENT = 0; // 0x0 field public static final int POWER_HIGH = 3; // 0x3 field public static final int POWER_LOW = 1; // 0x1 @@ -22650,7 +22655,7 @@ package android.location { method public boolean hasLeapSecond(); method public boolean hasTimeUncertaintyNanos(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class GnssMeasurement implements android.os.Parcelable { @@ -22706,7 +22711,7 @@ package android.location { field public static final int CODE_TYPE_X = 10; // 0xa field public static final int CODE_TYPE_Y = 11; // 0xb field public static final int CODE_TYPE_Z = 12; // 0xc - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MULTIPATH_INDICATOR_DETECTED = 1; // 0x1 field public static final int MULTIPATH_INDICATOR_NOT_DETECTED = 2; // 0x2 field public static final int MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0 @@ -22735,7 +22740,7 @@ package android.location { method @NonNull public android.location.GnssClock getClock(); method @NonNull public java.util.Collection getMeasurements(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract static class GnssMeasurementsEvent.Callback { @@ -22757,7 +22762,7 @@ package android.location { method public int getSvid(); method public int getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_PARITY_PASSED = 1; // 0x1 field public static final int STATUS_PARITY_REBUILT = 2; // 0x2 field public static final int STATUS_UNKNOWN = 0; // 0x0 @@ -22854,6 +22859,7 @@ package android.location { method public float getBearing(); method public float getBearingAccuracyDegrees(); method public long getElapsedRealtimeNanos(); + method public long getElapsedRealtimeUncertaintyNanos(); method public android.os.Bundle getExtras(); method public double getLatitude(); method public double getLongitude(); @@ -22866,6 +22872,7 @@ package android.location { method public boolean hasAltitude(); method public boolean hasBearing(); method public boolean hasBearingAccuracy(); + method public boolean hasElapsedRealtimeUncertaintyNanos(); method public boolean hasSpeed(); method public boolean hasSpeedAccuracy(); method public boolean hasVerticalAccuracy(); @@ -22881,6 +22888,7 @@ package android.location { method public void setBearing(float); method public void setBearingAccuracyDegrees(float); method public void setElapsedRealtimeNanos(long); + method public void setElapsedRealtimeUncertaintyNanos(long); method public void setExtras(android.os.Bundle); method public void setLatitude(double); method public void setLongitude(double); @@ -22890,7 +22898,7 @@ package android.location { method public void setTime(long); method public void setVerticalAccuracyMeters(float); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FORMAT_DEGREES = 0; // 0x0 field public static final int FORMAT_MINUTES = 1; // 0x1 field public static final int FORMAT_SECONDS = 2; // 0x2 @@ -23022,7 +23030,7 @@ package android.media { field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4 field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1 field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1 field public static final int FLAG_HW_AV_SYNC = 16; // 0x10 field @Deprecated public static final int FLAG_LOW_LATENCY = 256; // 0x100 @@ -23048,7 +23056,7 @@ package android.media { ctor public AudioAttributes.Builder(); ctor public AudioAttributes.Builder(android.media.AudioAttributes); method public android.media.AudioAttributes build(); - method public android.media.AudioAttributes.Builder setAllowCapture(boolean); + method @NonNull public android.media.AudioAttributes.Builder setAllowCapture(boolean); method public android.media.AudioAttributes.Builder setContentType(int); method public android.media.AudioAttributes.Builder setFlags(int); method public android.media.AudioAttributes.Builder setLegacyStreamType(int); @@ -23169,7 +23177,7 @@ package android.media { field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000 field public static final int CHANNEL_OUT_STEREO = 12; // 0xc field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int ENCODING_AAC_ELD = 15; // 0xf field public static final int ENCODING_AAC_HE_V1 = 11; // 0xb field public static final int ENCODING_AAC_HE_V2 = 12; // 0xc @@ -23387,18 +23395,18 @@ package android.media { public static final class AudioPlaybackCaptureConfiguration.Builder { ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection); - method public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int); - method public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(@NonNull android.media.AudioAttributes); - method public android.media.AudioPlaybackCaptureConfiguration build(); - method public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int); - method public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(@NonNull android.media.AudioAttributes); + method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int); + method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(@NonNull android.media.AudioAttributes); + method @NonNull public android.media.AudioPlaybackCaptureConfiguration build(); + method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int); + method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(@NonNull android.media.AudioAttributes); } public final class AudioPlaybackConfiguration implements android.os.Parcelable { method public int describeContents(); method public android.media.AudioAttributes getAudioAttributes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AudioPresentation { @@ -23417,14 +23425,14 @@ package android.media { 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); - method @NonNull public android.media.AudioPresentation.Builder setLocale(android.icu.util.ULocale); + method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map); + 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); } @@ -23492,7 +23500,7 @@ package android.media { ctor public AudioRecord.Builder(); method public android.media.AudioRecord build() throws java.lang.UnsupportedOperationException; method public android.media.AudioRecord.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException; - method public android.media.AudioRecord.Builder setAudioPlaybackCaptureConfig(@NonNull android.media.AudioPlaybackCaptureConfiguration); + method @NonNull public android.media.AudioRecord.Builder setAudioPlaybackCaptureConfig(@NonNull android.media.AudioPlaybackCaptureConfiguration); method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException; method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException; } @@ -23527,7 +23535,7 @@ package android.media { method public android.media.AudioFormat getFormat(); method public boolean isClientSilenced(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface AudioRecordingMonitor { @@ -23564,14 +23572,13 @@ package android.media { method @Deprecated public void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler); method public int attachAuxEffect(int); method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration); - method public static void deprecateStreamTypeForPlayback(int, String, String) throws java.lang.IllegalArgumentException; method protected void finalize(); method public void flush(); method @NonNull public android.media.AudioAttributes getAudioAttributes(); method public int getAudioFormat(); method public int getAudioSessionId(); - method public int getBufferCapacityInFrames(); - method public int getBufferSizeInFrames(); + method @IntRange(from=0) public int getBufferCapacityInFrames(); + method @IntRange(from=0) public int getBufferSizeInFrames(); method public int getChannelConfiguration(); method public int getChannelCount(); method @NonNull public android.media.AudioFormat getFormat(); @@ -23582,6 +23589,8 @@ package android.media { method @Deprecated protected int getNativeFrameCount(); method public static int getNativeOutputSampleRate(int); method public int getNotificationMarkerPosition(); + method @IntRange(from=0) public int getOffloadDelay(); + method @IntRange(from=0) public int getOffloadPadding(); method public int getPerformanceMode(); method public int getPlayState(); method public int getPlaybackHeadPosition(); @@ -23596,6 +23605,7 @@ package android.media { method public boolean getTimestamp(android.media.AudioTimestamp); method public int getUnderrunCount(); method public static boolean isDirectPlaybackSupported(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes); + method public boolean isOffloadedPlayback(); method public void pause() throws java.lang.IllegalStateException; method public void play() throws java.lang.IllegalStateException; method public void registerStreamEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioTrack.StreamEventCallback); @@ -23603,13 +23613,13 @@ package android.media { method public int reloadStaticData(); method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener); - method public int setAuxEffectSendLevel(float); - method public int setBufferSizeInFrames(int); - method public int setLoopPoints(int, int, int); + method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float); + method public int setBufferSizeInFrames(@IntRange(from=0) int); + method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int); method public int setNotificationMarkerPosition(int); - method public void setOffloadDelayPadding(int, int); + method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int); method public void setOffloadEndOfStream(); - method public int setPlaybackHeadPosition(int); + method public int setPlaybackHeadPosition(@IntRange(from=0) int); method public void setPlaybackParams(@NonNull android.media.PlaybackParams); method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener); method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler); @@ -23654,10 +23664,10 @@ package android.media { method @NonNull public android.media.AudioTrack build() throws java.lang.UnsupportedOperationException; method @NonNull public android.media.AudioTrack.Builder setAudioAttributes(@NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException; method @NonNull public android.media.AudioTrack.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException; - method @NonNull public android.media.AudioTrack.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException; + method @NonNull public android.media.AudioTrack.Builder setBufferSizeInBytes(@IntRange(from=0) int) throws java.lang.IllegalArgumentException; method @NonNull public android.media.AudioTrack.Builder setOffloadedPlayback(boolean); method @NonNull public android.media.AudioTrack.Builder setPerformanceMode(int); - method @NonNull public android.media.AudioTrack.Builder setSessionId(int) throws java.lang.IllegalArgumentException; + method @NonNull public android.media.AudioTrack.Builder setSessionId(@IntRange(from=1) int) throws java.lang.IllegalArgumentException; method @NonNull public android.media.AudioTrack.Builder setTransferMode(int) throws java.lang.IllegalArgumentException; } @@ -23681,18 +23691,18 @@ package android.media { public abstract static class AudioTrack.StreamEventCallback { ctor public AudioTrack.StreamEventCallback(); - method public void onDataRequest(android.media.AudioTrack, int); - method public void onPresentationEnded(android.media.AudioTrack); - method public void onTearDown(android.media.AudioTrack); + method public void onDataRequest(@NonNull android.media.AudioTrack, @IntRange(from=0) int); + method public void onPresentationEnded(@NonNull android.media.AudioTrack); + method public void onTearDown(@NonNull android.media.AudioTrack); } public class CallbackDataSourceDesc extends android.media.DataSourceDesc { - method public android.media.DataSourceCallback getDataSourceCallback(); + method @NonNull public android.media.DataSourceCallback getDataSourceCallback(); } public static class CallbackDataSourceDesc.Builder extends android.media.DataSourceDesc.BuilderBase { ctor public CallbackDataSourceDesc.Builder(); - ctor public CallbackDataSourceDesc.Builder(android.media.CallbackDataSourceDesc); + ctor public CallbackDataSourceDesc.Builder(@Nullable android.media.CallbackDataSourceDesc); method @NonNull public android.media.CallbackDataSourceDesc build(); method @NonNull public android.media.CallbackDataSourceDesc.Builder setDataSource(@NonNull android.media.DataSourceCallback); } @@ -23752,12 +23762,12 @@ package android.media { public abstract class DataSourceCallback implements java.io.Closeable { ctor public DataSourceCallback(); method public abstract long getSize() throws java.io.IOException; - method public abstract int readAt(long, byte[], int, int) throws java.io.IOException; + method public abstract int readAt(long, @NonNull byte[], int, int) throws java.io.IOException; } public class DataSourceDesc { method public long getEndPosition(); - method public String getMediaId(); + method @Nullable public String getMediaId(); method public long getStartPosition(); field public static final long LONG_MAX_TIME_MS = 576460752303423L; // 0x20c49ba5e353fL field public static final long POSITION_UNKNOWN = 576460752303423L; // 0x20c49ba5e353fL @@ -23765,7 +23775,7 @@ package android.media { protected static class DataSourceDesc.BuilderBase { method @NonNull public T setEndPosition(long); - method @NonNull public T setMediaId(String); + method @NonNull public T setMediaId(@Nullable String); method @NonNull public T setStartPosition(long); } @@ -23974,13 +23984,13 @@ package android.media { public class FileDataSourceDesc extends android.media.DataSourceDesc { method public long getLength(); method public long getOffset(); - method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); + method @NonNull public android.os.ParcelFileDescriptor getParcelFileDescriptor(); field public static final long FD_LENGTH_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL } public static class FileDataSourceDesc.Builder extends android.media.DataSourceDesc.BuilderBase { ctor public FileDataSourceDesc.Builder(); - ctor public FileDataSourceDesc.Builder(android.media.FileDataSourceDesc); + ctor public FileDataSourceDesc.Builder(@Nullable android.media.FileDataSourceDesc); method @NonNull public android.media.FileDataSourceDesc build(); method @NonNull public android.media.FileDataSourceDesc.Builder setDataSource(@NonNull android.os.ParcelFileDescriptor); method @NonNull public android.media.FileDataSourceDesc.Builder setDataSource(@NonNull android.os.ParcelFileDescriptor, long, long); @@ -24721,7 +24731,7 @@ package android.media { field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE"; } @@ -25126,11 +25136,11 @@ package android.media { method public long getStartPosition(); method public void setMetadata(@Nullable android.media.MediaMetadata); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long POSITION_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL } - public static class MediaItem2.Builder { + public static final class MediaItem2.Builder { ctor public MediaItem2.Builder(); method @NonNull public android.media.MediaItem2 build(); method @NonNull public android.media.MediaItem2.Builder setEndPosition(long); @@ -25150,7 +25160,7 @@ package android.media { method public java.util.Set keySet(); method public int size(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM"; field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART"; field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST"; @@ -25318,7 +25328,6 @@ package android.media { method public static android.media.MediaPlayer create(android.content.Context, int); method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int); method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration); - method public static void deprecateStreamTypeForPlayback(int, String, String) throws java.lang.IllegalArgumentException; method public void deselectTrack(int) throws java.lang.IllegalStateException; method protected void finalize(); method public int getAudioSessionId(); @@ -25532,16 +25541,16 @@ package android.media { } public class MediaPlayer2 implements android.media.AudioRouting java.lang.AutoCloseable { - ctor public MediaPlayer2(android.content.Context); - method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler); - method public Object attachAuxEffect(int); + ctor public MediaPlayer2(@NonNull android.content.Context); + method public void addOnRoutingChangedListener(@NonNull android.media.AudioRouting.OnRoutingChangedListener, @Nullable android.os.Handler); + method @NonNull public Object attachAuxEffect(int); method public boolean cancelCommand(@NonNull Object); method public void clearDrmEventCallback(); - method public Object clearNextDataSources(); + method @NonNull public Object clearNextDataSources(); method public void clearPendingCommands(); method public void close(); - method public Object deselectTrack(int); - method public Object deselectTrack(@NonNull android.media.DataSourceDesc, int); + method @NonNull public Object deselectTrack(int); + method @NonNull public Object deselectTrack(@NonNull android.media.DataSourceDesc, int); method @NonNull public android.media.AudioAttributes getAudioAttributes(); method public int getAudioSessionId(); method public long getBufferedPosition(); @@ -25551,11 +25560,11 @@ package android.media { method public long getDuration(); method public long getDuration(@NonNull android.media.DataSourceDesc); method public float getMaxPlayerVolume(); - method public android.os.PersistableBundle getMetrics(); + method @Nullable public android.os.PersistableBundle getMetrics(); method @NonNull public android.media.PlaybackParams getPlaybackParams(); method public float getPlayerVolume(); - method public android.media.AudioDeviceInfo getPreferredDevice(); - method public android.media.AudioDeviceInfo getRoutedDevice(); + method @Nullable public android.media.AudioDeviceInfo getPreferredDevice(); + method @Nullable public android.media.AudioDeviceInfo getRoutedDevice(); method public int getSelectedTrack(int); method public int getSelectedTrack(@NonNull android.media.DataSourceDesc, int); method public int getState(); @@ -25563,37 +25572,37 @@ package android.media { method @Nullable public android.media.MediaTimestamp getTimestamp(); method @NonNull public java.util.List getTrackInfo(); method @NonNull public java.util.List getTrackInfo(@NonNull android.media.DataSourceDesc); - method public android.util.Size getVideoSize(); + method @NonNull public android.util.Size getVideoSize(); method public boolean isLooping(); - method public Object loopCurrent(boolean); - method public Object notifyWhenCommandLabelReached(@NonNull Object); - method public Object pause(); - method public Object play(); - method public Object prepare(); + method @NonNull public Object loopCurrent(boolean); + method @NonNull public Object notifyWhenCommandLabelReached(@NonNull Object); + method @NonNull public Object pause(); + method @NonNull public Object play(); + method @NonNull public Object prepare(); method public void registerEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaPlayer2.EventCallback); - method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener); + method public void removeOnRoutingChangedListener(@NonNull android.media.AudioRouting.OnRoutingChangedListener); method public void reset(); - method public Object seekTo(long); - method public Object seekTo(long, int); - method public Object selectTrack(int); - method public Object selectTrack(@NonNull android.media.DataSourceDesc, int); - method public Object setAudioAttributes(@NonNull android.media.AudioAttributes); - method public Object setAudioSessionId(int); - method public Object setAuxEffectSendLevel(float); - method public Object setDataSource(@NonNull android.media.DataSourceDesc); - method public Object setDisplay(android.view.SurfaceHolder); + method @NonNull public Object seekTo(long); + method @NonNull public Object seekTo(long, int); + method @NonNull public Object selectTrack(int); + method @NonNull public Object selectTrack(@NonNull android.media.DataSourceDesc, int); + method @NonNull public Object setAudioAttributes(@NonNull android.media.AudioAttributes); + method @NonNull public Object setAudioSessionId(int); + method @NonNull public Object setAuxEffectSendLevel(float); + method @NonNull public Object setDataSource(@NonNull android.media.DataSourceDesc); + method @NonNull public Object setDisplay(@Nullable android.view.SurfaceHolder); method public void setDrmEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaPlayer2.DrmEventCallback); - method public Object setNextDataSource(@NonNull android.media.DataSourceDesc); - method public Object setNextDataSources(@NonNull java.util.List); - method public Object setPlaybackParams(@NonNull android.media.PlaybackParams); - method public Object setPlayerVolume(float); - method public boolean setPreferredDevice(android.media.AudioDeviceInfo); - method public Object setScreenOnWhilePlaying(boolean); - method public Object setSurface(android.view.Surface); - method public Object setSyncParams(@NonNull android.media.SyncParams); - method public Object setWakeLock(@NonNull android.os.PowerManager.WakeLock); - method public Object skipToNext(); - method public void unregisterEventCallback(android.media.MediaPlayer2.EventCallback); + method @NonNull public Object setNextDataSource(@NonNull android.media.DataSourceDesc); + method @NonNull public Object setNextDataSources(@NonNull java.util.List); + method @NonNull public Object setPlaybackParams(@NonNull android.media.PlaybackParams); + method @NonNull public Object setPlayerVolume(float); + method public boolean setPreferredDevice(@Nullable android.media.AudioDeviceInfo); + method @NonNull public Object setScreenOnWhilePlaying(boolean); + method @NonNull public Object setSurface(@Nullable android.view.Surface); + method @NonNull public Object setSyncParams(@NonNull android.media.SyncParams); + method @NonNull public Object setWakeLock(@NonNull android.os.PowerManager.WakeLock); + method @NonNull public Object skipToNext(); + method public void unregisterEventCallback(@NonNull android.media.MediaPlayer2.EventCallback); field public static final int CALL_COMPLETED_ATTACH_AUX_EFFECT = 1; // 0x1 field public static final int CALL_COMPLETED_CLEAR_NEXT_DATA_SOURCES = 30; // 0x1e field public static final int CALL_COMPLETED_DESELECT_TRACK = 2; // 0x2 @@ -25728,8 +25737,8 @@ package android.media { } public static class MediaPlayer2.TrackInfo { - method public android.media.MediaFormat getFormat(); - method public String getLanguage(); + method @Nullable public android.media.MediaFormat getFormat(); + method @Nullable public String getLanguage(); method public int getTrackType(); field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2 field public static final int MEDIA_TRACK_TYPE_METADATA = 5; // 0x5 @@ -26188,7 +26197,7 @@ package android.media { field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0 field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2 field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class Rating implements android.os.Parcelable { @@ -26205,7 +26214,7 @@ package android.media { method public static android.media.Rating newThumbRating(boolean); method public static android.media.Rating newUnratedRating(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int RATING_3_STARS = 3; // 0x3 field public static final int RATING_4_STARS = 4; // 0x4 field public static final int RATING_5_STARS = 5; // 0x5 @@ -26364,7 +26373,7 @@ package android.media { method @Nullable public android.os.Bundle getExtras(); method public void writeToParcel(@NonNull android.os.Parcel, int); field public static final int COMMAND_CODE_CUSTOM = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int RESULT_ERROR_UNKNOWN_ERROR = -1; // 0xffffffff field public static final int RESULT_INFO_SKIPPED = 1; // 0x1 field public static final int RESULT_SUCCESS = 0; // 0x0 @@ -26382,7 +26391,7 @@ package android.media { method public boolean hasCommand(@NonNull android.media.Session2Command); method public boolean hasCommand(int); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class Session2CommandGroup.Builder { @@ -26404,7 +26413,7 @@ package android.media { method public int getType(); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_SESSION = 0; // 0x0 field public static final int TYPE_SESSION_SERVICE = 1; // 0x1 } @@ -26413,7 +26422,6 @@ package android.media { ctor @Deprecated public SoundPool(int, int, int); method public final void autoPause(); method public final void autoResume(); - method public static void deprecateStreamTypeForPlayback(int, String, String) throws java.lang.IllegalArgumentException; method protected void finalize(); method public int load(String, int); method public int load(android.content.Context, int, int); @@ -26609,15 +26617,15 @@ package android.media { } public class UriDataSourceDesc extends android.media.DataSourceDesc { - method public android.content.Context getContext(); - method public java.util.List getCookies(); - method public java.util.Map getHeaders(); - method public android.net.Uri getUri(); + method @NonNull public android.content.Context getContext(); + method @Nullable public java.util.List getCookies(); + method @Nullable public java.util.Map getHeaders(); + method @NonNull public android.net.Uri getUri(); } public static class UriDataSourceDesc.Builder extends android.media.DataSourceDesc.BuilderBase { ctor public UriDataSourceDesc.Builder(); - ctor public UriDataSourceDesc.Builder(android.media.UriDataSourceDesc); + ctor public UriDataSourceDesc.Builder(@Nullable android.media.UriDataSourceDesc); method @NonNull public android.media.UriDataSourceDesc build(); method @NonNull public android.media.UriDataSourceDesc.Builder setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri); method @NonNull public android.media.UriDataSourceDesc.Builder setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map, @Nullable java.util.List); @@ -26656,7 +26664,7 @@ package android.media { method public float[] getTimes(); method public float[] getVolumes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.media.VolumeShaper.Configuration CUBIC_RAMP; field public static final int INTERPOLATOR_TYPE_CUBIC = 2; // 0x2 field public static final int INTERPOLATOR_TYPE_CUBIC_MONOTONIC = 3; // 0x3 @@ -26683,7 +26691,7 @@ package android.media { public static final class VolumeShaper.Operation implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.media.VolumeShaper.Operation PLAY; field public static final android.media.VolumeShaper.Operation REVERSE; } @@ -27236,7 +27244,7 @@ package android.media.browse { method public boolean isBrowsable(); method public boolean isPlayable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_BROWSABLE = 1; // 0x1 field public static final int FLAG_PLAYABLE = 2; // 0x2 } @@ -27330,7 +27338,7 @@ package android.media.midi { method public int getType(); method public boolean isPrivate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device"; field public static final String PROPERTY_MANUFACTURER = "manufacturer"; field public static final String PROPERTY_NAME = "name"; @@ -27368,7 +27376,7 @@ package android.media.midi { method public int getOutputPortOpenCount(int); method public boolean isInputPortOpen(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class MidiInputPort extends android.media.midi.MidiReceiver implements java.io.Closeable { @@ -27491,7 +27499,7 @@ package android.media.session { method public int getPlaybackType(); method public int getVolumeControl(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1 field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2 } @@ -27577,14 +27585,14 @@ package android.media.session { method public android.media.MediaDescription getDescription(); method public long getQueueId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int UNKNOWN_ID = -1; // 0xffffffff } public static final class MediaSession.Token implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class MediaSessionManager { @@ -27646,7 +27654,7 @@ package android.media.session { field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L field public static final long ACTION_STOP = 1L; // 0x1L - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final int STATE_BUFFERING = 6; // 0x6 field public static final int STATE_CONNECTING = 8; // 0x8 @@ -27684,7 +27692,7 @@ package android.media.session { method public int getIcon(); method public CharSequence getName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class PlaybackState.CustomAction.Builder { @@ -28122,7 +28130,7 @@ package android.media.tv { method public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context); method public CharSequence loadLabel(@NonNull android.content.Context); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; field public static final int TYPE_COMPONENT = 1004; // 0x3ec field public static final int TYPE_COMPOSITE = 1001; // 0x3e9 @@ -28291,7 +28299,7 @@ package android.media.tv { method public float getVideoPixelAspectRatio(); method public int getVideoWidth(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_AUDIO = 0; // 0x0 field public static final int TYPE_SUBTITLE = 2; // 0x2 field public static final int TYPE_VIDEO = 1; // 0x1 @@ -28613,7 +28621,7 @@ package android.net { method public void ignoreNetwork(); method public void reportCaptivePortalDismissed(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ConnectivityManager { @@ -28752,8 +28760,8 @@ package android.net { } public class InetAddresses { - method public static boolean isNumericAddress(String); - method public static java.net.InetAddress parseNumericAddress(String); + method public static boolean isNumericAddress(@NonNull String); + method @NonNull public static java.net.InetAddress parseNumericAddress(@NonNull String); } public final class IpPrefix implements android.os.Parcelable { @@ -28763,7 +28771,7 @@ package android.net { method public int getPrefixLength(); method public byte[] getRawAddress(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class IpSecAlgorithm implements android.os.Parcelable { @@ -28780,7 +28788,7 @@ package android.net { field public static final String AUTH_HMAC_SHA256 = "hmac(sha256)"; field public static final String AUTH_HMAC_SHA384 = "hmac(sha384)"; field public static final String AUTH_HMAC_SHA512 = "hmac(sha512)"; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String CRYPT_AES_CBC = "cbc(aes)"; } @@ -28837,7 +28845,7 @@ package android.net { method public int getPrefixLength(); method public int getScope(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class LinkProperties implements android.os.Parcelable { @@ -28852,7 +28860,7 @@ package android.net { method public java.util.List getRoutes(); method public boolean isPrivateDnsActive(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class LocalServerSocket implements java.io.Closeable { @@ -28920,7 +28928,7 @@ package android.net { method @NonNull public String toOuiString(); method public void writeToParcel(android.os.Parcel, int); field public static final android.net.MacAddress BROADCAST_ADDRESS; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_BROADCAST = 3; // 0x3 field public static final int TYPE_MULTICAST = 2; // 0x2 field public static final int TYPE_UNICAST = 1; // 0x1 @@ -28950,7 +28958,7 @@ package android.net { method public java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; method public java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException; method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NetworkCapabilities implements android.os.Parcelable { @@ -28962,7 +28970,7 @@ package android.net { method public boolean hasCapability(int); method public boolean hasTransport(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int NET_CAPABILITY_CAPTIVE_PORTAL = 17; // 0x11 field public static final int NET_CAPABILITY_CBS = 5; // 0x5 field public static final int NET_CAPABILITY_DUN = 2; // 0x2 @@ -28972,6 +28980,7 @@ package android.net { field public static final int NET_CAPABILITY_IA = 7; // 0x7 field public static final int NET_CAPABILITY_IMS = 4; // 0x4 field public static final int NET_CAPABILITY_INTERNET = 12; // 0xc + field public static final int NET_CAPABILITY_MCX = 23; // 0x17 field public static final int NET_CAPABILITY_MMS = 0; // 0x0 field public static final int NET_CAPABILITY_NOT_CONGESTED = 20; // 0x14 field public static final int NET_CAPABILITY_NOT_METERED = 11; // 0xb @@ -29010,7 +29019,7 @@ package android.net { method @Deprecated public boolean isFailover(); method @Deprecated public boolean isRoaming(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public enum NetworkInfo.DetailedState { @@ -29043,7 +29052,7 @@ package android.net { method public boolean hasCapability(int); method public boolean hasTransport(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class NetworkRequest.Builder { @@ -29085,7 +29094,7 @@ package android.net { method public android.net.Uri getPacFileUrl(); method public int getPort(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RouteInfo implements android.os.Parcelable { @@ -29097,7 +29106,7 @@ package android.net { method public boolean isDefaultRoute(); method public boolean matches(java.net.InetAddress); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory { @@ -29230,7 +29239,7 @@ package android.net { method public abstract String toString(); method public static android.net.Uri withAppendedPath(android.net.Uri, String); method public static void writeToParcel(android.os.Parcel, android.net.Uri); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.net.Uri EMPTY; } @@ -29344,25 +29353,25 @@ package android.net { public class VpnService.Builder { ctor public VpnService.Builder(); - method public android.net.VpnService.Builder addAddress(java.net.InetAddress, int); - method public android.net.VpnService.Builder addAddress(String, int); - method public android.net.VpnService.Builder addAllowedApplication(String) throws android.content.pm.PackageManager.NameNotFoundException; - method public android.net.VpnService.Builder addDisallowedApplication(String) throws android.content.pm.PackageManager.NameNotFoundException; - method public android.net.VpnService.Builder addDnsServer(java.net.InetAddress); - method public android.net.VpnService.Builder addDnsServer(String); - method public android.net.VpnService.Builder addRoute(java.net.InetAddress, int); - method public android.net.VpnService.Builder addRoute(String, int); - method public android.net.VpnService.Builder addSearchDomain(String); - method public android.net.VpnService.Builder allowBypass(); - method public android.net.VpnService.Builder allowFamily(int); - method public android.os.ParcelFileDescriptor establish(); - method public android.net.VpnService.Builder setBlocking(boolean); - method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); - method public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo); - method public android.net.VpnService.Builder setMetered(boolean); - method public android.net.VpnService.Builder setMtu(int); - method public android.net.VpnService.Builder setSession(String); - method public android.net.VpnService.Builder setUnderlyingNetworks(android.net.Network[]); + method @NonNull public android.net.VpnService.Builder addAddress(@NonNull java.net.InetAddress, int); + method @NonNull public android.net.VpnService.Builder addAddress(@NonNull String, int); + method @NonNull public android.net.VpnService.Builder addAllowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @NonNull public android.net.VpnService.Builder addDisallowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull java.net.InetAddress); + method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull String); + method @NonNull public android.net.VpnService.Builder addRoute(@NonNull java.net.InetAddress, int); + method @NonNull public android.net.VpnService.Builder addRoute(@NonNull String, int); + method @NonNull public android.net.VpnService.Builder addSearchDomain(@NonNull String); + method @NonNull public android.net.VpnService.Builder allowBypass(); + method @NonNull public android.net.VpnService.Builder allowFamily(int); + method @Nullable public android.os.ParcelFileDescriptor establish(); + method @NonNull public android.net.VpnService.Builder setBlocking(boolean); + method @NonNull public android.net.VpnService.Builder setConfigureIntent(@NonNull android.app.PendingIntent); + method @NonNull public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo); + method @NonNull public android.net.VpnService.Builder setMetered(boolean); + method @NonNull public android.net.VpnService.Builder setMtu(int); + method @NonNull public android.net.VpnService.Builder setSession(@NonNull String); + method @NonNull public android.net.VpnService.Builder setUnderlyingNetworks(@Nullable android.net.Network[]); } } @@ -29394,7 +29403,7 @@ package android.net.http { method public java.util.Date getValidNotAfterDate(); method @Deprecated public String getValidNotBefore(); method public java.util.Date getValidNotBeforeDate(); - method public java.security.cert.X509Certificate getX509Certificate(); + method @Nullable public java.security.cert.X509Certificate getX509Certificate(); method public static android.net.http.SslCertificate restoreState(android.os.Bundle); method public static android.os.Bundle saveState(android.net.http.SslCertificate); } @@ -29489,7 +29498,7 @@ package android.net.nsd { method public void setServiceName(String); method public void setServiceType(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -29909,7 +29918,7 @@ package android.net.wifi { method public void setRealm(String); method @Deprecated public void setSubjectMatch(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class WifiEnterpriseConfig.Eap { @@ -29979,8 +29988,8 @@ package android.net.wifi { method public boolean is5GHzBandSupported(); method @Deprecated public boolean isDeviceToApRttSupported(); method public boolean isEasyConnectSupported(); + method public boolean isEnhancedOpenSupported(); method public boolean isEnhancedPowerReportingSupported(); - method public boolean isOweSupported(); method public boolean isP2pSupported(); method public boolean isPreferredNetworkOffloadSupported(); method @Deprecated public boolean isScanAlwaysAvailable(); @@ -30087,45 +30096,45 @@ package android.net.wifi { public final class WifiNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } - public static class WifiNetworkSpecifier.Builder { + public static final class WifiNetworkSpecifier.Builder { ctor public WifiNetworkSpecifier.Builder(); - method public android.net.NetworkSpecifier build(); - method public android.net.wifi.WifiNetworkSpecifier.Builder setBssid(@NonNull android.net.MacAddress); - method public android.net.wifi.WifiNetworkSpecifier.Builder setBssidPattern(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress); - method public android.net.wifi.WifiNetworkSpecifier.Builder setIsEnhancedOpen(); - method public android.net.wifi.WifiNetworkSpecifier.Builder setIsHiddenSsid(); - method public android.net.wifi.WifiNetworkSpecifier.Builder setSsid(@NonNull String); - method public android.net.wifi.WifiNetworkSpecifier.Builder setSsidPattern(@NonNull android.os.PatternMatcher); - method public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); - method public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2Passphrase(@NonNull String); - method public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); - method public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Passphrase(@NonNull String); + method @NonNull public android.net.NetworkSpecifier build(); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssid(@NonNull android.net.MacAddress); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssidPattern(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsEnhancedOpen(); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsHiddenSsid(); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsid(@NonNull String); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsidPattern(@NonNull android.os.PatternMatcher); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2Passphrase(@NonNull String); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); + method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Passphrase(@NonNull String); } public final class WifiNetworkSuggestion implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } - public static class WifiNetworkSuggestion.Builder { + public static final class WifiNetworkSuggestion.Builder { ctor public WifiNetworkSuggestion.Builder(); - method public android.net.wifi.WifiNetworkSuggestion build(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setBssid(@NonNull android.net.MacAddress); - method public android.net.wifi.WifiNetworkSuggestion.Builder setIsAppInteractionRequired(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setIsEnhancedOpen(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setIsHiddenSsid(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setIsMetered(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setIsUserInteractionRequired(); - method public android.net.wifi.WifiNetworkSuggestion.Builder setPriority(int); - method public android.net.wifi.WifiNetworkSuggestion.Builder setSsid(@NonNull String); - method public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); - method public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2Passphrase(@NonNull String); - method public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); - method public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Passphrase(@NonNull String); + method @NonNull public android.net.wifi.WifiNetworkSuggestion build(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setBssid(@NonNull android.net.MacAddress); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsAppInteractionRequired(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsEnhancedOpen(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsHiddenSsid(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsMetered(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsUserInteractionRequired(); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriority(int); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSsid(@NonNull String); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2Passphrase(@NonNull String); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig); + method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Passphrase(@NonNull String); } public class WpsInfo implements android.os.Parcelable { @@ -30134,7 +30143,7 @@ package android.net.wifi { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); field public String BSSID; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DISPLAY = 1; // 0x1 field public static final int INVALID = 4; // 0x4 field public static final int KEYPAD = 2; // 0x2 @@ -30160,7 +30169,7 @@ package android.net.wifi.aware { method public int getMaxServiceNameLength(); method public int getMaxServiceSpecificInfoLength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class DiscoverySession implements java.lang.AutoCloseable { @@ -30193,7 +30202,7 @@ package android.net.wifi.aware { ctor public ParcelablePeerHandle(android.net.wifi.aware.PeerHandle); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class PeerHandle { @@ -30202,7 +30211,7 @@ package android.net.wifi.aware { public final class PublishConfig implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1 field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0 } @@ -30226,7 +30235,7 @@ package android.net.wifi.aware { public final class SubscribeConfig implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1 field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0 } @@ -30274,7 +30283,7 @@ package android.net.wifi.aware { method public int getPort(); method public int getTransportProtocol(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class WifiAwareSession implements java.lang.AutoCloseable { @@ -30302,7 +30311,7 @@ package android.net.wifi.hotspot2 { method public void setCredential(android.net.wifi.hotspot2.pps.Credential); method public void setHomeSp(android.net.wifi.hotspot2.pps.HomeSp); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -30336,7 +30345,7 @@ package android.net.wifi.hotspot2.pps { method public void setSimCredential(android.net.wifi.hotspot2.pps.Credential.SimCredential); method public void setUserCredential(android.net.wifi.hotspot2.pps.Credential.UserCredential); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class Credential.CertificateCredential implements android.os.Parcelable { @@ -30348,7 +30357,7 @@ package android.net.wifi.hotspot2.pps { method public void setCertSha256Fingerprint(byte[]); method public void setCertType(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class Credential.SimCredential implements android.os.Parcelable { @@ -30360,7 +30369,7 @@ package android.net.wifi.hotspot2.pps { method public void setEapType(int); method public void setImsi(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class Credential.UserCredential implements android.os.Parcelable { @@ -30376,7 +30385,7 @@ package android.net.wifi.hotspot2.pps { method public void setPassword(String); method public void setUsername(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class HomeSp implements android.os.Parcelable { @@ -30390,7 +30399,7 @@ package android.net.wifi.hotspot2.pps { method public void setFriendlyName(String); method public void setRoamingConsortiumOis(long[]); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -30402,7 +30411,7 @@ package android.net.wifi.p2p { ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1 field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2 field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0 @@ -30434,7 +30443,7 @@ package android.net.wifi.p2p { method public void writeToParcel(android.os.Parcel, int); field public static final int AVAILABLE = 3; // 0x3 field public static final int CONNECTED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FAILED = 2; // 0x2 field public static final int INVITED = 1; // 0x1 field public static final int UNAVAILABLE = 4; // 0x4 @@ -30452,7 +30461,7 @@ package android.net.wifi.p2p { method public android.net.wifi.p2p.WifiP2pDevice get(String); method public java.util.Collection getDeviceList(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class WifiP2pGroup implements android.os.Parcelable { @@ -30467,7 +30476,7 @@ package android.net.wifi.p2p { method public String getPassphrase(); method public boolean isGroupOwner(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class WifiP2pInfo implements android.os.Parcelable { @@ -30475,7 +30484,7 @@ package android.net.wifi.p2p { ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public boolean groupFormed; field public java.net.InetAddress groupOwnerAddress; field public boolean isGroupOwner; @@ -30633,7 +30642,7 @@ package android.net.wifi.rtt { method public int describeContents(); method public static int getMaxPeers(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class RangingRequest.Builder { @@ -30658,7 +30667,7 @@ package android.net.wifi.rtt { method public int getRssi(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_FAIL = 1; // 0x1 field public static final int STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC = 2; // 0x2 field public static final int STATUS_SUCCESS = 0; // 0x0 @@ -30696,7 +30705,7 @@ package android.net.wifi.rtt { field public static final int ALTITUDE_FLOORS = 2; // 0x2 field public static final int ALTITUDE_METERS = 1; // 0x1 field public static final int ALTITUDE_UNDEFINED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DATUM_NAD83_MLLW = 3; // 0x3 field public static final int DATUM_NAD83_NAV88 = 2; // 0x2 field public static final int DATUM_UNDEFINED = 0; // 0x0 @@ -30755,7 +30764,7 @@ package android.nfc { method public android.nfc.NdefRecord[] getRecords(); method public byte[] toByteArray(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NdefRecord implements android.os.Parcelable { @@ -30776,7 +30785,7 @@ package android.nfc { method public String toMimeType(); method public android.net.Uri toUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final byte[] RTD_ALTERNATIVE_CARRIER; field public static final byte[] RTD_HANDOVER_CARRIER; field public static final byte[] RTD_HANDOVER_REQUEST; @@ -30874,7 +30883,7 @@ package android.nfc { method public byte[] getId(); method public String[] getTechList(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class TagLostException extends java.io.IOException { @@ -34386,7 +34395,7 @@ package android.os { method public void readFromParcel(android.os.Parcel); method public void setClassLoader(ClassLoader); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.os.Bundle EMPTY; } @@ -34424,7 +34433,7 @@ package android.os { method public long getActive(); method public long getTotal(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class DeadObjectException extends android.os.RemoteException { @@ -34532,7 +34541,7 @@ package android.os { method public int getTotalSwappablePss(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int dalvikPrivateDirty; field public int dalvikPss; field public int dalvikSharedDirty; @@ -34573,7 +34582,7 @@ package android.os { method public String getText(int); method public long getTimeMillis(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class Environment { @@ -34584,7 +34593,7 @@ package android.os { 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); @@ -34770,7 +34779,7 @@ package android.os { method @IntRange(from=0) public int size(); method @NonNull public String toLanguageTags(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class Looper { @@ -34825,7 +34834,7 @@ package android.os { method public void setData(android.os.Bundle); method public void setTarget(android.os.Handler); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int arg1; field public int arg2; field public Object obj; @@ -34862,7 +34871,7 @@ package android.os { method public void send(android.os.Message) throws android.os.RemoteException; method public static void writeMessengerOrNullToParcel(android.os.Messenger, android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class NetworkOnMainThreadException extends java.lang.RuntimeException { @@ -35019,7 +35028,7 @@ package android.os { method public static android.os.ParcelFileDescriptor open(java.io.File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException; method public static int parseMode(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MODE_APPEND = 33554432; // 0x2000000 field public static final int MODE_CREATE = 134217728; // 0x8000000 field public static final int MODE_READ_ONLY = 268435456; // 0x10000000 @@ -35057,7 +35066,7 @@ package android.os { method public static android.os.ParcelUuid fromString(String); method public java.util.UUID getUuid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface Parcelable { @@ -35084,7 +35093,7 @@ package android.os { method public final int getType(); method public boolean match(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PATTERN_ADVANCED_GLOB = 3; // 0x3 field public static final int PATTERN_LITERAL = 0; // 0x0 field public static final int PATTERN_PREFIX = 1; // 0x1 @@ -35101,7 +35110,7 @@ package android.os { method @Nullable public android.os.PersistableBundle getPersistableBundle(@Nullable String); method public void putPersistableBundle(@Nullable String, @Nullable android.os.PersistableBundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.os.PersistableBundle EMPTY; } @@ -35127,6 +35136,7 @@ package android.os { field public static final int LOCATION_MODE_FOREGROUND_ONLY = 3; // 0x3 field public static final int LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF = 1; // 0x1 field public static final int LOCATION_MODE_NO_CHANGE = 0; // 0x0 + field public static final int LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF = 4; // 0x4 field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000 field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1 field public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32; // 0x20 @@ -35250,7 +35260,7 @@ package android.os { method protected void onReceiveResult(int, android.os.Bundle); method public void send(int, android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SharedMemory implements java.io.Closeable android.os.Parcelable { @@ -35264,7 +35274,7 @@ package android.os { method public boolean setProtect(int); method public static void unmap(@NonNull java.nio.ByteBuffer); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class StatFs { @@ -35310,27 +35320,27 @@ package android.os { 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 { @@ -35341,26 +35351,26 @@ package android.os { 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 { @@ -35415,7 +35425,7 @@ package android.os { method public static android.os.UserHandle readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); method public static void writeToParcel(android.os.UserHandle, android.os.Parcel); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UserManager { @@ -35516,11 +35526,11 @@ package android.os { public abstract class VibrationEffect implements android.os.Parcelable { method public static android.os.VibrationEffect createOneShot(long, int); - method public static android.os.VibrationEffect createPrebaked(int); + method @NonNull public static android.os.VibrationEffect createPredefined(int); method public static android.os.VibrationEffect createWaveform(long[], int); method public static android.os.VibrationEffect createWaveform(long[], int[], int); method public int describeContents(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DEFAULT_AMPLITUDE = -1; // 0xffffffff field public static final int EFFECT_CLICK = 0; // 0x0 field public static final int EFFECT_DOUBLE_CLICK = 1; // 0x1 @@ -35550,7 +35560,7 @@ package android.os { method public boolean remove(android.os.WorkSource); method public void set(android.os.WorkSource); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -35624,7 +35634,7 @@ package android.os.health { method public void setCount(int); method public void setTime(long); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class UidHealthStats { @@ -35749,7 +35759,7 @@ package android.os.storage { method public boolean isPrimary(); method public boolean isRemovable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_STORAGE_VOLUME = "android.os.storage.extra.STORAGE_VOLUME"; } @@ -36007,7 +36017,7 @@ package android.preference { @Deprecated public static class Preference.BaseSavedState extends android.view.AbsSavedState { ctor @Deprecated public Preference.BaseSavedState(android.os.Parcel); ctor @Deprecated public Preference.BaseSavedState(android.os.Parcelable); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public static interface Preference.OnPreferenceChangeListener { @@ -36067,7 +36077,7 @@ package android.preference { method @Deprecated public CharSequence getTitle(android.content.res.Resources); method @Deprecated public void readFromParcel(android.os.Parcel); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public CharSequence breadCrumbShortTitle; field @Deprecated @StringRes public int breadCrumbShortTitleRes; field @Deprecated public CharSequence breadCrumbTitle; @@ -36241,7 +36251,7 @@ package android.print { method @IntRange(from=0) public int getStart(); method public void writeToParcel(android.os.Parcel, int); field public static final android.print.PageRange ALL_PAGES; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class PrintAttributes implements android.os.Parcelable { @@ -36254,7 +36264,7 @@ package android.print { method public void writeToParcel(android.os.Parcel, int); field public static final int COLOR_MODE_COLOR = 2; // 0x2 field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DUPLEX_MODE_LONG_EDGE = 2; // 0x2 field public static final int DUPLEX_MODE_NONE = 1; // 0x1 field public static final int DUPLEX_MODE_SHORT_EDGE = 4; // 0x4 @@ -36412,7 +36422,7 @@ package android.print { field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0 field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1 field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff } @@ -36439,7 +36449,7 @@ package android.print { public final class PrintJobId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class PrintJobInfo implements android.os.Parcelable { @@ -36456,7 +36466,7 @@ package android.print { method public int getState(); method public boolean hasAdvancedOption(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATE_BLOCKED = 4; // 0x4 field public static final int STATE_CANCELED = 7; // 0x7 field public static final int STATE_COMPLETED = 5; // 0x5 @@ -36490,7 +36500,7 @@ package android.print { method @NonNull public android.print.PrintAttributes.Margins getMinMargins(); method @NonNull public java.util.List getResolutions(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class PrinterCapabilitiesInfo.Builder { @@ -36507,7 +36517,7 @@ package android.print { method public int describeContents(); method @NonNull public String getLocalId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class PrinterInfo implements android.os.Parcelable { @@ -36518,7 +36528,7 @@ package android.print { method @NonNull public String getName(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_BUSY = 2; // 0x2 field public static final int STATUS_IDLE = 1; // 0x1 field public static final int STATUS_UNAVAILABLE = 3; // 0x3 @@ -38265,7 +38275,7 @@ package android.provider { method public java.util.List getPath(); method @Nullable public String getRootId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class DocumentsContract.Root { @@ -38406,14 +38416,13 @@ package android.provider { 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 getAllVolumeNames(android.content.Context); - method public static android.net.Uri getDocumentUri(android.content.Context, android.net.Uri); + method @NonNull public static java.util.Set 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 public static String getVersion(android.content.Context); + method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri); + method @NonNull public static String getVersion(@NonNull android.content.Context); + method @NonNull public static String getVersion(@NonNull android.content.Context, @NonNull String); 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"; @@ -38602,10 +38611,10 @@ package android.provider { } 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 { @@ -38686,6 +38695,7 @@ package android.provider { 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"; @@ -38702,23 +38712,6 @@ package android.provider { 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[]); @@ -38843,7 +38836,7 @@ package android.provider { field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS"; field public static final String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS"; field public static final String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS"; - field public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_QR_CODE = "android.settings.PROCESS_WIFI_EASY_CONNECT_QR_CODE"; + field public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_URI = "android.settings.PROCESS_WIFI_EASY_CONNECT_URI"; field public static final String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS"; field public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"; field public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE"; @@ -38877,7 +38870,6 @@ package android.provider { field public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED = "android.settings.extra.do_not_disturb_mode_enabled"; field public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES = "android.settings.extra.do_not_disturb_mode_minutes"; field public static final String EXTRA_INPUT_METHOD_ID = "input_method_id"; - field public static final String EXTRA_QR_CODE = "android.provider.extra.QR_CODE"; field public static final String EXTRA_SUB_ID = "android.provider.extra.SUB_ID"; field public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG = "android.intent.category.USAGE_ACCESS_CONFIG"; field public static final String METADATA_USAGE_ACCESS_REASON = "android.settings.metadata.USAGE_ACCESS_REASON"; @@ -39257,7 +39249,7 @@ package android.provider { } 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"; @@ -41108,7 +41100,7 @@ package android.service.autofill { public final class BatchUpdates implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class BatchUpdates.Builder { @@ -41121,7 +41113,7 @@ package android.service.autofill { public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class CharSequenceTransformation.Builder { @@ -41133,21 +41125,21 @@ package android.service.autofill { public final class CustomDescription implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class CustomDescription.Builder { ctor public CustomDescription.Builder(@NonNull android.widget.RemoteViews); - method public android.service.autofill.CustomDescription.Builder addChild(int, @NonNull android.service.autofill.Transformation); - method public android.service.autofill.CustomDescription.Builder addOnClickAction(int, @NonNull android.service.autofill.OnClickAction); - method public android.service.autofill.CustomDescription.Builder batchUpdate(@NonNull android.service.autofill.Validator, @NonNull android.service.autofill.BatchUpdates); - method public android.service.autofill.CustomDescription build(); + method @NonNull public android.service.autofill.CustomDescription.Builder addChild(int, @NonNull android.service.autofill.Transformation); + method @NonNull public android.service.autofill.CustomDescription.Builder addOnClickAction(int, @NonNull android.service.autofill.OnClickAction); + method @NonNull public android.service.autofill.CustomDescription.Builder batchUpdate(@NonNull android.service.autofill.Validator, @NonNull android.service.autofill.BatchUpdates); + method @NonNull public android.service.autofill.CustomDescription build(); } public final class Dataset implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class Dataset.Builder { @@ -41166,14 +41158,14 @@ package android.service.autofill { ctor public DateTransformation(@NonNull android.view.autofill.AutofillId, @NonNull android.icu.text.DateFormat); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class DateValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer { ctor public DateValueSanitizer(@NonNull android.icu.text.DateFormat); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class FieldClassification { @@ -41192,10 +41184,11 @@ package android.service.autofill { 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 CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class FillEventHistory implements android.os.Parcelable { @@ -41203,7 +41196,7 @@ package android.service.autofill { method @Deprecated @Nullable public android.os.Bundle getClientState(); method @Nullable public java.util.List getEvents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class FillEventHistory.Event { @@ -41229,7 +41222,7 @@ package android.service.autofill { method public int getFlags(); method public int getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_COMPATIBILITY_MODE_REQUEST = 2; // 0x2 field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1 } @@ -41237,7 +41230,7 @@ package android.service.autofill { public final class FillResponse implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_DISABLE_ACTIVITY_ONLY = 2; // 0x2 field public static final int FLAG_TRACK_CONTEXT_COMMITED = 1; // 0x1 } @@ -41245,23 +41238,23 @@ package android.service.autofill { public static final class FillResponse.Builder { ctor public FillResponse.Builder(); method @NonNull public android.service.autofill.FillResponse.Builder addDataset(@Nullable android.service.autofill.Dataset); - method public android.service.autofill.FillResponse build(); - method public android.service.autofill.FillResponse.Builder disableAutofill(long); + method @NonNull public android.service.autofill.FillResponse build(); + method @NonNull public android.service.autofill.FillResponse.Builder disableAutofill(long); method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews); - method public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle); - method public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...); - method public android.service.autofill.FillResponse.Builder setFlags(int); - method public android.service.autofill.FillResponse.Builder setFooter(@NonNull android.widget.RemoteViews); - method public android.service.autofill.FillResponse.Builder setHeader(@NonNull android.widget.RemoteViews); - method public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...); + method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle); + method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...); + method @NonNull public android.service.autofill.FillResponse.Builder setFlags(int); + method @NonNull public android.service.autofill.FillResponse.Builder setFooter(@NonNull android.widget.RemoteViews); + method @NonNull public android.service.autofill.FillResponse.Builder setHeader(@NonNull android.widget.RemoteViews); + method @NonNull public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...); method @NonNull public android.service.autofill.FillResponse.Builder setSaveInfo(@NonNull android.service.autofill.SaveInfo); - method public android.service.autofill.FillResponse.Builder setUserData(@NonNull android.service.autofill.UserData); + method @NonNull public android.service.autofill.FillResponse.Builder setUserData(@NonNull android.service.autofill.UserData); } public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class ImageTransformation.Builder { @@ -41276,7 +41269,7 @@ package android.service.autofill { ctor public LuhnChecksumValidator(@NonNull android.view.autofill.AutofillId...); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface OnClickAction { @@ -41286,7 +41279,7 @@ package android.service.autofill { ctor public RegexValidator(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface Sanitizer { @@ -41301,7 +41294,7 @@ package android.service.autofill { public final class SaveInfo implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_DELAY_SAVE = 4; // 0x4 field public static final int FLAG_DONT_SAVE_ON_FINISH = 2; // 0x2 field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1 @@ -41335,14 +41328,14 @@ package android.service.autofill { method @Nullable public java.util.List getDatasetIds(); method @NonNull public java.util.List getFillContexts(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class TextValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer { ctor public TextValueSanitizer(@NonNull java.util.regex.Pattern, @NonNull String); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface Transformation { @@ -41359,15 +41352,15 @@ package android.service.autofill { method public static int getMaxValueLength(); method public static int getMinValueLength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class UserData.Builder { ctor public UserData.Builder(@NonNull String, @NonNull String, @NonNull String); - method public android.service.autofill.UserData.Builder add(@NonNull String, @NonNull String); - method public android.service.autofill.UserData build(); - method public android.service.autofill.UserData.Builder setFieldClassificationAlgorithm(@Nullable String, @Nullable android.os.Bundle); - method public android.service.autofill.UserData.Builder setFieldClassificationAlgorithmForCategory(@NonNull String, @Nullable String, @Nullable android.os.Bundle); + method @NonNull public android.service.autofill.UserData.Builder add(@NonNull String, @NonNull String); + method @NonNull public android.service.autofill.UserData build(); + method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithm(@Nullable String, @Nullable android.os.Bundle); + method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithmForCategory(@NonNull String, @Nullable String, @Nullable android.os.Bundle); } public interface Validator { @@ -41382,13 +41375,13 @@ package android.service.autofill { public final class VisibilitySetterAction implements android.service.autofill.OnClickAction android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator 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); } } @@ -41397,7 +41390,7 @@ package android.service.carrier { public class CarrierIdentifier implements android.os.Parcelable { ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String); - ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int); + ctor public CarrierIdentifier(@NonNull String, @NonNull String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int); ctor public CarrierIdentifier(byte[], @Nullable String, @Nullable String); method public int describeContents(); method public int getCarrierId(); @@ -41409,12 +41402,12 @@ package android.service.carrier { method public int getPreciseCarrierId(); method @Nullable public String getSpn(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } 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 { @@ -41478,7 +41471,7 @@ package android.service.carrier { method public int describeContents(); method @NonNull public java.util.List getPdus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -41494,7 +41487,7 @@ package android.service.chooser { method public float getScore(); method public CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class ChooserTargetService extends android.app.Service { @@ -41606,15 +41599,15 @@ package android.service.media { package android.service.notification { public final class Adjustment implements android.os.Parcelable { - ctor public Adjustment(String, String, android.os.Bundle, CharSequence, android.os.UserHandle); + ctor public Adjustment(@NonNull String, @NonNull String, @NonNull android.os.Bundle, @NonNull CharSequence, @NonNull android.os.UserHandle); method public int describeContents(); - method public CharSequence getExplanation(); - method public String getKey(); - method public String getPackage(); - method public android.os.Bundle getSignals(); - method public android.os.UserHandle getUserHandle(); + method @NonNull public CharSequence getExplanation(); + method @NonNull public String getKey(); + method @NonNull public String getPackage(); + method @NonNull public android.os.Bundle getSignals(); + method @NonNull public android.os.UserHandle getUserHandle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String KEY_CONTEXTUAL_ACTIONS = "key_contextual_actions"; field public static final String KEY_IMPORTANCE = "key_importance"; field public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria"; @@ -41633,7 +41626,7 @@ package android.service.notification { method public static String relevanceToString(int); method public static String stateToString(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_RELEVANT_ALWAYS = 2; // 0x2 field public static final int FLAG_RELEVANT_NOW = 1; // 0x1 field public static final String SCHEME = "condition"; @@ -41670,17 +41663,17 @@ package android.service.notification { public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService { ctor public NotificationAssistantService(); - method public final void adjustNotification(android.service.notification.Adjustment); - method public final void adjustNotifications(java.util.List); + method public final void adjustNotification(@NonNull android.service.notification.Adjustment); + method public final void adjustNotifications(@NonNull java.util.List); method public void onActionInvoked(@NonNull String, @NonNull android.app.Notification.Action, int); - method public final android.os.IBinder onBind(android.content.Intent); + method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent); method public void onNotificationDirectReplied(@NonNull String); method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification); - method public android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, android.app.NotificationChannel); + method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel); method public void onNotificationExpansionChanged(@NonNull String, boolean, boolean); - method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap, android.service.notification.NotificationStats, int); + method public void onNotificationRemoved(@NonNull android.service.notification.StatusBarNotification, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.service.notification.NotificationStats, int); method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, String); - method public void onNotificationsSeen(java.util.List); + method public void onNotificationsSeen(@NonNull java.util.List); method public void onSuggestedReplySent(@NonNull String, @NonNull CharSequence, int); method public final void unsnoozeNotification(String); field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService"; @@ -41770,8 +41763,8 @@ package android.service.notification { method public long getLastAudiblyAlertedMillis(); method public String getOverrideGroupKey(); method public int getRank(); - method public java.util.List getSmartActions(); - method public java.util.List getSmartReplies(); + method @NonNull public java.util.List getSmartActions(); + method @NonNull public java.util.List getSmartReplies(); method public int getSuppressedVisualEffects(); method public int getUserSentiment(); method public boolean isAmbient(); @@ -41787,7 +41780,7 @@ package android.service.notification { method public String[] getOrderedKeys(); method public boolean getRanking(String, android.service.notification.NotificationListenerService.Ranking); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NotificationStats implements android.os.Parcelable { @@ -41809,7 +41802,7 @@ package android.service.notification { method public void setSnoozed(); method public void setViewedSettings(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DISMISSAL_AOD = 2; // 0x2 field public static final int DISMISSAL_NOT_DISMISSED = -1; // 0xffffffff field public static final int DISMISSAL_OTHER = 0; // 0x0 @@ -41843,7 +41836,7 @@ package android.service.notification { method public boolean isOngoing(); method public void setOverrideGroupKey(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ZenPolicy implements android.os.Parcelable { @@ -41866,7 +41859,7 @@ package android.service.notification { method public int getVisualEffectPeek(); method public int getVisualEffectStatusBar(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PEOPLE_TYPE_ANYONE = 1; // 0x1 field public static final int PEOPLE_TYPE_CONTACTS = 2; // 0x2 field public static final int PEOPLE_TYPE_NONE = 4; // 0x4 @@ -41879,26 +41872,26 @@ package android.service.notification { public static class ZenPolicy.Builder { ctor public ZenPolicy.Builder(); - method public android.service.notification.ZenPolicy.Builder allowAlarms(boolean); - method public android.service.notification.ZenPolicy.Builder allowAllSounds(); - method public android.service.notification.ZenPolicy.Builder allowCalls(int); - method public android.service.notification.ZenPolicy.Builder allowEvents(boolean); - method public android.service.notification.ZenPolicy.Builder allowMedia(boolean); - method public android.service.notification.ZenPolicy.Builder allowMessages(int); - method public android.service.notification.ZenPolicy.Builder allowReminders(boolean); - method public android.service.notification.ZenPolicy.Builder allowRepeatCallers(boolean); - method public android.service.notification.ZenPolicy.Builder allowSystem(boolean); - method public android.service.notification.ZenPolicy build(); - method public android.service.notification.ZenPolicy.Builder disallowAllSounds(); - method public android.service.notification.ZenPolicy.Builder hideAllVisualEffects(); - method public android.service.notification.ZenPolicy.Builder showAllVisualEffects(); - method public android.service.notification.ZenPolicy.Builder showBadges(boolean); - method public android.service.notification.ZenPolicy.Builder showFullScreenIntent(boolean); - method public android.service.notification.ZenPolicy.Builder showInAmbientDisplay(boolean); - method public android.service.notification.ZenPolicy.Builder showInNotificationList(boolean); - method public android.service.notification.ZenPolicy.Builder showLights(boolean); - method public android.service.notification.ZenPolicy.Builder showPeeking(boolean); - method public android.service.notification.ZenPolicy.Builder showStatusBarIcons(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowAlarms(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowAllSounds(); + method @NonNull public android.service.notification.ZenPolicy.Builder allowCalls(int); + method @NonNull public android.service.notification.ZenPolicy.Builder allowEvents(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowMedia(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowMessages(int); + method @NonNull public android.service.notification.ZenPolicy.Builder allowReminders(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowRepeatCallers(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowSystem(boolean); + method @NonNull public android.service.notification.ZenPolicy build(); + method @NonNull public android.service.notification.ZenPolicy.Builder disallowAllSounds(); + method @NonNull public android.service.notification.ZenPolicy.Builder hideAllVisualEffects(); + method @NonNull public android.service.notification.ZenPolicy.Builder showAllVisualEffects(); + method @NonNull public android.service.notification.ZenPolicy.Builder showBadges(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showFullScreenIntent(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showInAmbientDisplay(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showInNotificationList(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showLights(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showPeeking(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder showStatusBarIcons(boolean); } } @@ -41919,7 +41912,7 @@ package android.service.quicksettings { method public void setSubtitle(@Nullable CharSequence); method public void updateTile(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATE_ACTIVE = 2; // 0x2 field public static final int STATE_INACTIVE = 1; // 0x1 field public static final int STATE_UNAVAILABLE = 0; // 0x0 @@ -42481,7 +42474,7 @@ package android.speech.tts { method public int getQuality(); method public boolean isNetworkConnectionRequired(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int LATENCY_HIGH = 400; // 0x190 field public static final int LATENCY_LOW = 200; // 0xc8 field public static final int LATENCY_NORMAL = 300; // 0x12c @@ -42518,6 +42511,7 @@ package android.system { method public static void chown(String, int, int) throws android.system.ErrnoException; method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException; method public static void connect(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static void connect(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; method public static java.io.FileDescriptor dup(java.io.FileDescriptor) throws android.system.ErrnoException; method public static java.io.FileDescriptor dup2(java.io.FileDescriptor, int) throws android.system.ErrnoException; method public static String[] environ(); @@ -43337,7 +43331,7 @@ package android.telecom { method public int getSupportedRouteMask(); method public boolean isMuted(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int ROUTE_BLUETOOTH = 2; // 0x2 field public static final int ROUTE_EARPIECE = 1; // 0x1 field public static final int ROUTE_SPEAKER = 8; // 0x8 @@ -43360,17 +43354,17 @@ package android.telecom { field public static final int CONFIDENCE_NOT_NUISANCE = -2; // 0xfffffffe field public static final int CONFIDENCE_NUISANCE = 2; // 0x2 field public static final int CONFIDENCE_UNKNOWN = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } - public static class CallIdentification.Builder { + public static final class CallIdentification.Builder { ctor public CallIdentification.Builder(); - method public android.telecom.CallIdentification build(); - method public android.telecom.CallIdentification.Builder setDescription(@Nullable CharSequence); - method public android.telecom.CallIdentification.Builder setDetails(@Nullable CharSequence); - method public android.telecom.CallIdentification.Builder setName(@Nullable CharSequence); - method public android.telecom.CallIdentification.Builder setNuisanceConfidence(int); - method public android.telecom.CallIdentification.Builder setPhoto(@Nullable android.graphics.drawable.Icon); + method @NonNull public android.telecom.CallIdentification build(); + method @NonNull public android.telecom.CallIdentification.Builder setDescription(@Nullable CharSequence); + method @NonNull public android.telecom.CallIdentification.Builder setDetails(@Nullable CharSequence); + method @NonNull public android.telecom.CallIdentification.Builder setName(@Nullable CharSequence); + method @NonNull public android.telecom.CallIdentification.Builder setNuisanceConfidence(int); + method @NonNull public android.telecom.CallIdentification.Builder setPhoto(@Nullable android.graphics.drawable.Icon); } public abstract class CallRedirectionService extends android.app.Service { @@ -43653,7 +43647,7 @@ package android.telecom { method public int getVideoState(); method public boolean isRequestingRtt(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class ConnectionService extends android.app.Service { @@ -43699,7 +43693,7 @@ package android.telecom { field public static final int CALL_PULLED = 12; // 0xc field public static final int CANCELED = 4; // 0x4 field public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10; // 0xa - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int ERROR = 1; // 0x1 field public static final int LOCAL = 2; // 0x2 field public static final int MISSED = 5; // 0x5 @@ -43718,7 +43712,7 @@ package android.telecom { method public android.net.Uri getOriginalAddress(); method public boolean isEmpty(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class InCallService extends android.app.Service { @@ -43796,7 +43790,7 @@ package android.telecom { field public static final int CAPABILITY_SUPPORTS_VIDEO_CALLING = 1024; // 0x400 field public static final int CAPABILITY_VIDEO_CALLING = 8; // 0x8 field public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE = 256; // 0x100 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING = "android.telecom.extra.CALL_SUBJECT_CHARACTER_ENCODING"; field public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH = "android.telecom.extra.CALL_SUBJECT_MAX_LENGTH"; field public static final String EXTRA_LOG_SELF_MANAGED_CALLS = "android.telecom.extra.LOG_SELF_MANAGED_CALLS"; @@ -43832,16 +43826,17 @@ package android.telecom { method public String getId(); method public android.os.UserHandle getUserHandle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class PhoneAccountSuggestion implements android.os.Parcelable { + ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean); method public int describeContents(); - method public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); + method @NonNull public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method public int getReason(); method public boolean shouldAutoSelect(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int REASON_FREQUENT = 2; // 0x2 field public static final int REASON_INTRA_CARRIER = 1; // 0x1 field public static final int REASON_NONE = 0; // 0x0 @@ -43972,7 +43967,7 @@ package android.telecom { method public android.graphics.drawable.Icon getIcon(); method public CharSequence getLabel(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class TelecomManager { @@ -43991,8 +43986,8 @@ package android.telecom { method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List getSelfManagedPhoneAccounts(); method public android.telecom.PhoneAccountHandle getSimCallManager(); - method public String getSystemDialerPackage(); - method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(); + method @Nullable public String getSystemDialerPackage(); + method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle); @@ -44068,7 +44063,7 @@ package android.telecom { method public static boolean isVideo(int); method public static String videoStateToString(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int QUALITY_DEFAULT = 4; // 0x4 field public static final int QUALITY_HIGH = 1; // 0x1 field public static final int QUALITY_LOW = 3; // 0x3 @@ -44089,7 +44084,7 @@ package android.telecom { method public int getWidth(); method public boolean isZoomSupported(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -44206,7 +44201,7 @@ package android.telephony { method public int getPriority(); method public int getSubId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PRIORITY_HIGH = 1; // 0x1 field public static final int PRIORITY_LOW = 3; // 0x3 field public static final int PRIORITY_MED = 2; // 0x2 @@ -44395,7 +44390,7 @@ package android.telephony { method @Nullable public CharSequence getOperatorAlphaLong(); method @Nullable public CharSequence getOperatorAlphaShort(); method @CallSuper public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityCdma extends android.telephony.CellIdentity { @@ -44405,7 +44400,7 @@ package android.telephony { method public int getNetworkId(); method public int getSystemId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityGsm extends android.telephony.CellIdentity { @@ -44420,7 +44415,7 @@ package android.telephony { method @Nullable public String getMobileNetworkOperator(); method @Deprecated public int getPsc(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityLte extends android.telephony.CellIdentity { @@ -44435,7 +44430,7 @@ package android.telephony { method public int getPci(); method public int getTac(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityNr extends android.telephony.CellIdentity { @@ -44446,7 +44441,7 @@ package android.telephony { method public int getPci(); method public int getTac(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityTdscdma extends android.telephony.CellIdentity { @@ -44458,7 +44453,7 @@ package android.telephony { method @Nullable public String getMobileNetworkOperator(); method public int getUarfcn(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityWcdma extends android.telephony.CellIdentity { @@ -44472,7 +44467,7 @@ package android.telephony { method public int getPsc(); method public int getUarfcn(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class CellInfo implements android.os.Parcelable { @@ -44484,43 +44479,44 @@ package android.telephony { field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1 field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2 field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator 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 { method public android.telephony.CellIdentityCdma getCellIdentity(); method public android.telephony.CellSignalStrengthCdma getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityGsm getCellIdentity(); method public android.telephony.CellSignalStrengthGsm getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityLte getCellIdentity(); method public android.telephony.CellSignalStrengthLte getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoNr extends android.telephony.CellInfo { method public android.telephony.CellIdentity getCellIdentity(); method public android.telephony.CellSignalStrength getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityWcdma getCellIdentity(); method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class CellLocation { @@ -44555,7 +44551,7 @@ package android.telephony { method public int getEvdoSnr(); method public int getLevel(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -44566,7 +44562,7 @@ package android.telephony { method public int getLevel(); method public int getTimingAdvance(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -44581,7 +44577,7 @@ package android.telephony { method public int getRssnr(); method public int getTimingAdvance(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthNr extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -44596,7 +44592,7 @@ package android.telephony { method public int getSsRsrq(); method public int getSsSinr(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -44605,7 +44601,7 @@ package android.telephony { method public int getDbm(); method public int getLevel(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class IccOpenLogicalChannelResponse implements android.os.Parcelable { @@ -44614,7 +44610,7 @@ package android.telephony { method public byte[] getSelectResponse(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int INVALID_CHANNEL = -1; // 0xffffffff field public static final int STATUS_MISSING_RESOURCE = 2; // 0x2 field public static final int STATUS_NO_ERROR = 1; // 0x1 @@ -44687,7 +44683,7 @@ package android.telephony { method @Deprecated public void setCid(int); method @Deprecated public void setRssi(int); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public static final int UNKNOWN_CID = -1; // 0xffffffff field @Deprecated public static final int UNKNOWN_RSSI = 99; // 0x63 } @@ -44715,7 +44711,7 @@ package android.telephony { method public int getSearchPeriodicity(); method public android.telephony.RadioAccessSpecifier[] getSpecifiers(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int SCAN_TYPE_ONE_SHOT = 0; // 0x0 field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1 } @@ -44823,13 +44819,13 @@ package android.telephony { method public int[] getChannels(); method public int getRadioAccessNetwork(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ServiceState implements android.os.Parcelable { ctor public ServiceState(); ctor public ServiceState(android.telephony.ServiceState); - ctor public ServiceState(android.os.Parcel); + ctor @Deprecated public ServiceState(android.os.Parcel); method protected void copyFrom(android.telephony.ServiceState); method public int describeContents(); method public int getCdmaNetworkId(); @@ -44850,7 +44846,7 @@ package android.telephony { method public void setStateOff(); method public void setStateOutOfService(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DUPLEX_MODE_FDD = 1; // 0x1 field public static final int DUPLEX_MODE_TDD = 2; // 0x2 field public static final int DUPLEX_MODE_UNKNOWN = 0; // 0x0 @@ -45037,7 +45033,7 @@ package android.telephony { method public boolean isEmbedded(); method public boolean isOpportunistic(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class SubscriptionManager { @@ -45064,7 +45060,7 @@ package android.telephony { method public boolean isNetworkRoaming(int); method public static boolean isUsableSubscriptionId(int); method public static boolean isValidSubscriptionId(int); - method public void removeOnOpportunisticSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener); + method public void removeOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener); method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean removeSubscriptionsFromGroup(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setMetered(boolean, int); @@ -45073,7 +45069,7 @@ package android.telephony { method public void setSubscriptionOverrideCongested(int, boolean, long); method public void setSubscriptionOverrideUnmetered(int, boolean, long); method public void setSubscriptionPlans(int, @NonNull java.util.List); - method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, android.app.PendingIntent); + method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, @NonNull android.app.PendingIntent); field public static final String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"; field public static final String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED"; field public static final String ACTION_MANAGE_SUBSCRIPTION_PLANS = "android.telephony.action.MANAGE_SUBSCRIPTION_PLANS"; @@ -45110,7 +45106,7 @@ package android.telephony { method public void writeToParcel(android.os.Parcel, int); field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1 field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0 field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2 @@ -45152,8 +45148,8 @@ package android.telephony { method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei(); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei(int); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}) public String getLine1Number(); - method public String getManufacturerCode(); - method public String getManufacturerCode(int); + method @Nullable public String getManufacturerCode(); + method @Nullable public String getManufacturerCode(int); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid(); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid(int); method public String getMmsUAProfUrl(); @@ -45180,9 +45176,9 @@ package android.telephony { method public int getSimState(); method public int getSimState(int); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSubscriberId(); - method public String getTypeAllocationCode(); - method public String getTypeAllocationCode(int); - method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List getUiccCardsInfo(); + method @Nullable public String getTypeAllocationCode(); + method @Nullable public String getTypeAllocationCode(int); + method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") @NonNull public java.util.List getUiccCardsInfo(); method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVisualVoicemailPackageName(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(); @@ -45222,7 +45218,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(String, boolean); method public boolean setOperatorBrandOverride(String); method public boolean setPreferredNetworkTypeToGlobal(); - method public boolean setPreferredOpportunisticDataSubscription(int); + method public void setPreferredOpportunisticDataSubscription(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer); method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(String, String); method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); @@ -45355,13 +45351,13 @@ package android.telephony { public final class UiccCardInfo implements android.os.Parcelable { method public int describeContents(); method public int getCardId(); - method public String getEid(); - method public String getIccId(); + method @Nullable public String getEid(); + method @Nullable public String getIccId(); method public int getSlotIndex(); method public boolean isEuicc(); method public boolean isRemovable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class VisualVoicemailService extends android.app.Service { @@ -45385,13 +45381,13 @@ package android.telephony { method public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); method public String getPrefix(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class VisualVoicemailSmsFilterSettings implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DESTINATION_PORT_ANY = -1; // 0xffffffff field public static final int DESTINATION_PORT_DATA_SMS = -2; // 0xfffffffe field public final String clientPrefix; @@ -45458,7 +45454,7 @@ package android.telephony.data { field public static final int AUTH_TYPE_NONE = 0; // 0x0 field public static final int AUTH_TYPE_PAP = 1; // 0x1 field public static final int AUTH_TYPE_PAP_OR_CHAP = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MVNO_TYPE_GID = 2; // 0x2 field public static final int MVNO_TYPE_ICCID = 3; // 0x3 field public static final int MVNO_TYPE_IMSI = 1; // 0x1 @@ -45477,6 +45473,7 @@ package android.telephony.data { field public static final int TYPE_HIPRI = 16; // 0x10 field public static final int TYPE_IA = 256; // 0x100 field public static final int TYPE_IMS = 64; // 0x40 + field public static final int TYPE_MCX = 1024; // 0x400 field public static final int TYPE_MMS = 2; // 0x2 field public static final int TYPE_SUPL = 4; // 0x4 } @@ -45525,7 +45522,7 @@ package android.telephony.emergency { method public boolean isFromSources(int); method public boolean isInEmergencyServiceCategories(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EMERGENCY_CALL_ROUTING_EMERGENCY = 1; // 0x1 field public static final int EMERGENCY_CALL_ROUTING_NORMAL = 2; // 0x2 field public static final int EMERGENCY_CALL_ROUTING_UNKNOWN = 0; // 0x0 @@ -45554,7 +45551,7 @@ package android.telephony.euicc { method @Nullable public String getConfirmationCode(); method @Nullable public String getEncodedActivationCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class EuiccInfo implements android.os.Parcelable { @@ -45562,11 +45559,11 @@ package android.telephony.euicc { method public int describeContents(); method @Nullable public String getOsVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class EuiccManager { - method public android.telephony.euicc.EuiccManager createForCardId(int); + method @NonNull public android.telephony.euicc.EuiccManager createForCardId(int); method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void deleteSubscription(int, android.app.PendingIntent); method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void downloadSubscription(android.telephony.euicc.DownloadableSubscription, boolean, android.app.PendingIntent); method @Nullable public String getEid(); @@ -45691,7 +45688,7 @@ package android.telephony.mbms { method public int getSubscriptionId(); method public byte[] toByteArray(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class DownloadRequest.Builder { @@ -45714,14 +45711,14 @@ package android.telephony.mbms { method public String getMimeType(); method public android.net.Uri getUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable { method public int describeContents(); method public java.util.List getFiles(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class GroupCall implements java.lang.AutoCloseable { @@ -45854,7 +45851,7 @@ package android.telephony.mbms { public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -47119,7 +47116,7 @@ package android.text.style { public static class LineHeightSpan.Standard implements android.text.style.LineHeightSpan android.text.ParcelableSpan { ctor public LineHeightSpan.Standard(@Px @IntRange(from=1) int); - ctor public LineHeightSpan.Standard(android.os.Parcel); + ctor public LineHeightSpan.Standard(@NonNull android.os.Parcel); method public void chooseHeight(@NonNull CharSequence, int, int, int, int, @NonNull android.graphics.Paint.FontMetricsInt); method public int describeContents(); method @Px public int getHeight(); @@ -47253,7 +47250,7 @@ package android.text.style { method public void updateDrawState(android.text.TextPaint); method public void writeToParcel(android.os.Parcel, int); field @Deprecated public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED"; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_AUTO_CORRECTION = 4; // 0x4 field public static final int FLAG_EASY_CORRECT = 1; // 0x1 field public static final int FLAG_MISSPELLED = 2; // 0x2 @@ -48710,7 +48707,7 @@ package android.view { method public int describeContents(); method public final android.os.Parcelable getSuperState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.view.AbsSavedState EMPTY_STATE; } @@ -48860,7 +48857,7 @@ package android.view { method public float getDesiredMinLuminance(); method public int[] getSupportedHdrTypes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int HDR_TYPE_DOLBY_VISION = 1; // 0x1 field public static final int HDR_TYPE_HDR10 = 2; // 0x2 field public static final int HDR_TYPE_HDR10_PLUS = 4; // 0x4 @@ -48875,7 +48872,7 @@ package android.view { method public int getPhysicalWidth(); method public float getRefreshRate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class DisplayCutout { @@ -48896,7 +48893,7 @@ package android.view { method public int describeContents(); method public void release(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class DragEvent implements android.os.Parcelable { @@ -48915,7 +48912,7 @@ package android.view { field public static final int ACTION_DRAG_LOCATION = 2; // 0x2 field public static final int ACTION_DRAG_STARTED = 1; // 0x1 field public static final int ACTION_DROP = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class FocusFinder { @@ -49085,7 +49082,7 @@ package android.view { method public boolean isVirtual(); method public boolean supportsSource(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int KEYBOARD_TYPE_ALPHABETIC = 2; // 0x2 field public static final int KEYBOARD_TYPE_NONE = 0; // 0x0 field public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; // 0x1 @@ -49142,7 +49139,7 @@ package android.view { method public abstract long getEventTime(); method public abstract int getSource(); method public boolean isFromSource(int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class InputQueue { @@ -49174,7 +49171,7 @@ package android.view { field @Deprecated public static final int BUILT_IN_KEYBOARD = 0; // 0x0 field public static final int COMBINING_ACCENT = -2147483648; // 0x80000000 field public static final int COMBINING_ACCENT_MASK = 2147483647; // 0x7fffffff - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FULL = 4; // 0x4 field public static final char HEX_INPUT = 61184; // 0xef00 '\uef00' field public static final int MODIFIER_BEHAVIOR_CHORDED = 0; // 0x0 @@ -49267,7 +49264,7 @@ package android.view { field public static final int ACTION_DOWN = 0; // 0x0 field @Deprecated public static final int ACTION_MULTIPLE = 2; // 0x2 field public static final int ACTION_UP = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_CANCELED = 32; // 0x20 field public static final int FLAG_CANCELED_LONG_PRESS = 256; // 0x100 field public static final int FLAG_EDITOR_ACTION = 16; // 0x10 @@ -49617,7 +49614,7 @@ package android.view { method public java.util.List getItems(); method public CharSequence getLabel(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class KeyboardShortcutInfo implements android.os.Parcelable { @@ -49629,7 +49626,7 @@ package android.view { method @Nullable public CharSequence getLabel(); method public int getModifiers(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class LayoutInflater { @@ -49950,7 +49947,7 @@ package android.view { field public static final int CLASSIFICATION_AMBIGUOUS_GESTURE = 1; // 0x1 field public static final int CLASSIFICATION_DEEP_PRESS = 2; // 0x2 field public static final int CLASSIFICATION_NONE = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EDGE_BOTTOM = 2; // 0x2 field public static final int EDGE_LEFT = 4; // 0x4 field public static final int EDGE_RIGHT = 8; // 0x8 @@ -50038,7 +50035,7 @@ package android.view { method public static android.view.PointerIcon getSystemIcon(@NonNull android.content.Context, int); method public static android.view.PointerIcon load(@NonNull android.content.res.Resources, @XmlRes int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ALIAS = 1010; // 0x3f2 field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5 field public static final int TYPE_ARROW = 1000; // 0x3e8 @@ -50137,7 +50134,7 @@ package android.view { method @Deprecated public void unlockCanvas(android.graphics.Canvas); method public void unlockCanvasAndPost(android.graphics.Canvas); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int ROTATION_0 = 0; // 0x0 field public static final int ROTATION_180 = 2; // 0x2 field public static final int ROTATION_270 = 3; // 0x3 @@ -50155,7 +50152,7 @@ package android.view { method public void readFromParcel(android.os.Parcel); method public void release(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class SurfaceControl.Builder { @@ -50518,6 +50515,7 @@ package android.view { method public android.animation.StateListAnimator getStateListAnimator(); method protected int getSuggestedMinimumHeight(); method protected int getSuggestedMinimumWidth(); + method @NonNull public java.util.List getSystemGestureExclusionRects(); method public int getSystemUiVisibility(); method @android.view.ViewDebug.ExportedProperty public Object getTag(); method public Object getTag(int); @@ -50856,6 +50854,7 @@ package android.view { 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); method public void setSystemUiVisibility(int); method public void setTag(Object); method public void setTag(int, Object); @@ -51089,7 +51088,7 @@ package android.view { ctor public View.BaseSavedState(android.os.Parcel); ctor public View.BaseSavedState(android.os.Parcel, ClassLoader); ctor public View.BaseSavedState(android.os.Parcelable); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class View.DragShadowBuilder { @@ -51684,6 +51683,7 @@ package android.view { 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>); method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener); method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener); method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener); @@ -51698,6 +51698,7 @@ package android.view { 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>); method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener); method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener); method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener); @@ -51938,7 +51939,7 @@ package android.view { public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable { @@ -51946,7 +51947,7 @@ package android.view { method public long getFramePostedTimeNano(int); method public long getFrameReadyTimeNano(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class WindowId implements android.os.Parcelable { @@ -51955,7 +51956,7 @@ package android.view { method public void registerFocusObserver(android.view.WindowId.FocusObserver); method public void unregisterFocusObserver(android.view.WindowId.FocusObserver); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract static class WindowId.FocusObserver { @@ -51975,6 +51976,7 @@ package android.view { method public int getStableInsetRight(); method public int getStableInsetTop(); method @NonNull public android.graphics.Insets getStableInsets(); + method @NonNull public android.graphics.Insets getSystemGestureInsets(); method public int getSystemWindowInsetBottom(); method public int getSystemWindowInsetLeft(); method public int getSystemWindowInsetRight(); @@ -51996,6 +51998,7 @@ package android.view { method @NonNull public android.view.WindowInsets build(); method @NonNull public android.view.WindowInsets.Builder setDisplayCutout(@Nullable android.view.DisplayCutout); method @NonNull public android.view.WindowInsets.Builder setStableInsets(@NonNull android.graphics.Insets); + method @NonNull public android.view.WindowInsets.Builder setSystemGestureInsets(@NonNull android.graphics.Insets); method @NonNull public android.view.WindowInsets.Builder setSystemWindowInsets(@NonNull android.graphics.Insets); } @@ -52036,7 +52039,7 @@ package android.view { field public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f; field public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f; field public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DIM_AMOUNT_CHANGED = 32; // 0x20 field public static final int FIRST_APPLICATION_WINDOW = 1; // 0x1 field public static final int FIRST_SUB_WINDOW = 1000; // 0x3e8 @@ -52196,7 +52199,7 @@ package android.view.accessibility { field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1 field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2 field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int INVALID_POSITION = -1; // 0xffffffff field @Deprecated public static final int MAX_TEXT_LENGTH = 500; // 0x1f4 field public static final int TYPES_ALL_MASK = -1; // 0xffffffff @@ -52446,7 +52449,7 @@ package android.view.accessibility { field public static final int ACTION_SELECT = 4; // 0x4 field public static final int ACTION_SET_SELECTION = 131072; // 0x20000 field public static final int ACTION_SET_TEXT = 2097152; // 0x200000 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH"; field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX"; field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY"; @@ -52543,7 +52546,7 @@ package android.view.accessibility { method public int getRegionCount(); method @Nullable public android.view.accessibility.AccessibilityNodeInfo getTargetForRegion(@NonNull android.graphics.Region); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class AccessibilityNodeProvider { @@ -52636,7 +52639,7 @@ package android.view.accessibility { method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo); method public void recycle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4 field public static final int TYPE_APPLICATION = 1; // 0x1 field public static final int TYPE_INPUT_METHOD = 2; // 0x2 @@ -52969,7 +52972,7 @@ package android.view.autofill { public final class AutofillId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AutofillManager { @@ -53030,7 +53033,7 @@ package android.view.autofill { method public boolean isText(); method public boolean isToggle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -53039,16 +53042,16 @@ package android.view.contentcapture { 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 String); method @Nullable public android.os.Bundle getExtras(); method @NonNull public android.content.LocusId getLocusId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } 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); } @@ -53064,7 +53067,7 @@ package android.view.contentcapture { 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); @@ -53077,7 +53080,7 @@ package android.view.contentcapture { public final class ContentCaptureSessionId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class UserDataRemovalRequest implements android.os.Parcelable { @@ -53086,19 +53089,20 @@ package android.view.contentcapture { method @NonNull public String getPackageName(); method public boolean isForEverything(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_IS_PREFIX = 1; // 0x1 } 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, int); method @NonNull public android.view.contentcapture.UserDataRemovalRequest build(); method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder forEverything(); } public final class UserDataRemovalRequest.LocusIdRequest { + method @NonNull public int getFlags(); method @NonNull public android.content.LocusId getLocusId(); - method @NonNull public boolean isRecursive(); } } @@ -53149,7 +53153,7 @@ package android.view.inputmethod { method public int getPosition(); method public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CorrectionInfo implements android.os.Parcelable { @@ -53159,7 +53163,7 @@ package android.view.inputmethod { method public int getOffset(); method public CharSequence getOldText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CursorAnchorInfo implements android.os.Parcelable { @@ -53178,7 +53182,7 @@ package android.view.inputmethod { method public int getSelectionEnd(); method public int getSelectionStart(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_HAS_INVISIBLE_REGION = 2; // 0x2 field public static final int FLAG_HAS_VISIBLE_REGION = 1; // 0x1 field public static final int FLAG_IS_RTL = 4; // 0x4 @@ -53201,7 +53205,7 @@ package android.view.inputmethod { method public void dump(android.util.Printer, String); method public final void makeCompatible(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int IME_ACTION_DONE = 6; // 0x6 field public static final int IME_ACTION_GO = 2; // 0x2 field public static final int IME_ACTION_NEXT = 5; // 0x5 @@ -53242,7 +53246,7 @@ package android.view.inputmethod { ctor public ExtractedText(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_SELECTING = 2; // 0x2 field public static final int FLAG_SINGLE_LINE = 1; // 0x1 field public int flags; @@ -53259,7 +53263,7 @@ package android.view.inputmethod { ctor public ExtractedTextRequest(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int flags; field public int hintMaxChars; field public int hintMaxLines; @@ -53275,7 +53279,7 @@ package android.view.inputmethod { method public int getPid(); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface InputConnection { @@ -53353,7 +53357,7 @@ package android.view.inputmethod { method public void releasePermission(); method public void requestPermission(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface InputMethod { @@ -53395,7 +53399,7 @@ package android.view.inputmethod { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class InputMethodManager { @@ -53484,7 +53488,7 @@ package android.view.inputmethod { method public boolean isAuxiliary(); method public boolean overridesImplicitlyEnabledSubtype(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class InputMethodSubtype.InputMethodSubtypeBuilder { @@ -53559,6 +53563,7 @@ package android.view.inspector { method public int mapIntFlag(@NonNull String, @AttrRes int, @NonNull android.view.inspector.IntFlagMapping); method public int mapLong(@NonNull String, @AttrRes int); method public int mapObject(@NonNull String, @AttrRes int); + method public int mapResourceId(@NonNull String, @AttrRes int); method public int mapShort(@NonNull String, @AttrRes int); } @@ -53581,6 +53586,7 @@ package android.view.inspector { method public void readIntFlag(int, int); method public void readLong(int, long); method public void readObject(int, @Nullable Object); + method public void readResourceId(int, @AnyRes int); method public void readShort(int, short); } @@ -53605,7 +53611,7 @@ package android.view.textclassifier { method @Nullable public CharSequence getTextReply(); method @NonNull public String getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String TYPE_CALL_PHONE = "call_phone"; field public static final String TYPE_CREATE_REMINDER = "create_reminder"; field public static final String TYPE_OPEN_URL = "open_url"; @@ -53633,7 +53639,7 @@ package android.view.textclassifier { method @NonNull public java.util.List getConversationActions(); method @Nullable public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class ConversationActions.Message implements android.os.Parcelable { @@ -53643,7 +53649,7 @@ package android.view.textclassifier { method @Nullable public java.time.ZonedDateTime getReferenceTime(); method @Nullable public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.app.Person PERSON_USER_OTHERS; field public static final android.app.Person PERSON_USER_SELF; } @@ -53665,7 +53671,7 @@ package android.view.textclassifier { method @IntRange(from=0xffffffff) public int getMaxSuggestions(); method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig getTypeConfig(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String HINT_FOR_IN_APP = "in_app"; field public static final String HINT_FOR_NOTIFICATION = "notification"; } @@ -53716,7 +53722,7 @@ package android.view.textclassifier { field public static final int ACTION_SELECT_ALL = 200; // 0xc8 field public static final int ACTION_SHARE = 104; // 0x68 field public static final int ACTION_SMART_SHARE = 105; // 0x69 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EVENT_AUTO_SELECTION = 5; // 0x5 field public static final int EVENT_SELECTION_MODIFIED = 2; // 0x2 field public static final int EVENT_SELECTION_STARTED = 1; // 0x1 @@ -53741,7 +53747,7 @@ package android.view.textclassifier { method @Deprecated @Nullable public android.view.View.OnClickListener getOnClickListener(); method @Nullable public String getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextClassification.Builder { @@ -53768,7 +53774,7 @@ package android.view.textclassifier { method @IntRange(from=0) public int getStartIndex(); method @NonNull public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextClassification.Request.Builder { @@ -53785,7 +53791,7 @@ package android.view.textclassifier { method @NonNull public String getWidgetType(); method @Nullable public String getWidgetVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextClassificationContext.Builder { @@ -53808,7 +53814,7 @@ package android.view.textclassifier { public final class TextClassificationSessionId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface TextClassifier { @@ -53858,7 +53864,7 @@ package android.view.textclassifier { method public java.util.Collection resolveEntityListModifications(@NonNull java.util.Collection); method public boolean shouldIncludeTypesFromTextClassifier(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextClassifier.EntityConfig.Builder { @@ -53893,7 +53899,7 @@ package android.view.textclassifier { field public static final int CATEGORY_LINKIFY = 2; // 0x2 field public static final int CATEGORY_SELECTION = 1; // 0x1 field public static final int CATEGORY_UNDEFINED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ACTIONS_GENERATED = 20; // 0x14 field public static final int TYPE_ACTIONS_SHOWN = 6; // 0x6 field public static final int TYPE_AUTO_SELECTION = 5; // 0x5 @@ -53943,7 +53949,7 @@ package android.view.textclassifier { method @NonNull public android.icu.util.ULocale getLocale(int); method @IntRange(from=0) public int getLocaleHypothesisCount(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextLanguage.Builder { @@ -53960,7 +53966,7 @@ package android.view.textclassifier { method @NonNull public android.os.Bundle getExtras(); method @NonNull public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextLanguage.Request.Builder { @@ -53977,7 +53983,7 @@ package android.view.textclassifier { method public void writeToParcel(android.os.Parcel, int); field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0 field public static final int APPLY_STRATEGY_REPLACE = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_DIFFERENT_TEXT = 3; // 0x3 field public static final int STATUS_LINKS_APPLIED = 0; // 0x0 field public static final int STATUS_NO_LINKS_APPLIED = 2; // 0x2 @@ -54002,7 +54008,7 @@ package android.view.textclassifier { method @NonNull public android.os.Bundle getExtras(); method @NonNull public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextLinks.Request.Builder { @@ -54022,7 +54028,7 @@ package android.view.textclassifier { method public android.os.Bundle getExtras(); method public int getStart(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan { @@ -54041,7 +54047,7 @@ package android.view.textclassifier { method public int getSelectionEndIndex(); method public int getSelectionStartIndex(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextSelection.Builder { @@ -54061,7 +54067,7 @@ package android.view.textclassifier { method @IntRange(from=0) public int getStartIndex(); method @NonNull public CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TextSelection.Request.Builder { @@ -54084,7 +54090,7 @@ package android.view.textservice { method public int getSuggestionsCount(); method public android.view.textservice.SuggestionsInfo getSuggestionsInfoAt(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SpellCheckerInfo implements android.os.Parcelable { @@ -54099,7 +54105,7 @@ package android.view.textservice { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class SpellCheckerSession { @@ -54129,7 +54135,7 @@ package android.view.textservice { method @Deprecated @NonNull public String getLocale(); method public int getNameResId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SuggestionsInfo implements android.os.Parcelable { @@ -54144,7 +54150,7 @@ package android.view.textservice { method public int getSuggestionsCount(); method public void setCookieAndSequence(int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 4; // 0x4 field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1 field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2 @@ -54161,7 +54167,7 @@ package android.view.textservice { method public int getSequence(); method public String getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class TextServicesManager { @@ -54959,7 +54965,6 @@ package android.widget { method public int getCheckedItemPosition(); method public android.util.SparseBooleanArray getCheckedItemPositions(); method public int getChoiceMode(); - method public boolean getDrawSelectorOnTop(); method public int getListPaddingBottom(); method public int getListPaddingLeft(); method public int getListPaddingRight(); @@ -54972,6 +54977,7 @@ package android.widget { method protected void handleDataChanged(); method public boolean hasTextFilter(); method public void invalidateViews(); + method public boolean isDrawSelectorOnTop(); method public boolean isFastScrollAlwaysVisible(); method @android.view.ViewDebug.ExportedProperty public boolean isFastScrollEnabled(); method protected boolean isInFilterMode(); @@ -56239,7 +56245,7 @@ package android.widget { field public static final int SOURCE_BOUND_MAX_VISIBLE = 1; // 0x1 } - public static class Magnifier.Builder { + public static final class Magnifier.Builder { ctor public Magnifier.Builder(@NonNull android.view.View); method @NonNull public android.widget.Magnifier build(); method @NonNull public android.widget.Magnifier.Builder setClippingEnabled(boolean); @@ -56698,7 +56704,7 @@ package android.widget { method public void setLong(int, String, long); method public void setOnClickFillInIntent(int, android.content.Intent); method public void setOnClickPendingIntent(int, android.app.PendingIntent); - method public void setOnClickResponse(int, android.widget.RemoteViews.RemoteResponse); + method public void setOnClickResponse(int, @NonNull android.widget.RemoteViews.RemoteResponse); method public void setPendingIntentTemplate(int, android.app.PendingIntent); method public void setProgressBar(int, int, int, boolean); method public void setRelativeScrollPosition(int, int); @@ -56718,7 +56724,7 @@ package android.widget { method public void showNext(int); method public void showPrevious(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS"; } @@ -56729,9 +56735,9 @@ package android.widget { public static class RemoteViews.RemoteResponse { ctor public RemoteViews.RemoteResponse(); - method public android.widget.RemoteViews.RemoteResponse addSharedElement(int, String); - method public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(android.content.Intent); - method public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(android.app.PendingIntent); + method @NonNull public android.widget.RemoteViews.RemoteResponse addSharedElement(int, @NonNull String); + method @NonNull public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(@NonNull android.content.Intent); + method @NonNull public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(@NonNull android.app.PendingIntent); } @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface RemoteViews.RemoteView { @@ -56788,7 +56794,7 @@ package android.widget { method public boolean isFillViewport(); method public boolean isSmoothScrollingEnabled(); method public boolean pageScroll(int); - method public void scrollToDescendant(android.view.View); + method public void scrollToDescendant(@NonNull android.view.View); method public void setBottomEdgeEffectColor(@ColorInt int); method public void setEdgeEffectColor(@ColorInt int); method public void setFillViewport(boolean); @@ -57334,7 +57340,7 @@ package android.widget { method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier(); method public final android.content.res.ColorStateList getTextColors(); method @Nullable public android.graphics.drawable.Drawable getTextCursorDrawable(); - method public android.text.TextDirectionHeuristic getTextDirectionHeuristic(); + method @NonNull public android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method @NonNull public java.util.Locale getTextLocale(); method @NonNull @Size(min=1) public android.os.LocaleList getTextLocales(); method @NonNull public android.text.PrecomputedText.Params getTextMetricsParams(); @@ -57501,7 +57507,7 @@ package android.widget { } public static class TextView.SavedState extends android.view.View.BaseSavedState { - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter { @@ -57560,7 +57566,7 @@ package android.widget { ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int); ctor public ToggleButton(android.content.Context, android.util.AttributeSet); ctor public ToggleButton(android.content.Context); - method public float getDisabledAlpha(); + method @FloatRange(from=0.0, to=1.0) public float getDisabledAlpha(); method public CharSequence getTextOff(); method public CharSequence getTextOn(); method public void setBackgroundDrawable(android.graphics.drawable.Drawable); @@ -57721,11 +57727,11 @@ package android.widget { @android.widget.RemoteViews.RemoteView public class ViewFlipper extends android.widget.ViewAnimator { ctor public ViewFlipper(android.content.Context); ctor public ViewFlipper(android.content.Context, android.util.AttributeSet); - method public int getFlipInterval(); + method @IntRange(from=0) public int getFlipInterval(); method public boolean isAutoStart(); method public boolean isFlipping(); method public void setAutoStart(boolean); - method public void setFlipInterval(int); + method public void setFlipInterval(@IntRange(from=0) int); method public void startFlipping(); method public void stopFlipping(); } @@ -57776,16 +57782,16 @@ package android.widget { 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 c4ed871d06613d44ea06d0d6c4a495c47f64b0b1..fdfaf91096a0fef0b1d0ee5fea0f3208dbeaa31e 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -32,7 +32,7 @@ package android.app { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); field public static final int CONTENTS_FILE_DESCRIPTOR = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1 } @@ -352,11 +352,11 @@ package android.os { } 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 @@ package android.provider { } 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 @@ package android.provider { } 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 5aab4ad96a0c833b11e48bba7de960c91607b3cc..da53c58e516bd201aa6396994c60a6f7ebe470b1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -25,6 +25,7 @@ package android { field public static final String BIND_AUGMENTED_AUTOFILL_SERVICE = "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE"; field @Deprecated public static final String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE"; field public static final String BIND_CONTENT_CAPTURE_SERVICE = "android.permission.BIND_CONTENT_CAPTURE_SERVICE"; + field public static final String BIND_CONTENT_SUGGESTIONS_SERVICE = "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE"; field public static final String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH"; field public static final String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE"; field public static final String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE"; @@ -121,6 +122,7 @@ package android { field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS"; field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE"; field public static final String OBSERVE_ROLE_HOLDERS = "android.permission.OBSERVE_ROLE_HOLDERS"; + field public static final String OPEN_ACCESSIBILITY_DETAILS_SETTINGS = "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS"; field public static final String OVERRIDE_WIFI_CONFIG = "android.permission.OVERRIDE_WIFI_CONFIG"; field public static final String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT"; field public static final String PACKET_KEEPALIVE_OFFLOAD = "android.permission.PACKET_KEEPALIVE_OFFLOAD"; @@ -162,6 +164,7 @@ package android { field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD"; field public static final String RESTRICTED_VR_ACCESS = "android.permission.RESTRICTED_VR_ACCESS"; field public static final String RETRIEVE_WINDOW_CONTENT = "android.permission.RETRIEVE_WINDOW_CONTENT"; + field public static final String REVIEW_ACCESSIBILITY_SERVICES = "android.permission.REVIEW_ACCESSIBILITY_SERVICES"; field public static final String REVOKE_RUNTIME_PERMISSIONS = "android.permission.REVOKE_RUNTIME_PERMISSIONS"; field public static final String SCORE_NETWORKS = "android.permission.SCORE_NETWORKS"; field public static final String SEND_DEVICE_CUSTOMIZATION_READY = "android.permission.SEND_DEVICE_CUSTOMIZATION_READY"; @@ -180,6 +183,7 @@ package android { field public static final String SHUTDOWN = "android.permission.SHUTDOWN"; field public static final String STOP_APP_SWITCHES = "android.permission.STOP_APP_SWITCHES"; field public static final String SUBSTITUTE_NOTIFICATION_APP_NAME = "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"; + field public static final String SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON = "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON"; field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS"; field public static final String TETHER_PRIVILEGED = "android.permission.TETHER_PRIVILEGED"; field public static final String TV_INPUT_HARDWARE = "android.permission.TV_INPUT_HARDWARE"; @@ -313,7 +317,6 @@ package android.app { method @Deprecated @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List getOpsForPackage(int, String, int[]); method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List getOpsForPackage(int, @NonNull String, @Nullable java.lang.String...); method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List getPackagesForOps(@Nullable String[]); - method public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int); method public static int opToDefaultMode(@NonNull String); method @Nullable public static String opToPermission(@NonNull String); method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(String, int, String, int); @@ -362,29 +365,36 @@ package android.app { field public static final String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms"; field public static final String OPSTR_WRITE_SMS = "android:write_sms"; field public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper"; - field public static final int UID_STATE_BACKGROUND = 5; // 0x5 - field public static final int UID_STATE_CACHED = 6; // 0x6 - field public static final int UID_STATE_FOREGROUND = 4; // 0x4 - field public static final int UID_STATE_FOREGROUND_SERVICE = 3; // 0x3 - field public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 2; // 0x2 - field public static final int UID_STATE_PERSISTENT = 0; // 0x0 - field public static final int UID_STATE_TOP = 1; // 0x1 + field public static final int OP_FLAGS_ALL = 31; // 0x1f + field public static final int OP_FLAGS_ALL_TRUSTED = 13; // 0xd + field public static final int OP_FLAG_SELF = 1; // 0x1 + field public static final int OP_FLAG_TRUSTED_PROXIED = 8; // 0x8 + field public static final int OP_FLAG_TRUSTED_PROXY = 2; // 0x2 + field public static final int OP_FLAG_UNTRUSTED_PROXIED = 16; // 0x10 + field public static final int OP_FLAG_UNTRUSTED_PROXY = 4; // 0x4 + field public static final int UID_STATE_BACKGROUND = 600; // 0x258 + field public static final int UID_STATE_CACHED = 700; // 0x2bc + field public static final int UID_STATE_FOREGROUND = 500; // 0x1f4 + field public static final int UID_STATE_FOREGROUND_SERVICE = 400; // 0x190 + field public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; // 0x12c + field public static final int UID_STATE_PERSISTENT = 100; // 0x64 + field public static final int UID_STATE_TOP = 200; // 0xc8 } public static final class AppOpsManager.HistoricalOp implements android.os.Parcelable { method public int describeContents(); - method public long getAccessCount(int); - method public long getAccessDuration(int); - method public long getBackgroundAccessCount(); - method public long getBackgroundAccessDuration(); - method public long getBackgroundRejectCount(); - method public long getForegroundAccessCount(); - method public long getForegroundAccessDuration(); - method public long getForegroundRejectCount(); + method public long getAccessCount(int, int, int); + method public long getAccessDuration(int, int, int); + method public long getBackgroundAccessCount(int); + method public long getBackgroundAccessDuration(int); + method public long getBackgroundRejectCount(int); + method public long getForegroundAccessCount(int); + method public long getForegroundAccessDuration(int); + method public long getForegroundRejectCount(int); method @NonNull public String getOpName(); - method public long getRejectCount(int); + method public long getRejectCount(int, int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable { @@ -395,7 +405,7 @@ package android.app { method @Nullable public android.app.AppOpsManager.HistoricalUidOps getUidOps(int); method @NonNull public android.app.AppOpsManager.HistoricalUidOps getUidOpsAt(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalOpsRequest { @@ -404,6 +414,7 @@ package android.app { public static final class AppOpsManager.HistoricalOpsRequest.Builder { ctor public AppOpsManager.HistoricalOpsRequest.Builder(long, long); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build(); + method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int); @@ -416,7 +427,7 @@ package android.app { method public int getOpCount(); method @NonNull public String getPackageName(); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable { @@ -426,34 +437,41 @@ package android.app { method @NonNull public android.app.AppOpsManager.HistoricalPackageOps getPackageOpsAt(int); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.OpEntry implements android.os.Parcelable { method public int describeContents(); - method public int getDuration(); - method public long getLastAccessBackgroundTime(); - method public long getLastAccessForegroundTime(); - method public long getLastAccessTime(); - method public long getLastRejectBackgroundTime(); - method public long getLastRejectForegroundTime(); - method public long getLastRejectTime(); + method public long getDuration(); + method public long getLastAccessBackgroundTime(int); + method public long getLastAccessForegroundTime(int); + method public long getLastAccessTime(int); + method public long getLastAccessTime(int, int, int); + method public long getLastBackgroundDuration(int); + method public long getLastDuration(int, int, int); + method public long getLastForegroundDuration(int); + method public long getLastRejectBackgroundTime(int); + method public long getLastRejectForegroundTime(int); + method public long getLastRejectTime(int); + method public long getLastRejectTime(int, int, int); method public int getMode(); - method public String getOpStr(); - method public String getProxyPackageName(); + method @NonNull public String getOpStr(); + method @Nullable public String getProxyPackageName(); + method @Nullable public String getProxyPackageName(int, int); method public int getProxyUid(); + method public int getProxyUid(int, int); method public boolean isRunning(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.PackageOps implements android.os.Parcelable { method public int describeContents(); method public java.util.List getOps(); - method public String getPackageName(); + method @NonNull public String getPackageName(); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class BroadcastOptions { @@ -565,12 +583,12 @@ package android.app { } 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(); @@ -588,7 +606,7 @@ package android.app { method public int getRemovedFlags(); method public int getWidth(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1; // 0x1 } @@ -833,7 +851,7 @@ package android.app.backup { ctor public BackupProgress(long, long); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final long bytesExpected; field public final long bytesTransferred; } @@ -891,7 +909,7 @@ package android.app.backup { method public int getDataType(); method public String getPackageName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.app.backup.RestoreDescription NO_MORE_PACKAGES; field public static final int TYPE_FULL_STREAM = 2; // 0x2 field public static final int TYPE_KEY_VALUE = 1; // 0x1 @@ -918,7 +936,7 @@ package android.app.backup { ctor public RestoreSet(String, String, long); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public String device; field public String name; field public long token; @@ -936,16 +954,16 @@ package android.app.contentsuggestions { public final class ClassificationsRequest implements android.os.Parcelable { method public int describeContents(); - method @Nullable public android.os.Bundle getExtras(); + method @NonNull public android.os.Bundle getExtras(); method @NonNull public java.util.List getSelections(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class ClassificationsRequest.Builder { ctor public ClassificationsRequest.Builder(@NonNull java.util.List); - method public android.app.contentsuggestions.ClassificationsRequest build(); - method public android.app.contentsuggestions.ClassificationsRequest.Builder setExtras(@NonNull android.os.Bundle); + method @NonNull public android.app.contentsuggestions.ClassificationsRequest build(); + method @NonNull public android.app.contentsuggestions.ClassificationsRequest.Builder setExtras(@NonNull android.os.Bundle); } public final class ContentClassification implements android.os.Parcelable { @@ -954,7 +972,7 @@ package android.app.contentsuggestions { method @NonNull public android.os.Bundle getExtras(); method @NonNull public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ContentSelection implements android.os.Parcelable { @@ -963,7 +981,7 @@ package android.app.contentsuggestions { method @NonNull public android.os.Bundle getExtras(); method @NonNull public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ContentSuggestionsManager { @@ -983,18 +1001,18 @@ package android.app.contentsuggestions { public final class SelectionsRequest implements android.os.Parcelable { method public int describeContents(); - method @Nullable public android.os.Bundle getExtras(); + method @NonNull public android.os.Bundle getExtras(); method @Nullable public android.graphics.Point getInterestPoint(); method public int getTaskId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class SelectionsRequest.Builder { ctor public SelectionsRequest.Builder(int); - method public android.app.contentsuggestions.SelectionsRequest build(); - method public android.app.contentsuggestions.SelectionsRequest.Builder setExtras(@NonNull android.os.Bundle); - method public android.app.contentsuggestions.SelectionsRequest.Builder setInterestPoint(@NonNull android.graphics.Point); + method @NonNull public android.app.contentsuggestions.SelectionsRequest build(); + method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setExtras(@NonNull android.os.Bundle); + method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setInterestPoint(@NonNull android.graphics.Point); } } @@ -1016,7 +1034,7 @@ package android.app.prediction { method public int getPredictedTargetCount(); method public String getUiSurface(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppPredictionContext.Builder { @@ -1034,7 +1052,7 @@ package android.app.prediction { public final class AppPredictionSessionId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AppPredictor { @@ -1062,7 +1080,7 @@ package android.app.prediction { method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo(); method @NonNull public android.os.UserHandle getUser(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AppTargetEvent implements android.os.Parcelable { @@ -1074,7 +1092,7 @@ package android.app.prediction { field public static final int ACTION_DISMISS = 2; // 0x2 field public static final int ACTION_LAUNCH = 1; // 0x1 field public static final int ACTION_PIN = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppTargetEvent.Builder { @@ -1087,7 +1105,7 @@ package android.app.prediction { ctor public AppTargetId(@NonNull String); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -1130,7 +1148,7 @@ package android.app.usage { method public android.app.usage.UsageStats getUsageStats(); method public String getVolumeUuid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final long QUOTA_NOT_SET = -1L; // 0xffffffffffffffffL } @@ -1172,7 +1190,7 @@ package android.app.usage { method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getAppStandbyBucket(String); method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public java.util.Map getAppStandbyBuckets(); method public int getUsageSource(); - method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, @Nullable android.app.PendingIntent); + method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @Nullable android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerAppUsageObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, @NonNull android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerUsageSessionObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, long, @NonNull java.util.concurrent.TimeUnit, @NonNull android.app.PendingIntent, @Nullable android.app.PendingIntent); method public void reportUsageStart(@NonNull android.app.Activity, @NonNull String); @@ -1277,7 +1295,7 @@ package android.bluetooth.le { method public int getOffset(); method public int getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ScanSettings implements android.os.Parcelable { @@ -1317,7 +1335,7 @@ package android.content { method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle); method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle); method public abstract void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle); - method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public void startActivityAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public void startActivityAsUser(@RequiresPermission @NonNull android.content.Intent, @NonNull android.os.UserHandle); field public static final String APP_PREDICTION_SERVICE = "app_prediction"; field public static final String BACKUP_SERVICE = "backup"; field public static final String CONTENT_SUGGESTIONS_SERVICE = "content_suggestions"; @@ -1397,7 +1415,7 @@ package android.content { field public static final String ACTION_PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED"; field public static final String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART"; field public static final String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE"; - field public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES"; + field @RequiresPermission(android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES) public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES"; field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_APP_PERMISSION_USAGE = "android.intent.action.REVIEW_APP_PERMISSION_USAGE"; field public static final String ACTION_REVIEW_PERMISSIONS = "android.intent.action.REVIEW_PERMISSIONS"; field public static final String ACTION_REVIEW_PERMISSION_USAGE = "android.intent.action.REVIEW_PERMISSION_USAGE"; @@ -1445,7 +1463,7 @@ package android.content.om { method public int describeContents(); method public boolean isEnabled(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final String category; field public final String packageName; field public final String targetPackageName; @@ -1484,7 +1502,7 @@ package android.content.pm { method @NonNull public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.pm.PackageManager); method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class InstantAppIntentFilter implements android.os.Parcelable { @@ -1493,7 +1511,7 @@ package android.content.pm { method public java.util.List getFilters(); method public String getSplitName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class InstantAppResolveInfo implements android.os.Parcelable { @@ -1511,7 +1529,7 @@ package android.content.pm { method @Deprecated public int getVersionCode(); method public boolean shouldLetInstallerDecide(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class InstantAppResolveInfo.InstantAppDigest implements android.os.Parcelable { @@ -1520,7 +1538,7 @@ package android.content.pm { method public byte[][] getDigestBytes(); method public int[] getDigestPrefix(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final android.content.pm.InstantAppResolveInfo.InstantAppDigest UNDEFINED; } @@ -1530,7 +1548,7 @@ package android.content.pm { method public String getPackageName(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class PackageInstaller { @@ -1691,9 +1709,9 @@ package android.content.pm { } public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { - field @StringRes public int backgroundRequestDetailResourceId; - field @StringRes public int backgroundRequestResourceId; - field @StringRes public int requestDetailResourceId; + field @StringRes public final int backgroundRequestDetailResourceId; + field @StringRes public final int backgroundRequestResourceId; + field @StringRes public final int requestDetailResourceId; field @StringRes public int requestRes; } @@ -1728,13 +1746,13 @@ package android.content.pm { method public android.content.pm.ShortcutInfo getShortcutInfo(); method public android.content.ComponentName getTargetComponent(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class SuspendDialogInfo implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class SuspendDialogInfo.Builder { @@ -1778,7 +1796,7 @@ package android.content.pm.permission { method @Deprecated public boolean isGranted(); method @Deprecated public boolean isStandard(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -1791,7 +1809,7 @@ package android.content.rollback { method public android.content.pm.VersionedPackage getVersionRolledBackFrom(); method public android.content.pm.VersionedPackage getVersionRolledBackTo(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RollbackInfo implements android.os.Parcelable { @@ -1802,7 +1820,7 @@ package android.content.rollback { method public int getRollbackId(); method public boolean isStaged(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RollbackManager { @@ -1872,13 +1890,13 @@ package android.hardware.display { method public java.time.LocalDate getLocalDate(); method public float[] getStats(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class BrightnessChangeEvent implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final float batteryLevel; field public final float brightness; field public final long colorSampleDuration; @@ -1901,17 +1919,17 @@ package android.hardware.display { method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String); method public android.util.Pair getCurve(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } 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 { @@ -1919,7 +1937,7 @@ package android.hardware.display { method @NonNull public static android.hardware.display.BrightnessCorrection createScaleAndTranslateLog(float, float); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class ColorDisplayManager { @@ -1969,10 +1987,10 @@ package android.hardware.hdmi { method @Nullable public android.hardware.hdmi.HdmiPlaybackClient getPlaybackClient(); method @Nullable public android.hardware.hdmi.HdmiSwitchClient getSwitchClient(); method @Nullable public android.hardware.hdmi.HdmiTvClient getTvClient(); - method public boolean isRemoteDeviceConnected(android.hardware.hdmi.HdmiDeviceInfo); - method public void powerOffRemoteDevice(android.hardware.hdmi.HdmiDeviceInfo); + method public boolean isRemoteDeviceConnected(@NonNull android.hardware.hdmi.HdmiDeviceInfo); + method public void powerOffRemoteDevice(@NonNull android.hardware.hdmi.HdmiDeviceInfo); method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void removeHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener); - method public void requestRemoteDeviceToBecomeActiveSource(android.hardware.hdmi.HdmiDeviceInfo); + method public void requestRemoteDeviceToBecomeActiveSource(@NonNull android.hardware.hdmi.HdmiDeviceInfo); method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setStandbyMode(boolean); field public static final String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE"; field public static final int AVR_VOLUME_MUTED = 101; // 0x65 @@ -2096,7 +2114,7 @@ package android.hardware.hdmi { method public boolean isSourceType(); method public void writeToParcel(android.os.Parcel, int); field public static final int ADDR_INTERNAL = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DEVICE_AUDIO_SYSTEM = 5; // 0x5 field public static final int DEVICE_INACTIVE = -1; // 0xffffffff field public static final int DEVICE_PLAYBACK = 4; // 0x4 @@ -2116,7 +2134,7 @@ package android.hardware.hdmi { method public int getPort(); method public boolean isConnected(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class HdmiPlaybackClient extends android.hardware.hdmi.HdmiClient { @@ -2144,7 +2162,7 @@ package android.hardware.hdmi { method public boolean isCecSupported(); method public boolean isMhlSupported(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PORT_INPUT = 0; // 0x0 field public static final int PORT_OUTPUT = 1; // 0x1 } @@ -2307,7 +2325,7 @@ package android.hardware.location { method public int getToolchainVersion(); method public String getVendor(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ContextHubIntentEvent { @@ -2368,7 +2386,7 @@ package android.hardware.location { method @Deprecated public void setMsgType(int); method @Deprecated public void setVersion(int); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ContextHubTransaction { @@ -2456,7 +2474,7 @@ package android.hardware.location { method public int getMonitoringType(); method public int getSourceTechnologies(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class GeofenceHardwareRequest { @@ -2486,7 +2504,7 @@ package android.hardware.location { method public boolean isReadable(); method public boolean isWritable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public class NanoApp implements android.os.Parcelable { @@ -2515,7 +2533,7 @@ package android.hardware.location { method @Deprecated public void setOutputEvents(int[]); method @Deprecated public void setPublisher(String); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NanoAppBinary implements android.os.Parcelable { @@ -2534,7 +2552,7 @@ package android.hardware.location { method public boolean isEncrypted(); method public boolean isSigned(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @Deprecated public class NanoAppFilter implements android.os.Parcelable { @@ -2543,7 +2561,7 @@ package android.hardware.location { method @Deprecated public boolean testMatch(android.hardware.location.NanoAppInstanceInfo); method @Deprecated public void writeToParcel(android.os.Parcel, int); field @Deprecated public static final int APP_ANY = -1; // 0xffffffff - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public static final int FLAGS_VERSION_ANY = -1; // 0xffffffff field @Deprecated public static final int FLAGS_VERSION_GREAT_THAN = 2; // 0x2 field @Deprecated public static final int FLAGS_VERSION_LESS_THAN = 4; // 0x4 @@ -2567,7 +2585,7 @@ package android.hardware.location { method @Deprecated @NonNull public int[] getOutputEvents(); method @Deprecated public String getPublisher(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NanoAppMessage implements android.os.Parcelable { @@ -2579,7 +2597,7 @@ package android.hardware.location { method public long getNanoAppId(); method public boolean isBroadcastMessage(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class NanoAppState implements android.os.Parcelable { @@ -2589,7 +2607,7 @@ package android.hardware.location { method public long getNanoAppVersion(); method public boolean isEnabled(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -2602,7 +2620,7 @@ package android.hardware.radio { method public int getType(); method @NonNull public java.util.Map getVendorInfo(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_EMERGENCY = 1; // 0x1 field public static final int TYPE_EVENT = 6; // 0x6 field public static final int TYPE_MISC = 8; // 0x8 @@ -2637,7 +2655,7 @@ package android.hardware.radio { method @NonNull public java.util.Set getIdentifierTypes(); method @NonNull public java.util.Set getIdentifiers(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract static class ProgramList.ListCallback { @@ -2663,7 +2681,7 @@ package android.hardware.radio { method @Deprecated @NonNull public long[] getVendorIds(); method @NonNull public android.hardware.radio.ProgramSelector withSecondaryPreferred(@NonNull android.hardware.radio.ProgramSelector.Identifier); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int IDENTIFIER_TYPE_AMFM_FREQUENCY = 1; // 0x1 field public static final int IDENTIFIER_TYPE_DAB_ENSEMBLE = 6; // 0x6 field public static final int IDENTIFIER_TYPE_DAB_FREQUENCY = 8; // 0x8 @@ -2702,7 +2720,7 @@ package android.hardware.radio { method @android.hardware.radio.ProgramSelector.IdentifierType public int getType(); method public long getValue(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @IntDef(prefix={"IDENTIFIER_TYPE_"}, value={android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_INVALID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_RDS_PI, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_SUBCHANNEL, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_NAME, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SIDECC, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SCID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_MODULATION, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_CHANNEL}) @IntRange(from=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_START, to=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_END) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ProgramSelector.IdentifierType { @@ -2751,7 +2769,7 @@ package android.hardware.radio { public static class RadioManager.AmBandConfig extends android.hardware.radio.RadioManager.BandConfig { method public boolean getStereo(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.AmBandConfig.Builder { @@ -2763,7 +2781,7 @@ package android.hardware.radio { public static class RadioManager.AmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor { method public boolean isStereoSupported(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @IntDef(prefix={"BAND_"}, value={android.hardware.radio.RadioManager.BAND_INVALID, android.hardware.radio.RadioManager.BAND_AM, android.hardware.radio.RadioManager.BAND_FM, android.hardware.radio.RadioManager.BAND_AM_HD, android.hardware.radio.RadioManager.BAND_FM_HD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RadioManager.Band { @@ -2777,7 +2795,7 @@ package android.hardware.radio { method public int getType(); method public int getUpperLimit(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.BandDescriptor implements android.os.Parcelable { @@ -2790,7 +2808,7 @@ package android.hardware.radio { method public boolean isAmBand(); method public boolean isFmBand(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.FmBandConfig extends android.hardware.radio.RadioManager.BandConfig { @@ -2799,7 +2817,7 @@ package android.hardware.radio { method public boolean getRds(); method public boolean getStereo(); method public boolean getTa(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.FmBandConfig.Builder { @@ -2819,7 +2837,7 @@ package android.hardware.radio { method public boolean isRdsSupported(); method public boolean isStereoSupported(); method public boolean isTaSupported(); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.ModuleProperties implements android.os.Parcelable { @@ -2842,7 +2860,7 @@ package android.hardware.radio { method public boolean isProgramIdentifierSupported(@android.hardware.radio.ProgramSelector.IdentifierType int); method public boolean isProgramTypeSupported(@android.hardware.radio.ProgramSelector.ProgramType int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class RadioManager.ProgramInfo implements android.os.Parcelable { @@ -2864,7 +2882,7 @@ package android.hardware.radio { method public boolean isTrafficProgram(); method public boolean isTuned(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RadioMetadata implements android.os.Parcelable { @@ -2877,7 +2895,7 @@ package android.hardware.radio { method public java.util.Set keySet(); method public int size(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String METADATA_KEY_ALBUM = "android.hardware.radio.metadata.ALBUM"; field public static final String METADATA_KEY_ART = "android.hardware.radio.metadata.ART"; field public static final String METADATA_KEY_ARTIST = "android.hardware.radio.metadata.ARTIST"; @@ -2915,7 +2933,7 @@ package android.hardware.radio { method public int getTimezoneOffsetMinutes(); method public long getUtcEpochSeconds(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class RadioTuner { @@ -3015,7 +3033,7 @@ package android.hardware.usb { method public boolean isConnected(); method public boolean isRoleCombinationSupported(int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DATA_ROLE_DEVICE = 2; // 0x2 field public static final int DATA_ROLE_HOST = 1; // 0x1 field public static final int DATA_ROLE_NONE = 0; // 0x0 @@ -3048,7 +3066,7 @@ package android.location { method public long getToaGpsNanosecondsOfWeek(); method public double getVerticalPositionUncertaintyMeters(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class GnssMeasurementCorrections.Builder { @@ -3070,7 +3088,7 @@ package android.location { method public double getLatitudeDegrees(); method public double getLongitudeDegrees(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class GnssReflectingPlane.Builder { @@ -3097,7 +3115,7 @@ package android.location { method public boolean hasReflectingPlane(); method public boolean hasValidSatelliteLineOfSight(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int HAS_EXCESS_PATH_LENGTH_MASK = 2; // 0x2 field public static final int HAS_EXCESS_PATH_LENGTH_UNC_MASK = 4; // 0x4 field public static final int HAS_PROB_SAT_IS_LOS_MASK = 1; // 0x1 @@ -3154,7 +3172,7 @@ package android.location { method public void setTimeUncertaintyInNs(double); method public void setType(byte); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final byte TYPE_GPS_TIME = 2; // 0x2 field public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1 field public static final byte TYPE_UNKNOWN = 0; // 0x0 @@ -3266,7 +3284,7 @@ package android.location { field public static final short ADR_STATE_RESET = 2; // 0x2 field public static final short ADR_STATE_UNKNOWN = 0; // 0x0 field public static final short ADR_STATE_VALID = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2 field public static final byte LOSS_OF_LOCK_OK = 1; // 0x1 field public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0 @@ -3287,7 +3305,7 @@ package android.location { method @NonNull public android.location.GpsClock getClock(); method @NonNull public java.util.Collection getMeasurements(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2 field public static final int STATUS_NOT_SUPPORTED = 0; // 0x0 field public static final int STATUS_READY = 1; // 0x1 @@ -3315,7 +3333,7 @@ package android.location { method public void setSubmessageId(short); method public void setType(byte); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final short STATUS_PARITY_PASSED = 1; // 0x1 field public static final short STATUS_PARITY_REBUILT = 2; // 0x2 field public static final short STATUS_UNKNOWN = 0; // 0x0 @@ -3331,7 +3349,7 @@ package android.location { method public int describeContents(); method @NonNull public android.location.GpsNavigationMessage getNavigationMessage(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static int STATUS_GPS_LOCATION_DISABLED; field public static int STATUS_NOT_SUPPORTED; field public static int STATUS_READY; @@ -3404,7 +3422,7 @@ package android.location { field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field public static final int POWER_NONE = 200; // 0xc8 @@ -3440,7 +3458,7 @@ package android.media { method public int getLossReceived(); method @NonNull public String getPackageName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AudioFocusRequest { @@ -3521,11 +3539,12 @@ package android.media { } public class HwAudioSource { + method public boolean isPlaying(); method public void start(); method public void stop(); } - public static class HwAudioSource.Builder { + public static final class HwAudioSource.Builder { ctor public HwAudioSource.Builder(); method @NonNull public android.media.HwAudioSource build(); method @NonNull public android.media.HwAudioSource.Builder setAudioAttributes(@NonNull android.media.AudioAttributes); @@ -3538,7 +3557,7 @@ package android.media { field public static final int RADIO_TUNER = 1998; // 0x7ce } - public static class MediaTimestamp.Builder { + public static final class MediaTimestamp.Builder { ctor public MediaTimestamp.Builder(); ctor public MediaTimestamp.Builder(@NonNull android.media.MediaTimestamp); method @NonNull public android.media.MediaTimestamp build(); @@ -3554,14 +3573,14 @@ package android.media { method public void stop(); } - public static class SubtitleData.Builder { + public static final class SubtitleData.Builder { ctor public SubtitleData.Builder(); ctor public SubtitleData.Builder(@NonNull android.media.SubtitleData); method @NonNull public android.media.SubtitleData build(); method @NonNull public android.media.SubtitleData.Builder setSubtitleData(int, long, long, @NonNull byte[]); } - public static class TimedMetaData.Builder { + public static final class TimedMetaData.Builder { ctor public TimedMetaData.Builder(); ctor public TimedMetaData.Builder(@NonNull android.media.TimedMetaData); method @NonNull public android.media.TimedMetaData build(); @@ -3663,10 +3682,10 @@ package android.media.audiopolicy { method @Nullable public android.media.audiopolicy.AudioProductStrategy getProductStrategyForAudioAttributes(@NonNull android.media.AudioAttributes); method public int getVolumeGroupIdForAttributes(@NonNull android.media.AudioAttributes); method public int getVolumeGroupIdForLegacyStreamType(int); - method public java.util.Iterator iterator(); + method @NonNull public java.util.Iterator iterator(); method public int size(); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AudioProductStrategy implements android.os.Parcelable { @@ -3675,12 +3694,12 @@ package android.media.audiopolicy { method public int getId(); method @NonNull public String name(); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AudioVolumeGroup implements android.os.Parcelable { method public int describeContents(); - method public java.util.List getAudioAttributes(); + method @NonNull public java.util.List getAudioAttributes(); method public int getId(); method @NonNull public int[] getLegacyStreamTypes(); method @NonNull public String name(); @@ -3692,7 +3711,7 @@ package android.media.audiopolicy { ctor public AudioVolumeGroups(); method public int describeContents(); method @Nullable public android.media.audiopolicy.AudioVolumeGroup getById(int); - method public java.util.Iterator iterator(); + method @NonNull public java.util.Iterator iterator(); method public int size(); method public void writeToParcel(@NonNull android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; @@ -3831,7 +3850,7 @@ package android.media.tv { field public static final int CABLE_CONNECTION_STATUS_CONNECTED = 1; // 0x1 field public static final int CABLE_CONNECTION_STATUS_DISCONNECTED = 2; // 0x2 field public static final int CABLE_CONNECTION_STATUS_UNKNOWN = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TV_INPUT_TYPE_COMPONENT = 6; // 0x6 field public static final int TV_INPUT_TYPE_COMPOSITE = 3; // 0x3 field public static final int TV_INPUT_TYPE_DISPLAY_PORT = 10; // 0xa @@ -3939,7 +3958,7 @@ package android.media.tv { method public int getStreamId(); method public int getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2 field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1 } @@ -4076,8 +4095,8 @@ package android.net { public class LinkAddress implements android.os.Parcelable { ctor public LinkAddress(java.net.InetAddress, int, int, int); - ctor public LinkAddress(java.net.InetAddress, int); - ctor public LinkAddress(String); + ctor public LinkAddress(@NonNull java.net.InetAddress, int); + ctor public LinkAddress(@NonNull String); ctor public LinkAddress(String, int, int); method public boolean isGlobalPreferred(); method public boolean isIPv4(); @@ -4136,7 +4155,7 @@ package android.net { ctor public NetworkKey(android.net.WifiKey); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_WIFI = 1; // 0x1 field public final int type; field public final android.net.WifiKey wifiKey; @@ -4187,7 +4206,7 @@ package android.net { method public byte lookupScore(int); method public byte lookupScore(int, boolean); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final int activeNetworkRssiBoost; field public final int bucketWidth; field public final byte[] rssiBuckets; @@ -4204,7 +4223,7 @@ package android.net { field public static final String ATTRIBUTES_KEY_BADGING_CURVE = "android.net.attributes.key.BADGING_CURVE"; field public static final String ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL = "android.net.attributes.key.HAS_CAPTIVE_PORTAL"; field public static final String ATTRIBUTES_KEY_RANKING_SCORE_OFFSET = "android.net.attributes.key.RANKING_SCORE_OFFSET"; - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Nullable public final android.os.Bundle attributes; field public final boolean meteredHint; field public final android.net.NetworkKey networkKey; @@ -4226,7 +4245,7 @@ package android.net { method public void setGateway(java.net.InetAddress); method public void setIpAddress(android.net.LinkAddress); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class TrafficStats { @@ -4250,7 +4269,7 @@ package android.net { ctor public WifiKey(String, String); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final String bssid; field public final String ssid; } @@ -4593,7 +4612,7 @@ package android.net.wifi { ctor @Deprecated public RttManager.ResponderConfig(); method @Deprecated public int describeContents(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public int centerFreq0; field @Deprecated public int centerFreq1; field @Deprecated public int channelWidth; @@ -4722,9 +4741,9 @@ package android.net.wifi { method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(int, android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void disable(int, android.net.wifi.WifiManager.ActionListener); method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void forget(int, android.net.wifi.WifiManager.ActionListener); - method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List>>> getAllMatchingWifiConfigs(@NonNull java.util.List); - method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map> getMatchingOsuProviders(java.util.List); - method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set); + method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List>>> getAllMatchingWifiConfigs(@NonNull java.util.List); + method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map> getMatchingOsuProviders(java.util.List); + method @NonNull @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set); method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List getPrivilegedConfiguredNetworks(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState(); @@ -4787,7 +4806,7 @@ package android.net.wifi { ctor public WifiNetworkConnectionStatistics(android.net.wifi.WifiNetworkConnectionStatistics); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public int numConnection; field public int numUsage; } @@ -4914,7 +4933,7 @@ package android.net.wifi { public final class WifiUsabilityStatsEntry implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PROBE_STATUS_FAILURE = 3; // 0x3 field public static final int PROBE_STATUS_NO_PROBE = 1; // 0x1 field public static final int PROBE_STATUS_SUCCESS = 2; // 0x2 @@ -4966,10 +4985,10 @@ package android.net.wifi.hotspot2 { public final class OsuProvider implements android.os.Parcelable { method public int describeContents(); - method public String getFriendlyName(); - method public android.net.Uri getServerUri(); + method @Nullable public String getFriendlyName(); + method @Nullable public android.net.Uri getServerUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class ProvisioningCallback { @@ -5039,7 +5058,7 @@ package android.net.wifi.rtt { field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1 field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2 field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PREAMBLE_HT = 1; // 0x1 field public static final int PREAMBLE_LEGACY = 0; // 0x0 field public static final int PREAMBLE_VHT = 2; // 0x2 @@ -5121,7 +5140,7 @@ package android.os { method public boolean getForceBackgroundCheck(); method public int getLocationMode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class BatterySaverPolicyConfig.Builder { @@ -5210,11 +5229,11 @@ package android.os { } 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 { @@ -5382,7 +5401,7 @@ package android.os { method public long getPrivacyPolicy(); method public long getTimestamp(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class IncidentManager.PendingReport { @@ -5406,7 +5425,7 @@ package android.os { method public void setAll(boolean); method public void setPrivacyPolicy(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class LocaleList implements android.os.Parcelable { @@ -5460,7 +5479,7 @@ package android.os { method public int describeContents(); method public void sendResult(@Nullable android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static interface RemoteCallback.OnResultListener { @@ -5486,7 +5505,7 @@ package android.os { method public boolean isValueType(int); method public void writeToParcel(android.os.Parcel, int); field public static final int BOOLEAN_VALUE_TYPE = 5; // 0x5 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLOAT_VALUE_TYPE = 6; // 0x6 field public static final int INT_VALUE_TYPE = 3; // 0x3 field public static final int LONG_VALUE_TYPE = 4; // 0x4 @@ -5615,7 +5634,7 @@ package android.os { method public android.os.UserHandle getUserHandle(); method @android.os.UserManager.UserRestrictionSource public int getUserRestrictionSource(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } @IntDef(flag=true, prefix={"RESTRICTION_"}, value={android.os.UserManager.RESTRICTION_NOT_SET, android.os.UserManager.RESTRICTION_SOURCE_SYSTEM, android.os.UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, android.os.UserManager.RESTRICTION_SOURCE_PROFILE_OWNER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface UserManager.UserRestrictionSource { @@ -5632,7 +5651,7 @@ package android.os { method public String getAttributionTag(); method public int getAttributionUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -5667,12 +5686,13 @@ package android.permission { public abstract class PermissionControllerService extends android.app.Service { ctor public PermissionControllerService(); method public final void attachBaseContext(android.content.Context); - method public final android.os.IBinder onBind(android.content.Intent); + method @NonNull public final android.os.IBinder onBind(android.content.Intent); method public abstract int onCountPermissionApps(@NonNull java.util.List, int); method @NonNull public abstract java.util.List onGetAppPermissions(@NonNull String); method @NonNull public abstract java.util.List onGetPermissionUsages(boolean, long); method public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream); method public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String); + method public abstract boolean onIsRoleVisible(@NonNull String); method @BinderThread public abstract boolean onRestoreDelayedRuntimePermissionsBackup(@NonNull String, @NonNull android.os.UserHandle); method @BinderThread public abstract void onRestoreRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream); method public abstract void onRevokeRuntimePermission(@NonNull String, @NonNull String); @@ -5692,13 +5712,13 @@ package android.permission { } public final class RuntimePermissionPresentationInfo implements android.os.Parcelable { - ctor public RuntimePermissionPresentationInfo(CharSequence, boolean, boolean); + ctor public RuntimePermissionPresentationInfo(@NonNull CharSequence, boolean, boolean); method public int describeContents(); method @NonNull public CharSequence getLabel(); method public boolean isGranted(); method public boolean isStandard(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class RuntimePermissionUsageInfo implements android.os.Parcelable { @@ -5707,7 +5727,7 @@ package android.permission { method public int getAppAccessCount(); method @NonNull public CharSequence getName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -5761,7 +5781,7 @@ package android.printservice { method public int describeContents(); method @NonNull public android.content.ComponentName getComponentName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -5778,7 +5798,7 @@ package android.printservice.recommendation { method public CharSequence getPackageName(); method public boolean recommendsMultiVendorService(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class RecommendationService extends android.app.Service { @@ -5826,36 +5846,27 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); + method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(String, String, boolean); + method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(String, String, float); + method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(String, String, int); + method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(String, String, long); method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(String, String); + method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(String, String, String); 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_ACTIVITY_MANAGER_NATIVE_BOOT = "activity_manager_native_boot"; 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"; field public static final String NAMESPACE_INPUT_NATIVE_BOOT = "input_native_boot"; + field public static final String NAMESPACE_MEDIA_NATIVE = "media_native"; field public static final String NAMESPACE_NETD_NATIVE = "netd_native"; + field public static final String NAMESPACE_RUNTIME_NATIVE_BOOT = "runtime_native_boot"; 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"; - } - public static interface DeviceConfig.AttentionManagerService { field public static final String COMPONENT_NAME = "component_name"; field public static final String NAMESPACE = "attention_manager_service"; @@ -5874,10 +5885,6 @@ package android.provider { field public static final String NAMESPACE = "intelligence_attention"; } - public static interface DeviceConfig.MediaNative { - field public static final String NAMESPACE = "media_native"; - } - public static interface DeviceConfig.OnPropertyChangedListener { method public void onPropertyChanged(String, String, String); } @@ -5904,10 +5911,6 @@ package android.provider { field public static final String NAMESPACE = "runtime_native"; } - public static interface DeviceConfig.RuntimeNativeBoot { - field public static final String NAMESPACE = "runtime_native_boot"; - } - public static interface DeviceConfig.Scheduler { field public static final String ENABLE_FAST_METRICS_COLLECTION = "enable_fast_metrics_collection"; field public static final String NAMESPACE = "scheduler"; @@ -6052,6 +6055,7 @@ package android.provider { } public final class Settings { + field public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = "android.settings.ACCESSIBILITY_DETAILS_SETTINGS"; field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS"; field public static final String ACTION_LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS = "android.settings.LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS"; field public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE = "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE"; @@ -6211,7 +6215,7 @@ package android.security.keystore.recovery { method @NonNull public byte[] getSecret(); method public int getUserSecretType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_LOCKSCREEN = 100; // 0x64 field public static final int UI_FORMAT_PASSWORD = 2; // 0x2 field public static final int UI_FORMAT_PATTERN = 3; // 0x3 @@ -6238,7 +6242,7 @@ package android.security.keystore.recovery { method @NonNull public java.security.cert.CertPath getTrustedHardwareCertPath(); method @NonNull public java.util.List getWrappedApplicationKeys(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class KeyDerivationParams implements android.os.Parcelable { @@ -6251,7 +6255,7 @@ package android.security.keystore.recovery { method public void writeToParcel(android.os.Parcel, int); field public static final int ALGORITHM_SCRYPT = 2; // 0x2 field public static final int ALGORITHM_SHA256 = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class LockScreenRequiredException extends java.security.GeneralSecurityException { @@ -6299,7 +6303,7 @@ package android.security.keystore.recovery { method @NonNull public byte[] getEncryptedKeyMaterial(); method @Nullable public byte[] getMetadata(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class WrappedApplicationKey.Builder { @@ -6400,9 +6404,8 @@ package android.service.autofill.augmented { 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); + 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 { @@ -6425,8 +6428,8 @@ package android.service.carrier { public abstract class ApnService extends android.app.Service { ctor public ApnService(); - method public android.os.IBinder onBind(android.content.Intent); - method @WorkerThread public abstract java.util.List onRestoreApns(int); + method @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent); + method @WorkerThread @NonNull public abstract java.util.List onRestoreApns(int); } } @@ -6450,11 +6453,11 @@ package android.service.contentcapture { 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 CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -6481,7 +6484,7 @@ package android.service.euicc { method public int getResolvableErrors(); method public int getResult(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class EuiccProfileInfo implements android.os.Parcelable { @@ -6498,7 +6501,7 @@ package android.service.euicc { method public boolean hasPolicyRule(@android.service.euicc.EuiccProfileInfo.PolicyRule int); method public boolean hasPolicyRules(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int POLICY_RULE_DELETE_AFTER_DISABLING = 4; // 0x4 field public static final int POLICY_RULE_DO_NOT_DELETE = 2; // 0x2 field public static final int POLICY_RULE_DO_NOT_DISABLE = 1; // 0x1 @@ -6589,7 +6592,7 @@ package android.service.euicc { method @Nullable public java.util.List getDownloadableSubscriptions(); method public int getResult(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class GetDownloadableSubscriptionMetadataResult implements android.os.Parcelable { @@ -6598,7 +6601,7 @@ package android.service.euicc { method @Nullable public android.telephony.euicc.DownloadableSubscription getDownloadableSubscription(); method public int getResult(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class GetEuiccProfileInfoListResult implements android.os.Parcelable { @@ -6608,7 +6611,7 @@ package android.service.euicc { method @Nullable public java.util.List getProfiles(); method public int getResult(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -6634,7 +6637,7 @@ package android.service.notification { method public CharSequence getExplanation(); method public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -6706,7 +6709,7 @@ package android.service.resolver { method public void setSelectProbability(float); method public void setTimeSpentScore(float); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -6722,7 +6725,7 @@ package android.service.settings.suggestions { method public CharSequence getSummary(); method public CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_HAS_BUTTON = 1; // 0x1 } @@ -6763,15 +6766,15 @@ package android.service.textclassifier { method public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context); method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier(); method @Nullable public final android.os.IBinder onBind(android.content.Intent); - method public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); - method public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId); - method public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId); - method public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); - method public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); - method @Deprecated public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent); - method public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); - method public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); - method public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent); + method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); + method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId); + method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId); + method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); + method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); + method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent); + method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); + method @MainThread public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback); + method @MainThread public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent); field public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService"; } @@ -6836,7 +6839,7 @@ package android.telecom { method @Deprecated public int getSupportedRouteMask(); method @Deprecated public boolean isMuted(); method @Deprecated public void writeToParcel(android.os.Parcel, int); - field @Deprecated public static final android.os.Parcelable.Creator CREATOR; + field @Deprecated @NonNull public static final android.os.Parcelable.Creator CREATOR; field @Deprecated public static final int ROUTE_BLUETOOTH = 2; // 0x2 field @Deprecated public static final int ROUTE_EARPIECE = 1; // 0x1 field @Deprecated public static final int ROUTE_SPEAKER = 8; // 0x8 @@ -6894,7 +6897,7 @@ package android.telecom { field public static final int CALLTYPE_OUTGOING = 2; // 0x2 field public static final int CALLTYPE_UNKNOWN = 0; // 0x0 field public static final int CDMA_PHONE = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int GSM_PHONE = 2; // 0x2 field public static final int IMS_PHONE = 4; // 0x4 field public static final long MILLIS_IN_1_SECOND = 1000L; // 0x3e8L @@ -6918,7 +6921,7 @@ package android.telecom { field public static final int BLOCK_CHECK_FINISHED = 105; // 0x69 field public static final int BLOCK_CHECK_INITIATED = 104; // 0x68 field public static final int CONFERENCE_WITH = 300; // 0x12c - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int CS_BOUND = 6; // 0x6 field public static final int DIRECT_TO_VM_FINISHED = 103; // 0x67 field public static final int DIRECT_TO_VM_INITIATED = 102; // 0x66 @@ -6958,7 +6961,7 @@ package android.telecom { field public static final int ACCEPT_TIMING = 0; // 0x0 field public static final int BIND_CS_TIMING = 6; // 0x6 field public static final int BLOCK_CHECK_FINISHED_TIMING = 9; // 0x9 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DIRECT_TO_VM_FINISHED_TIMING = 8; // 0x8 field public static final int DISCONNECT_TIMING = 2; // 0x2 field public static final int FILTERING_COMPLETED_TIMING = 10; // 0xa @@ -6998,10 +7001,6 @@ package android.telecom { field public static final int CAPABILITY_MULTI_USER = 32; // 0x20 } - public final class PhoneAccountSuggestion implements android.os.Parcelable { - ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); - } - public class PhoneAccountSuggestionService extends android.app.Service { ctor public PhoneAccountSuggestionService(); method public void onAccountSuggestionRequest(@NonNull String); @@ -7031,7 +7030,7 @@ package android.telecom { method public java.util.List getCallAnalytics(); method public java.util.List getSessionTimings(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class TelecomAnalytics.SessionTiming implements android.os.Parcelable { @@ -7040,7 +7039,7 @@ package android.telecom { method public Integer getKey(); method public long getTime(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int CSW_ADD_CONFERENCE_CALL = 108; // 0x6c field public static final int CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100; // 0x64 field public static final int CSW_REMOVE_CALL = 106; // 0x6a @@ -7077,8 +7076,8 @@ package android.telecom { method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List getPhoneAccountsSupportingScheme(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); - method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(String); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(android.telecom.PhoneAccountHandle); + method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(@Nullable String); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle); field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT"; field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT"; field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE"; @@ -7098,14 +7097,14 @@ package android.telephony { field public static final int WWAN = 1; // 0x1 } - public class CallAttributes implements android.os.Parcelable { - ctor public CallAttributes(android.telephony.PreciseCallState, int, android.telephony.CallQuality); + public final class CallAttributes implements android.os.Parcelable { + ctor public CallAttributes(@NonNull android.telephony.PreciseCallState, int, @NonNull android.telephony.CallQuality); method public int describeContents(); - method public android.telephony.CallQuality getCallQuality(); + method @NonNull public android.telephony.CallQuality getCallQuality(); method public int getNetworkType(); - method public android.telephony.PreciseCallState getPreciseCallState(); + method @NonNull public android.telephony.PreciseCallState getPreciseCallState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CallQuality implements android.os.Parcelable { @@ -7129,7 +7128,7 @@ package android.telephony { field public static final int CALL_QUALITY_GOOD = 1; // 0x1 field public static final int CALL_QUALITY_NOT_AVAILABLE = 5; // 0x5 field public static final int CALL_QUALITY_POOR = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class CarrierConfigManager { @@ -7140,28 +7139,28 @@ package android.telephony { } public final class CarrierRestrictionRules implements android.os.Parcelable { + method @NonNull public java.util.List areCarrierIdentifiersAllowed(@NonNull java.util.List); method public int describeContents(); method @NonNull public java.util.List getAllowedCarriers(); method public int getDefaultCarrierRestriction(); method @NonNull public java.util.List getExcludedCarriers(); method public int getMultiSimPolicy(); method public boolean isAllCarriersAllowed(); - method public java.util.List isCarrierIdentifiersAllowed(@NonNull java.util.List); method public void writeToParcel(android.os.Parcel, int); field public static final int CARRIER_RESTRICTION_DEFAULT_ALLOWED = 1; // 0x1 field public static final int CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int MULTISIM_POLICY_NONE = 0; // 0x0 field public static final int MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT = 1; // 0x1 } - public static class CarrierRestrictionRules.Builder { - method public android.telephony.CarrierRestrictionRules build(); - method public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); - method public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(java.util.List); - method public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); - method public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(java.util.List); - method public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int); + public static final class CarrierRestrictionRules.Builder { + method @NonNull public android.telephony.CarrierRestrictionRules build(); + method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); + method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List); + method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); + method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List); + method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int); } public final class DataFailCause { @@ -7511,7 +7510,7 @@ package android.telephony { method public int describeContents(); method @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class DisconnectCause { @@ -7597,7 +7596,7 @@ package android.telephony { method public int getEmcBearerSupport(); method public int getVopsSupport(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int LTE_STATUS_NOT_AVAILABLE = 1; // 0x1 field public static final int LTE_STATUS_NOT_SUPPORTED = 3; // 0x3 field public static final int LTE_STATUS_SUPPORTED = 2; // 0x2 @@ -7616,12 +7615,11 @@ package android.telephony { } public class NetworkRegistrationState implements android.os.Parcelable { - ctor public NetworkRegistrationState(int, int, int, int, int, boolean, int[], @Nullable android.telephony.CellIdentity); - ctor protected NetworkRegistrationState(android.os.Parcel); + ctor public NetworkRegistrationState(int, int, int, int, int, boolean, @NonNull int[], @Nullable android.telephony.CellIdentity); method public int describeContents(); method public int getAccessNetworkTechnology(); - method public int[] getAvailableServices(); - method public android.telephony.CellIdentity getCellIdentity(); + method @NonNull public int[] getAvailableServices(); + method @Nullable public android.telephony.CellIdentity getCellIdentity(); method @Nullable public android.telephony.DataSpecificRegistrationStates getDataSpecificStates(); method public int getDomain(); method public int getRegState(); @@ -7631,7 +7629,7 @@ package android.telephony { method public boolean isEmergencyEnabled(); method public boolean isRoaming(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DOMAIN_CS = 1; // 0x1 field public static final int DOMAIN_PS = 2; // 0x2 field public static final int REG_STATE_DENIED = 3; // 0x3 @@ -7647,22 +7645,38 @@ package android.telephony { field public static final int SERVICE_TYPE_VOICE = 1; // 0x1 } + public static class NetworkRegistrationState.Builder { + ctor public NetworkRegistrationState.Builder(); + method @NonNull public android.telephony.NetworkRegistrationState build(); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setAccessNetworkTechnology(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setAvailableServices(@NonNull int[]); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setCellIdentity(@Nullable android.telephony.CellIdentity); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setDomain(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setEmergencyOnly(boolean); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setNrStatus(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setRegState(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setRejectCause(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setRoamingType(int); + method @NonNull public android.telephony.NetworkRegistrationState.Builder setTransportType(int); + } + public abstract class NetworkService extends android.app.Service { ctor public NetworkService(); - method protected abstract android.telephony.NetworkService.NetworkServiceProvider createNetworkServiceProvider(int); + method public android.os.IBinder onBind(android.content.Intent); + method @Nullable public abstract android.telephony.NetworkService.NetworkServiceProvider onCreateNetworkServiceProvider(int); field public static final String NETWORK_SERVICE_INTERFACE = "android.telephony.NetworkService"; } public abstract class NetworkService.NetworkServiceProvider implements java.lang.AutoCloseable { ctor public NetworkService.NetworkServiceProvider(int); method public abstract void close(); - method public void getNetworkRegistrationState(int, android.telephony.NetworkServiceCallback); - method public final int getSlotId(); + method public void getNetworkRegistrationState(int, @NonNull android.telephony.NetworkServiceCallback); + method public final int getSlotIndex(); method public final void notifyNetworkRegistrationStateChanged(); } public class NetworkServiceCallback { - method public void onGetNetworkRegistrationStateComplete(int, android.telephony.NetworkRegistrationState); + method public void onGetNetworkRegistrationStateComplete(int, @Nullable android.telephony.NetworkRegistrationState); field public static final int RESULT_ERROR_BUSY = 3; // 0x3 field public static final int RESULT_ERROR_FAILED = 5; // 0x5 field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4 @@ -7686,9 +7700,9 @@ package android.telephony { public final class PhoneNumberRange implements android.os.Parcelable { ctor public PhoneNumberRange(@NonNull String, @NonNull String, @NonNull String, @NonNull String); method public int describeContents(); - method public boolean matches(String); + method public boolean matches(@NonNull String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class PhoneStateListener { @@ -7696,7 +7710,7 @@ package android.telephony { 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); @@ -7716,7 +7730,7 @@ package android.telephony { method public int getForegroundCallState(); method public int getRingingCallState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int PRECISE_CALL_STATE_ACTIVE = 1; // 0x1 field public static final int PRECISE_CALL_STATE_ALERTING = 4; // 0x4 field public static final int PRECISE_CALL_STATE_DIALING = 3; // 0x3 @@ -7731,12 +7745,12 @@ package android.telephony { 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(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class PreciseDisconnectCause { @@ -7837,12 +7851,12 @@ package android.telephony { } public class ServiceState implements android.os.Parcelable { - method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); - method public java.util.List getNetworkRegistrationStates(); - method @Deprecated public java.util.List getNetworkRegistrationStates(int); - method @Deprecated public android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); - method public java.util.List getNetworkRegistrationStatesForDomain(int); - method public java.util.List getNetworkRegistrationStatesForTransportType(int); + method @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); + method @NonNull public java.util.List getNetworkRegistrationStates(); + method @Deprecated @NonNull public java.util.List getNetworkRegistrationStates(int); + method @Deprecated @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); + method @NonNull public java.util.List getNetworkRegistrationStatesForDomain(int); + method @NonNull public java.util.List getNetworkRegistrationStatesForTransportType(int); field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2 field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3 field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0 @@ -7884,19 +7898,19 @@ package android.telephony { method public void requestEmbeddedSubscriptionInfoListRefresh(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int); 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); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer); 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 { @@ -7921,7 +7935,7 @@ package android.telephony { method public int getMinTime(); method public int getSampleCount(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TELEPHONY_CATEGORY_RIL = 1; // 0x1 } @@ -7934,7 +7948,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableDataConnectivity(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableModemForSlot(int, boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enableVideoCalling(boolean); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int); + method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int); method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List getAllowedCarriers(int); method public java.util.List getCarrierPackageNamesForIntent(android.content.Intent); method public java.util.List getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int); @@ -7950,9 +7964,10 @@ package android.telephony { method @Deprecated public boolean getDataEnabled(); method @Deprecated public boolean getDataEnabled(int); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getEmergencyCallbackMode(); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain(); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst(); + method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain(); + method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst(); method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List> getLogicalToPhysicalSlotMapping(); + method public static long getMaxNumberVerificationTimeoutMillis(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmap(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState(); method public int getSimApplicationState(); @@ -8013,7 +8028,6 @@ package android.telephony { field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE"; field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL"; field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING"; - field public static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000L; // 0xea60L field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L @@ -8062,7 +8076,7 @@ package android.telephony { method public String getCertificateHexString(); method @Nullable public String getPackageName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class UiccSlotInfo implements android.os.Parcelable { @@ -8080,7 +8094,7 @@ package android.telephony { field public static final int CARD_STATE_INFO_ERROR = 3; // 0x3 field public static final int CARD_STATE_INFO_PRESENT = 2; // 0x2 field public static final int CARD_STATE_INFO_RESTRICTED = 4; // 0x4 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public abstract class VisualVoicemailService extends android.app.Service { @@ -8094,7 +8108,6 @@ package android.telephony.data { public final class DataCallResponse implements android.os.Parcelable { ctor public DataCallResponse(int, int, int, int, int, @Nullable String, @Nullable java.util.List, @Nullable java.util.List, @Nullable java.util.List, @Nullable java.util.List, int); - ctor public DataCallResponse(android.os.Parcel); method public int describeContents(); method public int getActive(); method @NonNull public java.util.List getAddresses(); @@ -8108,23 +8121,23 @@ package android.telephony.data { method public int getStatus(); method public int getSuggestedRetryTime(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class DataProfile implements android.os.Parcelable { - method public String getApn(); + method @NonNull public String getApn(); method public int getAuthType(); method public int getBearerBitmap(); method public int getMaxConns(); method public int getMaxConnsTime(); method public int getMtu(); - method public String getPassword(); + method @Nullable public String getPassword(); method public int getProfileId(); method public int getProtocol(); method public int getRoamingProtocol(); method public int getSupportedApnTypesBitmap(); method public int getType(); - method public String getUserName(); + method @Nullable public String getUserName(); method public int getWaitTime(); method public boolean isEnabled(); method public boolean isPersistent(); @@ -8136,7 +8149,8 @@ package android.telephony.data { public abstract class DataService extends android.app.Service { ctor public DataService(); - method public abstract android.telephony.data.DataService.DataServiceProvider createDataServiceProvider(int); + method public android.os.IBinder onBind(android.content.Intent); + method @Nullable public abstract android.telephony.data.DataService.DataServiceProvider onCreateDataServiceProvider(int); field public static final String DATA_SERVICE_INTERFACE = "android.telephony.data.DataService"; field public static final int REQUEST_REASON_HANDOVER = 3; // 0x3 field public static final int REQUEST_REASON_NORMAL = 1; // 0x1 @@ -8148,20 +8162,20 @@ package android.telephony.data { method public abstract void close(); method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback); method public void getDataCallList(@NonNull android.telephony.data.DataServiceCallback); - method public final int getSlotId(); + method public final int getSlotIndex(); method public final void notifyDataCallListChanged(java.util.List); - method public void setDataProfile(java.util.List, boolean, @Nullable android.telephony.data.DataServiceCallback); - method public void setInitialAttachApn(android.telephony.data.DataProfile, boolean, @Nullable android.telephony.data.DataServiceCallback); - method public void setupDataCall(int, android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @Nullable android.telephony.data.DataServiceCallback); + method public void setDataProfile(@NonNull java.util.List, boolean, @Nullable android.telephony.data.DataServiceCallback); + method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @Nullable android.telephony.data.DataServiceCallback); + method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @Nullable android.telephony.data.DataServiceCallback); } public class DataServiceCallback { - method public void onDataCallListChanged(java.util.List); + method public void onDataCallListChanged(@NonNull java.util.List); method public void onDeactivateDataCallComplete(int); - method public void onGetDataCallListComplete(int, java.util.List); + method public void onGetDataCallListComplete(int, @NonNull java.util.List); method public void onSetDataProfileComplete(int); method public void onSetInitialAttachApnComplete(int); - method public void onSetupDataCallComplete(int, android.telephony.data.DataCallResponse); + method public void onSetupDataCallComplete(int, @Nullable android.telephony.data.DataCallResponse); field public static final int RESULT_ERROR_BUSY = 3; // 0x3 field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4 field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2 @@ -8171,7 +8185,7 @@ package android.telephony.data { public abstract class QualifiedNetworksService extends android.app.Service { ctor public QualifiedNetworksService(); - method public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityUpdater createNetworkAvailabilityUpdater(int); + method @NonNull public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityUpdater createNetworkAvailabilityUpdater(int); field public static final String QUALIFIED_NETWORKS_SERVICE_INTERFACE = "android.telephony.data.QualifiedNetworksService"; } @@ -8179,7 +8193,7 @@ package android.telephony.data { ctor public QualifiedNetworksService.NetworkAvailabilityUpdater(int); method public abstract void close(); method public final int getSlotIndex(); - method public final void updateQualifiedNetworkTypes(int, int[]); + method public final void updateQualifiedNetworkTypes(int, @Nullable int[]); } } @@ -8287,7 +8301,7 @@ package android.telephony.euicc { method public String getTargetAddr(); method public void writeToParcel(android.os.Parcel, int); field @android.telephony.euicc.EuiccNotification.Event public static final int ALL_EVENTS = 15; // 0xf - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EVENT_DELETE = 8; // 0x8 field public static final int EVENT_DISABLE = 4; // 0x4 field public static final int EVENT_ENABLE = 2; // 0x2 @@ -8302,7 +8316,7 @@ package android.telephony.euicc { method public int findIndex(@android.service.euicc.EuiccProfileInfo.PolicyRule int, android.service.carrier.CarrierIdentifier); method public boolean hasPolicyRuleFlag(int, @android.telephony.euicc.EuiccRulesAuthTable.PolicyRuleFlag int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int POLICY_RULE_FLAG_CONSENT_REQUIRED = 1; // 0x1 } @@ -8336,7 +8350,7 @@ package android.telephony.ims { field public static final int CDIV_CF_REASON_NOT_REACHABLE = 3; // 0x3 field public static final int CDIV_CF_REASON_NO_REPLY = 2; // 0x2 field public static final int CDIV_CF_REASON_UNCONDITIONAL = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_ACTIVE = 1; // 0x1 field public static final int STATUS_NOT_ACTIVE = 0; // 0x0 field public static final int TYPE_OF_ADDRESS_INTERNATIONAL = 145; // 0x91 @@ -8397,7 +8411,7 @@ package android.telephony.ims { field public static final int CALL_TYPE_VT_NODIR = 7; // 0x7 field public static final int CALL_TYPE_VT_RX = 6; // 0x6 field public static final int CALL_TYPE_VT_TX = 5; // 0x5 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DIALSTRING_NORMAL = 0; // 0x0 field public static final int DIALSTRING_SS_CONF = 1; // 0x1 field public static final int DIALSTRING_USSD = 2; // 0x2 @@ -8427,7 +8441,7 @@ package android.telephony.ims { } public class ImsCallSessionListener { - method public void callQualityChanged(android.telephony.CallQuality); + method public void callQualityChanged(@NonNull android.telephony.CallQuality); method public void callSessionConferenceExtendFailed(android.telephony.ims.ImsReasonInfo); method public void callSessionConferenceExtendReceived(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile); method public void callSessionConferenceExtended(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile); @@ -8452,7 +8466,7 @@ package android.telephony.ims { method public void callSessionResumeFailed(android.telephony.ims.ImsReasonInfo); method public void callSessionResumeReceived(android.telephony.ims.ImsCallProfile); method public void callSessionResumed(android.telephony.ims.ImsCallProfile); - method public void callSessionRttAudioIndicatorChanged(android.telephony.ims.ImsStreamMediaProfile); + method public void callSessionRttAudioIndicatorChanged(@NonNull android.telephony.ims.ImsStreamMediaProfile); method public void callSessionRttMessageReceived(String); method public void callSessionRttModifyRequestReceived(android.telephony.ims.ImsCallProfile); method public void callSessionRttModifyResponseReceived(int); @@ -8469,7 +8483,7 @@ package android.telephony.ims { method public int describeContents(); method public static int getConnectionStateForStatus(String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final String DISPLAY_TEXT = "display-text"; field public static final String ENDPOINT = "endpoint"; field public static final String SIP_STATUS_CODE = "sipstatuscode"; @@ -8513,7 +8527,7 @@ package android.telephony.ims { method public void writeToParcel(android.os.Parcel, int); field public static final int CALL_STATE_CONFIRMED = 1; // 0x1 field public static final int CALL_STATE_TERMINATED = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class ImsMmTelManager { @@ -8528,14 +8542,14 @@ package android.telephony.ims { 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 @@ -8550,10 +8564,10 @@ package android.telephony.ims { 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 { @@ -8733,7 +8747,7 @@ package android.telephony.ims { field public static final int CODE_UT_SS_MODIFIED_TO_SS = 824; // 0x338 field public static final int CODE_UT_SS_MODIFIED_TO_USSD = 823; // 0x337 field public static final int CODE_WIFI_LOST = 1407; // 0x57f - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3; // 0x3 field public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1; // 0x1 field public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // 0x2 @@ -8756,12 +8770,12 @@ package android.telephony.ims { public final class ImsSsData implements android.os.Parcelable { ctor public ImsSsData(int, int, int, int, int); method public int describeContents(); - method public android.telephony.ims.ImsCallForwardInfo[] getCallForwardInfo(); + method @Nullable public java.util.List getCallForwardInfo(); method public int getRequestType(); method public int getResult(); method public int getServiceClass(); method public int getServiceType(); - method @NonNull public android.telephony.ims.ImsSsInfo[] getSuppServiceInfo(); + method @NonNull public java.util.List getSuppServiceInfo(); method public int getTeleserviceType(); method public boolean isTypeBarring(); method public boolean isTypeCf(); @@ -8774,7 +8788,7 @@ package android.telephony.ims { method public boolean isTypeInterrogation(); method public boolean isTypeUnConditional(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int RESULT_SUCCESS = 0; // 0x0 field public static final int SERVICE_CLASS_DATA = 2; // 0x2 field public static final int SERVICE_CLASS_DATA_CIRCUIT_ASYNC = 32; // 0x20 @@ -8821,11 +8835,11 @@ package android.telephony.ims { field public static final int SS_WAIT = 12; // 0xc } - public static class ImsSsData.Builder { + public static final class ImsSsData.Builder { ctor public ImsSsData.Builder(int, int, int, int, int); method @NonNull public android.telephony.ims.ImsSsData build(); - method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull android.telephony.ims.ImsCallForwardInfo[]); - method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull android.telephony.ims.ImsSsInfo[]); + method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull java.util.List); + method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull java.util.List); } public final class ImsSsInfo implements android.os.Parcelable { @@ -8834,7 +8848,7 @@ package android.telephony.ims { method public int getClirInterrogationStatus(); method public int getClirOutgoingState(); method @Deprecated public String getIcbNum(); - method public String getIncomingCommunicationBarringNumber(); + method @Nullable public String getIncomingCommunicationBarringNumber(); method public int getProvisionStatus(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); @@ -8846,7 +8860,7 @@ package android.telephony.ims { field public static final int CLIR_STATUS_TEMPORARILY_ALLOWED = 4; // 0x4 field public static final int CLIR_STATUS_TEMPORARILY_RESTRICTED = 3; // 0x3 field public static final int CLIR_STATUS_UNKNOWN = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DISABLED = 0; // 0x0 field public static final int ENABLED = 1; // 0x1 field public static final int NOT_REGISTERED = -1; // 0xffffffff @@ -8855,7 +8869,7 @@ package android.telephony.ims { field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff } - public static class ImsSsInfo.Builder { + public static final class ImsSsInfo.Builder { ctor public ImsSsInfo.Builder(int); method @NonNull public android.telephony.ims.ImsSsInfo build(); method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int); @@ -8899,7 +8913,7 @@ package android.telephony.ims { field public static final int AUDIO_QUALITY_GSM_HR = 10; // 0xa field public static final int AUDIO_QUALITY_NONE = 0; // 0x0 field public static final int AUDIO_QUALITY_QCELP13K = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int DIRECTION_INACTIVE = 0; // 0x0 field public static final int DIRECTION_INVALID = -1; // 0xffffffff field public static final int DIRECTION_RECEIVE = 1; // 0x1 @@ -8919,7 +8933,7 @@ package android.telephony.ims { ctor public ImsSuppServiceNotification(int, int, int, int, String, String[]); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final int code; field public final String[] history; field public final int index; @@ -8996,7 +9010,7 @@ package android.telephony.ims.feature { method public java.util.List getCapabilitiesToDisable(); method public java.util.List getCapabilitiesToEnable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class CapabilityChangeRequest.CapabilityPair { @@ -9158,7 +9172,7 @@ package android.telephony.ims.stub { method public int describeContents(); method public java.util.Set getServiceFeatures(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class ImsFeatureConfiguration.Builder { @@ -9272,7 +9286,7 @@ package android.telephony.mbms { method public android.net.Uri getContentUri(); method public android.net.Uri getFilePathUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -9304,12 +9318,12 @@ package android.telephony.mbms.vendor { public class MbmsGroupCallServiceBase extends android.app.Service { ctor public MbmsGroupCallServiceBase(); method public void dispose(int) throws android.os.RemoteException; - method public int initialize(android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; + method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; method public void onAppCallbackDied(int, int); method public android.os.IBinder onBind(android.content.Intent); - method public int startGroupCall(int, long, java.util.List, java.util.List, android.telephony.mbms.GroupCallCallback); + method public int startGroupCall(int, long, @NonNull java.util.List, @NonNull java.util.List, @NonNull android.telephony.mbms.GroupCallCallback); method public void stopGroupCall(int, long); - method public void updateGroupCall(int, long, java.util.List, java.util.List); + method public void updateGroupCall(int, long, @NonNull java.util.List, @NonNull java.util.List); } public class MbmsStreamingServiceBase extends android.os.Binder { @@ -9356,7 +9370,7 @@ package android.util { method public static void logFileOperationFailure(int, int); method public static void logFilePick(int, long, int, boolean, int, int, int); method public static void logInvalidScopedAccessRequest(int); - method public static void logPickerLaunchedFrom(String); + method public static void logPickerLaunchedFrom(@Nullable String); method public static void logRootVisited(int, int); method public static void logSearchMode(int); method public static void logSearchType(int); @@ -9450,7 +9464,7 @@ package android.view.contentcapture { method public int getType(); method @Nullable public android.view.contentcapture.ViewNode getViewNode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_CONTEXT_UPDATED = 6; // 0x6 field public static final int TYPE_SESSION_PAUSED = 8; // 0x8 field public static final int TYPE_SESSION_RESUMED = 7; // 0x7 @@ -9636,16 +9650,16 @@ package android.webkit { public final class WebViewDelegate { method public void addWebViewAssetPath(android.content.Context); - method public void callDrawGlFunction(android.graphics.Canvas, long); - method public void callDrawGlFunction(@NonNull android.graphics.Canvas, long, @Nullable Runnable); - method public boolean canInvokeDrawGlFunctor(android.view.View); - method public void detachDrawGlFunctor(android.view.View, long); + method @Deprecated public void callDrawGlFunction(android.graphics.Canvas, long); + method @Deprecated public void callDrawGlFunction(@NonNull android.graphics.Canvas, long, @Nullable Runnable); + method @Deprecated public boolean canInvokeDrawGlFunctor(android.view.View); + method @Deprecated public void detachDrawGlFunctor(android.view.View, long); method public void drawWebViewFunctor(@NonNull android.graphics.Canvas, int); method public android.app.Application getApplication(); method public String getDataDirectorySuffix(); method public String getErrorString(android.content.Context, int); method public int getPackageId(android.content.res.Resources, String); - method public void invokeDrawGlFunctor(android.view.View, long, boolean); + method @Deprecated public void invokeDrawGlFunctor(android.view.View, long, boolean); method public boolean isMultiProcessEnabled(); method public boolean isTraceTagEnabled(); method public void setOnTraceEnabledChangeListener(android.webkit.WebViewDelegate.OnTraceEnabledChangeListener); @@ -9844,7 +9858,7 @@ package android.webkit { 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); @@ -9872,7 +9886,7 @@ package android.webkit { ctor public WebViewProviderInfo(String, String, boolean, boolean, String[]); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final boolean availableByDefault; field public final String description; field public final boolean isFallback; diff --git a/api/test-current.txt b/api/test-current.txt index 1089761a3ab1bb82b44ff8449931cba4b38595f2..87f17c6bb1ab1b38e49f3ee97ba59d5fd104beb8 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -193,31 +193,38 @@ package android.app { field public static final String OPSTR_WRITE_SMS = "android:write_sms"; field public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper"; field public static final int OP_COARSE_LOCATION = 0; // 0x0 + field public static final int OP_FLAGS_ALL = 31; // 0x1f + field public static final int OP_FLAG_SELF = 1; // 0x1 + field public static final int OP_FLAG_TRUSTED_PROXIED = 8; // 0x8 + field public static final int OP_FLAG_TRUSTED_PROXY = 2; // 0x2 + field public static final int OP_FLAG_UNTRUSTED_PROXIED = 16; // 0x10 + field public static final int OP_FLAG_UNTRUSTED_PROXY = 4; // 0x4 field public static final int OP_RECORD_AUDIO = 27; // 0x1b + field public static final int OP_START_FOREGROUND = 76; // 0x4c field public static final int OP_SYSTEM_ALERT_WINDOW = 24; // 0x18 - field public static final int UID_STATE_BACKGROUND = 5; // 0x5 - field public static final int UID_STATE_CACHED = 6; // 0x6 - field public static final int UID_STATE_FOREGROUND = 4; // 0x4 - field public static final int UID_STATE_FOREGROUND_SERVICE = 3; // 0x3 - field public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 2; // 0x2 - field public static final int UID_STATE_PERSISTENT = 0; // 0x0 - field public static final int UID_STATE_TOP = 1; // 0x1 + field public static final int UID_STATE_BACKGROUND = 600; // 0x258 + field public static final int UID_STATE_CACHED = 700; // 0x2bc + field public static final int UID_STATE_FOREGROUND = 500; // 0x1f4 + field public static final int UID_STATE_FOREGROUND_SERVICE = 400; // 0x190 + field public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; // 0x12c + field public static final int UID_STATE_PERSISTENT = 100; // 0x64 + field public static final int UID_STATE_TOP = 200; // 0xc8 } public static final class AppOpsManager.HistoricalOp implements android.os.Parcelable { method public int describeContents(); - method public long getAccessCount(int); - method public long getAccessDuration(int); - method public long getBackgroundAccessCount(); - method public long getBackgroundAccessDuration(); - method public long getBackgroundRejectCount(); - method public long getForegroundAccessCount(); - method public long getForegroundAccessDuration(); - method public long getForegroundRejectCount(); + method public long getAccessCount(int, int, int); + method public long getAccessDuration(int, int, int); + method public long getBackgroundAccessCount(int); + method public long getBackgroundAccessDuration(int); + method public long getBackgroundRejectCount(int); + method public long getForegroundAccessCount(int); + method public long getForegroundAccessDuration(int); + method public long getForegroundRejectCount(int); method @NonNull public String getOpName(); - method public long getRejectCount(int); + method public long getRejectCount(int, int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable { @@ -228,12 +235,12 @@ package android.app { method public int getUidCount(); method @Nullable public android.app.AppOpsManager.HistoricalUidOps getUidOps(int); method @NonNull public android.app.AppOpsManager.HistoricalUidOps getUidOpsAt(int); - method public void increaseAccessCount(int, int, @NonNull String, int, long); - method public void increaseAccessDuration(int, int, @NonNull String, int, long); - method public void increaseRejectCount(int, int, @NonNull String, int, long); + method public void increaseAccessCount(int, int, @NonNull String, int, int, long); + method public void increaseAccessDuration(int, int, @NonNull String, int, int, long); + method public void increaseRejectCount(int, int, @NonNull String, int, int, long); method public void offsetBeginAndEndTime(long); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalOpsRequest { @@ -242,6 +249,7 @@ package android.app { public static final class AppOpsManager.HistoricalOpsRequest.Builder { ctor public AppOpsManager.HistoricalOpsRequest.Builder(long, long); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build(); + method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String); method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int); @@ -254,7 +262,7 @@ package android.app { method public int getOpCount(); method @NonNull public String getPackageName(); method public void writeToParcel(@NonNull android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable { @@ -264,13 +272,42 @@ package android.app { method @NonNull public android.app.AppOpsManager.HistoricalPackageOps getPackageOpsAt(int); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static interface AppOpsManager.OnOpActiveChangedListener { method public void onOpActiveChanged(int, int, String, boolean); } + public static final class AppOpsManager.OpEntry implements android.os.Parcelable { + method public int describeContents(); + method public long getDuration(); + method public long getLastAccessBackgroundTime(int); + method public long getLastAccessForegroundTime(int); + method public long getLastAccessTime(int); + method public long getLastAccessTime(int, int, int); + method public long getLastBackgroundDuration(int); + method public long getLastDuration(int, int, int); + method public long getLastForegroundDuration(int); + method public long getLastRejectBackgroundTime(int); + method public long getLastRejectForegroundTime(int); + method public long getLastRejectTime(int); + method public long getLastRejectTime(int, int, int); + method public int getMode(); + method @NonNull public String getOpStr(); + method @Nullable public String getProxyPackageName(); + method @Nullable public String getProxyPackageName(int, int); + method public int getProxyUid(); + method public int getProxyUid(int, int); + method public boolean isRunning(); + method public void writeToParcel(android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + 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); @@ -392,7 +429,7 @@ package android.app.prediction { method public int getPredictedTargetCount(); method public String getUiSurface(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppPredictionContext.Builder { @@ -410,7 +447,7 @@ package android.app.prediction { public final class AppPredictionSessionId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AppPredictor { @@ -438,7 +475,7 @@ package android.app.prediction { method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo(); method @NonNull public android.os.UserHandle getUser(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class AppTargetEvent implements android.os.Parcelable { @@ -450,7 +487,7 @@ package android.app.prediction { field public static final int ACTION_DISMISS = 2; // 0x2 field public static final int ACTION_LAUNCH = 1; // 0x1 field public static final int ACTION_PIN = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static final class AppTargetEvent.Builder { @@ -463,19 +500,30 @@ package android.app.prediction { ctor public AppTargetId(@NonNull String); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } package android.app.role { + public interface OnRoleHoldersChangedListener { + method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); + } + public final class RoleManager { + method @RequiresPermission("android.permission.OBSERVE_ROLE_HOLDERS") public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List getHeldRolesFromController(@NonNull String); method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List getRoleHolders(@NonNull String); method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); + method @RequiresPermission("android.permission.OBSERVE_ROLE_HOLDERS") public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List); + field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1 } public interface RoleManagerCallback { @@ -517,7 +565,7 @@ package android.content { method public int describeContents(); method public static android.content.AutofillOptions forWhitelistingItself(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public boolean augmentedEnabled; field public final boolean compatModeEnabled; field public final int loggingLevel; @@ -528,7 +576,7 @@ package android.content { method public int describeContents(); method public static android.content.ContentCaptureOptions forWhitelistingItself(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final int idleFlushingFrequencyMs; field public final int logHistorySize; field public final int loggingLevel; @@ -558,6 +606,10 @@ package android.content { method public android.view.Display getDisplay(); } + public class Intent implements java.lang.Cloneable android.os.Parcelable { + field public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME"; + } + } package android.content.pm { @@ -737,7 +789,7 @@ package android.hardware.display { method public java.time.LocalDate getLocalDate(); method public float[] getStats(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class AmbientDisplayConfiguration { @@ -750,7 +802,7 @@ package android.hardware.display { public final class BrightnessChangeEvent implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public final float batteryLevel; field public final float brightness; field public final long colorSampleDuration; @@ -773,17 +825,17 @@ package android.hardware.display { method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String); method public android.util.Pair getCurve(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } 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 { @@ -791,7 +843,7 @@ package android.hardware.display { method @NonNull public static android.hardware.display.BrightnessCorrection createScaleAndTranslateLog(float, float); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class DisplayManager { @@ -887,6 +939,7 @@ package android.location { public class LocationManager { method public String[] getBackgroundThrottlingWhitelist(); method public String[] getIgnoreSettingsWhitelist(); + method @NonNull public java.util.List getTestProviderCurrentRequests(String); method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper); method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, android.os.UserHandle); @@ -900,17 +953,20 @@ package android.location { method public long getInterval(); method public int getNumUpdates(); method public int getQuality(); + method public boolean isLocationSettingsIgnored(); method public android.location.LocationRequest setExpireAt(long); method public android.location.LocationRequest setExpireIn(long); method public android.location.LocationRequest setFastestInterval(long); method public android.location.LocationRequest setInterval(long); + method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest setLocationSettingsIgnored(boolean); method public android.location.LocationRequest setNumUpdates(int); + method public android.location.LocationRequest setProvider(String); method public android.location.LocationRequest setQuality(int); method public void writeToParcel(android.os.Parcel, int); field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field public static final int POWER_NONE = 200; // 0xc8 @@ -941,7 +997,7 @@ package android.media { method public int getInitialMarkMs(); method public int getResumePlaybackMarkMs(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class BufferingParams.Builder { @@ -956,7 +1012,7 @@ package android.media { method public android.media.MediaPlayer2.DrmInfo getDrmInfo(@NonNull android.media.DataSourceDesc); method public android.media.MediaDrm.KeyRequest getDrmKeyRequest(@NonNull android.media.DataSourceDesc, @Nullable byte[], @Nullable byte[], @Nullable String, int, @Nullable java.util.Map) throws android.media.MediaPlayer2.NoDrmSchemeException; method public String getDrmPropertyString(@NonNull android.media.DataSourceDesc, @NonNull String) throws android.media.MediaPlayer2.NoDrmSchemeException; - method public Object prepareDrm(@NonNull android.media.DataSourceDesc, @NonNull java.util.UUID); + method @NonNull public Object prepareDrm(@NonNull android.media.DataSourceDesc, @NonNull java.util.UUID); method public byte[] provideDrmKeyResponse(@NonNull android.media.DataSourceDesc, @Nullable byte[], @NonNull byte[]) throws android.media.DeniedByServerException, android.media.MediaPlayer2.NoDrmSchemeException; method public void releaseDrm(@NonNull android.media.DataSourceDesc) throws android.media.MediaPlayer2.NoDrmSchemeException; method public void restoreDrmKeys(@NonNull android.media.DataSourceDesc, @NonNull byte[]) throws android.media.MediaPlayer2.NoDrmSchemeException; @@ -1081,8 +1137,8 @@ package android.net { public class LinkAddress implements android.os.Parcelable { ctor public LinkAddress(java.net.InetAddress, int, int, int); - ctor public LinkAddress(java.net.InetAddress, int); - ctor public LinkAddress(String); + ctor public LinkAddress(@NonNull java.net.InetAddress, int); + ctor public LinkAddress(@NonNull String); ctor public LinkAddress(String, int, int); method public boolean isGlobalPreferred(); method public boolean isIPv4(); @@ -1155,7 +1211,7 @@ package android.net { method public void setGateway(java.net.InetAddress); method public void setIpAddress(android.net.LinkAddress); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class TrafficStats { @@ -1412,8 +1468,8 @@ package android.os { 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 { @@ -1578,7 +1634,7 @@ package android.os { method public long getPrivacyPolicy(); method public long getTimestamp(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class IncidentManager.PendingReport { @@ -1602,7 +1658,7 @@ package android.os { method public void setAll(boolean); method public void setPrivacyPolicy(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class MessageQueue { @@ -1649,7 +1705,7 @@ package android.os { method public int describeContents(); method public void sendResult(@Nullable android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static interface RemoteCallback.OnResultListener { @@ -1662,7 +1718,7 @@ package android.os { } 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 { @@ -1674,7 +1730,7 @@ package android.os { method public Class getViolationClass(); method public String getViolationDetails(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public String broadcastIntentAction; field public int durationMillis; field public int numAnimationsRunning; @@ -1729,7 +1785,7 @@ package android.os { method public android.os.VibrationEffect.OneShot scale(float, int); method public void validate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class VibrationEffect.Prebaked extends android.os.VibrationEffect implements android.os.Parcelable { @@ -1742,7 +1798,7 @@ package android.os { method public boolean shouldFallback(); method public void validate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public static class VibrationEffect.Waveform extends android.os.VibrationEffect implements android.os.Parcelable { @@ -1755,7 +1811,7 @@ package android.os { method public android.os.VibrationEffect.Waveform scale(float, int); method public void validate(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class VintfObject { @@ -1829,7 +1885,7 @@ package android.os.health { method public int describeContents(); method public android.os.health.HealthStats getHealthStats(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public class HealthStatsWriter { @@ -1921,7 +1977,12 @@ package android.provider { public final class DeviceConfig { method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static void addOnPropertyChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertyChangedListener); + method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static boolean getBoolean(String, String, boolean); + method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static float getFloat(String, String, float); + method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static int getInt(String, String, int); + method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static long getLong(String, String, long); method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getProperty(String, String); + method @RequiresPermission("android.permission.READ_DEVICE_CONFIG") public static String getString(String, String, String); method public static void removeOnPropertyChangedListener(android.provider.DeviceConfig.OnPropertyChangedListener); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static void resetToDefaults(int, @Nullable String); method @RequiresPermission("android.permission.WRITE_DEVICE_CONFIG") public static boolean setProperty(String, String, String, boolean); @@ -1977,6 +2038,7 @@ package android.provider { field public static final String DYNAMIC_POWER_SAVINGS_ENABLED = "dynamic_power_savings_enabled"; field public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions"; field public static final String LOCATION_GLOBAL_KILL_SWITCH = "location_global_kill_switch"; + field public static final String LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST = "location_ignore_settings_package_whitelist"; field public static final String LOW_POWER_MODE = "low_power"; field public static final String LOW_POWER_MODE_STICKY = "low_power_sticky"; field public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices"; @@ -2100,7 +2162,7 @@ package android.service.autofill { method public android.util.ArrayMap getFieldClassificationArgs(); method public String[] getValues(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } public final class CustomDescription implements android.os.Parcelable { @@ -2203,9 +2265,8 @@ package android.service.autofill.augmented { 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); + 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 { @@ -2243,11 +2304,11 @@ package android.service.contentcapture { 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 CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -2270,7 +2331,7 @@ package android.service.notification { method public CharSequence getExplanation(); method public String getId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -2293,10 +2354,6 @@ package android.telecom { method public android.telecom.Connection getPrimaryConnection(); } - public final class PhoneAccountSuggestion implements android.os.Parcelable { - ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); - } - public class PhoneAccountSuggestionService extends android.app.Service { ctor public PhoneAccountSuggestionService(); method public void onAccountSuggestionRequest(@NonNull String); @@ -2308,7 +2365,7 @@ package android.telecom { public class TelecomManager { method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCurrentTtyMode(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(android.telecom.PhoneAccountHandle); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle); field public static final int TTY_MODE_FULL = 1; // 0x1 field public static final int TTY_MODE_HCO = 2; // 0x2 field public static final int TTY_MODE_OFF = 0; // 0x0 @@ -2381,7 +2438,7 @@ package android.telephony.mbms { method public android.net.Uri getContentUri(); method public android.net.Uri getFilePathUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; } } @@ -2413,12 +2470,12 @@ package android.telephony.mbms.vendor { public class MbmsGroupCallServiceBase extends android.app.Service { ctor public MbmsGroupCallServiceBase(); method public void dispose(int) throws android.os.RemoteException; - method public int initialize(android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; + method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; method public void onAppCallbackDied(int, int); method public android.os.IBinder onBind(android.content.Intent); - method public int startGroupCall(int, long, java.util.List, java.util.List, android.telephony.mbms.GroupCallCallback); + method public int startGroupCall(int, long, @NonNull java.util.List, @NonNull java.util.List, @NonNull android.telephony.mbms.GroupCallCallback); method public void stopGroupCall(int, long); - method public void updateGroupCall(int, long, java.util.List, java.util.List); + method public void updateGroupCall(int, long, @NonNull java.util.List, @NonNull java.util.List); } public class MbmsStreamingServiceBase extends android.os.Binder { @@ -2706,7 +2763,7 @@ package android.view { } public final class Display { - method public boolean supportsSystemDecorations(); + method public boolean hasAccess(int); } public class FocusFinder { @@ -2778,13 +2835,14 @@ package android.view { method public default void setShouldShowIme(int, boolean); method public default void setShouldShowSystemDecors(int, boolean); method public default void setShouldShowWithInsecureKeyguard(int, boolean); + method public default boolean shouldShowSystemDecors(int); } public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable { field public static final int ACCESSIBILITY_TITLE_CHANGED = 33554432; // 0x2000000 field public static final int PRIVATE_FLAG_NO_MOVE_ANIMATION = 64; // 0x40 field public CharSequence accessibilityTitle; - field @android.view.ViewDebug.ExportedProperty(flagMapping={@android.view.ViewDebug.FlagToString(mask=0x1, equals=0x1, name="FAKE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x2, equals=0x2, name="FORCE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x4, equals=0x4, name="WANTS_OFFSET_NOTIFICATIONS"), @android.view.ViewDebug.FlagToString(mask=0x10, equals=0x10, name="SHOW_FOR_ALL_USERS"), @android.view.ViewDebug.FlagToString(mask=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, equals=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, name="NO_MOVE_ANIMATION"), @android.view.ViewDebug.FlagToString(mask=0x80, equals=0x80, name="COMPATIBLE_WINDOW"), @android.view.ViewDebug.FlagToString(mask=0x100, equals=0x100, name="SYSTEM_ERROR"), @android.view.ViewDebug.FlagToString(mask=0x200, equals=0x200, name="INHERIT_TRANSLUCENT_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x400, equals=0x400, name="KEYGUARD"), @android.view.ViewDebug.FlagToString(mask=0x800, equals=0x800, name="DISABLE_WALLPAPER_TOUCH_EVENTS"), @android.view.ViewDebug.FlagToString(mask=0x1000, equals=0x1000, name="FORCE_STATUS_BAR_VISIBLE_TRANSPARENT"), @android.view.ViewDebug.FlagToString(mask=0x2000, equals=0x2000, name="PRESERVE_GEOMETRY"), @android.view.ViewDebug.FlagToString(mask=0x4000, equals=0x4000, name="FORCE_DECOR_VIEW_VISIBILITY"), @android.view.ViewDebug.FlagToString(mask=0x8000, equals=0x8000, name="WILL_NOT_REPLACE_ON_RELAUNCH"), @android.view.ViewDebug.FlagToString(mask=0x10000, equals=0x10000, name="LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME"), @android.view.ViewDebug.FlagToString(mask=0x20000, equals=0x20000, name="FORCE_DRAW_STATUS_BAR_BACKGROUND"), @android.view.ViewDebug.FlagToString(mask=0x40000, equals=0x40000, name="SUSTAINED_PERFORMANCE_MODE"), @android.view.ViewDebug.FlagToString(mask=0x80000, equals=0x80000, name="HIDE_NON_SYSTEM_OVERLAY_WINDOWS"), @android.view.ViewDebug.FlagToString(mask=0x100000, equals=0x100000, name="IS_ROUNDED_CORNERS_OVERLAY"), @android.view.ViewDebug.FlagToString(mask=0x400000, equals=0x400000, name="IS_SCREEN_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x800000, equals=0x800000, name="STATUS_FORCE_SHOW_NAVIGATION")}) public int privateFlags; + field @android.view.ViewDebug.ExportedProperty(flagMapping={@android.view.ViewDebug.FlagToString(mask=0x1, equals=0x1, name="FAKE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x2, equals=0x2, name="FORCE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x4, equals=0x4, name="WANTS_OFFSET_NOTIFICATIONS"), @android.view.ViewDebug.FlagToString(mask=0x10, equals=0x10, name="SHOW_FOR_ALL_USERS"), @android.view.ViewDebug.FlagToString(mask=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, equals=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, name="NO_MOVE_ANIMATION"), @android.view.ViewDebug.FlagToString(mask=0x80, equals=0x80, name="COMPATIBLE_WINDOW"), @android.view.ViewDebug.FlagToString(mask=0x100, equals=0x100, name="SYSTEM_ERROR"), @android.view.ViewDebug.FlagToString(mask=0x200, equals=0x200, name="INHERIT_TRANSLUCENT_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x400, equals=0x400, name="KEYGUARD"), @android.view.ViewDebug.FlagToString(mask=0x800, equals=0x800, name="DISABLE_WALLPAPER_TOUCH_EVENTS"), @android.view.ViewDebug.FlagToString(mask=0x1000, equals=0x1000, name="FORCE_STATUS_BAR_VISIBLE_TRANSPARENT"), @android.view.ViewDebug.FlagToString(mask=0x2000, equals=0x2000, name="PRESERVE_GEOMETRY"), @android.view.ViewDebug.FlagToString(mask=0x4000, equals=0x4000, name="FORCE_DECOR_VIEW_VISIBILITY"), @android.view.ViewDebug.FlagToString(mask=0x8000, equals=0x8000, name="WILL_NOT_REPLACE_ON_RELAUNCH"), @android.view.ViewDebug.FlagToString(mask=0x10000, equals=0x10000, name="LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME"), @android.view.ViewDebug.FlagToString(mask=0x20000, equals=0x20000, name="FORCE_DRAW_STATUS_BAR_BACKGROUND"), @android.view.ViewDebug.FlagToString(mask=0x40000, equals=0x40000, name="SUSTAINED_PERFORMANCE_MODE"), @android.view.ViewDebug.FlagToString(mask=0x80000, equals=0x80000, name="HIDE_NON_SYSTEM_OVERLAY_WINDOWS"), @android.view.ViewDebug.FlagToString(mask=0x100000, equals=0x100000, name="IS_ROUNDED_CORNERS_OVERLAY"), @android.view.ViewDebug.FlagToString(mask=0x400000, equals=0x400000, name="IS_SCREEN_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x800000, equals=0x800000, name="STATUS_FORCE_SHOW_NAVIGATION"), @android.view.ViewDebug.FlagToString(mask=0x1000000, equals=0x1000000, name="COLOR_SPACE_AGNOSTIC")}) public int privateFlags; } } @@ -2868,7 +2926,7 @@ package android.view.contentcapture { method public int getType(); method @Nullable public android.view.contentcapture.ViewNode getViewNode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field @NonNull public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_CONTEXT_UPDATED = 6; // 0x6 field public static final int TYPE_SESSION_PAUSED = 8; // 0x8 field public static final int TYPE_SESSION_RESUMED = 7; // 0x7 @@ -2972,7 +3030,7 @@ package android.view.inspector { method public abstract String value(); } - @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface InspectableProperty { + @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) public @interface InspectableProperty { method public abstract int attributeId() default android.content.res.Resources.ID_NULL; method public abstract android.view.inspector.InspectableProperty.EnumMap[] enumMapping() default {}; method public abstract android.view.inspector.InspectableProperty.FlagMap[] flagMapping() default {}; @@ -2999,6 +3057,7 @@ package android.view.inspector { enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_ENUM; enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_FLAG; enum_constant public static final android.view.inspector.InspectableProperty.ValueType NONE; + enum_constant public static final android.view.inspector.InspectableProperty.ValueType RESOURCE_ID; } } diff --git a/cmds/hid/hid b/cmds/hid/hid index 2359fcd738ddc9a1fd07ec7878114ff008d0a627..3931da1e2a858ca288dc9eb7e18617fecf5ed366 100755 --- a/cmds/hid/hid +++ b/cmds/hid/hid @@ -5,4 +5,10 @@ # base=/system export CLASSPATH=$base/framework/hid.jar + +# Preload the native portion libhidcommand_jni.so to bypass the dependency +# checks in the Java classloader, which prohibit dependencies that aren't +# listed in system/core/rootdir/etc/public.libraries.android.txt. +export LD_PRELOAD=libhidcommand_jni.so + exec app_process $base/bin com.android.commands.hid.Hid "$@" diff --git a/cmds/incident_helper/src/ih_util.cpp b/cmds/incident_helper/src/ih_util.cpp index 012310cc277af2c57214d3eb964257546714012f..77a56e55045b62fbffa466d0a206830db40f1167 100644 --- a/cmds/incident_helper/src/ih_util.cpp +++ b/cmds/incident_helper/src/ih_util.cpp @@ -142,7 +142,7 @@ record_t parseRecordByColumns(const std::string& line, const std::vector& i } if (lineSize - lastIndex > 0) { int beginning = lastIndex; - if (record.size() == indices.size()) { + if (record.size() == indices.size() && !record.empty()) { // We've already encountered all of the columns...put whatever is // left in the last column. record.pop_back(); diff --git a/cmds/incident_helper/src/parsers/CpuInfoParser.cpp b/cmds/incident_helper/src/parsers/CpuInfoParser.cpp index 21ced9cb485c90e867e3c481819dc0ff4db81843..5d525e6c7f3ea941e02bca582c9bf383728bca63 100644 --- a/cmds/incident_helper/src/parsers/CpuInfoParser.cpp +++ b/cmds/incident_helper/src/parsers/CpuInfoParser.cpp @@ -65,8 +65,9 @@ CpuInfoParser::Parse(const int in, const int out) const if (line.empty()) continue; nline++; - - if (stripPrefix(&line, "Tasks:")) { + // The format changes from time to time in toybox/toys/posix/ps.c + // With -H, it prints Threads instead of Tasks (FLAG(H)?"Thread":"Task") + if (stripPrefix(&line, "Threads:")) { writeSuffixLine(&proto, CpuInfoProto::TASK_STATS, line, COMMA_DELIMITER, CpuInfoProto::TaskStats::_FIELD_COUNT, CpuInfoProto::TaskStats::_FIELD_NAMES, diff --git a/cmds/incident_helper/testdata/cpuinfo.txt b/cmds/incident_helper/testdata/cpuinfo.txt index ec4a839606983d9aafbd6a7a8d4450883f4149da..aa3afc33ad6adba890a16b089d4a2fd52b3336c7 100644 --- a/cmds/incident_helper/testdata/cpuinfo.txt +++ b/cmds/incident_helper/testdata/cpuinfo.txt @@ -1,8 +1,8 @@ -Tasks: 2038 total, 1 running,2033 sleeping, 0 stopped, 0 zombie +Threads: 2038 total, 1 running,2033 sleeping, 0 stopped, 0 zombie -Mem: 3842668k total, 3761936k used, 80732k free, 220188k buffers + Mem: 3842668k total, 3761936k used, 80732k free, 220188k buffers -Swap: 524284k total, 25892k used, 498392k free, 1316952k cached + Swap: 524284k total, 25892k used, 498392k free, 1316952k cached 400%cpu 17%user 0%nice 43%sys 338%idle 0%iow 0%irq 1%sirq 0%host @@ -12,4 +12,4 @@ Swap: 524284k total, 25892k used, 498392k free, 1316952k cached 29438 29438 rootabcdefghij 20 0 57.9 R 14M 3.8M top test top 916 916 system 18 -2 1.4 S 4.6G 404M fg system_server system_server 28 28 root -2 0 1.4 S 0 0 bg rcuc/3 [rcuc/3] - 27 27 root RT 0 1.4 S 0 0 ta migration/3 [migration/3] \ No newline at end of file + 27 27 root RT 0 1.4 S 0 0 ta migration/3 [migration/3] diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp index ca48881ca519e42112688a13b86b9416a359a979..7298da6f68357aae3f09c9fe63f2fafd4d70b78c 100644 --- a/cmds/statsd/Android.bp +++ b/cmds/statsd/Android.bp @@ -68,6 +68,7 @@ cc_defaults { "src/config/ConfigKey.cpp", "src/config/ConfigListener.cpp", "src/config/ConfigManager.cpp", + "src/external/GpuStatsPuller.cpp", "src/external/Perfetto.cpp", "src/external/Perfprofd.cpp", "src/external/StatsPuller.cpp", @@ -122,6 +123,7 @@ cc_defaults { shared_libs: [ "libbase", "libbinder", + "libgraphicsenv", "libincident", "liblog", "libutils", @@ -217,6 +219,7 @@ cc_test { "tests/anomaly/AnomalyTracker_test.cpp", "tests/ConfigManager_test.cpp", "tests/external/puller_util_test.cpp", + "tests/external/IncidentReportArgs_test.cpp", "tests/external/StatsPuller_test.cpp", "tests/indexed_priority_queue_test.cpp", "tests/LogEntryMatcher_test.cpp", diff --git a/cmds/statsd/OWNERS b/cmds/statsd/OWNERS index deebd4e3cd3bbf97e64f3241a4344d5a24d8bfa2..13157505fc287d6af4f03f5f7072a95df20db746 100644 --- a/cmds/statsd/OWNERS +++ b/cmds/statsd/OWNERS @@ -1,7 +1,6 @@ bookatz@google.com cjyu@google.com dwchen@google.com -gaillard@google.com jinyithu@google.com joeo@google.com kwekua@google.com diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 69fbf1f9d881651fbe9010b5bf9d16aafdbb8dc6..1526d6609fa0d16edb83db3ed8f30e3923f1191a 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -1210,89 +1210,102 @@ Status StatsService::sendBinaryPushStateChangedAtom(const android::String16& tra (long long)expId); } - vector buffer; - buffer.resize(proto.size()); + vector experimentIdsProtoBuffer; + experimentIdsProtoBuffer.resize(proto.size()); size_t pos = 0; auto iter = proto.data(); while (iter.readBuffer() != NULL) { size_t toRead = iter.currentToRead(); - std::memcpy(&(buffer[pos]), iter.readBuffer(), toRead); + std::memcpy(&(experimentIdsProtoBuffer[pos]), iter.readBuffer(), toRead); pos += toRead; iter.rp()->move(toRead); } - LogEvent event(std::string(String8(trainName).string()), trainVersionCode, requiresStaging, - rollbackEnabled, requiresLowLatencyMonitor, state, buffer, userId); + + std::string trainNameUtf8 = std::string(String8(trainName).string()); + LogEvent event(trainNameUtf8, trainVersionCode, requiresStaging, rollbackEnabled, + requiresLowLatencyMonitor, state, experimentIdsProtoBuffer, userId); mProcessor->OnLogEvent(&event); - StorageManager::writeTrainInfo(trainVersionCode, buffer); + StorageManager::writeTrainInfo(trainVersionCode, trainNameUtf8, state, experimentIdsProtoBuffer); return Status::ok(); } hardware::Return StatsService::reportSpeakerImpedance( const SpeakerImpedance& speakerImpedance) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), speakerImpedance); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::SPEAKER_IMPEDANCE_REPORTED, + speakerImpedance.speakerLocation, speakerImpedance.milliOhms); return hardware::Void(); } hardware::Return StatsService::reportHardwareFailed(const HardwareFailed& hardwareFailed) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), hardwareFailed); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::HARDWARE_FAILED, int32_t(hardwareFailed.hardwareType), + hardwareFailed.hardwareLocation, int32_t(hardwareFailed.errorCode)); return hardware::Void(); } hardware::Return StatsService::reportPhysicalDropDetected( const PhysicalDropDetected& physicalDropDetected) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), physicalDropDetected); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::PHYSICAL_DROP_DETECTED, + int32_t(physicalDropDetected.confidencePctg), physicalDropDetected.accelPeak, + physicalDropDetected.freefallDuration); return hardware::Void(); } hardware::Return StatsService::reportChargeCycles(const ChargeCycles& chargeCycles) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), chargeCycles); - mProcessor->OnLogEvent(&event); + std::vector buckets = chargeCycles.cycleBucket; + int initialSize = buckets.size(); + for (int i = 0; i < 10 - initialSize; i++) { + buckets.push_back(-1); // Push -1 for buckets that do not exist. + } + android::util::stats_write(android::util::CHARGE_CYCLES_REPORTED, buckets[0], buckets[1], + buckets[2], buckets[3], buckets[4], buckets[5], buckets[6], buckets[7], buckets[8], + buckets[9]); return hardware::Void(); } hardware::Return StatsService::reportBatteryHealthSnapshot( const BatteryHealthSnapshotArgs& batteryHealthSnapshotArgs) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), - batteryHealthSnapshotArgs); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::BATTERY_HEALTH_SNAPSHOT, + int32_t(batteryHealthSnapshotArgs.type), batteryHealthSnapshotArgs.temperatureDeciC, + batteryHealthSnapshotArgs.voltageMicroV, batteryHealthSnapshotArgs.currentMicroA, + batteryHealthSnapshotArgs.openCircuitVoltageMicroV, + batteryHealthSnapshotArgs.resistanceMicroOhm, batteryHealthSnapshotArgs.levelPercent); return hardware::Void(); } hardware::Return StatsService::reportSlowIo(const SlowIo& slowIo) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), slowIo); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::SLOW_IO, int32_t(slowIo.operation), slowIo.count); return hardware::Void(); } hardware::Return StatsService::reportBatteryCausedShutdown( const BatteryCausedShutdown& batteryCausedShutdown) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), batteryCausedShutdown); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::BATTERY_CAUSED_SHUTDOWN, + batteryCausedShutdown.voltageMicroV); return hardware::Void(); } hardware::Return StatsService::reportUsbPortOverheatEvent( const UsbPortOverheatEvent& usbPortOverheatEvent) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), usbPortOverheatEvent); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::USB_PORT_OVERHEAT_EVENT_REPORTED, + usbPortOverheatEvent.plugTemperatureDeciC, usbPortOverheatEvent.maxTemperatureDeciC, + usbPortOverheatEvent.timeToOverheat, usbPortOverheatEvent.timeToHysteresis, + usbPortOverheatEvent.timeToInactive); return hardware::Void(); } hardware::Return StatsService::reportSpeechDspStat( const SpeechDspStat& speechDspStat) { - LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), speechDspStat); - mProcessor->OnLogEvent(&event); + android::util::stats_write(android::util::SPEECH_DSP_STAT_REPORTED, + speechDspStat.totalUptimeMillis, speechDspStat.totalDowntimeMillis, + speechDspStat.totalCrashCount, speechDspStat.totalRecoverCount); return hardware::Void(); } diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 1dd68df36ba8ae9e1ef4e2938992861cf7bf254e..4e540b1c6fa9d877c338c10bd775e828a35a5841 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -149,7 +149,7 @@ message Atom { WTFOccurred wtf_occurred = 80; LowMemReported low_mem_reported = 81; GenericAtom generic_atom = 82; - KeyValuePairsAtom key_value_pairs_atom = 83; + KeyValuePairsAtom key_value_pairs_atom = 83 [(allow_from_any_uid) = true]; VibratorStateChanged vibrator_state_changed = 84; DeferredJobStatsReported deferred_job_stats_reported = 85; ThermalThrottlingStateChanged thermal_throttling = 86; @@ -252,7 +252,7 @@ message Atom { } // Pulled events will start at field 10000. - // Next: 10048 + // Next: 10056 oneof pulled { WifiBytesTransfer wifi_bytes_transfer = 10000; WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001; @@ -308,6 +308,8 @@ message Atom { TrainInfo train_info = 10051; TimeZoneDataInfo time_zone_data_info = 10052; SDCardInfo sdcard_info = 10053; + GpuStatsGlobalInfo gpu_stats_global_info = 10054; + GpuStatsAppInfo gpu_stats_app_info = 10055; } // DO NOT USE field numbers above 100,000 in AOSP. @@ -1566,6 +1568,7 @@ message WatchdogRollbackOccurred { ROLLBACK_INITIATE = 1; ROLLBACK_SUCCESS = 2; ROLLBACK_FAILURE = 3; + ROLLBACK_BOOT_TRIGGERED = 4; } optional RollbackType rollback_type = 1; @@ -3002,6 +3005,9 @@ message LmkKillOccurred { // The elapsed real time of start of the process. optional int64 process_start_time_nanos = 9; + + // Min oom adj score considered by lmkd. + optional int32 min_oom_score = 10; } /* @@ -3237,8 +3243,18 @@ message BinaryPushStateChanged { INSTALL_FAILURE = 6; INSTALL_CANCELLED = 7; INSTALLER_ROLLBACK_REQUESTED = 8; - INSTALLER_ROLLBACK_SUCCESS = 9; - INSTALLER_ROLLBACK_FAILURE = 10; + INSTALLER_ROLLBACK_INITIATED = 9; + INSTALLER_ROLLBACK_INITIATED_FAILURE = 10; + INSTALLER_ROLLBACK_STAGED = 11; + INSTALLER_ROLLBACK_STAGED_FAILURE = 12; + INSTALLER_ROLLBACK_BOOT_TRIGGERED = 13; + INSTALLER_ROLLBACK_BOOT_TRIGGERED_FAILURE = 14; + INSTALLER_ROLLBACK_SUCCESS = 15; + INSTALLER_ROLLBACK_FAILURE = 16; + INSTALLER_ROLLBACK_CANCEL_STAGED_REMOVE_FROM_QUEUE = 17; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_INITIATED = 18; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_SUCCESS = 19; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_FAILURE = 20; } optional State state = 6; // Possible experiment ids for monitoring this push. @@ -5528,8 +5544,9 @@ message ScheduledJobConstraintChanged { optional com.android.server.job.ConstraintEnum constraint = 3; enum State { - UNSATISFIED = 0; - SATISFIED = 1; + UNKNOWN = 0; + UNSATISFIED = 1; + SATISFIED = 2; } optional State state = 4; } @@ -5646,6 +5663,33 @@ message TrainInfo { optional int64 train_version_code = 1; optional TrainExperimentIds train_experiment_id = 2; + + optional string train_name = 3; + + enum Status { + UNKNOWN = 0; + INSTALL_REQUESTED = 1; + INSTALL_STARTED = 2; + INSTALL_STAGED_NOT_READY = 3; + INSTALL_STAGED_READY = 4; + INSTALL_SUCCESS = 5; + INSTALL_FAILURE = 6; + INSTALL_CANCELLED = 7; + INSTALLER_ROLLBACK_REQUESTED = 8; + INSTALLER_ROLLBACK_INITIATED = 9; + INSTALLER_ROLLBACK_INITIATED_FAILURE = 10; + INSTALLER_ROLLBACK_STAGED = 11; + INSTALLER_ROLLBACK_STAGED_FAILURE = 12; + INSTALLER_ROLLBACK_BOOT_TRIGGERED = 13; + INSTALLER_ROLLBACK_BOOT_TRIGGERED_FAILURE = 14; + INSTALLER_ROLLBACK_SUCCESS = 15; + INSTALLER_ROLLBACK_FAILURE = 16; + INSTALLER_ROLLBACK_CANCEL_STAGED_REMOVE_FROM_QUEUE = 17; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_INITIATED = 18; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_SUCCESS = 19; + INSTALLER_ROLLBACK_CANCEL_STAGED_DELETE_SESSION_FAILURE = 20; + } + optional Status status = 4; } /** @@ -5687,3 +5731,55 @@ message TimeZoneDataInfo { // A version identifier for the data set on device. e.g. "2018i" optional string tzdb_version = 1; } + +/* + * Logs the GPU stats global health information. + * + * Logged from: + * frameworks/native/services/gpuservice/gpustats/ + */ +message GpuStatsGlobalInfo { + // Package name of the gpu driver. + optional string driver_package_name = 1; + + // Version name of the gpu driver. + optional string driver_version_name = 2; + + // Version code of the gpu driver. + optional int64 driver_version_code = 3; + + // Build time of the gpu driver in UTC as seconds since January 1, 1970. + optional int64 driver_build_time = 4; + + // Total count of the gl driver gets loaded. + optional int64 gl_loading_count = 5; + + // Total count of the gl driver fails to be loaded. + optional int64 gl_loading_failure_count = 6; + + // Total count of the Vulkan driver gets loaded. + optional int64 vk_loading_count = 7; + + // Total count of the Vulkan driver fails to be loaded. + optional int64 vk_loading_failure_count = 8; +} + +/* + * Logs the GPU stats per app health information. + * + * Logged from: + * frameworks/native/services/gpuservice/gpustats/ + */ +message GpuStatsAppInfo { + // Package name of the application that loads the gpu driver. + optional string app_package_name = 1; + + // Version code of the gpu driver this app loads. + optional int64 driver_version_code = 2; + + // List of all the gl driver loading times for this app. + repeated int64 gl_driver_loading_time = 3; + + // List of all the Vulkan driver laoding times for this app. + repeated int64 vk_driver_loading_time = 4; +} diff --git a/cmds/statsd/src/external/GpuStatsPuller.cpp b/cmds/statsd/src/external/GpuStatsPuller.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8445803217195a1cad24999db36738a07ddada46 --- /dev/null +++ b/cmds/statsd/src/external/GpuStatsPuller.cpp @@ -0,0 +1,91 @@ +/* + * Copyright 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. + */ + +#include "GpuStatsPuller.h" + +#include +#include +#include + +#include "logd/LogEvent.h" + +#include "stats_log_util.h" +#include "statslog.h" + +namespace android { +namespace os { +namespace statsd { + +GpuStatsPuller::GpuStatsPuller(const int tagId) : StatsPuller(tagId) { +} + +static sp getGpuService() { + const sp binder = defaultServiceManager()->checkService(String16("gpu")); + if (!binder) { + ALOGE("Failed to get gpu service"); + return nullptr; + } + + return interface_cast(binder); +} + +static bool pullGpuStatsGlobalInfo(const sp& gpuService, + std::vector>* data) { + std::vector stats; + status_t status = gpuService->getGpuStatsGlobalInfo(&stats); + if (status != OK) { + return false; + } + + data->clear(); + data->reserve(stats.size()); + for (const auto& info : stats) { + std::shared_ptr event = make_shared( + android::util::GPU_STATS_GLOBAL_INFO, getWallClockNs(), getElapsedRealtimeNs()); + if (!event->write(info.driverPackageName)) return false; + if (!event->write(info.driverVersionName)) return false; + if (!event->write((int64_t)info.driverVersionCode)) return false; + if (!event->write(info.driverBuildTime)) return false; + if (!event->write((int64_t)info.glLoadingCount)) return false; + if (!event->write((int64_t)info.glLoadingFailureCount)) return false; + if (!event->write((int64_t)info.vkLoadingCount)) return false; + if (!event->write((int64_t)info.vkLoadingFailureCount)) return false; + event->init(); + data->emplace_back(event); + } + + return true; +} + +bool GpuStatsPuller::PullInternal(std::vector>* data) { + const sp gpuService = getGpuService(); + if (!gpuService) { + return false; + } + + switch (mTagId) { + case android::util::GPU_STATS_GLOBAL_INFO: + return pullGpuStatsGlobalInfo(gpuService, data); + default: + break; + } + + return false; +} + +} // namespace statsd +} // namespace os +} // namespace android diff --git a/core/java/android/service/textclassifier/IConversationActionsCallback.aidl b/cmds/statsd/src/external/GpuStatsPuller.h similarity index 57% rename from core/java/android/service/textclassifier/IConversationActionsCallback.aidl rename to cmds/statsd/src/external/GpuStatsPuller.h index c35d4246e924c287b4c7cd75f63a1133790e3fb2..4c7a4d6042528299aacb17532e688ffe1a70490d 100644 --- a/core/java/android/service/textclassifier/IConversationActionsCallback.aidl +++ b/cmds/statsd/src/external/GpuStatsPuller.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * Copyright 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. @@ -14,15 +14,23 @@ * limitations under the License. */ -package android.service.textclassifier; +#pragma once -import android.view.textclassifier.ConversationActions; +#include "StatsPuller.h" + +namespace android { +namespace os { +namespace statsd { /** - * Callback for a ConversationActions request. - * @hide + * Pull GpuStats from GpuService. */ -oneway interface IConversationActionsCallback { - void onSuccess(in ConversationActions conversationActions); - void onFailure(); -} \ No newline at end of file +class GpuStatsPuller : public StatsPuller { +public: + explicit GpuStatsPuller(const int tagId); + bool PullInternal(std::vector>* data) override; +}; + +} // namespace statsd +} // namespace os +} // namespace android diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 1513834b67244ae74e88fcc0706d368582538491..924704ba6db55f9a66319ffd3cc23a9c525e9e39 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -27,6 +27,7 @@ #include "../logd/LogEvent.h" #include "../stats_log_util.h" #include "../statscompanion_util.h" +#include "GpuStatsPuller.h" #include "PowerStatsPuller.h" #include "ResourceHealthManagerPuller.h" #include "StatsCallbackPuller.h" @@ -240,6 +241,9 @@ std::map StatsPullerManager::kAllPullAtomInfo = { // SDCardInfo {android::util::SDCARD_INFO, {.puller = new StatsCompanionServicePuller(android::util::SDCARD_INFO)}}, + // GpuStatsGlobalInfo + {android::util::GPU_STATS_GLOBAL_INFO, + {.puller = new GpuStatsPuller(android::util::GPU_STATS_GLOBAL_INFO)}}, }; StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp index dec36b54a1cea041de6caccf7506a8be22921653..d9f5415463e334d4dd39eb90c87bb0777486be6f 100644 --- a/cmds/statsd/src/logd/LogEvent.cpp +++ b/cmds/statsd/src/logd/LogEvent.cpp @@ -21,6 +21,7 @@ #include "statslog.h" #include +#include namespace android { namespace os { @@ -201,141 +202,12 @@ LogEvent::LogEvent(const string& trainName, int64_t trainVersionCode, bool requi mValues.push_back(FieldValue(Field(mTagId, getSimpleField(8)), Value(userId))); } -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const SpeakerImpedance& speakerImpedance) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::SPEAKER_IMPEDANCE_REPORTED; - - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(1)), Value(speakerImpedance.speakerLocation))); - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(2)), Value(speakerImpedance.milliOhms))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const HardwareFailed& hardwareFailed) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::HARDWARE_FAILED; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(int32_t(hardwareFailed.hardwareType)))); - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(2)), Value(hardwareFailed.hardwareLocation))); - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(3)), Value(int32_t(hardwareFailed.errorCode)))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const PhysicalDropDetected& physicalDropDetected) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::PHYSICAL_DROP_DETECTED; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(int32_t(physicalDropDetected.confidencePctg)))); - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(2)), Value(physicalDropDetected.accelPeak))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), - Value(physicalDropDetected.freefallDuration))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const ChargeCycles& chargeCycles) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::CHARGE_CYCLES_REPORTED; - - for (size_t i = 0; i < chargeCycles.cycleBucket.size(); i++) { - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(i + 1)), - Value(chargeCycles.cycleBucket[i]))); - } -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const BatteryHealthSnapshotArgs& batteryHealthSnapshotArgs) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::BATTERY_HEALTH_SNAPSHOT; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(int32_t(batteryHealthSnapshotArgs.type)))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), - Value(batteryHealthSnapshotArgs.temperatureDeciC))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), - Value(batteryHealthSnapshotArgs.voltageMicroV))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(4)), - Value(batteryHealthSnapshotArgs.currentMicroA))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(5)), - Value(batteryHealthSnapshotArgs.openCircuitVoltageMicroV))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(6)), - Value(batteryHealthSnapshotArgs.resistanceMicroOhm))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(7)), - Value(batteryHealthSnapshotArgs.levelPercent))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, const SlowIo& slowIo) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::SLOW_IO; - - int pos[] = {1}; - mValues.push_back( - FieldValue(Field(mTagId, getSimpleField(1)), Value(int32_t(slowIo.operation)))); - pos[0]++; - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), Value(slowIo.count))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const SpeechDspStat& speechDspStat) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::SPEECH_DSP_STAT_REPORTED; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(speechDspStat.totalUptimeMillis))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), - Value(speechDspStat.totalDowntimeMillis))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), - Value(speechDspStat.totalCrashCount))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(4)), - Value(speechDspStat.totalRecoverCount))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const BatteryCausedShutdown& batteryCausedShutdown) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::BATTERY_CAUSED_SHUTDOWN; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(batteryCausedShutdown.voltageMicroV))); -} - -LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const UsbPortOverheatEvent& usbPortOverheatEvent) { - mLogdTimestampNs = wallClockTimestampNs; - mElapsedTimestampNs = elapsedTimestampNs; - mTagId = android::util::USB_PORT_OVERHEAT_EVENT_REPORTED; - - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(1)), - Value(usbPortOverheatEvent.plugTemperatureDeciC))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), - Value(usbPortOverheatEvent.maxTemperatureDeciC))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), - Value(usbPortOverheatEvent.timeToOverheat))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(4)), - Value(usbPortOverheatEvent.timeToHysteresis))); - mValues.push_back(FieldValue(Field(mTagId, getSimpleField(5)), - Value(usbPortOverheatEvent.timeToInactive))); -} - LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, const VendorAtom& vendorAtom) { mLogdTimestampNs = wallClockTimestampNs; mElapsedTimestampNs = elapsedTimestampNs; mTagId = vendorAtom.atomId; + mLogUid = AID_STATSD; mValues.push_back( FieldValue(Field(mTagId, getSimpleField(1)), Value(vendorAtom.reverseDomainName))); @@ -366,9 +238,12 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, mLogdTimestampNs = wallClockTimestampNs; mElapsedTimestampNs = elapsedTimestampNs; mTagId = android::util::TRAIN_INFO; + mValues.push_back( FieldValue(Field(mTagId, getSimpleField(1)), Value(trainInfo.trainVersionCode))); mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), Value(trainInfo.experimentIds))); + mValues.push_back(FieldValue(Field(mTagId, getSimpleField(3)), Value(trainInfo.trainName))); + mValues.push_back(FieldValue(Field(mTagId, getSimpleField(4)), Value(trainInfo.status))); } LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) : LogEvent(tagId, timestampNs, 0) {} diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h index 111a619760df53d24cd07d4a89c81e3fdd33a5c2..753a9a500c57616ba058478a8e73179b52937a56 100644 --- a/cmds/statsd/src/logd/LogEvent.h +++ b/cmds/statsd/src/logd/LogEvent.h @@ -58,6 +58,8 @@ struct AttributionNodeInternal { struct InstallTrainInfo { int64_t trainVersionCode; + std::string trainName; + int32_t status; std::vector experimentIds; }; /** @@ -107,33 +109,6 @@ public: bool rollbackEnabled, bool requiresLowLatencyMonitor, int32_t state, const std::vector& experimentIds, int32_t userId); - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const SpeakerImpedance& speakerImpedance); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const HardwareFailed& hardwareFailed); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const PhysicalDropDetected& physicalDropDetected); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const ChargeCycles& chargeCycles); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const BatteryHealthSnapshotArgs& batteryHealthSnapshotArgs); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const SlowIo& slowIo); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const BatteryCausedShutdown& batteryCausedShutdown); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const UsbPortOverheatEvent& usbPortOverheatEvent); - - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, - const SpeechDspStat& speechDspStat); - explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, const VendorAtom& vendorAtom); diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h index 99cb5d4389c705ffb7b78cf83ca080ec84f7f244..046f9963b351acb5d40328d6f936f22c43ebc690 100644 --- a/cmds/statsd/src/metrics/MetricProducer.h +++ b/cmds/statsd/src/metrics/MetricProducer.h @@ -69,7 +69,7 @@ public: mTimeBaseNs(timeBaseNs), mCurrentBucketStartTimeNs(timeBaseNs), mCurrentBucketNum(0), - mCondition(conditionIndex >= 0 ? ConditionState::kUnknown : ConditionState::kTrue), + mCondition(initialCondition(conditionIndex)), mConditionSliced(false), mWizard(wizard), mConditionTrackerIndex(conditionIndex), @@ -82,6 +82,10 @@ public: virtual ~MetricProducer(){}; + ConditionState initialCondition(const int conditionIndex) const { + return conditionIndex >= 0 ? ConditionState::kUnknown : ConditionState::kTrue; + } + /** * Forces this metric to split into a partial bucket right now. If we're past a full bucket, we * first call the standard flushing code to flush up to the latest full bucket. Then we call diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 9de62a2cce038be6f408828cb0a32c9439661f22..27ee57013fdaa2158e717ab90d4431286b07a023 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -394,7 +394,7 @@ void ValueMetricProducer::onConditionChangedLocked(const bool condition, invalidateCurrentBucket(); // Something weird happened. If we received another event if the future, the condition might // be wrong. - mCondition = ConditionState::kUnknown; + mCondition = initialCondition(mConditionTrackerIndex); } // This part should alway be called. diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index 5c6d548ad13ac3a5c3d7c86377264d840c17849d..0e91f527083a965df56c46b75e5ae2b3153a19c0 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -324,6 +324,12 @@ message IncidentdDetails { EXPLICIT = 1; } optional Destination dest = 2; + + // Package name of the incident report receiver. + optional string receiver_pkg = 3; + + // Class name of the incident report receiver. + optional string receiver_cls = 4; } message PerfettoDetails { diff --git a/cmds/statsd/src/storage/StorageManager.cpp b/cmds/statsd/src/storage/StorageManager.cpp index 165e57c7374385ec8b4cb585dd22ab7fbfa9662b..5df8fb5c0e29362e2bf5ee6e8127e377549dcd8a 100644 --- a/cmds/statsd/src/storage/StorageManager.cpp +++ b/cmds/statsd/src/storage/StorageManager.cpp @@ -95,8 +95,8 @@ void StorageManager::writeFile(const char* file, const void* buffer, int numByte close(fd); } -bool StorageManager::writeTrainInfo(int64_t trainVersionCode, - const std::vector& experimentIds) { +bool StorageManager::writeTrainInfo(int64_t trainVersionCode, const std::string& trainName, + int32_t status, const std::vector& experimentIds) { std::lock_guard lock(sTrainInfoMutex); deleteAllFiles(TRAIN_INFO_DIR); @@ -109,7 +109,34 @@ bool StorageManager::writeTrainInfo(int64_t trainVersionCode, return false; } - size_t result = write(fd, experimentIds.data(), experimentIds.size()); + size_t result; + + // Write # of bytes in trainName to file + const size_t trainNameSize = trainName.size(); + const size_t trainNameSizeByteCount = sizeof(trainNameSize); + result = write(fd, (uint8_t*)&trainNameSize, trainNameSizeByteCount); + if (result != trainNameSizeByteCount) { + VLOG("Failed to write %s", file_name.c_str()); + return false; + } + + // Write trainName to file + result = write(fd, trainName.c_str(), trainNameSize); + if (result != trainNameSize) { + VLOG("Failed to write %s", file_name.c_str()); + return false; + } + + // Write status to file + const size_t statusByteCount = sizeof(status); + result = write(fd, (uint8_t*)&status, statusByteCount); + if (result != statusByteCount) { + VLOG("Failed to write %s", file_name.c_str()); + return false; + } + + // Write experimentIds to file + result = write(fd, experimentIds.data(), experimentIds.size()); if (result == experimentIds.size()) { VLOG("Successfully wrote %s", file_name.c_str()); } else { @@ -150,7 +177,27 @@ bool StorageManager::readTrainInfo(InstallTrainInfo& trainInfo) { string str; if (android::base::ReadFdToString(fd, &str)) { close(fd); - std::copy(str.begin(), str.end(), std::back_inserter(trainInfo.experimentIds)); + + auto it = str.begin(); + + // Read # of bytes taken by trainName in the file + size_t trainNameSize; + const size_t trainNameSizeByteCount = sizeof(trainNameSize); + std::copy_n(it, trainNameSizeByteCount, &trainNameSize); + it += trainNameSizeByteCount; + + // Read trainName + std::copy_n(it, trainNameSize, std::back_inserter(trainInfo.trainName)); + it += trainNameSize; + + // Read status + const size_t statusByteCount = sizeof(trainInfo.status); + std::copy_n(it, statusByteCount, &trainInfo.status); + it += statusByteCount; + + // Read experimentIds + std::copy(it, str.end(), std::back_inserter(trainInfo.experimentIds)); + VLOG("Read train info file successful: %s", fullPath.c_str()); return true; } diff --git a/cmds/statsd/src/storage/StorageManager.h b/cmds/statsd/src/storage/StorageManager.h index d6df8674e59b266018a94e9541f31334c4d986c2..88280cf218b31723b727756a355123a7cf867394 100644 --- a/cmds/statsd/src/storage/StorageManager.h +++ b/cmds/statsd/src/storage/StorageManager.h @@ -44,7 +44,8 @@ public: /** * Writes train info. */ - static bool writeTrainInfo(int64_t trainVersionCode, const std::vector& experimentIds); + static bool writeTrainInfo(int64_t trainVersionCode, const std::string& trainName, + int32_t status, const std::vector& experimentIds); /** * Reads train info. diff --git a/cmds/statsd/src/subscriber/IncidentdReporter.cpp b/cmds/statsd/src/subscriber/IncidentdReporter.cpp index 0ed2d75802da98165e9c8c1010d5b48e3561df6b..7c2d2420528c79469ff719e0eb3d06a5e8d3841e 100644 --- a/cmds/statsd/src/subscriber/IncidentdReporter.cpp +++ b/cmds/statsd/src/subscriber/IncidentdReporter.cpp @@ -162,6 +162,10 @@ bool GenerateIncidentReport(const IncidentdDetails& config, int64_t rule_id, int } incidentReport.setDest(dest); + incidentReport.setReceiverPkg(config.receiver_pkg()); + + incidentReport.setReceiverCls(config.receiver_cls()); + sp service = interface_cast( defaultServiceManager()->getService(android::String16("incident"))); if (service == nullptr) { diff --git a/cmds/statsd/tests/external/IncidentReportArgs_test.cpp b/cmds/statsd/tests/external/IncidentReportArgs_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c170b12dc24285915a0553b09a053de32c86495a --- /dev/null +++ b/cmds/statsd/tests/external/IncidentReportArgs_test.cpp @@ -0,0 +1,72 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +namespace android { +namespace os { +namespace statsd { + +TEST(IncidentReportArgsTest, testSerialization) { + IncidentReportArgs args; + args.setAll(0); + args.addSection(1000); + args.addSection(1001); + + vector header1; + header1.push_back(0x1); + header1.push_back(0x2); + vector header2; + header1.push_back(0x22); + header1.push_back(0x33); + + args.addHeader(header1); + args.addHeader(header2); + + args.setDest(1); + + args.setReceiverPkg("com.android.os"); + args.setReceiverCls("com.android.os.Receiver"); + + Parcel out; + status_t err = args.writeToParcel(&out); + EXPECT_EQ(NO_ERROR, err); + + out.setDataPosition(0); + + IncidentReportArgs args2; + err = args2.readFromParcel(&out); + EXPECT_EQ(NO_ERROR, err); + + EXPECT_EQ(0, args2.all()); + set sections; + sections.insert(1000); + sections.insert(1001); + EXPECT_EQ(sections, args2.sections()); + EXPECT_EQ(1, args2.dest()); + + EXPECT_EQ(String16("com.android.os"), args2.receiverPkg()); + EXPECT_EQ(String16("com.android.os.Receiver"), args2.receiverCls()); + + vector> headers; + headers.push_back(header1); + headers.push_back(header2); + EXPECT_EQ(headers, args2.headers()); +} + +} // namespace statsd +} // namespace os +} // namespace android \ No newline at end of file diff --git a/cmds/statsd/tests/storage/StorageManager_test.cpp b/cmds/statsd/tests/storage/StorageManager_test.cpp index f66de0518f80e4efd627d7720d2268e632dbef72..4564a5d058a3bd9d0c9779cee5dbb2a6d5e73f01 100644 --- a/cmds/statsd/tests/storage/StorageManager_test.cpp +++ b/cmds/statsd/tests/storage/StorageManager_test.cpp @@ -32,16 +32,82 @@ using testing::Contains; TEST(StorageManagerTest, TrainInfoReadWriteTest) { InstallTrainInfo trainInfo; trainInfo.trainVersionCode = 12345; + trainInfo.trainName = "This is a train name #)$(&&$"; + trainInfo.status = 1; const char* expIds = "test_ids"; trainInfo.experimentIds.assign(expIds, expIds + strlen(expIds)); - StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.experimentIds); + bool result; - InstallTrainInfo result; - StorageManager::readTrainInfo(result); - EXPECT_EQ(trainInfo.trainVersionCode, result.trainVersionCode); - EXPECT_EQ(trainInfo.experimentIds.size(), result.experimentIds.size()); - EXPECT_EQ(trainInfo.experimentIds, result.experimentIds); + result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName, + trainInfo.status, trainInfo.experimentIds); + + EXPECT_TRUE(result); + + InstallTrainInfo trainInfoResult; + result = StorageManager::readTrainInfo(trainInfoResult); + EXPECT_TRUE(result); + + EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode); + EXPECT_EQ(trainInfo.trainName.size(), trainInfoResult.trainName.size()); + EXPECT_EQ(trainInfo.trainName, trainInfoResult.trainName); + EXPECT_EQ(trainInfo.status, trainInfoResult.status); + EXPECT_EQ(trainInfo.experimentIds.size(), trainInfoResult.experimentIds.size()); + EXPECT_EQ(trainInfo.experimentIds, trainInfoResult.experimentIds); +} + +TEST(StorageManagerTest, TrainInfoReadWriteEmptyTrainNameTest) { + InstallTrainInfo trainInfo; + trainInfo.trainVersionCode = 12345; + trainInfo.trainName = ""; + trainInfo.status = 1; + const char* expIds = "test_ids"; + trainInfo.experimentIds.assign(expIds, expIds + strlen(expIds)); + + bool result; + + result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName, + trainInfo.status, trainInfo.experimentIds); + + EXPECT_TRUE(result); + + InstallTrainInfo trainInfoResult; + result = StorageManager::readTrainInfo(trainInfoResult); + EXPECT_TRUE(result); + + EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode); + EXPECT_EQ(trainInfo.trainName.size(), trainInfoResult.trainName.size()); + EXPECT_EQ(trainInfo.trainName, trainInfoResult.trainName); + EXPECT_EQ(trainInfo.status, trainInfoResult.status); + EXPECT_EQ(trainInfo.experimentIds.size(), trainInfoResult.experimentIds.size()); + EXPECT_EQ(trainInfo.experimentIds, trainInfoResult.experimentIds); +} + +TEST(StorageManagerTest, TrainInfoReadWriteTrainNameSizeOneTest) { + InstallTrainInfo trainInfo; + trainInfo.trainVersionCode = 12345; + trainInfo.trainName = "{"; + trainInfo.status = 1; + const char* expIds = "test_ids"; + trainInfo.experimentIds.assign(expIds, expIds + strlen(expIds)); + + bool result; + + result = StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.trainName, + trainInfo.status, trainInfo.experimentIds); + + EXPECT_TRUE(result); + + InstallTrainInfo trainInfoResult; + result = StorageManager::readTrainInfo(trainInfoResult); + EXPECT_TRUE(result); + + EXPECT_EQ(trainInfo.trainVersionCode, trainInfoResult.trainVersionCode); + EXPECT_EQ(trainInfo.trainName.size(), trainInfoResult.trainName.size()); + EXPECT_EQ(trainInfo.trainName, trainInfoResult.trainName); + EXPECT_EQ(trainInfo.status, trainInfoResult.status); + EXPECT_EQ(trainInfo.experimentIds.size(), trainInfoResult.experimentIds.size()); + EXPECT_EQ(trainInfo.experimentIds, trainInfoResult.experimentIds); } } // namespace statsd diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index af7e875bf1a7d58c6fc83b3e7ef9ec578de5a467..33a473312f9462ef493776587d7d30eef1138ba5 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -36,18 +36,7 @@ Landroid/app/ActivityThread$H;->(Landroid/app/ActivityThread;)V Landroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager; Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I -Landroid/app/admin/IDevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z Landroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager; -Landroid/app/backup/IBackupManager;->acknowledgeFullBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V -Landroid/app/backup/IBackupManager;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V -Landroid/app/backup/IBackupManager;->dataChanged(Ljava/lang/String;)V -Landroid/app/backup/IBackupManager;->getCurrentTransport()Ljava/lang/String; -Landroid/app/backup/IBackupManager;->isBackupEnabled()Z -Landroid/app/backup/IBackupManager;->isBackupServiceActive(I)Z -Landroid/app/backup/IBackupManager;->listAllTransports()[Ljava/lang/String; -Landroid/app/backup/IBackupManager;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String; -Landroid/app/backup/IBackupManager;->setAutoRestore(Z)V -Landroid/app/backup/IBackupManager;->setBackupEnabled(Z)V Landroid/app/backup/IFullBackupRestoreObserver$Stub;->()V Landroid/app/backup/IRestoreObserver$Stub;->()V Landroid/app/DownloadManager;->restartDownload([J)V @@ -215,19 +204,12 @@ Landroid/app/job/IJobCallback$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/job/IJobCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/job/IJobCallback$Stub;->()V Landroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback; -Landroid/app/job/IJobCallback;->acknowledgeStartMessage(IZ)V -Landroid/app/job/IJobCallback;->acknowledgeStopMessage(IZ)V -Landroid/app/job/IJobCallback;->completeWork(II)Z -Landroid/app/job/IJobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem; -Landroid/app/job/IJobCallback;->jobFinished(IZ)V Landroid/app/job/IJobScheduler$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler; Landroid/app/job/IJobService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/job/IJobService$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/job/IJobService$Stub;->()V Landroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService; -Landroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V -Landroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V Landroid/app/PackageDeleteObserver;->()V Landroid/app/PackageInstallObserver;->()V Landroid/app/ReceiverRestrictedContext;->(Landroid/content/Context;)V @@ -237,10 +219,6 @@ Landroid/app/TaskStackListener;->()V Landroid/app/trust/ITrustManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/UiAutomationConnection;->()V Landroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager; -Landroid/app/usage/IUsageStatsManager;->isAppInactive(Ljava/lang/String;I)Z -Landroid/app/usage/IUsageStatsManager;->queryConfigurationStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; -Landroid/app/usage/IUsageStatsManager;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; -Landroid/app/usage/IUsageStatsManager;->setAppInactive(Ljava/lang/String;ZI)V Landroid/app/UserSwitchObserver;->()V Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; Landroid/bluetooth/IBluetooth$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I @@ -284,22 +262,14 @@ Landroid/companion/ICompanionDeviceDiscoveryService$Stub;->()V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelected(Ljava/lang/String;ILjava/lang/String;)V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelectionCancel()V Landroid/companion/IFindDeviceCallback;->onSuccess(Landroid/app/PendingIntent;)V -Landroid/content/ContentProviderProxy;->mRemote:Landroid/os/IBinder; Landroid/content/IClipboard$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; Landroid/content/IContentService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/IContentService$Stub;->()V Landroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService; -Landroid/content/IContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V -Landroid/content/IContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I -Landroid/content/IContentService;->getMasterSyncAutomatically()Z -Landroid/content/IContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType; -Landroid/content/IContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z -Landroid/content/IContentService;->setMasterSyncAutomatically(Z)V Landroid/content/IIntentReceiver$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/IIntentReceiver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/IIntentReceiver$Stub;->()V -Landroid/content/IIntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V Landroid/content/IOnPrimaryClipChangedListener$Stub;->()V Landroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener; Landroid/content/IRestrictionsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager; @@ -307,29 +277,20 @@ Landroid/content/ISyncAdapter$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/ISyncAdapter$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncAdapter$Stub;->()V Landroid/content/ISyncAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapter; -Landroid/content/ISyncAdapter;->cancelSync(Landroid/content/ISyncContext;)V -Landroid/content/ISyncAdapter;->onUnsyncableAccount(Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V -Landroid/content/ISyncAdapter;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V Landroid/content/ISyncContext$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/ISyncContext$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncContext$Stub;->()V Landroid/content/ISyncContext$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncContext; Landroid/content/ISyncServiceAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncServiceAdapter; -Landroid/content/ISyncServiceAdapter;->cancelSync(Landroid/content/ISyncContext;)V -Landroid/content/ISyncServiceAdapter;->startSync(Landroid/content/ISyncContext;Landroid/os/Bundle;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncStatusObserver$Stub;->()V Landroid/content/ISyncStatusObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncStatusObserver; -Landroid/content/ISyncStatusObserver;->onStatusChanged(I)V Landroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager; -Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map; -Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDataObserver$Stub;->()V Landroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver; -Landroid/content/pm/IPackageDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V Landroid/content/pm/IPackageDeleteObserver$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDeleteObserver$Stub;->()V Landroid/content/pm/IPackageDeleteObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver; @@ -337,17 +298,9 @@ Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->(Landroid/os/IBin Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDeleteObserver2$Stub;->()V Landroid/content/pm/IPackageDeleteObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver2; -Landroid/content/pm/IPackageDeleteObserver2;->onPackageDeleted(Ljava/lang/String;ILjava/lang/String;)V -Landroid/content/pm/IPackageDeleteObserver;->packageDeleted(Ljava/lang/String;I)V -Landroid/content/pm/IPackageInstaller;->uninstall(Landroid/content/pm/VersionedPackage;Ljava/lang/String;ILandroid/content/IntentSender;I)V Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallerCallback; -Landroid/content/pm/IPackageInstallerCallback;->onSessionActiveChanged(IZ)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionBadgingChanged(I)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionCreated(I)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionFinished(IZ)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionProgressChanged(IF)V Landroid/content/pm/IPackageInstallerSession$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageInstallerSession$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallerSession$Stub;->()V @@ -356,8 +309,6 @@ Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;->(Landroid/os/IBi Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallObserver2$Stub;->()V Landroid/content/pm/IPackageInstallObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver2; -Landroid/content/pm/IPackageInstallObserver2;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/content/pm/IPackageInstallObserver2;->onUserActionRequired(Landroid/content/Intent;)V Landroid/content/pm/IPackageManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageManager$Stub$Proxy;->checkUidPermission(Ljava/lang/String;I)I Landroid/content/pm/IPackageManager$Stub$Proxy;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String; @@ -369,75 +320,17 @@ Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang Landroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String; Landroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager; Landroid/content/pm/IPackageManager$Stub;->TRANSACTION_getApplicationInfo:I -Landroid/content/pm/IPackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z -Landroid/content/pm/IPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z -Landroid/content/pm/IPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I -Landroid/content/pm/IPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->checkUidSignatures(II)I -Landroid/content/pm/IPackageManager;->clearPackagePreferredActivities(Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/IPackageManager;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; -Landroid/content/pm/IPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;I)I -Landroid/content/pm/IPackageManager;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/IPackageManager;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getBlockUninstallForUser(Ljava/lang/String;I)Z -Landroid/content/pm/IPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I -Landroid/content/pm/IPackageManager;->getFlagsForUid(I)I -Landroid/content/pm/IPackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName; -Landroid/content/pm/IPackageManager;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getInstallLocation()I -Landroid/content/pm/IPackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo; -Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo; -Landroid/content/pm/IPackageManager;->getNameForUid(I)Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; -Landroid/content/pm/IPackageManager;->getPackageInstaller()Landroid/content/pm/IPackageInstaller; -Landroid/content/pm/IPackageManager;->getPackagesForUid(I)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPackageUid(Ljava/lang/String;II)I -Landroid/content/pm/IPackageManager;->getPermissionControllerPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo; -Landroid/content/pm/IPackageManager;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo; -Landroid/content/pm/IPackageManager;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; -Landroid/content/pm/IPackageManager;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo; -Landroid/content/pm/IPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getUidForSharedUser(Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V -Landroid/content/pm/IPackageManager;->hasSystemUidErrors()Z -Landroid/content/pm/IPackageManager;->isPackageAvailable(Ljava/lang/String;I)Z -Landroid/content/pm/IPackageManager;->isSafeMode()Z -Landroid/content/pm/IPackageManager;->isStorageLow()Z -Landroid/content/pm/IPackageManager;->isUidPrivileged(I)Z -Landroid/content/pm/IPackageManager;->queryInstrumentation(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->querySyncProviders(Ljava/util/List;Ljava/util/List;)V -Landroid/content/pm/IPackageManager;->removePermission(Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V -Landroid/content/pm/IPackageManager;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo; -Landroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V -Landroid/content/pm/IPackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZI)Z -Landroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V -Landroid/content/pm/IPackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V -Landroid/content/pm/IPackageManager;->setPackageStoppedState(Ljava/lang/String;ZI)V Landroid/content/pm/IPackageMoveObserver$Stub;->()V Landroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver; Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageStatsObserver$Stub;->()V Landroid/content/pm/IPackageStatsObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageStatsObserver; -Landroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V Landroid/content/pm/IShortcutService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService; Landroid/content/res/ConfigurationBoundResourceCache;->()V Landroid/content/res/DrawableCache;->()V Landroid/content/UndoManager;->()V -Landroid/database/BulkCursorProxy;->mRemote:Landroid/os/IBinder; Landroid/database/IContentObserver$Stub;->()V Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver; Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V @@ -446,16 +339,13 @@ Landroid/database/sqlite/SQLiteDatabase;->$assertionsDisabled:Z Landroid/filterfw/GraphEnvironment;->addReferences([Ljava/lang/Object;)V Landroid/hardware/camera2/utils/HashCodeHelpers;->hashCode([I)I Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager; -Landroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo; Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/hardware/fingerprint/IFingerprintService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/fingerprint/IFingerprintService; Landroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService; Landroid/hardware/input/IInputManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager; Landroid/hardware/input/IInputManager$Stub;->TRANSACTION_injectInputEvent:I -Landroid/hardware/input/IInputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->()V -Landroid/hardware/location/IActivityRecognitionHardwareClient;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V Landroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService; Landroid/hardware/usb/IUsbManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager; @@ -465,60 +355,33 @@ Landroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landr Landroid/location/ICountryListener$Stub;->()V Landroid/location/IGeocodeProvider$Stub;->()V Landroid/location/IGeocodeProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeocodeProvider; -Landroid/location/IGeocodeProvider;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; -Landroid/location/IGeocodeProvider;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; Landroid/location/IGeofenceProvider$Stub;->()V -Landroid/location/IGeofenceProvider;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V Landroid/location/ILocationListener$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/location/ILocationListener$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/location/ILocationListener$Stub;->()V Landroid/location/ILocationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationListener; -Landroid/location/ILocationListener;->onLocationChanged(Landroid/location/Location;)V -Landroid/location/ILocationListener;->onProviderDisabled(Ljava/lang/String;)V -Landroid/location/ILocationListener;->onProviderEnabled(Ljava/lang/String;)V -Landroid/location/ILocationListener;->onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V Landroid/location/ILocationManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager; Landroid/location/ILocationManager$Stub;->TRANSACTION_getAllProviders:I -Landroid/location/ILocationManager;->getAllProviders()Ljava/util/List; Landroid/location/INetInitiatedListener$Stub;->()V -Landroid/location/INetInitiatedListener;->sendNiResponse(II)Z Landroid/location/LocationManager$ListenerTransport;->(Landroid/location/LocationManager;Landroid/location/LocationListener;Landroid/os/Looper;)V Landroid/Manifest$permission;->CAPTURE_SECURE_VIDEO_OUTPUT:Ljava/lang/String; Landroid/Manifest$permission;->CAPTURE_VIDEO_OUTPUT:Ljava/lang/String; Landroid/Manifest$permission;->READ_FRAME_BUFFER:Ljava/lang/String; Landroid/media/effect/SingleFilterEffect;->(Landroid/media/effect/EffectContext;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V -Landroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V Landroid/media/IAudioRoutesObserver$Stub;->()V Landroid/media/IAudioService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/media/IAudioService$Stub;->()V Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService; -Landroid/media/IAudioService;->getStreamMaxVolume(I)I -Landroid/media/IAudioService;->getStreamVolume(I)I -Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V -Landroid/media/IAudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo; Landroid/media/IMediaRouterService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterService; Landroid/media/IMediaScannerListener$Stub;->()V Landroid/media/IMediaScannerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaScannerService; -Landroid/media/IMediaScannerService;->requestScanFile(Ljava/lang/String;Ljava/lang/String;Landroid/media/IMediaScannerListener;)V -Landroid/media/IMediaScannerService;->scanFile(Ljava/lang/String;Ljava/lang/String;)V -Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V Landroid/media/IRingtonePlayer;->play(Landroid/os/IBinder;Landroid/net/Uri;Landroid/media/AudioAttributes;FZ)V Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController; Landroid/media/MediaFile;->()V Landroid/media/MediaScanner$MyMediaScannerClient;->(Landroid/media/MediaScanner;)V -Landroid/media/projection/IMediaProjectionManager;->hasProjectionPermission(ILjava/lang/String;)Z Landroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager; Landroid/media/tv/ITvRemoteProvider$Stub;->()V -Landroid/media/tv/ITvRemoteServiceInput;->clearInputBridge(Landroid/os/IBinder;)V -Landroid/media/tv/ITvRemoteServiceInput;->closeInputBridge(Landroid/os/IBinder;)V -Landroid/media/tv/ITvRemoteServiceInput;->openInputBridge(Landroid/os/IBinder;Ljava/lang/String;III)V -Landroid/media/tv/ITvRemoteServiceInput;->sendKeyDown(Landroid/os/IBinder;I)V -Landroid/media/tv/ITvRemoteServiceInput;->sendKeyUp(Landroid/os/IBinder;I)V -Landroid/media/tv/ITvRemoteServiceInput;->sendPointerDown(Landroid/os/IBinder;III)V -Landroid/media/tv/ITvRemoteServiceInput;->sendPointerSync(Landroid/os/IBinder;)V -Landroid/media/tv/ITvRemoteServiceInput;->sendPointerUp(Landroid/os/IBinder;I)V -Landroid/media/tv/ITvRemoteServiceInput;->sendTimestamp(Landroid/os/IBinder;J)V Landroid/net/ConnectivityManager$PacketKeepaliveCallback;->()V Landroid/net/IConnectivityManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties; @@ -530,41 +393,13 @@ Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/la Landroid/net/IConnectivityManager$Stub$Proxy;->getTetheredIfaces()[Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager; -Landroid/net/IConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties; -Landroid/net/IConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo; -Landroid/net/IConnectivityManager;->getAllNetworkInfo()[Landroid/net/NetworkInfo; -Landroid/net/IConnectivityManager;->getAllNetworkState()[Landroid/net/NetworkState; -Landroid/net/IConnectivityManager;->getLastTetherError(Ljava/lang/String;)I -Landroid/net/IConnectivityManager;->getTetherableIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetheredIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;)V Landroid/net/INetworkManagementEventObserver$Stub;->()V Landroid/net/INetworkPolicyListener$Stub;->()V Landroid/net/INetworkPolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyManager; -Landroid/net/INetworkPolicyManager;->getNetworkQuotaInfo(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo; -Landroid/net/INetworkPolicyManager;->getRestrictBackground()Z -Landroid/net/INetworkPolicyManager;->getUidPolicy(I)I -Landroid/net/INetworkPolicyManager;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V -Landroid/net/INetworkPolicyManager;->setRestrictBackground(Z)V -Landroid/net/INetworkPolicyManager;->setUidPolicy(II)V -Landroid/net/INetworkPolicyManager;->snoozeLimit(Landroid/net/NetworkTemplate;)V Landroid/net/INetworkScoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreService; Landroid/net/INetworkStatsService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String; Landroid/net/INetworkStatsService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStatsService; -Landroid/net/INetworkStatsService;->forceUpdate()V -Landroid/net/INetworkStatsService;->getDataLayerSnapshotForUid(I)Landroid/net/NetworkStats; -Landroid/net/INetworkStatsService;->getMobileIfaces()[Ljava/lang/String; -Landroid/net/INetworkStatsService;->openSession()Landroid/net/INetworkStatsSession; -Landroid/net/INetworkStatsService;->openSessionForUsageStats(ILjava/lang/String;)Landroid/net/INetworkStatsSession; -Landroid/net/INetworkStatsSession;->close()V -Landroid/net/INetworkStatsSession;->getHistoryForNetwork(Landroid/net/NetworkTemplate;I)Landroid/net/NetworkStatsHistory; -Landroid/net/INetworkStatsSession;->getHistoryForUid(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory; -Landroid/net/INetworkStatsSession;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats; -Landroid/net/INetworkStatsSession;->getSummaryForNetwork(Landroid/net/NetworkTemplate;JJ)Landroid/net/NetworkStats; Landroid/net/InterfaceConfiguration;->()V Landroid/net/LinkProperties$ProvisioningChange;->values()[Landroid/net/LinkProperties$ProvisioningChange; Landroid/net/MobileLinkQualityInfo;->()V @@ -575,22 +410,12 @@ Landroid/net/SntpClient;->()V Landroid/net/wifi/IWifiManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager; Landroid/net/wifi/IWifiManager$Stub;->TRANSACTION_getScanResults:I -Landroid/net/wifi/IWifiManager;->getCurrentNetwork()Landroid/net/Network; -Landroid/net/wifi/IWifiManager;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration; -Landroid/net/wifi/IWifiManager;->getWifiApEnabledState()I Landroid/net/wifi/IWifiScanner$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/wifi/IWifiScanner$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/net/wifi/IWifiScanner$Stub;->()V Landroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner; Landroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager; Landroid/nfc/INfcAdapter$Stub;->TRANSACTION_enable:I -Landroid/nfc/INfcAdapterExtras;->authenticate(Ljava/lang/String;[B)V -Landroid/nfc/INfcAdapterExtras;->close(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; -Landroid/nfc/INfcAdapterExtras;->getCardEmulationRoute(Ljava/lang/String;)I -Landroid/nfc/INfcAdapterExtras;->getDriverName(Ljava/lang/String;)Ljava/lang/String; -Landroid/nfc/INfcAdapterExtras;->open(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; -Landroid/nfc/INfcAdapterExtras;->setCardEmulationRoute(Ljava/lang/String;I)V -Landroid/nfc/INfcAdapterExtras;->transceive(Ljava/lang/String;[B)Landroid/os/Bundle; Landroid/os/AsyncResult;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Throwable;)V Landroid/os/AsyncResult;->exception:Ljava/lang/Throwable; Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;)Landroid/os/AsyncResult; @@ -1360,9 +1185,7 @@ Landroid/R$styleable;->View_visibility:I Landroid/R$styleable;->Window:[I Landroid/R$styleable;->Window_windowBackground:I Landroid/R$styleable;->Window_windowFrame:I -Landroid/security/Credentials;->convertToPem([Ljava/security/cert/Certificate;)[B Landroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService; -Landroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String; Landroid/security/keymaster/KeymasterBlobArgument;->(ILandroid/os/Parcel;)V Landroid/security/keymaster/KeymasterBlobArgument;->(I[B)V Landroid/security/keymaster/KeymasterBlobArgument;->blob:[B @@ -1391,29 +1214,12 @@ Landroid/service/dreams/IDreamManager;->dream()V Landroid/service/dreams/IDreamManager;->getDreamComponents()[Landroid/content/ComponentName; Landroid/service/dreams/IDreamManager;->isDreaming()Z Landroid/service/dreams/IDreamManager;->setDreamComponents([Landroid/content/ComponentName;)V -Landroid/service/euicc/IDeleteSubscriptionCallback;->onComplete(I)V -Landroid/service/euicc/IEraseSubscriptionsCallback;->onComplete(I)V Landroid/service/euicc/IEuiccService$Stub;->()V -Landroid/service/euicc/IGetDefaultDownloadableSubscriptionListCallback;->onComplete(Landroid/service/euicc/GetDefaultDownloadableSubscriptionListResult;)V -Landroid/service/euicc/IGetDownloadableSubscriptionMetadataCallback;->onComplete(Landroid/service/euicc/GetDownloadableSubscriptionMetadataResult;)V -Landroid/service/euicc/IGetEidCallback;->onSuccess(Ljava/lang/String;)V -Landroid/service/euicc/IGetEuiccInfoCallback;->onSuccess(Landroid/telephony/euicc/EuiccInfo;)V -Landroid/service/euicc/IGetEuiccProfileInfoListCallback;->onComplete(Landroid/service/euicc/GetEuiccProfileInfoListResult;)V -Landroid/service/euicc/IRetainSubscriptionsForFactoryResetCallback;->onComplete(I)V -Landroid/service/euicc/ISwitchToSubscriptionCallback;->onComplete(I)V -Landroid/service/euicc/IUpdateSubscriptionNicknameCallback;->onComplete(I)V Landroid/service/notification/INotificationListener$Stub;->()V Landroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService; Landroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager; -Landroid/service/vr/IVrManager;->getVr2dDisplayId()I -Landroid/service/vr/IVrManager;->getVrModeState()Z Landroid/service/wallpaper/IWallpaperConnection$Stub;->()V -Landroid/service/wallpaper/IWallpaperEngine;->destroy()V -Landroid/service/wallpaper/IWallpaperEngine;->dispatchPointer(Landroid/view/MotionEvent;)V -Landroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;)V -Landroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V Landroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService; -Landroid/speech/IRecognitionListener;->onEvent(ILandroid/os/Bundle;)V Landroid/telecom/Log;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V Landroid/telecom/Log;->w(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V Landroid/telephony/ims/compat/feature/MMTelFeature;->()V @@ -1424,10 +1230,6 @@ Landroid/telephony/JapanesePhoneNumberFormatter;->format(Landroid/text/Editable; Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;->()V Landroid/telephony/mbms/IStreamingServiceCallback$Stub;->()V Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService; -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->getPlaybackUri(ILjava/lang/String;)Landroid/net/Uri; -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->initialize(Landroid/telephony/mbms/IMbmsStreamingSessionCallback;I)I -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->requestUpdateStreamingServices(ILjava/util/List;)I -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->startStreaming(ILjava/lang/String;Landroid/telephony/mbms/IStreamingServiceCallback;)I Landroid/telephony/SmsCbCmasInfo;->getCategory()I Landroid/telephony/SmsCbCmasInfo;->getCertainty()I Landroid/telephony/SmsCbCmasInfo;->getMessageClass()I @@ -1453,9 +1255,6 @@ Landroid/telephony/SmsCbMessage;->getServiceCategory()I Landroid/telephony/SmsCbMessage;->isCmasMessage()Z Landroid/telephony/SmsCbMessage;->isEmergencyMessage()Z Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; -Landroid/test/AndroidTestCase;->getTestContext()Landroid/content/Context; -Landroid/test/AndroidTestCase;->setTestContext(Landroid/content/Context;)V -Landroid/test/InstrumentationTestCase;->runMethod(Ljava/lang/reflect/Method;I)V Landroid/util/Singleton;->()V Landroid/util/XmlPullAttributes;->(Lorg/xmlpull/v1/XmlPullParser;)V Landroid/util/XmlPullAttributes;->mParser:Lorg/xmlpull/v1/XmlPullParser; @@ -1470,17 +1269,8 @@ Landroid/view/autofill/IAutoFillManager$Stub$Proxy;->(Landroid/os/IBinder; Landroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager; Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;->()V Landroid/view/IDockedStackListener$Stub;->()V -Landroid/view/IRecentsAnimationController;->finish(Z)V -Landroid/view/IRecentsAnimationController;->screenshotTask(I)Landroid/app/ActivityManager$TaskSnapshot; -Landroid/view/IRecentsAnimationController;->setAnimationTargetsBehindSystemBars(Z)V -Landroid/view/IRecentsAnimationController;->setInputConsumerEnabled(Z)V Landroid/view/IRecentsAnimationRunner$Stub;->()V -Landroid/view/IRecentsAnimationRunner;->onAnimationCanceled()V -Landroid/view/IRecentsAnimationRunner;->onAnimationStart(Landroid/view/IRecentsAnimationController;[Landroid/view/RemoteAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;)V -Landroid/view/IRemoteAnimationFinishedCallback;->onAnimationFinished()V Landroid/view/IRemoteAnimationRunner$Stub;->()V -Landroid/view/IRemoteAnimationRunner;->onAnimationCancelled()V -Landroid/view/IRemoteAnimationRunner;->onAnimationStart([Landroid/view/RemoteAnimationTarget;Landroid/view/IRemoteAnimationFinishedCallback;)V Landroid/view/IRotationWatcher$Stub;->()V Landroid/view/IWindow$Stub;->()V Landroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow; @@ -1492,44 +1282,7 @@ Landroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar(I)Z Landroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationWatcher;I)I Landroid/view/IWindowManager$Stub;->()V Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager; -Landroid/view/IWindowManager;->createInputConsumer(Landroid/os/IBinder;Ljava/lang/String;ILandroid/view/InputChannel;)V -Landroid/view/IWindowManager;->destroyInputConsumer(Ljava/lang/String;I)Z -Landroid/view/IWindowManager;->endProlongedAnimations()V -Landroid/view/IWindowManager;->executeAppTransition()V -Landroid/view/IWindowManager;->freezeRotation(I)V -Landroid/view/IWindowManager;->getAnimationScale(I)F -Landroid/view/IWindowManager;->getAnimationScales()[F -Landroid/view/IWindowManager;->getBaseDisplaySize(ILandroid/graphics/Point;)V -Landroid/view/IWindowManager;->getDockedStackSide()I -Landroid/view/IWindowManager;->getInitialDisplayDensity(I)I -Landroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V -Landroid/view/IWindowManager;->getStableInsets(ILandroid/graphics/Rect;)V -Landroid/view/IWindowManager;->hasNavigationBar(I)Z -Landroid/view/IWindowManager;->isKeyguardLocked()Z -Landroid/view/IWindowManager;->isKeyguardSecure()Z -Landroid/view/IWindowManager;->isSafeModeEnabled()Z -Landroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V -Landroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;ZI)V -Landroid/view/IWindowManager;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;I)V -Landroid/view/IWindowManager;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V -Landroid/view/IWindowManager;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V -Landroid/view/IWindowManager;->setAnimationScale(IF)V -Landroid/view/IWindowManager;->setAnimationScales([F)V -Landroid/view/IWindowManager;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V -Landroid/view/IWindowManager;->setShelfHeight(ZI)V -Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V -Landroid/view/IWindowManager;->thawRotation()V Landroid/view/IWindowSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession; -Landroid/view/IWindowSession;->finishDrawing(Landroid/view/IWindow;)V -Landroid/view/IWindowSession;->getInTouchMode()Z -Landroid/view/IWindowSession;->performDrag(Landroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder; -Landroid/view/IWindowSession;->performHapticFeedback(IZ)Z -Landroid/view/IWindowSession;->remove(Landroid/view/IWindow;)V -Landroid/view/IWindowSession;->setInTouchMode(Z)V -Landroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V -Landroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V -Landroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V -Landroid/view/RenderNodeAnimator;->setDuration(J)Landroid/view/RenderNodeAnimator; Landroid/view/View$AttachInfo$InvalidateInfo;->()V Landroid/view/View$CheckForLongPress;->(Landroid/view/View;)V Landroid/view/View$ListenerInfo;->()V @@ -1538,9 +1291,6 @@ Landroid/webkit/CacheManager$CacheResult;->()V Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse; Landroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService; -Landroid/webkit/IWebViewUpdateService;->getCurrentWebViewPackageName()Ljava/lang/String; -Landroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo; -Landroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z Landroid/widget/DigitalClock$FormatChangeObserver;->(Landroid/widget/DigitalClock;)V Landroid/widget/QuickContactBadge$QueryHandler;->(Landroid/widget/QuickContactBadge;Landroid/content/ContentResolver;)V Landroid/widget/RelativeLayout$DependencyGraph$Node;->()V @@ -1550,7 +1300,6 @@ Lcom/android/ims/ImsCall;->isMultiparty()Z Lcom/android/ims/ImsCall;->reject(I)V Lcom/android/ims/ImsCall;->terminate(I)V Lcom/android/ims/ImsConfigListener$Stub;->()V -Lcom/android/ims/ImsConfigListener;->onSetFeatureResponse(IIII)V Lcom/android/ims/ImsEcbm;->exitEmergencyCallbackMode()V Lcom/android/ims/ImsManager;->getConfigInterface()Lcom/android/ims/ImsConfig; Lcom/android/ims/ImsManager;->getInstance(Landroid/content/Context;I)Lcom/android/ims/ImsManager; @@ -1560,104 +1309,17 @@ Lcom/android/ims/ImsManager;->isVolteEnabledByPlatform(Landroid/content/Context; Lcom/android/ims/ImsUtInterface;->queryCallForward(ILjava/lang/String;Landroid/os/Message;)V Lcom/android/ims/internal/IImsCallSession$Stub;->()V Lcom/android/ims/internal/IImsCallSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsCallSession; -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionConferenceStateUpdated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsConferenceState;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHandover(Lcom/android/ims/internal/IImsCallSession;IILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHandoverFailed(Lcom/android/ims/internal/IImsCallSession;IILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHeld(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHoldFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHoldReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionInviteParticipantsRequestDelivered(Lcom/android/ims/internal/IImsCallSession;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionInviteParticipantsRequestFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeComplete(Lcom/android/ims/internal/IImsCallSession;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeStarted(Lcom/android/ims/internal/IImsCallSession;Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMultipartyStateChanged(Lcom/android/ims/internal/IImsCallSession;Z)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionProgressing(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsStreamMediaProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumeFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumeReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionStarted(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionStartFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionSuppServiceReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsSuppServiceNotification;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionTerminated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionTtyModeReceived(Lcom/android/ims/internal/IImsCallSession;I)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionUpdated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V Lcom/android/ims/internal/IImsConfig$Stub;->()V Lcom/android/ims/internal/IImsEcbm$Stub;->()V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationAssociatedUriChanged([Landroid/net/Uri;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationChangeFailed(ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationConnected()V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationConnectedWithRadioTech(I)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationDisconnected(Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationFeatureCapabilityChanged(I[I[I)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationProgressingWithRadioTech(I)V -Lcom/android/ims/internal/IImsRegistrationListener;->voiceMessageCountUpdate(I)V Lcom/android/ims/internal/IImsService$Stub;->()V Lcom/android/ims/internal/IImsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsService; Lcom/android/ims/internal/IImsUt$Stub;->()V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallBarringQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsSsInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallForwardQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsCallForwardInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallWaitingQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsSsInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationQueried(Lcom/android/ims/internal/IImsUt;ILandroid/os/Bundle;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationQueryFailed(Lcom/android/ims/internal/IImsUt;ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationUpdated(Lcom/android/ims/internal/IImsUt;I)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationUpdateFailed(Lcom/android/ims/internal/IImsUt;ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeCallDataUsage(J)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changePeerDimensions(II)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeVideoQuality(I)V -Lcom/android/ims/internal/IImsVideoCallCallback;->handleCallSessionEvent(I)V -Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V Lcom/android/ims/internal/IImsVideoCallProvider$Stub;->()V -Lcom/android/ims/internal/IImsVideoCallProvider;->setCallback(Lcom/android/ims/internal/IImsVideoCallCallback;)V Lcom/android/ims/internal/ImsVideoCallProviderWrapper;->(Lcom/android/ims/internal/IImsVideoCallProvider;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->cmdStatus(Lcom/android/ims/internal/uce/options/OptionsCmdStatus;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->getVersionCb(Ljava/lang/String;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->incomingOptions(Ljava/lang/String;Lcom/android/ims/internal/uce/options/OptionsCapInfo;I)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->serviceAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->serviceUnavailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->sipResponseReceived(Ljava/lang/String;Lcom/android/ims/internal/uce/options/OptionsSipResponse;Lcom/android/ims/internal/uce/options/OptionsCapInfo;)V Lcom/android/ims/internal/uce/options/IOptionsService$Stub;->()V -Lcom/android/ims/internal/uce/options/IOptionsService;->addListener(ILcom/android/ims/internal/uce/options/IOptionsListener;Lcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getContactCap(ILjava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getContactListCap(I[Ljava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getMyInfo(II)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getVersion(I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->removeListener(ILcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->responseIncomingOptions(IIILjava/lang/String;Lcom/android/ims/internal/uce/options/OptionsCapInfo;Z)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->setMyInfo(ILcom/android/ims/internal/uce/common/CapInfo;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceListener;->capInfoReceived(Ljava/lang/String;[Lcom/android/ims/internal/uce/presence/PresTupleInfo;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->cmdStatus(Lcom/android/ims/internal/uce/presence/PresCmdStatus;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->getVersionCb(Ljava/lang/String;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->listCapInfoReceived(Lcom/android/ims/internal/uce/presence/PresRlmiInfo;[Lcom/android/ims/internal/uce/presence/PresResInfo;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->publishTriggering(Lcom/android/ims/internal/uce/presence/PresPublishTriggerType;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->serviceAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->serviceUnAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->sipResponseReceived(Lcom/android/ims/internal/uce/presence/PresSipResponse;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->unpublishMessageSent()V Lcom/android/ims/internal/uce/presence/IPresenceService$Stub;->()V -Lcom/android/ims/internal/uce/presence/IPresenceService;->addListener(ILcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getContactCap(ILjava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getContactListCap(I[Ljava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getVersion(I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->publishMyCap(ILcom/android/ims/internal/uce/presence/PresCapInfo;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->reenableService(II)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->removeListener(ILcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->setNewFeatureTag(ILjava/lang/String;Lcom/android/ims/internal/uce/presence/PresServiceInfo;I)Lcom/android/ims/internal/uce/common/StatusCode; Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;->()V -Lcom/android/ims/internal/uce/uceservice/IUceListener;->setStatus(I)V Lcom/android/ims/internal/uce/uceservice/IUceService$Stub;->()V -Lcom/android/ims/internal/uce/uceservice/IUceService;->createOptionsService(Lcom/android/ims/internal/uce/options/IOptionsListener;Lcom/android/ims/internal/uce/common/UceLong;)I -Lcom/android/ims/internal/uce/uceservice/IUceService;->createPresenceService(Lcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)I -Lcom/android/ims/internal/uce/uceservice/IUceService;->destroyOptionsService(I)V -Lcom/android/ims/internal/uce/uceservice/IUceService;->destroyPresenceService(I)V -Lcom/android/ims/internal/uce/uceservice/IUceService;->getOptionsService()Lcom/android/ims/internal/uce/options/IOptionsService; -Lcom/android/ims/internal/uce/uceservice/IUceService;->getPresenceService()Lcom/android/ims/internal/uce/presence/IPresenceService; -Lcom/android/ims/internal/uce/uceservice/IUceService;->getServiceStatus()Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->isServiceStarted()Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->startService(Lcom/android/ims/internal/uce/uceservice/IUceListener;)Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->stopService()Z Lcom/android/internal/app/AlertActivity;->()V Lcom/android/internal/app/AlertActivity;->mAlert:Lcom/android/internal/app/AlertController; Lcom/android/internal/app/AlertActivity;->mAlertParams:Lcom/android/internal/app/AlertController$AlertParams; @@ -1688,22 +1350,12 @@ Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setUserRestrictions: Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startOperation:I Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startWatchingMode:I Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_stopWatchingMode:I -Lcom/android/internal/app/IAppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V -Lcom/android/internal/app/IAppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List; -Lcom/android/internal/app/IAppOpsService;->getPackagesForOps([I)Ljava/util/List; -Lcom/android/internal/app/IAppOpsService;->resetAllModes(ILjava/lang/String;)V -Lcom/android/internal/app/IAppOpsService;->setMode(IILjava/lang/String;I)V Lcom/android/internal/app/IBatteryStats$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats; -Lcom/android/internal/app/IBatteryStats;->computeChargeTimeRemaining()J -Lcom/android/internal/app/IBatteryStats;->getAwakeTimeBattery()J -Lcom/android/internal/app/IBatteryStats;->getStatistics()[B -Lcom/android/internal/app/IBatteryStats;->isCharging()Z Lcom/android/internal/app/IMediaContainerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IMediaContainerService; Lcom/android/internal/app/IntentForwarderActivity;->TAG:Ljava/lang/String; Lcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService; -Lcom/android/internal/app/IVoiceInteractionManagerService;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel; Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;->(Ljava/util/Locale;Z)V Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;->compare(Lcom/android/internal/app/LocaleStore$LocaleInfo;Lcom/android/internal/app/LocaleStore$LocaleInfo;)I Lcom/android/internal/app/LocaleHelper;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String; @@ -1731,10 +1383,6 @@ Lcom/android/internal/app/WindowDecorActionBar;->mTabScrollView:Lcom/android/int Lcom/android/internal/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V Lcom/android/internal/appwidget/IAppWidgetService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService; Lcom/android/internal/appwidget/IAppWidgetService$Stub;->TRANSACTION_bindAppWidgetId:I -Lcom/android/internal/appwidget/IAppWidgetService;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z -Lcom/android/internal/appwidget/IAppWidgetService;->bindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/IServiceConnection;I)Z -Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIds(Landroid/content/ComponentName;)[I -Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetViews(Ljava/lang/String;I)Landroid/widget/RemoteViews; Lcom/android/internal/backup/IBackupTransport$Stub;->()V Lcom/android/internal/content/PackageMonitor;->()V Lcom/android/internal/database/SortCursor;->([Landroid/database/Cursor;Ljava/lang/String;)V @@ -1751,16 +1399,11 @@ Lcom/android/internal/location/GpsNetInitiatedHandler;->handleNiNotification(Lco Lcom/android/internal/location/GpsNetInitiatedHandler;->mIsHexInput:Z Lcom/android/internal/location/ILocationProvider$Stub;->()V Lcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider; -Lcom/android/internal/location/ILocationProvider;->getStatus(Landroid/os/Bundle;)I -Lcom/android/internal/location/ILocationProvider;->getStatusUpdateTime()J Lcom/android/internal/location/ILocationProvider;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)V Lcom/android/internal/location/ILocationProvider;->setLocationProviderManager(Lcom/android/internal/location/ILocationProviderManager;)V Lcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V Lcom/android/internal/location/ILocationProviderManager$Stub;->()V Lcom/android/internal/location/ILocationProviderManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProviderManager; -Lcom/android/internal/location/ILocationProviderManager;->onReportLocation(Landroid/location/Location;)V -Lcom/android/internal/location/ILocationProviderManager;->onSetEnabled(Z)V -Lcom/android/internal/location/ILocationProviderManager;->onSetProperties(Lcom/android/internal/location/ProviderProperties;)V Lcom/android/internal/logging/MetricsLogger;->()V Lcom/android/internal/net/LegacyVpnInfo;->()V Lcom/android/internal/net/VpnConfig;->()V @@ -1772,7 +1415,6 @@ Lcom/android/internal/os/BinderInternal;->getContextObject()Landroid/os/IBinder; Lcom/android/internal/os/BinderInternal;->handleGc()V Lcom/android/internal/os/ClassLoaderFactory;->createClassloaderNamespace(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String; Lcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService; -Lcom/android/internal/os/IDropBoxManagerService;->getNextEntry(Ljava/lang/String;JLjava/lang/String;)Landroid/os/DropBoxManager$Entry; Lcom/android/internal/os/ProcessCpuTracker$Stats;->name:Ljava/lang/String; Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_stime:I Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_uptime:J @@ -1798,8 +1440,6 @@ Lcom/android/internal/policy/DecorView;->mLastLeftInset:I Lcom/android/internal/policy/DecorView;->mLastRightInset:I Lcom/android/internal/policy/DecorView;->mWindow:Lcom/android/internal/policy/PhoneWindow; Lcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService; -Lcom/android/internal/policy/IKeyguardService;->doKeyguardTimeout(Landroid/os/Bundle;)V -Lcom/android/internal/policy/IKeyguardService;->setKeyguardEnabled(Z)V Lcom/android/internal/policy/IKeyguardStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardStateCallback; Lcom/android/internal/policy/PhoneFallbackEventHandler;->(Landroid/content/Context;)V Lcom/android/internal/policy/PhoneFallbackEventHandler;->mContext:Landroid/content/Context; @@ -2253,14 +1893,7 @@ Lcom/android/internal/R$xml;->power_profile:I Lcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar; Lcom/android/internal/statusbar/IStatusBarService$Stub;->()V Lcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService; -Lcom/android/internal/statusbar/IStatusBarService;->collapsePanels()V -Lcom/android/internal/statusbar/IStatusBarService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V -Lcom/android/internal/statusbar/IStatusBarService;->expandNotificationsPanel()V -Lcom/android/internal/statusbar/IStatusBarService;->handleSystemKey(I)V -Lcom/android/internal/statusbar/IStatusBarService;->removeIcon(Ljava/lang/String;)V -Lcom/android/internal/statusbar/IStatusBarService;->setIconVisibility(Ljava/lang/String;Z)V Lcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService; -Lcom/android/internal/telecom/ITelecomService;->getCallState()I Lcom/android/internal/telephony/BaseCommands;->mCallStateRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/BaseCommands;->mCallWaitingInfoRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/BaseCommands;->mCatCallSetUpRegistrant:Landroid/os/Registrant; @@ -2887,7 +2520,6 @@ Lcom/android/internal/telephony/GsmCdmaPhone;->notifyPreciseCallStateChanged()V Lcom/android/internal/telephony/GsmCdmaPhone;->notifyServiceStateChanged(Landroid/telephony/ServiceState;)V Lcom/android/internal/telephony/GsmCdmaPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V Lcom/android/internal/telephony/GsmCdmaPhone;->syncClirSetting()V -Lcom/android/internal/telephony/ICarrierConfigLoader;->getConfigForSubId(ILjava/lang/String;)Landroid/os/PersistableBundle; Lcom/android/internal/telephony/IccCard;->getState()Lcom/android/internal/telephony/IccCardConstants$State; Lcom/android/internal/telephony/IccCard;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V Lcom/android/internal/telephony/IccCard;->supplyNetworkDepersonalization(Ljava/lang/String;Landroid/os/Message;)V @@ -3091,8 +2723,6 @@ Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->(Landroid/os/IB Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String; Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneSubInfo; Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->TRANSACTION_getDeviceId:I -Lcom/android/internal/telephony/IPhoneSubInfo;->getIccSerialNumber(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/IPhoneSubInfo;->getSubscriberId(Ljava/lang/String;)Ljava/lang/String; Lcom/android/internal/telephony/ISms$Stub;->()V Lcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms; Lcom/android/internal/telephony/ISub$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -3106,38 +2736,9 @@ Lcom/android/internal/telephony/ITelephony$Stub;->DESCRIPTOR:Ljava/lang/String; Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_call:I Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_dial:I Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_getDeviceId:I -Lcom/android/internal/telephony/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/ITelephony;->dial(Ljava/lang/String;)V -Lcom/android/internal/telephony/ITelephony;->disableDataConnectivity()Z -Lcom/android/internal/telephony/ITelephony;->disableLocationUpdates()V -Lcom/android/internal/telephony/ITelephony;->enableDataConnectivity()Z -Lcom/android/internal/telephony/ITelephony;->enableLocationUpdates()V -Lcom/android/internal/telephony/ITelephony;->getActivePhoneType()I -Lcom/android/internal/telephony/ITelephony;->getCallState()I -Lcom/android/internal/telephony/ITelephony;->getDataActivity()I -Lcom/android/internal/telephony/ITelephony;->getDataEnabled(I)Z -Lcom/android/internal/telephony/ITelephony;->getDataState()I -Lcom/android/internal/telephony/ITelephony;->getNetworkType()I -Lcom/android/internal/telephony/ITelephony;->handlePinMmi(Ljava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->handlePinMmiForSubscriber(ILjava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->hasIccCard()Z -Lcom/android/internal/telephony/ITelephony;->iccCloseLogicalChannel(II)Z -Lcom/android/internal/telephony/ITelephony;->iccTransmitApduLogicalChannel(IIIIIIILjava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/ITelephony;->isRadioOnForSubscriber(ILjava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->setRadio(Z)Z -Lcom/android/internal/telephony/ITelephony;->supplyPin(Ljava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->toggleRadioOnOff()V -Lcom/android/internal/telephony/ITelephony;->updateServiceLocation()V Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/telephony/ITelephonyRegistry$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry; -Lcom/android/internal/telephony/ITelephonyRegistry;->listen(Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyCallState(ILjava/lang/String;)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyCellInfo(Ljava/util/List;)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnectionFailed(Ljava/lang/String;)V Lcom/android/internal/telephony/IWapPushManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IWapPushManager; -Lcom/android/internal/telephony/IWapPushManager;->addPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z -Lcom/android/internal/telephony/IWapPushManager;->deletePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z -Lcom/android/internal/telephony/IWapPushManager;->updatePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z Lcom/android/internal/telephony/MccTable$MccEntry;->mIso:Ljava/lang/String; Lcom/android/internal/telephony/MccTable;->countryCodeForMcc(I)Ljava/lang/String; Lcom/android/internal/telephony/MccTable;->defaultLanguageForMcc(I)Ljava/lang/String; @@ -3332,7 +2933,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->isInHomeSidNid(II)Z Lcom/android/internal/telephony/ServiceStateTracker;->isInvalidOperatorNumeric(Ljava/lang/String;)Z Lcom/android/internal/telephony/ServiceStateTracker;->log(Ljava/lang/String;)V Lcom/android/internal/telephony/ServiceStateTracker;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/ServiceStateTracker;->mAttachedRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/ServiceStateTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface; Lcom/android/internal/telephony/ServiceStateTracker;->mCr:Landroid/content/ContentResolver; Lcom/android/internal/telephony/ServiceStateTracker;->mCurDataSpn:Ljava/lang/String; @@ -3344,7 +2944,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOffRegistrants Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOnRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/ServiceStateTracker;->mDefaultRoamingIndicator:I Lcom/android/internal/telephony/ServiceStateTracker;->mDesiredPowerState:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mDetachedRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/ServiceStateTracker;->mDeviceShuttingDown:Z Lcom/android/internal/telephony/ServiceStateTracker;->mEmergencyOnly:Z Lcom/android/internal/telephony/ServiceStateTracker;->mIccRecords:Lcom/android/internal/telephony/uicc/IccRecords; @@ -3372,7 +2971,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->mUiccApplcation:Lcom/andro Lcom/android/internal/telephony/ServiceStateTracker;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOffRegistrants:Landroid/os/RegistrantList; Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOnRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->notifyDataRegStateRilRadioTechnologyChanged()V Lcom/android/internal/telephony/ServiceStateTracker;->notifySignalStrength()Z Lcom/android/internal/telephony/ServiceStateTracker;->pollState()V Lcom/android/internal/telephony/ServiceStateTracker;->reRegisterNetwork(Landroid/os/Message;)V @@ -3932,23 +3530,7 @@ Lcom/android/internal/widget/ActionBarOverlayLayout;->(Landroid/content/Co Lcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V Lcom/android/internal/widget/EditableInputConnection;->(Landroid/widget/TextView;)V Lcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings; -Lcom/android/internal/widget/ILockSettings;->getBoolean(Ljava/lang/String;ZI)Z -Lcom/android/internal/widget/ILockSettings;->getLong(Ljava/lang/String;JI)J -Lcom/android/internal/widget/ILockSettings;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String; -Lcom/android/internal/widget/ILockSettings;->havePassword(I)Z -Lcom/android/internal/widget/ILockSettings;->havePattern(I)Z -Lcom/android/internal/widget/ILockSettings;->setBoolean(Ljava/lang/String;ZI)V -Lcom/android/internal/widget/ILockSettings;->setLong(Ljava/lang/String;JI)V -Lcom/android/internal/widget/ILockSettings;->setString(Ljava/lang/String;Ljava/lang/String;I)V Lcom/android/internal/widget/IRemoteViewsFactory$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/IRemoteViewsFactory; -Lcom/android/internal/widget/IRemoteViewsFactory;->getCount()I -Lcom/android/internal/widget/IRemoteViewsFactory;->getItemId(I)J -Lcom/android/internal/widget/IRemoteViewsFactory;->getLoadingView()Landroid/widget/RemoteViews; -Lcom/android/internal/widget/IRemoteViewsFactory;->getViewAt(I)Landroid/widget/RemoteViews; -Lcom/android/internal/widget/IRemoteViewsFactory;->getViewTypeCount()I -Lcom/android/internal/widget/IRemoteViewsFactory;->hasStableIds()Z -Lcom/android/internal/widget/IRemoteViewsFactory;->isCreated()Z -Lcom/android/internal/widget/IRemoteViewsFactory;->onDataSetChanged()V Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;->(Landroid/content/Context;)V Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;->setDefaultTouchRecepient(Landroid/view/View;)V Lcom/android/internal/widget/LockPatternChecker;->checkPassword(Lcom/android/internal/widget/LockPatternUtils;Ljava/lang/String;ILcom/android/internal/widget/LockPatternChecker$OnCheckCallback;)Landroid/os/AsyncTask; @@ -4480,9 +4062,6 @@ Lgov/nist/javax/sip/address/SipUri;->setParameter(Ljava/lang/String;Ljava/lang/S Lgov/nist/javax/sip/address/SipUri;->setUserParam(Ljava/lang/String;)V Lgov/nist/javax/sip/parser/URLParser;->(Ljava/lang/String;)V Lgov/nist/javax/sip/parser/URLParser;->sipURL(Z)Lgov/nist/javax/sip/address/SipUri; -Ljunit/framework/TestCase;->fName:Ljava/lang/String; -Ljunit/framework/TestSuite;->isPublicTestMethod(Ljava/lang/reflect/Method;)Z -Ljunit/framework/TestSuite;->isTestMethod(Ljava/lang/reflect/Method;)Z Lorg/apache/xalan/extensions/ExpressionContext;->getContextNode()Lorg/w3c/dom/Node; Lorg/apache/xalan/extensions/ExpressionContext;->getErrorListener()Ljavax/xml/transform/ErrorListener; Lorg/apache/xalan/extensions/ExpressionContext;->getVariableOrParam(Lorg/apache/xml/utils/QName;)Lorg/apache/xpath/objects/XObject; diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index e86fa8935469baaab495e9c2ac921e0ea9941b88..cf24b8e1ffa69bfa97ea37c40c2e03ce8198fd19 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -1225,7 +1225,7 @@ public class AccessibilityServiceInfo implements Parcelable { /** * @see Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AccessibilityServiceInfo createFromParcel(Parcel parcel) { AccessibilityServiceInfo info = new AccessibilityServiceInfo(); diff --git a/core/java/android/accessibilityservice/GestureDescription.java b/core/java/android/accessibilityservice/GestureDescription.java index 56f4ae2b583255ba8665091f9d34a51ebb507814..a3e7ad5da9b1c9fc8789431b3388d50b6a2bfcee 100644 --- a/core/java/android/accessibilityservice/GestureDescription.java +++ b/core/java/android/accessibilityservice/GestureDescription.java @@ -455,7 +455,7 @@ public final class GestureDescription { dest.writeFloat(mY); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public TouchPoint createFromParcel(Parcel in) { return new TouchPoint(in); @@ -509,7 +509,7 @@ public final class GestureDescription { dest.writeParcelableArray(touchPoints, flags); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public GestureStep createFromParcel(Parcel in) { return new GestureStep(in); diff --git a/core/java/android/accounts/Account.java b/core/java/android/accounts/Account.java index d3b2238d8b69b6c6a3f0a7fad9a1c07bf53d5b0c..26377642f2f99aa90bfac59c2d035d49b816a6f5 100644 --- a/core/java/android/accounts/Account.java +++ b/core/java/android/accounts/Account.java @@ -124,7 +124,7 @@ public class Account implements Parcelable { dest.writeString(accessId); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public Account createFromParcel(Parcel source) { return new Account(source); } diff --git a/core/java/android/accounts/AccountAuthenticatorResponse.java b/core/java/android/accounts/AccountAuthenticatorResponse.java index bcc9f90c35f1800c72d968f1cd4f63041107c8b3..bb2e327a9be8835b0b7f9865386c170bd2496001 100644 --- a/core/java/android/accounts/AccountAuthenticatorResponse.java +++ b/core/java/android/accounts/AccountAuthenticatorResponse.java @@ -87,7 +87,7 @@ public class AccountAuthenticatorResponse implements Parcelable { dest.writeStrongBinder(mAccountAuthenticatorResponse.asBinder()); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public AccountAuthenticatorResponse createFromParcel(Parcel source) { return new AccountAuthenticatorResponse(source); diff --git a/core/java/android/accounts/AccountManagerResponse.java b/core/java/android/accounts/AccountManagerResponse.java index 11c6e60c782bb56e195a8bb70c31f343f11dba49..369a7c396e3a0dcf0c17a36fcfb8b56acc37efbf 100644 --- a/core/java/android/accounts/AccountManagerResponse.java +++ b/core/java/android/accounts/AccountManagerResponse.java @@ -66,7 +66,7 @@ public class AccountManagerResponse implements Parcelable { } /** @hide */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public AccountManagerResponse createFromParcel(Parcel source) { return new AccountManagerResponse(source); diff --git a/core/java/android/accounts/AuthenticatorDescription.java b/core/java/android/accounts/AuthenticatorDescription.java index 2360cec5bde84c24637724633d1b3505e867c382..555639445e8556d499a0db3c38833b75584a5048 100644 --- a/core/java/android/accounts/AuthenticatorDescription.java +++ b/core/java/android/accounts/AuthenticatorDescription.java @@ -134,7 +134,7 @@ public class AuthenticatorDescription implements Parcelable { } /** Used to create the object from a parcel. */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { /** @inheritDoc */ public AuthenticatorDescription createFromParcel(Parcel source) { diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index ee7288ffd52c13288c99f3abe75aa59a5a721182..c067f9d0ce1c94914bf88906e25dca667b076e3b 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1345,7 +1345,7 @@ public class ActivityManager { mIconFilename = source.readInt() > 0 ? source.readString() : null; } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public TaskDescription createFromParcel(Parcel source) { return new TaskDescription(source); @@ -1431,7 +1431,7 @@ public class ActivityManager { super.writeToParcel(dest, flags); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RecentTaskInfo createFromParcel(Parcel source) { return new RecentTaskInfo(source); @@ -1601,7 +1601,7 @@ public class ActivityManager { super.writeToParcel(dest, flags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RunningTaskInfo createFromParcel(Parcel source) { return new RunningTaskInfo(source); } @@ -1936,7 +1936,7 @@ public class ActivityManager { + " mIsTranslucent=" + mIsTranslucent; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public TaskSnapshot createFromParcel(Parcel source) { return new TaskSnapshot(source); } @@ -2177,7 +2177,7 @@ public class ActivityManager { clientLabel = source.readInt(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RunningServiceInfo createFromParcel(Parcel source) { return new RunningServiceInfo(source); } @@ -2309,7 +2309,7 @@ public class ActivityManager { foregroundAppThreshold = source.readLong(); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public MemoryInfo createFromParcel(Parcel source) { return new MemoryInfo(source); @@ -2440,7 +2440,7 @@ public class ActivityManager { configuration.readFromParcel(source); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public StackInfo createFromParcel(Parcel source) { return new StackInfo(source); @@ -2646,7 +2646,7 @@ public class ActivityManager { stackTrace = source.readString(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ProcessErrorStateInfo createFromParcel(Parcel source) { return new ProcessErrorStateInfo(source); @@ -3110,7 +3110,7 @@ public class ActivityManager { lastActivityTime = source.readLong(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RunningAppProcessInfo createFromParcel(Parcel source) { return new RunningAppProcessInfo(source); diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 7d828d87e278fdd8e77aa2b7bc0bf2f17660ae45..92db23b828916eceea09c259a9f269f216d0b892 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -276,6 +276,7 @@ public abstract class ActivityManagerInternal { public abstract boolean isActivityStartsLoggingEnabled(); /** Returns true if the background activity starts is enabled. */ public abstract boolean isBackgroundActivityStartsEnabled(); + public abstract boolean isPackageNameWhitelistedForBgActivityStarts(String packageName); public abstract void reportCurKeyguardUsageEvent(boolean keyguardShowing); /** Input dispatch timeout to a window, start the ANR process. */ diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index e486593a0c0961f6ca13134f6bf5d1b041207de7..b0d3590e36e9cdc384e71a7e9578e615dd537729 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -183,6 +183,7 @@ import java.io.PrintWriter; 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; @@ -332,7 +333,6 @@ public final class ActivityThread extends ClientTransactionHandler { String[] mInstrumentedSplitAppDirs = null; String mInstrumentedLibDir = null; boolean mSystemThread = false; - boolean mJitEnabled = false; boolean mSomeActivitiesChanged = false; boolean mUpdatingSystemConfig = false; /* package */ boolean mHiddenApiWarningShown = false; @@ -1696,7 +1696,6 @@ public final class ActivityThread extends ClientTransactionHandler { public static final int SUICIDE = 130; @UnsupportedAppUsage public static final int REMOVE_PROVIDER = 131; - public static final int ENABLE_JIT = 132; public static final int DISPATCH_PACKAGE_BROADCAST = 133; @UnsupportedAppUsage public static final int SCHEDULE_CRASH = 134; @@ -1746,7 +1745,6 @@ public final class ActivityThread extends ClientTransactionHandler { case DESTROY_BACKUP_AGENT: return "DESTROY_BACKUP_AGENT"; case SUICIDE: return "SUICIDE"; case REMOVE_PROVIDER: return "REMOVE_PROVIDER"; - case ENABLE_JIT: return "ENABLE_JIT"; case DISPATCH_PACKAGE_BROADCAST: return "DISPATCH_PACKAGE_BROADCAST"; case SCHEDULE_CRASH: return "SCHEDULE_CRASH"; case DUMP_HEAP: return "DUMP_HEAP"; @@ -1858,9 +1856,6 @@ public final class ActivityThread extends ClientTransactionHandler { completeRemoveProvider((ProviderRefCount)msg.obj); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); break; - case ENABLE_JIT: - ensureJitEnabled(); - break; case DISPATCH_PACKAGE_BROADCAST: Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastPackage"); handleDispatchPackageBroadcast(msg.arg1, (String[])msg.obj); @@ -1996,7 +1991,6 @@ public final class ActivityThread extends ClientTransactionHandler { if (stopProfiling) { mProfiler.stopProfiling(); } - ensureJitEnabled(); return false; } } @@ -2330,13 +2324,6 @@ public final class ActivityThread extends ClientTransactionHandler { } } - void ensureJitEnabled() { - if (!mJitEnabled) { - mJitEnabled = true; - dalvik.system.VMRuntime.getRuntime().startJitCompilation(); - } - } - @UnsupportedAppUsage void scheduleGcIdler() { if (!mGcIdlerScheduled) { @@ -3782,7 +3769,6 @@ public final class ActivityThread extends ClientTransactionHandler { ActivityManager.getService().serviceDoneExecuting( data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } - ensureJitEnabled(); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -3896,7 +3882,6 @@ public final class ActivityThread extends ClientTransactionHandler { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } - ensureJitEnabled(); } catch (Exception e) { if (!mInstrumentation.onException(s, e)) { throw new RuntimeException( @@ -6195,9 +6180,6 @@ public final class ActivityThread extends ClientTransactionHandler { if (!data.restrictedBackupMode) { if (!ArrayUtils.isEmpty(data.providers)) { installContentProviders(app, data.providers); - // For process that contains content providers, we want to - // ensure that the JIT is enabled "at some point". - mH.sendEmptyMessageDelayed(H.ENABLE_JIT, 10*1000); } } @@ -6839,12 +6821,6 @@ public final class ActivityThread extends ClientTransactionHandler { sCurrentActivityThread = this; mSystemThread = system; if (!system) { - ViewRootImpl.addFirstDrawHandler(new Runnable() { - @Override - public void run() { - ensureJitEnabled(); - } - }); android.ddm.DdmHandleAppName.setAppName("", UserHandle.myUserId()); RuntimeInit.setApplicationObject(mAppThread.asBinder()); @@ -6989,6 +6965,23 @@ public final class ActivityThread extends ClientTransactionHandler { } } + 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)) { @@ -7023,6 +7016,42 @@ public final class ActivityThread extends ClientTransactionHandler { 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/AlarmManager.java b/core/java/android/app/AlarmManager.java index 2f0f14aab75a19a1fac4a84b34bed5b4f034f054..3a34b7926611722e8d5697f727cf54bc9f4421ae 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -1135,7 +1135,7 @@ public class AlarmManager { dest.writeParcelable(mShowIntent, flags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public AlarmClockInfo createFromParcel(Parcel in) { return new AlarmClockInfo(in); diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 040ad062e5121fe519343bda74e1fc7f039c736f..91df05f35295115c2b0c4dadfc278ad3947e1138 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -43,6 +43,8 @@ import android.os.SystemProperties; import android.os.UserManager; import android.provider.Settings; import android.util.ArrayMap; +import android.util.LongSparseArray; +import android.util.LongSparseLongArray; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; @@ -55,8 +57,10 @@ import com.android.internal.app.IAppOpsService; import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; +import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -64,9 +68,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; +import java.util.function.Supplier; /** * API for interacting with "application operation" tracking. @@ -227,7 +233,7 @@ public class AppOpsManager { /** @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(flag = true, prefix = { "UID_STATE_" }, value = { + @IntDef(prefix = { "UID_STATE_" }, value = { UID_STATE_PERSISTENT, UID_STATE_TOP, UID_STATE_FOREGROUND_SERVICE_LOCATION, @@ -239,78 +245,322 @@ public class AppOpsManager { public @interface UidState {} /** - * Invalid UID state. + * Uid state: The UID is a foreground persistent app. * @hide */ - public static final int UID_STATE_INVALID = -1; + @TestApi + @SystemApi + public static final int UID_STATE_PERSISTENT = 100; + + /** + * Uid state: The UID is top foreground app. + * @hide + */ + @TestApi + @SystemApi + public static final int UID_STATE_TOP = 200; + + /** + * Uid state: The UID is running a foreground service of location type. + * @hide + */ + @TestApi + @SystemApi + public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; /** - * Metrics about an op when its uid is persistent. + * Uid state: The UID is running a foreground service. * @hide */ @TestApi @SystemApi - public static final int UID_STATE_PERSISTENT = 0; + public static final int UID_STATE_FOREGROUND_SERVICE = 400; /** - * Metrics about an op when its uid is at the top. + * The max, which is min priority, UID state for which any app op + * would be considered as performed in the foreground. + * @hide + */ + public static final int UID_STATE_MAX_LAST_NON_RESTRICTED = UID_STATE_FOREGROUND_SERVICE; + + /** + * Uid state: The UID is a foreground app. * @hide */ @TestApi @SystemApi - public static final int UID_STATE_TOP = 1; + public static final int UID_STATE_FOREGROUND = 500; + + /** + * Uid state: The UID is a background app. + * @hide + */ + @TestApi + @SystemApi + public static final int UID_STATE_BACKGROUND = 600; + + /** + * Uid state: The UID is a cached app. + * @hide + */ + @TestApi + @SystemApi + public static final int UID_STATE_CACHED = 700; + + /** + * Uid state: The UID state with the highest priority. + * @hide + */ + public static final int MAX_PRIORITY_UID_STATE = UID_STATE_PERSISTENT; + + /** + * Uid state: The UID state with the lowest priority. + * @hide + */ + public static final int MIN_PRIORITY_UID_STATE = UID_STATE_CACHED; + + /** + * Resolves the first unrestricted state given an app op. Location is + * special as we want to allow its access only if a dedicated location + * foreground service is running. For other ops we consider any foreground + * service as a foreground state. + * + * @param op The op to resolve. + * @return The last restricted UID state. + * + * @hide + */ + public static int resolveFirstUnrestrictedUidState(int op) { + switch (op) { + case OP_FINE_LOCATION: + case OP_COARSE_LOCATION: { + return UID_STATE_FOREGROUND_SERVICE_LOCATION; + } + } + return UID_STATE_FOREGROUND_SERVICE; + } + + /** + * Resolves the last restricted state given an app op. Location is + * special as we want to allow its access only if a dedicated location + * foreground service is running. For other ops we consider any foreground + * service as a foreground state. + * + * @param op The op to resolve. + * @return The last restricted UID state. + * + * @hide + */ + public static int resolveLastRestrictedUidState(int op) { + switch (op) { + case OP_FINE_LOCATION: + case OP_COARSE_LOCATION: { + return UID_STATE_FOREGROUND_SERVICE; + } + } + return UID_STATE_FOREGROUND; + } + + /** @hide Note: Keep these sorted */ + public static final int[] UID_STATES = { + UID_STATE_PERSISTENT, + UID_STATE_TOP, + UID_STATE_FOREGROUND_SERVICE_LOCATION, + UID_STATE_FOREGROUND_SERVICE, + UID_STATE_FOREGROUND, + UID_STATE_BACKGROUND, + UID_STATE_CACHED + }; + + /** @hide */ + public static String getUidStateName(@UidState int uidState) { + switch (uidState) { + case UID_STATE_PERSISTENT: + return "pers"; + case UID_STATE_TOP: + return "top"; + case UID_STATE_FOREGROUND_SERVICE_LOCATION: + return "fgsvcl"; + case UID_STATE_FOREGROUND_SERVICE: + return "fgsvc"; + case UID_STATE_FOREGROUND: + return "fg"; + case UID_STATE_BACKGROUND: + return "bg"; + case UID_STATE_CACHED: + return "cch"; + default: + return "unknown"; + } + } /** - * Metrics about an op when its uid is running a foreground service with location type. + * Flag: non proxy operations. These are operations + * performed on behalf of the app itself and not on behalf of + * another one. + * * @hide */ @TestApi @SystemApi - public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 2; + public static final int OP_FLAG_SELF = 0x1; /** - * Metrics about an op when its uid is running a foreground service. + * Flag: trusted proxy operations. These are operations + * performed on behalf of another app by a trusted app. + * Which is work a trusted app blames on another app. + * * @hide */ @TestApi @SystemApi - public static final int UID_STATE_FOREGROUND_SERVICE = 3; + public static final int OP_FLAG_TRUSTED_PROXY = 0x2; /** - * Last UID state in which we don't restrict what an op can do. + * Flag: untrusted proxy operations. These are operations + * performed on behalf of another app by an untrusted app. + * Which is work an untrusted app blames on another app. + * * @hide */ - public static final int UID_STATE_LAST_NON_RESTRICTED = UID_STATE_FOREGROUND_SERVICE_LOCATION; + @TestApi + @SystemApi + public static final int OP_FLAG_UNTRUSTED_PROXY = 0x4; /** - * Metrics about an op when its uid is in the foreground for any other reasons. + * Flag: trusted proxied operations. These are operations + * performed by a trusted other app on behalf of an app. + * Which is work an app was blamed for by a trusted app. + * * @hide */ @TestApi @SystemApi - public static final int UID_STATE_FOREGROUND = 4; + public static final int OP_FLAG_TRUSTED_PROXIED = 0x8; /** - * Metrics about an op when its uid is in the background for any reason. + * Flag: untrusted proxied operations. These are operations + * performed by an untrusted other app on behalf of an app. + * Which is work an app was blamed for by an untrusted app. + * * @hide */ @TestApi @SystemApi - public static final int UID_STATE_BACKGROUND = 5; + public static final int OP_FLAG_UNTRUSTED_PROXIED = 0x10; /** - * Metrics about an op when its uid is cached. + * Flags: all operations. These include operations matched + * by {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. + * * @hide */ @TestApi @SystemApi - public static final int UID_STATE_CACHED = 6; + public static final int OP_FLAGS_ALL = + OP_FLAG_SELF + | OP_FLAG_TRUSTED_PROXY + | OP_FLAG_UNTRUSTED_PROXY + | OP_FLAG_TRUSTED_PROXIED + | OP_FLAG_UNTRUSTED_PROXIED; /** - * Number of uid states we track. + * Flags: all trusted operations which is ones either the app did {@link #OP_FLAG_SELF}, + * or it was blamed for by a trusted app {@link #OP_FLAG_TRUSTED_PROXIED}, or ones the + * app if untrusted blamed on other apps {@link #OP_FLAG_UNTRUSTED_PROXY}. + * * @hide */ - public static final int _NUM_UID_STATE = 7; + @SystemApi + public static final int OP_FLAGS_ALL_TRUSTED = AppOpsManager.OP_FLAG_SELF + | AppOpsManager.OP_FLAG_UNTRUSTED_PROXY + | AppOpsManager.OP_FLAG_TRUSTED_PROXIED; + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(flag = true, prefix = { "FLAG_" }, value = { + OP_FLAG_SELF, + OP_FLAG_TRUSTED_PROXY, + OP_FLAG_UNTRUSTED_PROXY, + OP_FLAG_TRUSTED_PROXIED, + OP_FLAG_UNTRUSTED_PROXIED + }) + public @interface OpFlags {} + + + /** @hide */ + public static final String getFlagName(@OpFlags int flag) { + switch (flag) { + case OP_FLAG_SELF: + return "s"; + case OP_FLAG_TRUSTED_PROXY: + return "tp"; + case OP_FLAG_UNTRUSTED_PROXY: + return "up"; + case OP_FLAG_TRUSTED_PROXIED: + return "tpd"; + case OP_FLAG_UNTRUSTED_PROXIED: + return "upd"; + default: + return "unknown"; + } + } + + private static final int UID_STATE_OFFSET = 31; + private static final int FLAGS_MASK = 0xFFFFFFFF; + + /** + * Key for a data bucket storing app op state. The bucket + * is composed of the uid state and state flags. This way + * we can query data for given uid state and a set of flags where + * the flags control which type of data to get. For example, + * one can get the ops an app did on behalf of other apps + * while in the background. + * + * @hide + */ + @Retention(RetentionPolicy.SOURCE) + @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) + public @interface DataBucketKey { + } + + /** @hide */ + public static String keyToString(@DataBucketKey long key) { + final int uidState = extractUidStateFromKey(key); + final int flags = extractFlagsFromKey(key); + return "[" + getUidStateName(uidState) + "-" + flagsToString(flags) + "]"; + } + + /** @hide */ + public static @DataBucketKey long makeKey(@UidState int uidState, @OpFlags int flags) { + return ((long) uidState << UID_STATE_OFFSET) | flags; + } + + /** @hide */ + public static int extractUidStateFromKey(@DataBucketKey long key) { + return (int) (key >> UID_STATE_OFFSET); + } + + /** @hide */ + public static int extractFlagsFromKey(@DataBucketKey long key) { + return (int) (key & FLAGS_MASK); + } + + /** @hide */ + public static String flagsToString(@OpFlags int flags) { + final StringBuilder flagsBuilder = new StringBuilder(); + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + if (flagsBuilder.length() > 0) { + flagsBuilder.append('|'); + } + flagsBuilder.append(getFlagName(flag)); + } + return flagsBuilder.toString(); + } // when adding one of these: // - increment _NUM_OP @@ -551,7 +801,7 @@ public class AppOpsManager { @UnsupportedAppUsage public static final int OP_MANAGE_IPSEC_TUNNELS = 75; /** @hide Any app start foreground service. */ - @UnsupportedAppUsage + @TestApi public static final int OP_START_FOREGROUND = 76; /** @hide */ @UnsupportedAppUsage @@ -1947,14 +2197,23 @@ public class AppOpsManager { mEntries = entries; } - public String getPackageName() { + /** + * @return The name of the package. + */ + public @NonNull String getPackageName() { return mPackageName; } + /** + * @return The uid of the package. + */ public int getUid() { return mUid; } + /** + * @return The ops of the package. + */ public List getOps() { return mEntries; } @@ -1984,7 +2243,7 @@ public class AppOpsManager { } } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public PackageOps createFromParcel(Parcel source) { return new PackageOps(source); } @@ -1999,57 +2258,59 @@ public class AppOpsManager { * Class holding the information about one unique operation of an application. * @hide */ + @TestApi + @Immutable @SystemApi public static final class OpEntry implements Parcelable { private final int mOp; - private final @Mode int mMode; - private final long[] mTimes; - private final long[] mRejectTimes; - private final int mDuration; - private final int mProxyUid; private final boolean mRunning; - private final String mProxyPackageName; + private final @Mode int mMode; + private final @Nullable LongSparseLongArray mAccessTimes; + private final @Nullable LongSparseLongArray mRejectTimes; + private final @Nullable LongSparseLongArray mDurations; + private final @Nullable LongSparseLongArray mProxyUids; + private final @Nullable LongSparseArray mProxyPackageNames; /** * @hide */ - public OpEntry(int op, @Mode int mode, long time, long rejectTime, int duration, - int proxyUid, String proxyPackage) { + public OpEntry(int op, boolean running, @Mode int mode, + @Nullable LongSparseLongArray accessTimes, @Nullable LongSparseLongArray rejectTimes, + @Nullable LongSparseLongArray durations, @Nullable LongSparseLongArray proxyUids, + @Nullable LongSparseArray proxyPackageNames) { mOp = op; + mRunning = running; mMode = mode; - mTimes = new long[_NUM_UID_STATE]; - mRejectTimes = new long[_NUM_UID_STATE]; - mTimes[0] = time; - mRejectTimes[0] = rejectTime; - mDuration = duration; - mRunning = duration == -1; - mProxyUid = proxyUid; - mProxyPackageName = proxyPackage; + mAccessTimes = accessTimes; + mRejectTimes = rejectTimes; + mDurations = durations; + mProxyUids = proxyUids; + mProxyPackageNames = proxyPackageNames; } /** * @hide */ - public OpEntry(int op, @Mode int mode, long[] times, long[] rejectTimes, int duration, - boolean running, int proxyUid, String proxyPackage) { + public OpEntry(int op, @Mode int mode) { mOp = op; mMode = mode; - mTimes = new long[_NUM_UID_STATE]; - mRejectTimes = new long[_NUM_UID_STATE]; - System.arraycopy(times, 0, mTimes, 0, _NUM_UID_STATE); - System.arraycopy(rejectTimes, 0, mRejectTimes, 0, _NUM_UID_STATE); - mDuration = duration; - mRunning = running; - mProxyUid = proxyUid; - mProxyPackageName = proxyPackage; + mRunning = false; + mAccessTimes = null; + mRejectTimes = null; + mDurations = null; + mProxyUids = null; + mProxyPackageNames = null; } /** - * @hide - */ - public OpEntry(int op, @Mode int mode, long[] times, long[] rejectTimes, int duration, - int proxyUid, String proxyPackage) { - this(op, mode, times, rejectTimes, duration, duration == -1, proxyUid, proxyPackage); + * Returns all keys for which we have mapped state in any of the data buckets - + * access time, reject time, duration. + * @hide */ + public @Nullable LongSparseArray collectKeys() { + LongSparseArray result = AppOpsManager.collectKeys(mAccessTimes, null); + result = AppOpsManager.collectKeys(mRejectTimes, result); + result = AppOpsManager.collectKeys(mDurations, result); + return result; } /** @@ -2061,14 +2322,14 @@ public class AppOpsManager { } /** - * Return this entry's op string name, such as {@link #OPSTR_COARSE_LOCATION}. + * @return This entry's op string name, such as {@link #OPSTR_COARSE_LOCATION}. */ - public String getOpStr() { + public @NonNull String getOpStr() { return sOpToString[mOp]; } /** - * Return this entry's current mode, such as {@link #MODE_ALLOWED}. + * @return this entry's current mode, such as {@link #MODE_ALLOWED}. */ public @Mode int getMode() { return mMode; @@ -2079,89 +2340,331 @@ public class AppOpsManager { */ @UnsupportedAppUsage public long getTime() { - return maxTime(mTimes, 0, _NUM_UID_STATE); + return getLastAccessTime(OP_FLAGS_ALL); } /** - * Return the last wall clock time this op was accessed by the app. + * Return the last wall clock time in milliseconds this op was accessed. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last access time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastAccessForegroundTime(int) + * @see #getLastAccessBackgroundTime(int) + * @see #getLastAccessTime(int, int, int) */ - public long getLastAccessTime() { - return maxTime(mTimes, 0, _NUM_UID_STATE); + public long getLastAccessTime(@OpFlags int flags) { + return maxForFlagsInStates(mAccessTimes, MAX_PRIORITY_UID_STATE, + MIN_PRIORITY_UID_STATE, flags); } /** - * Return the last wall clock time this op was accessed by the app while in the foreground. + * Return the last wall clock time in milliseconds this op was accessed + * by the app while in the foreground. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last foreground access time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastAccessBackgroundTime(int) + * @see #getLastAccessTime(int) + * @see #getLastAccessTime(int, int, int) */ - public long getLastAccessForegroundTime() { - return maxTime(mTimes, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + public long getLastAccessForegroundTime(@OpFlags int flags) { + return maxForFlagsInStates(mAccessTimes, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); } /** - * Return the last wall clock time this op was accessed by the app while in the background. + * Return the last wall clock time in milliseconds this op was accessed + * by the app while in the background. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last foreground access time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastAccessForegroundTime(int) + * @see #getLastAccessTime(int) + * @see #getLastAccessTime(int, int, int) */ - public long getLastAccessBackgroundTime() { - return maxTime(mTimes, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + public long getLastAccessBackgroundTime(@OpFlags int flags) { + return maxForFlagsInStates(mAccessTimes, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } /** - * @hide + * Return the last wall clock time in milliseconds this op was accessed + * by the app for a given range of UID states. + * + * @param fromUidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state for which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * + * @return the last foreground access time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastAccessForegroundTime(int) + * @see #getLastAccessBackgroundTime(int) + * @see #getLastAccessTime(int) */ - public long getLastTimeFor(int uidState) { - return mTimes[uidState]; + public long getLastAccessTime(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return maxForFlagsInStates(mAccessTimes, fromUidState, toUidState, flags); } /** * @hide */ public long getRejectTime() { - return maxTime(mRejectTimes, 0, _NUM_UID_STATE); + return getLastRejectTime(OP_FLAGS_ALL); } /** - * Return the last wall clock time the app made an attempt to access this op but - * was rejected. + * Return the last wall clock time in milliseconds the app made an attempt + * to access this op but was rejected. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last reject time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastRejectBackgroundTime(int) + * @see #getLastRejectForegroundTime(int) + * @see #getLastRejectTime(int, int, int) */ - public long getLastRejectTime() { - return maxTime(mRejectTimes, 0, _NUM_UID_STATE); + public long getLastRejectTime(@OpFlags int flags) { + return maxForFlagsInStates(mRejectTimes, MAX_PRIORITY_UID_STATE, + MIN_PRIORITY_UID_STATE, flags); } /** - * Return the last wall clock time the app made an attempt to access this op while in - * the foreground but was rejected. + * Return the last wall clock time in milliseconds the app made an attempt + * to access this op while in the foreground but was rejected. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last foreground reject time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastRejectBackgroundTime(int) + * @see #getLastRejectTime(int, int, int) + * @see #getLastRejectTime(int) */ - public long getLastRejectForegroundTime() { - return maxTime(mRejectTimes, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + public long getLastRejectForegroundTime(@OpFlags int flags) { + return maxForFlagsInStates(mRejectTimes, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); } /** - * Return the last wall clock time the app made an attempt to access this op while in - * the background but was rejected. + * Return the last wall clock time in milliseconds the app made an attempt + * to access this op while in the background but was rejected. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last background reject time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastRejectForegroundTime(int) + * @see #getLastRejectTime(int, int, int) + * @see #getLastRejectTime(int) */ - public long getLastRejectBackgroundTime() { - return maxTime(mRejectTimes, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + public long getLastRejectBackgroundTime(@OpFlags int flags) { + return maxForFlagsInStates(mRejectTimes, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } /** - * @hide + * Return the last wall clock time state in milliseconds the app made an + * attempt to access this op for a given range of UID states. + * + * @param fromUidState The UID state from which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state to which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the last foreground access time in milliseconds since + * epoch start (January 1, 1970 00:00:00.000 GMT - Gregorian). + * + * @see #getLastRejectForegroundTime(int) + * @see #getLastRejectBackgroundTime(int) + * @see #getLastRejectTime(int) */ - public long getLastRejectTimeFor(int uidState) { - return mRejectTimes[uidState]; + public long getLastRejectTime(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return maxForFlagsInStates(mRejectTimes, fromUidState, toUidState, flags); } + /** + * @return Whether the operation is running. + */ public boolean isRunning() { return mRunning; } - public int getDuration() { - return mDuration; + /** + * @return The duration of the operation in milliseconds. + */ + public long getDuration() { + return getLastDuration(MAX_PRIORITY_UID_STATE, MIN_PRIORITY_UID_STATE, OP_FLAGS_ALL); + } + + /** + * Return the duration in milliseconds the app accessed this op while + * in the foreground. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the foreground access duration in milliseconds. + * + * @see #getLastBackgroundDuration(int) + * @see #getLastDuration(int, int, int) + */ + public long getLastForegroundDuration(@OpFlags int flags) { + return sumForFlagsInStates(mDurations, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); + } + + /** + * Return the duration in milliseconds the app accessed this op while + * in the background. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the background access duration in milliseconds. + * + * @see #getLastForegroundDuration(int) + * @see #getLastDuration(int, int, int) + */ + public long getLastBackgroundDuration(@OpFlags int flags) { + return sumForFlagsInStates(mDurations, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } + /** + * Return the duration in milliseconds the app accessed this op for + * a given range of UID states. + * + * @param fromUidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state for which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return the access duration in milliseconds. + */ + public long getLastDuration(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return sumForFlagsInStates(mDurations, fromUidState, toUidState, flags); + } + + /** + * Gets the UID of the app that performed the op on behalf of this app and + * as a result blamed the op on this app or {@link Process#INVALID_UID} if + * there is no proxy. + * + * @return The proxy UID. + */ public int getProxyUid() { - return mProxyUid; + return (int) findFirstNonNegativeForFlagsInStates(mDurations, + MAX_PRIORITY_UID_STATE, MIN_PRIORITY_UID_STATE, OP_FLAGS_ALL); } - public String getProxyPackageName() { - return mProxyPackageName; + /** + * Gets the UID of the app that performed the op on behalf of this app and + * as a result blamed the op on this app or {@link Process#INVALID_UID} if + * there is no proxy. + * + * @param uidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * + * @return The proxy UID. + */ + public int getProxyUid(@UidState int uidState, @OpFlags int flags) { + return (int) findFirstNonNegativeForFlagsInStates(mDurations, + uidState, uidState, flags); + } + + /** + * Gets the package name of the app that performed the op on behalf of this + * app and as a result blamed the op on this app or {@code null} + * if there is no proxy. + * + * @return The proxy package name. + */ + public @Nullable String getProxyPackageName() { + return findFirstNonNullForFlagsInStates(mProxyPackageNames, MAX_PRIORITY_UID_STATE, + MIN_PRIORITY_UID_STATE, OP_FLAGS_ALL); + } + + /** + * Gets the package name of the app that performed the op on behalf of this + * app and as a result blamed the op on this app for a UID state or + * {@code null} if there is no proxy. + * + * @param uidState The UID state for which to query. Could be one of + * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, + * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, + * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return The proxy package name. + */ + public @Nullable String getProxyPackageName(@UidState int uidState, @OpFlags int flags) { + return findFirstNonNullForFlagsInStates(mProxyPackageNames, uidState, uidState, flags); } @Override @@ -2173,26 +2676,26 @@ public class AppOpsManager { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mOp); dest.writeInt(mMode); - dest.writeLongArray(mTimes); - dest.writeLongArray(mRejectTimes); - dest.writeInt(mDuration); dest.writeBoolean(mRunning); - dest.writeInt(mProxyUid); - dest.writeString(mProxyPackageName); + writeLongSparseLongArrayToParcel(mAccessTimes, dest); + writeLongSparseLongArrayToParcel(mRejectTimes, dest); + writeLongSparseLongArrayToParcel(mDurations, dest); + writeLongSparseLongArrayToParcel(mProxyUids, dest); + writeLongSparseStringArrayToParcel(mProxyPackageNames, dest); } OpEntry(Parcel source) { mOp = source.readInt(); mMode = source.readInt(); - mTimes = source.createLongArray(); - mRejectTimes = source.createLongArray(); - mDuration = source.readInt(); mRunning = source.readBoolean(); - mProxyUid = source.readInt(); - mProxyPackageName = source.readString(); + mAccessTimes = readLongSparseLongArrayFromParcel(source); + mRejectTimes = readLongSparseLongArrayFromParcel(source); + mDurations = readLongSparseLongArrayFromParcel(source); + mProxyUids = readLongSparseLongArrayFromParcel(source); + mProxyPackageNames = readLongSparseStringArrayFromParcel(source); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public OpEntry createFromParcel(Parcel source) { return new OpEntry(source); } @@ -2226,14 +2729,17 @@ public class AppOpsManager { private final @Nullable List mOpNames; private final long mBeginTimeMillis; private final long mEndTimeMillis; + private final @OpFlags int mFlags; private HistoricalOpsRequest(int uid, @Nullable String packageName, - @Nullable List opNames, long beginTimeMillis, long endTimeMillis) { + @Nullable List opNames, long beginTimeMillis, long endTimeMillis, + @OpFlags int flags) { mUid = uid; mPackageName = packageName; mOpNames = opNames; mBeginTimeMillis = beginTimeMillis; mEndTimeMillis = endTimeMillis; + mFlags = flags; } /** @@ -2249,6 +2755,7 @@ public class AppOpsManager { private @Nullable List mOpNames; private final long mBeginTimeMillis; private final long mEndTimeMillis; + private @OpFlags int mFlags = OP_FLAGS_ALL; /** * Creates a new builder. @@ -2310,12 +2817,29 @@ public class AppOpsManager { return this; } + /** + * Sets the op flags to query for. The flags specify the type of + * op data being queried. + * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. + * @return This builder. + */ + public @NonNull Builder setFlags(@OpFlags int flags) { + Preconditions.checkFlagsArgument(flags, OP_FLAGS_ALL); + mFlags = flags; + return this; + } + /** * @return a new {@link HistoricalOpsRequest}. */ public @NonNull HistoricalOpsRequest build() { return new HistoricalOpsRequest(mUid, mPackageName, mOpNames, - mBeginTimeMillis, mEndTimeMillis); + mBeginTimeMillis, mEndTimeMillis, mFlags); } } } @@ -2521,25 +3045,25 @@ public class AppOpsManager { /** @hide */ @TestApi public void increaseAccessCount(int opCode, int uid, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalUidOps(uid).increaseAccessCount(opCode, - packageName, uidState, increment); + packageName, uidState, flags, increment); } /** @hide */ @TestApi public void increaseRejectCount(int opCode, int uid, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalUidOps(uid).increaseRejectCount(opCode, - packageName, uidState, increment); + packageName, uidState, flags, increment); } /** @hide */ @TestApi public void increaseAccessDuration(int opCode, int uid, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalUidOps(uid).increaseAccessDuration(opCode, - packageName, uidState, increment); + packageName, uidState, flags, increment); } /** @hide */ @@ -2725,7 +3249,7 @@ public class AppOpsManager { + mBeginTimeMillis + " to:" + mEndTimeMillis + "]"; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public @NonNull HistoricalOps createFromParcel(@NonNull Parcel parcel) { return new HistoricalOps(parcel); @@ -2834,21 +3358,21 @@ public class AppOpsManager { } private void increaseAccessCount(int opCode, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalPackageOps(packageName).increaseAccessCount( - opCode, uidState, increment); + opCode, uidState, flags, increment); } private void increaseRejectCount(int opCode, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalPackageOps(packageName).increaseRejectCount( - opCode, uidState, increment); + opCode, uidState, flags, increment); } private void increaseAccessDuration(int opCode, @NonNull String packageName, - @UidState int uidState, long increment) { + @UidState int uidState, @OpFlags int flags, long increment) { getOrCreateHistoricalPackageOps(packageName).increaseAccessDuration( - opCode, uidState, increment); + opCode, uidState, flags, increment); } /** @@ -2935,7 +3459,7 @@ public class AppOpsManager { } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public @NonNull HistoricalUidOps createFromParcel(@NonNull Parcel parcel) { return new HistoricalUidOps(parcel); @@ -3070,16 +3594,19 @@ public class AppOpsManager { return true; } - private void increaseAccessCount(int opCode, @UidState int uidState, long increment) { - getOrCreateHistoricalOp(opCode).increaseAccessCount(uidState, increment); + private void increaseAccessCount(int opCode, @UidState int uidState, + @OpFlags int flags, long increment) { + getOrCreateHistoricalOp(opCode).increaseAccessCount(uidState, flags, increment); } - private void increaseRejectCount(int opCode, @UidState int uidState, long increment) { - getOrCreateHistoricalOp(opCode).increaseRejectCount(uidState, increment); + private void increaseRejectCount(int opCode, @UidState int uidState, + @OpFlags int flags, long increment) { + getOrCreateHistoricalOp(opCode).increaseRejectCount(uidState, flags, increment); } - private void increaseAccessDuration(int opCode, @UidState int uidState, long increment) { - getOrCreateHistoricalOp(opCode).increaseAccessDuration(uidState, increment); + private void increaseAccessDuration(int opCode, @UidState int uidState, + @OpFlags int flags, long increment) { + getOrCreateHistoricalOp(opCode).increaseAccessDuration(uidState, flags, increment); } /** @@ -3095,7 +3622,6 @@ public class AppOpsManager { * Gets number historical app ops. * * @return The number historical app ops. - * * @see #getOpAt(int) */ public int getOpCount() { @@ -3109,9 +3635,7 @@ public class AppOpsManager { * Gets the historical op at a given index. * * @param index The index to lookup. - * * @return The op at the given index. - * * @see #getOpCount() */ public @NonNull HistoricalOp getOpAt(int index) { @@ -3125,7 +3649,6 @@ public class AppOpsManager { * Gets the historical entry for a given op name. * * @param opName The op name. - * * @return The historical entry for that op name. */ public @Nullable HistoricalOp getOp(@NonNull String opName) { @@ -3167,7 +3690,7 @@ public class AppOpsManager { return op; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public @NonNull HistoricalPackageOps createFromParcel(@NonNull Parcel parcel) { @@ -3219,39 +3742,33 @@ public class AppOpsManager { @SystemApi public static final class HistoricalOp implements Parcelable { private final int mOp; - private @Nullable long[] mAccessCount; - private @Nullable long[] mRejectCount; - private @Nullable long[] mAccessDuration; + private @Nullable LongSparseLongArray mAccessCount; + private @Nullable LongSparseLongArray mRejectCount; + private @Nullable LongSparseLongArray mAccessDuration; /** @hide */ public HistoricalOp(int op) { mOp = op; - mAccessCount = new long[_NUM_UID_STATE]; - mRejectCount = new long[_NUM_UID_STATE]; - mAccessDuration = new long[_NUM_UID_STATE]; } private HistoricalOp(@NonNull HistoricalOp other) { mOp = other.mOp; if (other.mAccessCount != null) { - System.arraycopy(other.mAccessCount, 0, getOrCreateAccessCount(), - 0, other.mAccessCount.length); + mAccessCount = other.mAccessCount.clone(); } if (other.mRejectCount != null) { - System.arraycopy(other.mRejectCount, 0, getOrCreateRejectCount(), - 0, other.mRejectCount.length); + mRejectCount = other.mRejectCount.clone(); } if (other.mAccessDuration != null) { - System.arraycopy(other.mAccessDuration, 0, getOrCreateAccessDuration(), - 0, other.mAccessDuration.length); + mAccessDuration = other.mAccessDuration.clone(); } } private HistoricalOp(@NonNull Parcel parcel) { mOp = parcel.readInt(); - mAccessCount = parcel.createLongArray(); - mRejectCount = parcel.createLongArray(); - mAccessDuration = parcel.createLongArray(); + mAccessCount = readLongSparseLongArrayFromParcel(parcel); + mRejectCount = readLongSparseLongArrayFromParcel(parcel); + mAccessDuration = readLongSparseLongArrayFromParcel(parcel); } private void filter(double scaleFactor) { @@ -3266,90 +3783,64 @@ public class AppOpsManager { && !hasData(mAccessDuration); } - private boolean hasData(@NonNull long[] array) { - for (long value : array) { - if (value != 0) { - return true; - } - } - return false; + private boolean hasData(@NonNull LongSparseLongArray array) { + return (array != null && array.size() > 0); } private @Nullable HistoricalOp splice(double fractionToRemove) { - HistoricalOp splice = null; - if (mAccessCount != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - final long spliceAccessCount = Math.round( - mAccessCount[i] * fractionToRemove); - if (spliceAccessCount > 0) { - if (splice == null) { - splice = new HistoricalOp(mOp); - } - splice.getOrCreateAccessCount()[i] = spliceAccessCount; - mAccessCount[i] -= spliceAccessCount; - } - } - } - - if (mRejectCount != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - final long spliceRejectCount = Math.round( - mRejectCount[i] * fractionToRemove); - - if (spliceRejectCount > 0) { - if (splice == null) { - splice = new HistoricalOp(mOp); - } - splice.getOrCreateRejectCount()[i] = spliceRejectCount; - mRejectCount[i] -= spliceRejectCount; - } - } - } + final HistoricalOp splice = new HistoricalOp(mOp); + splice(mAccessCount, splice::getOrCreateAccessCount, fractionToRemove); + splice(mRejectCount, splice::getOrCreateRejectCount, fractionToRemove); + splice(mAccessDuration, splice::getOrCreateAccessDuration, fractionToRemove); + return splice; + } - if (mAccessDuration != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - final long spliceAccessDuration = Math.round( - mAccessDuration[i] * fractionToRemove); - if (spliceAccessDuration > 0) { - if (splice == null) { - splice = new HistoricalOp(mOp); - } - splice.getOrCreateAccessDuration()[i] = spliceAccessDuration; - mAccessDuration[i] -= spliceAccessDuration; + private static void splice(@Nullable LongSparseLongArray sourceContainer, + @NonNull Supplier destContainerProvider, + double fractionToRemove) { + if (sourceContainer != null) { + final int size = sourceContainer.size(); + for (int i = 0; i < size; i++) { + final long key = sourceContainer.keyAt(i); + final long value = sourceContainer.valueAt(i); + final long removedFraction = Math.round(value * fractionToRemove); + if (removedFraction > 0) { + destContainerProvider.get().put(key, removedFraction); + sourceContainer.put(key, value - removedFraction); } } } - return splice; } private void merge(@NonNull HistoricalOp other) { - if (other.mAccessCount != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - getOrCreateAccessCount()[i] += other.mAccessCount[i]; - } - } - if (other.mRejectCount != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - getOrCreateRejectCount()[i] += other.mRejectCount[i]; - } - } - if (other.mAccessDuration != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - getOrCreateAccessDuration()[i] += other.mAccessDuration[i]; - } - } + merge(this::getOrCreateAccessCount, other.mAccessCount); + merge(this::getOrCreateRejectCount, other.mRejectCount); + merge(this::getOrCreateAccessDuration, other.mAccessDuration); + } + + private void increaseAccessCount(@UidState int uidState, @OpFlags int flags, + long increment) { + increaseCount(getOrCreateAccessCount(), uidState, flags, increment); } - private void increaseAccessCount(@UidState int uidState, long increment) { - getOrCreateAccessCount()[uidState] += increment; + private void increaseRejectCount(@UidState int uidState, @OpFlags int flags, + long increment) { + increaseCount(getOrCreateRejectCount(), uidState, flags, increment); } - private void increaseRejectCount(@UidState int uidState, long increment) { - getOrCreateRejectCount()[uidState] += increment; + private void increaseAccessDuration(@UidState int uidState, @OpFlags int flags, + long increment) { + increaseCount(getOrCreateAccessDuration(), uidState, flags, increment); } - private void increaseAccessDuration(@UidState int uidState, long increment) { - getOrCreateAccessDuration()[uidState] += increment; + private void increaseCount(@NonNull LongSparseLongArray counts, + @UidState int uidState, @OpFlags int flags, long increment) { + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + final long key = makeKey(uidState, flag); + counts.put(key, counts.get(key) + increment); + } } /** @@ -3369,154 +3860,186 @@ public class AppOpsManager { /** * Gets the number times the op was accessed (performed) in the foreground. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The times the op was accessed in the foreground. * - * @see #getBackgroundAccessCount() - * @see #getAccessCount(int) + * @see #getBackgroundAccessCount(int) + * @see #getAccessCount(int, int, int) */ - public long getForegroundAccessCount() { - if (mAccessCount == null) { - return 0; - } - return sum(mAccessCount, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + public long getForegroundAccessCount(@OpFlags int flags) { + return sumForFlagsInStates(mAccessCount, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); } /** * Gets the number times the op was accessed (performed) in the background. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The times the op was accessed in the background. * - * @see #getForegroundAccessCount() - * @see #getAccessCount(int) + * @see #getForegroundAccessCount(int) + * @see #getAccessCount(int, int, int) */ - public long getBackgroundAccessCount() { - if (mAccessCount == null) { - return 0; - } - return sum(mAccessCount, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + public long getBackgroundAccessCount(@OpFlags int flags) { + return sumForFlagsInStates(mAccessCount, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } /** - * Gets the number times the op was accessed (performed) for a given uid state. + * Gets the number times the op was accessed (performed) for a + * range of uid states. * - * @param uidState The UID state for which to query. Could be one of + * @param fromUidState The UID state from which to query. Could be one of * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, * {@link #UID_STATE_FOREGROUND_SERVICE_LOCATION}, * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state to which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * * @return The times the op was accessed for the given UID state. * - * @see #getForegroundAccessCount() - * @see #getBackgroundAccessCount() + * @see #getForegroundAccessCount(int) + * @see #getBackgroundAccessCount(int) */ - public long getAccessCount(@UidState int uidState) { - if (mAccessCount == null) { - return 0; - } - return mAccessCount[uidState]; + public long getAccessCount(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return sumForFlagsInStates(mAccessCount, fromUidState, toUidState, flags); } /** * Gets the number times the op was rejected in the foreground. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The times the op was rejected in the foreground. * - * @see #getBackgroundRejectCount() - * @see #getRejectCount(int) + * @see #getBackgroundRejectCount(int) + * @see #getRejectCount(int, int, int) */ - public long getForegroundRejectCount() { - if (mRejectCount == null) { - return 0; - } - return sum(mRejectCount, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + public long getForegroundRejectCount(@OpFlags int flags) { + return sumForFlagsInStates(mRejectCount, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); } /** * Gets the number times the op was rejected in the background. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The times the op was rejected in the background. * - * @see #getForegroundRejectCount() - * @see #getRejectCount(int) + * @see #getForegroundRejectCount(int) + * @see #getRejectCount(int, int, int) */ - public long getBackgroundRejectCount() { - if (mRejectCount == null) { - return 0; - } - return sum(mRejectCount, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + public long getBackgroundRejectCount(@OpFlags int flags) { + return sumForFlagsInStates(mRejectCount, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } /** - * Gets the number times the op was rejected for a given uid state. + * Gets the number times the op was rejected for a given range of UID states. * - * @param uidState The UID state for which to query. Could be one of + * @param fromUidState The UID state from which to query. Could be one of * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, * {@link #UID_STATE_FOREGROUND_SERVICE_LOCATION}, * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state to which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * * @return The times the op was rejected for the given UID state. * - * @see #getForegroundRejectCount() - * @see #getBackgroundRejectCount() + * @see #getForegroundRejectCount(int) + * @see #getBackgroundRejectCount(int) */ - public long getRejectCount(@UidState int uidState) { - if (mRejectCount == null) { - return 0; - } - return mRejectCount[uidState]; + public long getRejectCount(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return sumForFlagsInStates(mRejectCount, fromUidState, toUidState, flags); } /** * Gets the total duration the app op was accessed (performed) in the foreground. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The total duration the app op was accessed in the foreground. * - * @see #getBackgroundAccessDuration() - * @see #getAccessDuration(int) + * @see #getBackgroundAccessDuration(int) + * @see #getAccessDuration(int, int, int) */ - public long getForegroundAccessDuration() { - if (mAccessDuration == null) { - return 0; - } - return sum(mAccessDuration, UID_STATE_PERSISTENT, UID_STATE_LAST_NON_RESTRICTED + 1); + public long getForegroundAccessDuration(@OpFlags int flags) { + return sumForFlagsInStates(mAccessDuration, MAX_PRIORITY_UID_STATE, + resolveFirstUnrestrictedUidState(mOp), flags); } /** * Gets the total duration the app op was accessed (performed) in the background. * + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * @return The total duration the app op was accessed in the background. * - * @see #getForegroundAccessDuration() - * @see #getAccessDuration(int) + * @see #getForegroundAccessDuration(int) + * @see #getAccessDuration(int, int, int) */ - public long getBackgroundAccessDuration() { - if (mAccessDuration == null) { - return 0; - } - return sum(mAccessDuration, UID_STATE_LAST_NON_RESTRICTED + 1, _NUM_UID_STATE); + public long getBackgroundAccessDuration(@OpFlags int flags) { + return sumForFlagsInStates(mAccessDuration, resolveLastRestrictedUidState(mOp), + MIN_PRIORITY_UID_STATE, flags); } /** - * Gets the total duration the app op was accessed (performed) for a given UID state. + * Gets the total duration the app op was accessed (performed) for a given + * range of UID states. * - * @param uidState The UID state for which to query. Could be one of + * @param fromUidState The UID state from which to query. Could be one of * {@link #UID_STATE_PERSISTENT}, {@link #UID_STATE_TOP}, * {@link #UID_STATE_FOREGROUND_SERVICE_LOCATION}, * {@link #UID_STATE_FOREGROUND_SERVICE}, {@link #UID_STATE_FOREGROUND}, * {@link #UID_STATE_BACKGROUND}, {@link #UID_STATE_CACHED}. + * @param toUidState The UID state from which to query. + * @param flags The flags which are any combination of + * {@link #OP_FLAG_SELF}, {@link #OP_FLAG_TRUSTED_PROXY}, + * {@link #OP_FLAG_UNTRUSTED_PROXY}, {@link #OP_FLAG_TRUSTED_PROXIED}, + * {@link #OP_FLAG_UNTRUSTED_PROXIED}. You can use {@link #OP_FLAGS_ALL} + * for any flag. * * @return The total duration the app op was accessed for the given UID state. * - * @see #getForegroundAccessDuration() - * @see #getBackgroundAccessDuration() + * @see #getForegroundAccessDuration(int) + * @see #getBackgroundAccessDuration(int) */ - public long getAccessDuration(@UidState int uidState) { - if (mAccessDuration == null) { - return 0; - } - return mAccessDuration[uidState]; + public long getAccessDuration(@UidState int fromUidState, @UidState int toUidState, + @OpFlags int flags) { + return sumForFlagsInStates(mAccessDuration, fromUidState, toUidState, flags); } @Override @@ -3527,69 +4050,113 @@ public class AppOpsManager { @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(mOp); - parcel.writeLongArray(mAccessCount); - parcel.writeLongArray(mRejectCount); - parcel.writeLongArray(mAccessDuration); + writeLongSparseLongArrayToParcel(mAccessCount, parcel); + writeLongSparseLongArrayToParcel(mRejectCount, parcel); + writeLongSparseLongArrayToParcel(mAccessDuration, parcel); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + final HistoricalOp other = (HistoricalOp) obj; + if (mOp != other.mOp) { + return false; + } + if (!Objects.equals(mAccessCount, other.mAccessCount)) { + return false; + } + if (!Objects.equals(mRejectCount, other.mRejectCount)) { + return false; + } + return Objects.equals(mAccessDuration, other.mAccessDuration); + } + + @Override + public int hashCode() { + int result = mOp; + result = 31 * result + Objects.hashCode(mAccessCount); + result = 31 * result + Objects.hashCode(mRejectCount); + result = 31 * result + Objects.hashCode(mAccessDuration); + return result; } private void accept(@NonNull HistoricalOpsVisitor visitor) { visitor.visitHistoricalOp(this); } - private @NonNull long[] getOrCreateAccessCount() { + private @NonNull LongSparseLongArray getOrCreateAccessCount() { if (mAccessCount == null) { - mAccessCount = new long[_NUM_UID_STATE]; + mAccessCount = new LongSparseLongArray(); } return mAccessCount; } - private @NonNull long[] getOrCreateRejectCount() { + private @NonNull LongSparseLongArray getOrCreateRejectCount() { if (mRejectCount == null) { - mRejectCount = new long[_NUM_UID_STATE]; + mRejectCount = new LongSparseLongArray(); } return mRejectCount; } - private @NonNull long[] getOrCreateAccessDuration() { + private @NonNull LongSparseLongArray getOrCreateAccessDuration() { if (mAccessDuration == null) { - mAccessDuration = new long[_NUM_UID_STATE]; + mAccessDuration = new LongSparseLongArray(); } return mAccessDuration; } /** + * Multiplies the entries in the array with the passed in scale factor and + * rounds the result at up 0.5 boundary. * - * Computes the sum given the start and end index. - * - * @param counts The data array. - * @param start The start index (inclusive) - * @param end The end index (exclusive) - * @return The sum. + * @param data The data to scale. + * @param scaleFactor The scale factor. */ - private static long sum(@NonNull long[] counts, int start, int end) { - long totalCount = 0; - for (int i = start; i < end; i++) { - totalCount += counts[i]; + private static void scale(@NonNull LongSparseLongArray data, double scaleFactor) { + if (data != null) { + final int size = data.size(); + for (int i = 0; i < size; i++) { + data.put(data.keyAt(i), (long) HistoricalOps.round( + (double) data.valueAt(i) * scaleFactor)); + } } - return totalCount; } /** - * Multiplies the entries in the array with the passed in scale factor and - * rounds the result at up 0.5 boundary. + * Merges two arrays while lazily acquiring the destination. * - * @param data The data to scale. - * @param scaleFactor The scale factor. + * @param thisSupplier The destination supplier. + * @param other The array to merge in. */ - private static void scale(@NonNull long[] data, double scaleFactor) { - if (data != null) { - for (int i = 0; i < _NUM_UID_STATE; i++) { - data[i] = (long) HistoricalOps.round((double) data[i] * scaleFactor); + private static void merge(@NonNull Supplier thisSupplier, + @Nullable LongSparseLongArray other) { + if (other != null) { + final int otherSize = other.size(); + for (int i = 0; i < otherSize; i++) { + final LongSparseLongArray that = thisSupplier.get(); + final long otherKey = other.keyAt(i); + final long otherValue = other.valueAt(i); + that.put(otherKey, that.get(otherKey) + otherValue); } } } - public static final Creator CREATOR = new Creator() { + /** @hide */ + public @Nullable LongSparseArray collectKeys() { + LongSparseArray result = AppOpsManager.collectKeys(mAccessCount, + null /*result*/); + result = AppOpsManager.collectKeys(mRejectCount, result); + result = AppOpsManager.collectKeys(mAccessDuration, result); + return result; + } + + public static final @android.annotation.NonNull Creator CREATOR = + new Creator() { @Override public @NonNull HistoricalOp createFromParcel(@NonNull Parcel source) { return new HistoricalOp(source); @@ -3600,36 +4167,101 @@ public class AppOpsManager { return new HistoricalOp[size]; } }; + } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final HistoricalOp other = (HistoricalOp) obj; - if (mOp != other.mOp) { - return false; - } - if (!Arrays.equals(mAccessCount, other.mAccessCount)) { - return false; + /** + * Computes the sum of the counts for the given flags in between the begin and + * end UID states. + * + * @param counts The data array. + * @param beginUidState The beginning UID state (exclusive). + * @param endUidState The end UID state. + * @param flags The UID flags. + * @return The sum. + */ + private static long sumForFlagsInStates(@Nullable LongSparseLongArray counts, + @UidState int beginUidState, @UidState int endUidState, @OpFlags int flags) { + if (counts == null) { + return 0; + } + long sum = 0; + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + for (int uidState : UID_STATES) { + if (uidState < beginUidState || uidState > endUidState) { + continue; + } + final long key = makeKey(uidState, flag); + sum += counts.get(key); } - if (!Arrays.equals(mRejectCount, other.mRejectCount)) { - return false; + } + return sum; + } + + /** + * Finds the first non-negative value for the given flags in between the begin and + * end UID states. + * + * @param counts The data array. + * @param flags The UID flags. + * @param beginUidState The beginning UID state (exclusive). + * @param endUidState The end UID state. + * @return The non-negative value or -1. + */ + private static long findFirstNonNegativeForFlagsInStates(@Nullable LongSparseLongArray counts, + @OpFlags int flags, @UidState int beginUidState, @UidState int endUidState) { + if (counts == null) { + return -1; + } + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + for (int uidState : UID_STATES) { + if (uidState < beginUidState || uidState > endUidState) { + continue; + } + final long key = makeKey(uidState, flag); + final long value = counts.get(key); + if (value >= 0) { + return value; + } } - return Arrays.equals(mAccessDuration, other.mAccessDuration); } + return -1; + } - @Override - public int hashCode() { - int result = mOp; - result = 31 * result + Arrays.hashCode(mAccessCount); - result = 31 * result + Arrays.hashCode(mRejectCount); - result = 31 * result + Arrays.hashCode(mAccessDuration); - return result; + /** + * Finds the first non-null value for the given flags in between the begin and + * end UID states. + * + * @param counts The data array. + * @param flags The UID flags. + * @param beginUidState The beginning UID state (exclusive). + * @param endUidState The end UID state. + * @return The non-negative value or -1. + */ + private static @Nullable String findFirstNonNullForFlagsInStates( + @Nullable LongSparseArray counts, @OpFlags int flags, + @UidState int beginUidState, @UidState int endUidState) { + if (counts == null) { + return null; } + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + for (int uidState : UID_STATES) { + if (uidState < beginUidState || uidState > endUidState) { + continue; + } + final long key = makeKey(uidState, flag); + final String value = counts.get(key); + if (value != null) { + return value; + } + } + } + return null; } /** @@ -3800,7 +4432,7 @@ public class AppOpsManager { Preconditions.checkNotNull(callback, "callback cannot be null"); try { mService.getHistoricalOps(request.mUid, request.mPackageName, request.mOpNames, - request.mBeginTimeMillis, request.mEndTimeMillis, + request.mBeginTimeMillis, request.mEndTimeMillis, request.mFlags, new RemoteCallback((result) -> { final HistoricalOps ops = result.getParcelable(KEY_HISTORICAL_OPS); final long identity = Binder.clearCallingIdentity(); @@ -3840,7 +4472,7 @@ public class AppOpsManager { try { mService.getHistoricalOpsFromDiskRaw(request.mUid, request.mPackageName, request.mOpNames, request.mBeginTimeMillis, request.mEndTimeMillis, - new RemoteCallback((result) -> { + request.mFlags, new RemoteCallback((result) -> { final HistoricalOps ops = result.getParcelable(KEY_HISTORICAL_OPS); final long identity = Binder.clearCallingIdentity(); try { @@ -4310,7 +4942,20 @@ public class AppOpsManager { * Like {@link #checkOp} but returns the raw mode associated with the op. * Does not throw a security exception, does not translate {@link #MODE_FOREGROUND}. */ - public int unsafeCheckOpRaw(String op, int uid, String packageName) { + public int unsafeCheckOpRaw(@NonNull String op, int uid, String packageName) { + try { + return mService.checkOperationRaw(strOpToOp(op), uid, packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Like {@link #unsafeCheckOpNoThrow(String, int, String)} but returns the raw + * mode associated with the op. Does not throw a security exception, does not translate + * {@link #MODE_FOREGROUND}. + */ + public int unsafeCheckOpRawNoThrow(@NonNull String op, int uid, @NonNull String packageName) { try { return mService.checkOperationRaw(strOpToOp(op), uid, packageName); } catch (RemoteException e) { @@ -4375,8 +5020,7 @@ public class AppOpsManager { } /** - * Like {@link #noteProxyOp(String, String)} but instead - * of throwing a {@link SecurityException} it returns {@link #MODE_ERRORED}. + * Like {@link #noteProxyOpNoThrow(String, String)} but allows to specify the proxied uid. * *

This API requires package with the {@code proxiedPackageName} to belong to * {@code proxiedUid}. @@ -4385,10 +5029,7 @@ public class AppOpsManager { * @param proxiedPackageName The package to note the op for or {@code null} if the op should be * noted for the "android" package * @param proxiedUid The uid the package belongs to - * - * @hide */ - @SystemApi public int noteProxyOpNoThrow(@NonNull String op, @Nullable String proxiedPackageName, int proxiedUid) { return noteProxyOpNoThrow(strOpToOp(op), proxiedPackageName, proxiedUid); @@ -4903,16 +5544,110 @@ public class AppOpsManager { } /** - * @hide + * Computes the max for the given flags in between the begin and + * end UID states. + * + * @param counts The data array. + * @param flags The UID flags. + * @param beginUidState The beginning UID state (exclusive). + * @param endUidState The end UID state. + * @return The sum. + */ + private static long maxForFlagsInStates(@Nullable LongSparseLongArray counts, + @UidState int beginUidState, @UidState int endUidState, + @OpFlags int flags) { + if (counts == null) { + return 0; + } + long max = 0; + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + for (int uidState : UID_STATES) { + if (uidState < beginUidState || uidState > endUidState) { + continue; + } + final long key = makeKey(uidState, flag); + max = Math.max(max, counts.get(key)); + } + } + return max; + } + + + private static void writeLongSparseLongArrayToParcel( + @Nullable LongSparseLongArray array, @NonNull Parcel parcel) { + if (array != null) { + final int size = array.size(); + parcel.writeInt(size); + for (int i = 0; i < size; i++) { + parcel.writeLong(array.keyAt(i)); + parcel.writeLong(array.valueAt(i)); + } + } else { + parcel.writeInt(-1); + } + } + + private static @Nullable LongSparseLongArray readLongSparseLongArrayFromParcel( + @NonNull Parcel parcel) { + final int size = parcel.readInt(); + if (size < 0) { + return null; + } + final LongSparseLongArray array = new LongSparseLongArray(size); + for (int i = 0; i < size; i++) { + array.append(parcel.readLong(), parcel.readLong()); + } + return array; + } + + private static void writeLongSparseStringArrayToParcel( + @Nullable LongSparseArray array, @NonNull Parcel parcel) { + if (array != null) { + final int size = array.size(); + parcel.writeInt(size); + for (int i = 0; i < size; i++) { + parcel.writeLong(array.keyAt(i)); + parcel.writeString(array.valueAt(i)); + } + } else { + parcel.writeInt(-1); + } + } + + private static @Nullable LongSparseArray readLongSparseStringArrayFromParcel( + @NonNull Parcel parcel) { + final int size = parcel.readInt(); + if (size < 0) { + return null; + } + final LongSparseArray array = new LongSparseArray<>(size); + for (int i = 0; i < size; i++) { + array.append(parcel.readLong(), parcel.readString()); + } + return array; + } + + /** + * Collects the keys from an array to the result creating the result if needed. + * + * @param array The array whose keys to collect. + * @param result The optional result store collected keys. + * @return The result collected keys array. */ - public static long maxTime(long[] times, int start, int end) { - long time = 0; - for (int i = start; i < end; i++) { - if (times[i] > time) { - time = times[i]; + private static LongSparseArray collectKeys(@Nullable LongSparseLongArray array, + @Nullable LongSparseArray result) { + if (array != null) { + if (result == null) { + result = new LongSparseArray<>(); + } + final int accessSize = array.size(); + for (int i = 0; i < accessSize; i++) { + result.put(array.keyAt(i), null); } } - return time; + return result; } /** @hide */ diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java index 8874554f928c25349232cf9cc436e8d4e6f05dc0..a0b3dc0452acdb33ba34e2bfbf7891bcb5487948 100644 --- a/core/java/android/app/ApplicationErrorReport.java +++ b/core/java/android/app/ApplicationErrorReport.java @@ -492,7 +492,7 @@ public class ApplicationErrorReport implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ParcelableCrashInfo createFromParcel(Parcel in) { @@ -666,7 +666,7 @@ public class ApplicationErrorReport implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ApplicationErrorReport createFromParcel(Parcel source) { return new ApplicationErrorReport(source); diff --git a/core/java/android/app/AuthenticationRequiredException.java b/core/java/android/app/AuthenticationRequiredException.java index 04e5e0a8f874427d13402029505d90c95d56a3a0..0d8733688afa0714a3f9d7ffe052798360a5c94a 100644 --- a/core/java/android/app/AuthenticationRequiredException.java +++ b/core/java/android/app/AuthenticationRequiredException.java @@ -81,7 +81,7 @@ public final class AuthenticationRequiredException extends SecurityException imp mUserAction.writeToParcel(dest, flags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public AuthenticationRequiredException createFromParcel(Parcel source) { diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java index fe23e21651fae8d5dbce39fb6d87d5de625107dc..010a900b9d96a9295cbacc7a3a02a0fe52e9c487 100644 --- a/core/java/android/app/AutomaticZenRule.java +++ b/core/java/android/app/AutomaticZenRule.java @@ -16,18 +16,15 @@ package android.app; -import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; - +import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.NotificationManager.InterruptionFilter; import android.content.ComponentName; -import android.content.Intent; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; -import android.service.notification.ZenPolicy; import android.service.notification.Condition; - -import com.android.internal.util.Preconditions; +import android.service.notification.ZenPolicy; import java.util.Objects; @@ -92,8 +89,9 @@ public final class AutomaticZenRule implements Parcelable { * action ({@link Condition#STATE_TRUE}). * @param enabled Whether the rule is enabled. */ - public AutomaticZenRule(String name, ComponentName owner, ComponentName configurationActivity, - Uri conditionId, ZenPolicy policy, int interruptionFilter, boolean enabled) { + public AutomaticZenRule(@NonNull String name, @Nullable ComponentName owner, + @Nullable ComponentName configurationActivity, @NonNull Uri conditionId, + @Nullable ZenPolicy policy, int interruptionFilter, boolean enabled) { this.name = name; this.owner = owner; this.configurationActivity = configurationActivity; @@ -304,7 +302,7 @@ public final class AutomaticZenRule implements Parcelable { configurationActivity, mZenPolicy, mModified, creationTime); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AutomaticZenRule createFromParcel(Parcel source) { diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java index 46e6defbb41aece59bf4eecde172cb6fa04a6d7f..351e7379a36c10132f9daa6fac3c96ec152321ed 100644 --- a/core/java/android/app/BackStackRecord.java +++ b/core/java/android/app/BackStackRecord.java @@ -155,7 +155,7 @@ final class BackStackState implements Parcelable { dest.writeInt(mReorderingAllowed ? 1 : 0); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BackStackState createFromParcel(Parcel in) { return new BackStackState(in); diff --git a/core/java/android/app/ContentProviderHolder.java b/core/java/android/app/ContentProviderHolder.java index 2a13c7198b3fdcbf30213eca3ecf363f90ff6d49..004dca1a708f3477107cfcdccb778b92d4338016 100644 --- a/core/java/android/app/ContentProviderHolder.java +++ b/core/java/android/app/ContentProviderHolder.java @@ -61,7 +61,7 @@ public class ContentProviderHolder implements Parcelable { dest.writeInt(noReleaseNeeded ? 1 : 0); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ContentProviderHolder createFromParcel(Parcel source) { diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index fde1d29eb709c6f0bc04f49c56e1faa9d2734463..e20c4901ea0d9b162277a22f7f9bd276b0700649 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -21,6 +21,7 @@ import android.annotation.SdkConstant; 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 class DownloadManager { */ 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/FragmentManager.java b/core/java/android/app/FragmentManager.java index 5e7921b6cc6f0d4b190eecb5752e4517df951bd0..68daf44b19a5e89131612aaa34dd64b79aa3eb5b 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -623,7 +623,7 @@ final class FragmentManagerState implements Parcelable { dest.writeInt(mNextFragmentIndex); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public FragmentManagerState createFromParcel(Parcel in) { return new FragmentManagerState(in); diff --git a/core/java/android/app/FragmentState.java b/core/java/android/app/FragmentState.java index a61da3bbe1062d8e1ca6db74ceef9c521e1e40d9..a66f069026d3990462c43bdbdac8c7b3c7813b4f 100644 --- a/core/java/android/app/FragmentState.java +++ b/core/java/android/app/FragmentState.java @@ -122,7 +122,7 @@ final class FragmentState implements Parcelable { dest.writeBundle(mSavedFragmentState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public FragmentState createFromParcel(Parcel in) { diff --git a/core/java/android/app/GrantedUriPermission.java b/core/java/android/app/GrantedUriPermission.java index 9e84fe13472f3ced3a3839afa697552ddd69a47c..48d5b8cc126ba1f54ce40aa86da6629859e78fca 100644 --- a/core/java/android/app/GrantedUriPermission.java +++ b/core/java/android/app/GrantedUriPermission.java @@ -54,7 +54,7 @@ public class GrantedUriPermission implements Parcelable { out.writeString(packageName); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public GrantedUriPermission createFromParcel(Parcel in) { diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl index b01cd0e411c7eb6bd06e0555c93ec95003c38486..b16188f1a0e3f6cd7b3234d06ef079a65ca8fbf2 100644 --- a/core/java/android/app/IActivityTaskManager.aidl +++ b/core/java/android/app/IActivityTaskManager.aidl @@ -129,6 +129,7 @@ interface IActivityTaskManager { 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/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl index 8615f00facd9b5d5c508f4cb05f0db6b27332fea..8c85ad134e53fd00b05921cd9186e0b478fe7992 100644 --- a/core/java/android/app/ITaskStackListener.aidl +++ b/core/java/android/app/ITaskStackListener.aidl @@ -80,6 +80,16 @@ oneway interface ITaskStackListener { void onActivityLaunchOnSecondaryDisplayFailed(in ActivityManager.RunningTaskInfo taskInfo, int requestedDisplayId); + /** + * Called when an activity was requested to be launched on a secondary display but was rerouted + * to default display. + * + * @param taskInfo info about the Activity's task + * @param requestedDisplayId the id of the requested launch display + */ + void onActivityLaunchOnSecondaryDisplayRerouted(in ActivityManager.RunningTaskInfo taskInfo, + int requestedDisplayId); + /** * Called when a task is added. * diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index dd32e08fcd5adbfa867d09bc4e113f17c2ae66d9..f211af95c44aa0cda67809fb4a3476b64f2b29d1 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -52,6 +52,7 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.ViewConfiguration; import android.view.Window; +import android.view.WindowManagerGlobal; import com.android.internal.content.ReferrerIntent; @@ -1103,8 +1104,11 @@ public class Instrumentation { 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/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 17f645dfbf23c3de1f76dbfeaa08cbdeffd3951d..3ecb5870416f29648d57b2d9c30fb56a6699a909 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -125,7 +125,7 @@ public class KeyguardManager { public static final int RESULT_ALTERNATE = 1; /** - * @deprecated see {@link BiometricPrompt.Builder#setAllowDeviceCredential(boolean)} + * @deprecated see {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} * * Get an intent to prompt the user to confirm credentials (pin, pattern, password or biometrics * if enrolled) for the current user of the device. The caller is expected to launch this diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 2e7093db92f085316b6dba21a33a2e8451d7d1a2..f690f5d4a88ea5e18cfd41766923639dc1744bfc 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -1629,6 +1629,7 @@ public class Notification implements Parcelable * * @see Notification.Action#extras */ + @NonNull public Builder addExtras(Bundle extras) { if (extras != null) { mExtras.putAll(extras); @@ -1652,6 +1653,7 @@ public class Notification implements Parcelable * @param remoteInput a {@link RemoteInput} to add to the action * @return this object for method chaining */ + @NonNull public Builder addRemoteInput(RemoteInput remoteInput) { if (mRemoteInputs == null) { mRemoteInputs = new ArrayList(); @@ -1669,6 +1671,7 @@ public class Notification implements Parcelable * @return this object for method chaining * The default value is {@code true} */ + @NonNull public Builder setAllowGeneratedReplies(boolean allowGeneratedReplies) { mAllowGeneratedReplies = allowGeneratedReplies; return this; @@ -1682,6 +1685,7 @@ public class Notification implements Parcelable * {@code SEMANTIC_ACTION_} prefixes * @return this object for method chaining */ + @NonNull public Builder setSemanticAction(@SemanticAction int semanticAction) { mSemanticAction = semanticAction; return this; @@ -1692,6 +1696,7 @@ public class Notification implements Parcelable * dependent on the notification message body. An example of a contextual action could * be an action opening a map application with an address shown in the notification. */ + @NonNull public Builder setContextual(boolean isContextual) { mIsContextual = isContextual; return this; @@ -1701,6 +1706,7 @@ public class Notification implements Parcelable * Apply an extender to this action 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; @@ -1728,6 +1734,7 @@ public class Notification implements Parcelable * object. * @return the built action */ + @NonNull public Action build() { checkContextualActionNullFields(); @@ -1802,7 +1809,7 @@ public class Notification implements Parcelable out.writeInt(mIsContextual ? 1 : 0); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Action createFromParcel(Parcel in) { return new Action(in); @@ -2731,7 +2738,7 @@ public class Notification implements Parcelable /** * Parcelable.Creator that instantiates Notification objects */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Notification createFromParcel(Parcel parcel) @@ -3471,6 +3478,7 @@ public class Notification implements Parcelable * @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 +3492,7 @@ public class Notification implements Parcelable * * 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 +3508,7 @@ public class Notification implements Parcelable * *

The default value is {@link #GROUP_ALERT_ALL}.

*/ + @NonNull public Builder setGroupAlertBehavior(@GroupAlertBehavior int groupAlertBehavior) { mN.mGroupAlertBehavior = groupAlertBehavior; return this; @@ -3515,6 +3525,7 @@ public class Notification implements Parcelable * outside of the notification shade on unlocked devices. When a user interacts with the * collapsed state, the bubble intent will be invoked and displayed. */ + @NonNull public Builder setBubbleMetadata(BubbleMetadata data) { mN.mBubbleMetadata = data; return this; @@ -3530,6 +3541,7 @@ public class Notification implements Parcelable /** * Specifies the channel the notification should be delivered on. */ + @NonNull public Builder setChannelId(String channelId) { mN.mChannelId = channelId; return this; @@ -3546,6 +3558,7 @@ public class Notification implements Parcelable * 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 +3573,7 @@ public class Notification implements Parcelable * * @see Notification#when */ + @NonNull public Builder setWhen(long when) { mN.when = when; return this; @@ -3571,6 +3585,7 @@ public class Notification implements Parcelable * 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 +3606,7 @@ public class Notification implements Parcelable * @see Notification#when * @see #setChronometerCountDown(boolean) */ + @NonNull public Builder setUsesChronometer(boolean b) { mN.extras.putBoolean(EXTRA_SHOW_CHRONOMETER, b); return this; @@ -3604,6 +3620,7 @@ public class Notification implements Parcelable * * @see #setUsesChronometer(boolean) */ + @NonNull public Builder setChronometerCountDown(boolean countDown) { mN.extras.putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN, countDown); return this; @@ -3623,6 +3640,7 @@ public class Notification implements Parcelable * 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 +3658,7 @@ public class Notification implements Parcelable * @see Notification#icon * @see Notification#iconLevel */ + @NonNull public Builder setSmallIcon(@DrawableRes int icon, int level) { mN.iconLevel = level; return setSmallIcon(icon); @@ -3653,6 +3672,7 @@ public class Notification implements Parcelable * @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 +3684,7 @@ public class Notification implements Parcelable /** * 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 +3693,7 @@ public class Notification implements Parcelable /** * 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 +3717,7 @@ public class Notification implements Parcelable * same time on those versions; they occupy the same place. *

*/ + @NonNull public Builder setSubText(CharSequence text) { mN.extras.putCharSequence(EXTRA_SUB_TEXT, safeCharSequence(text)); return this; @@ -3713,6 +3736,7 @@ public class Notification implements Parcelable * @param text * @return */ + @NonNull public Builder setSettingsText(CharSequence text) { mN.mSettingsText = safeCharSequence(text); return this; @@ -3732,6 +3756,7 @@ public class Notification implements Parcelable *

Note: The reply text will only be shown on notifications that have least one action * with a {@code RemoteInput}.

*/ + @NonNull public Builder setRemoteInputHistory(CharSequence[] text) { if (text == null) { mN.extras.putCharSequenceArray(EXTRA_REMOTE_INPUT_HISTORY, null); @@ -3750,6 +3775,7 @@ public class Notification implements Parcelable * 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 +3785,7 @@ public class Notification implements Parcelable * 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 +3795,7 @@ public class Notification implements Parcelable * 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 +3822,7 @@ public class Notification implements Parcelable * * 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 +3846,7 @@ public class Notification implements Parcelable * 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 +3858,7 @@ public class Notification implements Parcelable * 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 +3870,7 @@ public class Notification implements Parcelable * 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 +3887,7 @@ public class Notification implements Parcelable * * @see Notification#contentIntent Notification.contentIntent */ + @NonNull public Builder setContentIntent(PendingIntent intent) { mN.contentIntent = intent; return this; @@ -3865,6 +3898,7 @@ public class Notification implements Parcelable * * @see Notification#deleteIntent */ + @NonNull public Builder setDeleteIntent(PendingIntent intent) { mN.deleteIntent = intent; return this; @@ -3893,6 +3927,7 @@ public class Notification implements Parcelable * * @see Notification#fullScreenIntent */ + @NonNull public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) { mN.fullScreenIntent = intent; setFlag(FLAG_HIGH_PRIORITY, highPriority); @@ -3904,6 +3939,7 @@ public class Notification implements Parcelable * * @see Notification#tickerText */ + @NonNull public Builder setTicker(CharSequence tickerText) { mN.tickerText = safeCharSequence(tickerText); return this; @@ -3927,6 +3963,7 @@ public class Notification implements Parcelable * 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 +3975,7 @@ public class Notification implements Parcelable * 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 +4083,7 @@ public class Notification implements Parcelable * @see Notification#FLAG_ONGOING_EVENT */ + @NonNull public Builder setOngoing(boolean ongoing) { setFlag(FLAG_ONGOING_EVENT, ongoing); return this; @@ -4065,6 +4104,7 @@ public class Notification implements Parcelable * @see #setColor(int) * @see MediaStyle#setMediaSession(MediaSession.Token) */ + @NonNull public Builder setColorized(boolean colorize) { mN.extras.putBoolean(EXTRA_COLORIZED, colorize); return this; @@ -4076,6 +4116,7 @@ public class Notification implements Parcelable * * @see Notification#FLAG_ONLY_ALERT_ONCE */ + @NonNull public Builder setOnlyAlertOnce(boolean onlyAlertOnce) { setFlag(FLAG_ONLY_ALERT_ONCE, onlyAlertOnce); return this; @@ -4086,6 +4127,7 @@ public class Notification implements Parcelable * * @see Notification#FLAG_AUTO_CANCEL */ + @NonNull public Builder setAutoCancel(boolean autoCancel) { setFlag(FLAG_AUTO_CANCEL, autoCancel); return this; @@ -4097,6 +4139,7 @@ public class Notification implements Parcelable *

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 +4181,7 @@ public class Notification implements Parcelable * * @see Notification#category */ + @NonNull public Builder setCategory(String category) { mN.category = category; return this; @@ -4195,6 +4239,7 @@ public class Notification implements Parcelable * @param person the person to add. * @see Notification#EXTRA_PEOPLE_LIST */ + @NonNull public Builder addPerson(Person person) { mPersonList.add(person); return this; @@ -4211,6 +4256,7 @@ public class Notification implements Parcelable * @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 +4270,7 @@ public class Notification implements Parcelable * @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 +4288,7 @@ public class Notification implements Parcelable * * @see String#compareTo(String) */ + @NonNull public Builder setSortKey(String sortKey) { mN.mSortKey = sortKey; return this; @@ -4253,6 +4301,7 @@ public class Notification implements Parcelable * * @see Notification#extras */ + @NonNull public Builder addExtras(Bundle extras) { if (extras != null) { mUserExtras.putAll(extras); @@ -4272,6 +4321,7 @@ public class Notification implements Parcelable * * @see Notification#extras */ + @NonNull public Builder setExtras(Bundle extras) { if (extras != null) { mUserExtras = extras; @@ -4339,6 +4389,7 @@ public class Notification implements Parcelable * * @param action The action to add. */ + @NonNull public Builder addAction(Action action) { if (action != null) { mActions.add(action); @@ -4353,6 +4404,7 @@ public class Notification implements Parcelable * @param actions * @return */ + @NonNull public Builder setActions(Action... actions) { mActions.clear(); for (int i = 0; i < actions.length; i++) { @@ -4368,6 +4420,7 @@ public class Notification implements Parcelable * * @param style Object responsible for modifying the notification style. */ + @NonNull public Builder setStyle(Style style) { if (mStyle != style) { mStyle = style; @@ -4393,6 +4446,7 @@ public class Notification implements Parcelable * * @return The same Builder. */ + @NonNull public Builder setVisibility(@Visibility int visibility) { mN.visibility = visibility; return this; @@ -4404,6 +4458,7 @@ public class Notification implements Parcelable * @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 +4473,7 @@ public class Notification implements Parcelable * 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 +4482,7 @@ public class Notification implements Parcelable /** * @hide */ + @NonNull public Builder setFlag(int mask, boolean value) { if (value) { mN.flags |= mask; @@ -4442,6 +4499,7 @@ public class Notification implements Parcelable * * @return The same Builder. */ + @NonNull public Builder setColor(@ColorInt int argb) { mN.color = argb; sanitizeColor(); @@ -5674,6 +5732,7 @@ public class Notification implements Parcelable * 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 +5753,7 @@ public class Notification implements Parcelable * @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 +5778,7 @@ public class Notification implements Parcelable * 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 +5796,7 @@ public class Notification implements Parcelable * 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 +5855,8 @@ public class Notification implements Parcelable * * @hide */ - public Notification buildInto(Notification n) { + @NonNull + public Notification buildInto(@NonNull Notification n) { build().cloneInto(n, true); return n; } @@ -8511,7 +8574,7 @@ public class Notification implements Parcelable return (mFlags & FLAG_SUPPRESS_INITIAL_NOTIFICATION) != 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java index cfe27c75258112fd036ff666134acd03275d0da8..5cdf85a6ca13271d059f7e1aaab59f6a78e6a8ad 100644 --- a/core/java/android/app/NotificationChannel.java +++ b/core/java/android/app/NotificationChannel.java @@ -942,7 +942,7 @@ public final class NotificationChannel implements Parcelable { return sb.toString(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public NotificationChannel createFromParcel(Parcel in) { return new NotificationChannel(in); diff --git a/core/java/android/app/NotificationChannelGroup.java b/core/java/android/app/NotificationChannelGroup.java index 34cd9f029746413581aa97ee986ddaa6c307e819..a8ee414cac0ae8289731cb68ab8d0f93c2018f74 100644 --- a/core/java/android/app/NotificationChannelGroup.java +++ b/core/java/android/app/NotificationChannelGroup.java @@ -272,7 +272,7 @@ public final class NotificationChannelGroup implements Parcelable { return record; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public NotificationChannelGroup createFromParcel(Parcel in) { diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 8207e0a112c54e4934a7197a3ad6f6b28a403294..6ad6e3842de460d72ad5d77c4586dc67e906b139 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -465,7 +465,7 @@ public class NotificationManager { * show the user. Must not be null. */ public void notifyAsPackage(@NonNull String targetPackage, @NonNull String tag, int id, - Notification notification) { + @NonNull Notification notification) { INotificationManager service = getService(); String sender = mContext.getPackageName(); @@ -638,7 +638,7 @@ public class NotificationManager { * * See {@link #setNotificationDelegate(String)}. */ - public boolean canNotifyAsPackage(String pkg) { + public boolean canNotifyAsPackage(@NonNull String pkg) { INotificationManager service = getService(); try { return service.canNotifyAsPackage(mContext.getPackageName(), pkg); @@ -1008,7 +1008,7 @@ public class NotificationManager { * @param id The id of the rule whose state should change * @param condition The new state of this rule */ - public void setAutomaticZenRuleState(String id, Condition condition) { + public void setAutomaticZenRuleState(@NonNull String id, @NonNull Condition condition) { INotificationManager service = getService(); try { service.setAutomaticZenRuleState(id, condition); @@ -1169,7 +1169,7 @@ public class NotificationManager { * TODO: STOPSHIP: Add correct intent * {@link android.provider.Settings#ACTION_MANAGE_DEFAULT_APPS_SETTINGS}. */ - public boolean isNotificationAssistantAccessGranted(ComponentName assistant) { + public boolean isNotificationAssistantAccessGranted(@NonNull ComponentName assistant) { INotificationManager service = getService(); try { return service.isNotificationAssistantAccessGranted(assistant); @@ -1842,7 +1842,7 @@ public class NotificationManager { } } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Policy createFromParcel(Parcel in) { return new Policy(in); diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index 55014ebf1fcb18450048a1a188ed412a7ae565c6..6f7a0607cbdb94a69917d297959ef4b95a025aa0 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -1208,7 +1208,7 @@ public final class PendingIntent implements Parcelable { } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PendingIntent createFromParcel(Parcel in) { IBinder target = in.readStrongBinder(); diff --git a/core/java/android/app/Person.java b/core/java/android/app/Person.java index 0abc99821c1e591b47149b4ba4a37f907de6e2cc..14a5589c04c2150c15fd96df2202d4652f358292 100644 --- a/core/java/android/app/Person.java +++ b/core/java/android/app/Person.java @@ -278,7 +278,7 @@ public final class Person implements Parcelable { } } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Person createFromParcel(Parcel in) { return new Person(in); diff --git a/core/java/android/app/PictureInPictureArgs.java b/core/java/android/app/PictureInPictureArgs.java index adcc495461934e699306d59830cf2431bba7008a..3ee51739e45597314561bc6aaa43908c3894a450 100644 --- a/core/java/android/app/PictureInPictureArgs.java +++ b/core/java/android/app/PictureInPictureArgs.java @@ -346,7 +346,7 @@ public final class PictureInPictureArgs implements Parcelable { } } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public PictureInPictureArgs createFromParcel(Parcel in) { return new PictureInPictureArgs(in); diff --git a/core/java/android/app/PictureInPictureParams.java b/core/java/android/app/PictureInPictureParams.java index edaae75eba534e57ffc784935c868af7286e9566..bfd966c575a9e1ef019b62c35fa86c93a332eb0a 100644 --- a/core/java/android/app/PictureInPictureParams.java +++ b/core/java/android/app/PictureInPictureParams.java @@ -275,7 +275,7 @@ public final class PictureInPictureParams implements Parcelable { } } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public PictureInPictureParams createFromParcel(Parcel in) { return new PictureInPictureParams(in); diff --git a/core/java/android/app/ProcessMemoryHighWaterMark.java b/core/java/android/app/ProcessMemoryHighWaterMark.java index 5fea8ef92bd255e2518fe39c6f1fa606fb088a09..d1cae94f02b4fe318d196c23a4111198df602a0e 100644 --- a/core/java/android/app/ProcessMemoryHighWaterMark.java +++ b/core/java/android/app/ProcessMemoryHighWaterMark.java @@ -40,7 +40,7 @@ public final class ProcessMemoryHighWaterMark implements Parcelable { rssHighWaterMarkInBytes = in.readLong(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ProcessMemoryHighWaterMark createFromParcel(Parcel in) { diff --git a/core/java/android/app/ProcessMemoryState.java b/core/java/android/app/ProcessMemoryState.java index 95d5d193c29ad7f4dc0ed052b28bd9796c9b3743..e28d79c2565ba36e5b2c4f4d6030aeeeb901fc53 100644 --- a/core/java/android/app/ProcessMemoryState.java +++ b/core/java/android/app/ProcessMemoryState.java @@ -60,7 +60,7 @@ public final class ProcessMemoryState implements Parcelable { startTimeNanos = in.readLong(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ProcessMemoryState createFromParcel(Parcel in) { return new ProcessMemoryState(in); diff --git a/core/java/android/app/ProfilerInfo.java b/core/java/android/app/ProfilerInfo.java index 6fbe9c6efb40a105e342563289678f692cccf5ee..25589f8e42cb2a67053ff3a5dda3ef2eb2e38329 100644 --- a/core/java/android/app/ProfilerInfo.java +++ b/core/java/android/app/ProfilerInfo.java @@ -148,7 +148,7 @@ public class ProfilerInfo implements Parcelable { proto.end(token); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ProfilerInfo createFromParcel(Parcel in) { diff --git a/core/java/android/app/RecoverableSecurityException.java b/core/java/android/app/RecoverableSecurityException.java index 7cc3dab5866cdb38c53a69510b948fcdc3c87394..21fb2a6927aac828f420485e7855eb6c297e3c98 100644 --- a/core/java/android/app/RecoverableSecurityException.java +++ b/core/java/android/app/RecoverableSecurityException.java @@ -190,7 +190,7 @@ public final class RecoverableSecurityException extends SecurityException implem mUserAction.writeToParcel(dest, flags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public RecoverableSecurityException createFromParcel(Parcel source) { diff --git a/core/java/android/app/RemoteAction.java b/core/java/android/app/RemoteAction.java index c1746655da5e8b0c24b3020c212368eeb298b91d..1b13772488e63d539f096e080a379e09e7eed10b 100644 --- a/core/java/android/app/RemoteAction.java +++ b/core/java/android/app/RemoteAction.java @@ -152,7 +152,7 @@ public final class RemoteAction implements Parcelable { pw.println(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RemoteAction createFromParcel(Parcel in) { return new RemoteAction(in); diff --git a/core/java/android/app/RemoteInput.java b/core/java/android/app/RemoteInput.java index 392921e813f9dbbffc726d83ea3d32b8ee0e13d0..36c524b57fe416b4cefc2c09c67f8aca6fbbb1da 100644 --- a/core/java/android/app/RemoteInput.java +++ b/core/java/android/app/RemoteInput.java @@ -561,7 +561,7 @@ public final class RemoteInput implements Parcelable { out.writeArraySet(mAllowedDataTypes); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public RemoteInput createFromParcel(Parcel in) { return new RemoteInput(in); diff --git a/core/java/android/app/ResultInfo.java b/core/java/android/app/ResultInfo.java index d916c94ab6c5cae8767415fc0c25e19c28c8dbc9..9ee0f3126432d48aec77d22e3d297cffa56c7d67 100644 --- a/core/java/android/app/ResultInfo.java +++ b/core/java/android/app/ResultInfo.java @@ -67,7 +67,7 @@ public class ResultInfo implements Parcelable { } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ResultInfo createFromParcel(Parcel in) { return new ResultInfo(in); diff --git a/core/java/android/app/SearchableInfo.java b/core/java/android/app/SearchableInfo.java index ae6d32ac6a40ab161a27e39c1af8bba85c3982b3..a01cec7aa944f115cbb3a8cf9297c192979fb798 100644 --- a/core/java/android/app/SearchableInfo.java +++ b/core/java/android/app/SearchableInfo.java @@ -800,7 +800,7 @@ public final class SearchableInfo implements Parcelable { /** * Support for parcelable and aidl operations. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SearchableInfo createFromParcel(Parcel in) { return new SearchableInfo(in); diff --git a/core/java/android/app/ServiceStartArgs.java b/core/java/android/app/ServiceStartArgs.java index f030cbaaecafdebcd4b1a217918e048ba145c778..0b000af564001f5370a4a01b5e2ac9d9fa41890c 100644 --- a/core/java/android/app/ServiceStartArgs.java +++ b/core/java/android/app/ServiceStartArgs.java @@ -58,7 +58,7 @@ public class ServiceStartArgs implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ServiceStartArgs createFromParcel(Parcel in) { return new ServiceStartArgs(in); diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 077652cacc2d7718e95583a01a75a1cacc62b801..9ff363dddc3c323306670c97be631b62cbe7e5b4 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 @@ public class StatusBarManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean disabled) { try { final int userId = Binder.getCallingUserHandle().getIdentifier(); @@ -387,6 +390,8 @@ public class StatusBarManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.STATUS_BAR) + @NonNull public DisableInfo getDisableInfo() { try { final int userId = Binder.getCallingUserHandle().getIdentifier(); @@ -518,7 +523,7 @@ public class StatusBarManager { * @hide */ @SystemApi - public boolean areNoComponentsDisabled() { + public boolean areAllComponentsEnabled() { return !mStatusBarExpansion && !mNavigateHome && !mNotificationPeeking && !mRecents && !mSearch; } diff --git a/core/java/android/app/TEST_MAPPING b/core/java/android/app/TEST_MAPPING index 65859c76a42aacc4993fe1fb469bb8b946c0a434..14c58e744dacde89601707449becd95ac02ca15b 100644 --- a/core/java/android/app/TEST_MAPPING +++ b/core/java/android/app/TEST_MAPPING @@ -1,18 +1,31 @@ { - "imports": [ - { - "path": "frameworks/base/services/core/java/com/android/server/am" - }, - { - "path": "frameworks/base/services/core/java/com/android/server/wm" - } - ], - "presubmit": [ - { - "name": "CtsFragmentTestCases" - }, - { - "name": "CtsFragmentTestCasesSdk26" - } - ] + "imports": [ + { + "path": "frameworks/base/services/core/java/com/android/server/am" + }, + { + "path": "frameworks/base/services/core/java/com/android/server/wm" + } + ], + "presubmit": [ + { + "name": "CtsFragmentTestCases" + }, + { + "name": "CtsFragmentTestCasesSdk26" + }, + { + "file_patterns": ["(/|^)AppOpsManager.java"], + "name": "CtsAppOpsTestCases" + }, + { + "file_patterns": ["(/|^)AppOpsManager.java"], + "name": "FrameworksServicesTests", + "options": [ + { + "include-filter": "com.android.server.appop" + } + ] + } + ] } diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java index fcc76ac8bc405865db95d0d967cbc503f5d7e572..47ad6d73743056de4592bd9b7142acc5a51d38a5 100644 --- a/core/java/android/app/TaskStackListener.java +++ b/core/java/android/app/TaskStackListener.java @@ -84,6 +84,12 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub { public void onActivityLaunchOnSecondaryDisplayFailed() throws RemoteException { } + @Override + @UnsupportedAppUsage + public void onActivityLaunchOnSecondaryDisplayRerouted(ActivityManager.RunningTaskInfo taskInfo, + int requestedDisplayId) throws RemoteException { + } + @Override public void onTaskCreated(int taskId, ComponentName componentName) throws RemoteException { } diff --git a/core/java/android/app/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java index 823c4271adf2df8fd9d87660c535b242c4759b63..36ba78b80eb9a38a5c6bc193653e20c5446b624a 100644 --- a/core/java/android/app/VoiceInteractor.java +++ b/core/java/android/app/VoiceInteractor.java @@ -500,7 +500,7 @@ public final class VoiceInteractor { dest.writeBundle(mExtras); } - public static final Parcelable.Creator

    *
  • PIN with no repeating (4444) or ordered (1234, 4321, 2468) sequences, length at - * least 4 + * least 8 *
  • alphabetic, length at least 6 *
  • alphanumeric, length at least 6 *
@@ -3154,7 +3153,7 @@ public class DevicePolicyManager { * {@link #PASSWORD_QUALITY_ALPHANUMERIC} with {@link #setPasswordQuality}. *

* On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the - * password is always treated as empty. + * password history length is always 0. *

* The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD} to be able to call this method; if it has @@ -3192,6 +3191,9 @@ public class DevicePolicyManager { *

* To disable password expiration, a value of 0 may be used for timeout. *

+ * On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password expiration is always disabled. + *

* The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_EXPIRE_PASSWORD} to be able to call this method; if it has * not, a security exception will be thrown. @@ -3231,6 +3233,9 @@ public class DevicePolicyManager { * returned by {@link #getParentProfileInstance(ComponentName)} in order to retrieve * restrictions on the parent profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password expiration is always disabled and this method always returns 0. + * * @param admin The name of the admin component to check, or {@code null} to aggregate all admins. * @return The timeout for the given admin or the minimum of all timeouts */ @@ -3256,6 +3261,9 @@ public class DevicePolicyManager { * returned by {@link #getParentProfileInstance(ComponentName)} in order to retrieve * the password expiration for the parent profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password expiration is always disabled and this method always returns 0. + * * @param admin The name of the admin component to check, or {@code null} to aggregate all admins. * @return The password expiration time, in milliseconds since epoch. */ @@ -3280,6 +3288,9 @@ public class DevicePolicyManager { * returned by {@link #getParentProfileInstance(ComponentName)} in order to retrieve * restrictions on the parent profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password history length is always 0. + * * @param admin The name of the admin component to check, or {@code null} to aggregate * all admins. * @return The length of the password history @@ -3307,7 +3318,7 @@ public class DevicePolicyManager { * Return the maximum password length that the device supports for a * particular password quality. *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the - * password is always empty. + * password is always empty and this method always returns 0. * @param quality The quality being interrogated. * @return Returns the maximum length that the user can enter. */ @@ -3363,7 +3374,7 @@ public class DevicePolicyManager { * #getParentProfileInstance}. * *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the - * password is always treated as empty. + * password is always empty and this method returns {@link #PASSWORD_COMPLEXITY_NONE}. * * @throws IllegalStateException if the user is not unlocked. * @throws SecurityException if the calling application does not have the permission @@ -3438,6 +3449,8 @@ public class DevicePolicyManager { *

* The calling device admin must have requested {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN} * to be able to call this method; if it has not, a security exception will be thrown. + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password is always empty and this method always returns 0. * * @return The number of times user has entered an incorrect password since the last correct * password entry. @@ -3504,6 +3517,8 @@ public class DevicePolicyManager { * This method can be called on the {@link DevicePolicyManager} instance returned by * {@link #getParentProfileInstance(ComponentName)} in order to set a value on the parent * profile. + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password is always empty and this method has no effect - i.e. the policy is not set. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param num The number of failed password attempts at which point the device or profile will @@ -3533,6 +3548,10 @@ public class DevicePolicyManager { * returned by {@link #getParentProfileInstance(ComponentName)} in order to retrieve * the value for the parent profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * password is always empty and this method returns a default value (0) indicating that the + * policy is not set. + * * @param admin The name of the admin component to check, or {@code null} to aggregate * all admins. */ @@ -3620,6 +3639,8 @@ public class DevicePolicyManager { * {@link android.os.Build.VERSION_CODES#N} and later for managed profiles, or for device admins * that are not device owner or profile owner. Once set, the password cannot be changed to null * or empty except by these admins. + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, this + * methods does nothing. *

* The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD} to be able to call this method; if it has @@ -3670,6 +3691,8 @@ public class DevicePolicyManager { * will be stored on your server and who will need access to them. Tokens may be the subject of * legal access requests. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, the + * reset token is not set and this method returns false. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param token a secure token a least 32-byte long, which must be generated by a @@ -3694,6 +3717,10 @@ public class DevicePolicyManager { /** * Called by a profile or device owner to revoke the current password reset token. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, this + * method has no effect - the reset token should not have been set in the first place - and + * false is returned. + * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @return true if the operation is successful, false otherwise. * @throws SecurityException if admin is not a device or profile owner. @@ -3714,6 +3741,9 @@ public class DevicePolicyManager { /** * Called by a profile or device owner to check if the current reset password token is active. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, + * false is always returned. + * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @return true if the token is active, false otherwise. * @throws SecurityException if admin is not a device or profile owner. @@ -3749,6 +3779,8 @@ public class DevicePolicyManager { *

* Calling with a {@code null} or empty password will clear any existing PIN, pattern or * password if the current password constraints allow it. + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, + * calling this methods has no effect - the password is always empty - and false is returned. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param password The new password for the user. {@code null} or empty clears the password. @@ -3856,6 +3888,9 @@ public class DevicePolicyManager { * {@link #getParentProfileInstance(ComponentName)} in order to set restrictions on the parent * profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, + * calling this methods has no effect - i.e. the timeout is not set. + * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param timeoutMs The new timeout in milliseconds, after which the user will have to unlock * with strong authentication method. A value of 0 means the admin is not participating @@ -3888,6 +3923,9 @@ public class DevicePolicyManager { * returned by {@link #getParentProfileInstance(ComponentName)} in order to retrieve * restrictions on the parent profile. * + *

On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, + * 0 is returned to indicate that no timeout is configured. + * * @param admin The name of the admin component to check, or {@code null} to aggregate * across all participating admins. * @return The timeout in milliseconds or 0 if not configured for the provided admin. @@ -6618,6 +6656,9 @@ public class DevicePolicyManager { * This method can be called on the {@link DevicePolicyManager} instance returned by * {@link #getParentProfileInstance(ComponentName)} in order to set the configuration for * the parent profile. + *

+ * On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, calling + * this method has no effect - no trust agent configuration will be set. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param target Component name of the agent to be configured. @@ -6647,6 +6688,9 @@ public class DevicePolicyManager { * This method can be called on the {@link DevicePolicyManager} instance returned by * {@link #getParentProfileInstance(ComponentName)} in order to retrieve the configuration set * on the parent profile. + *

+ * On devices not supporting {@link PackageManager#FEATURE_SECURE_LOCK_SCREEN} feature, null is + * always returned. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. If null, * this function returns a list of configurations for all admins that declare @@ -10588,18 +10632,18 @@ public class DevicePolicyManager { } /** - * Whitelists a set of packages that are allowed to access cross-profile calendar APIs. + * Allows a set of packages to access cross-profile calendar APIs. * *

Called by a profile owner of a managed profile. * - *

Calling with a null value for the set disables the restriction so that all packages - * are allowed to access cross-profile calendar APIs. Calling with an empty set disallows - * all packages from accessing cross-profile calendar APIs. If this method isn't called, - * no package will be allowed to access cross-profile calendar APIs by default. + *

Calling with a {@code null} value for the set disables the restriction so that all + * packages are allowed to access cross-profile calendar APIs. Calling with an empty set + * disallows all packages from accessing cross-profile calendar APIs. If this method isn't + * called, no package is allowed to access cross-profile calendar APIs by default. * - * @param admin which {@link DeviceAdminReceiver} this request is associated with. - * @param packageNames set of packages to be whitelisted. - * @throws SecurityException if {@code admin} is not a profile owner. + * @param admin which {@link DeviceAdminReceiver} this request is associated with + * @param packageNames set of packages to be whitelisted + * @throws SecurityException if {@code admin} is not a profile owner * * @see #getCrossProfileCalendarPackages(ComponentName) */ @@ -10617,15 +10661,15 @@ public class DevicePolicyManager { } /** - * Gets a set of package names that are whitelisted to access cross-profile calendar APIs. + * Gets a set of package names that are allowed to access cross-profile calendar APIs. * *

Called by a profile owner of a managed profile. * - * @param admin which {@link DeviceAdminReceiver} this request is associated with. - * @return the set of names of packages that were previously whitelisted via + * @param admin which {@link DeviceAdminReceiver} this request is associated with + * @return the set of names of packages that were previously allowed via * {@link #setCrossProfileCalendarPackages(ComponentName, Set)}, or an - * empty set if none have been whitelisted. - * @throws SecurityException if {@code admin} is not a profile owner. + * empty set if none have been allowed + * @throws SecurityException if {@code admin} is not a profile owner * * @see #setCrossProfileCalendarPackages(ComponentName, Set) */ @@ -10655,8 +10699,8 @@ public class DevicePolicyManager { * that user, and get a {@link DevicePolicyManager} from this context. * * @param packageName the name of the package - * @return {@code true} if the package is allowed to access cross-profile calendar APIs. - * {@code false} otherwise. + * @return {@code true} if the package is allowed to access cross-profile calendar APIs, + * {@code false} otherwise * * @see #setCrossProfileCalendarPackages(ComponentName, Set) * @see #getCrossProfileCalendarPackages(ComponentName) @@ -10676,15 +10720,15 @@ public class DevicePolicyManager { } /** - * Gets a set of package names that are whitelisted to access cross-profile calendar APIs. + * Gets a set of package names that are allowed to access cross-profile calendar APIs. * *

To query for a specific user, use * {@link Context#createPackageContextAsUser(String, int, UserHandle)} to create a context for * that user, and get a {@link DevicePolicyManager} from this context. * - * @return the set of names of packages that were previously whitelisted via + * @return the set of names of packages that were previously allowed via * {@link #setCrossProfileCalendarPackages(ComponentName, Set)}, or an - * empty set if none have been whitelisted. + * empty set if none have been allowed * * @see #setCrossProfileCalendarPackages(ComponentName, Set) * @see #getCrossProfileCalendarPackages(ComponentName) @@ -10776,12 +10820,12 @@ public class DevicePolicyManager { /** * Starts an activity to view calendar events in the managed profile. * - * @param eventId the id of the event to be viewed. - * @param start the start time of the event. - * @param end the end time of the event. - * @param allDay if the event is an all-day event. + * @param eventId the id of the event to be viewed + * @param start the start time of the event + * @param end the end time of the event + * @param allDay if the event is an all-day event * @param flags flags to be set for the intent - * @return {@code true} if the activity is started successfully. {@code false} otherwise. + * @return {@code true} if the activity is started successfully, {@code false} otherwise * * @see CalendarContract#startViewCalendarEventInManagedProfile(Context, String, long, long, * long, boolean, int) diff --git a/core/java/android/app/admin/DnsEvent.java b/core/java/android/app/admin/DnsEvent.java index a2d704b8664971c854c91b1e03836337b60f6d2f..aade93407a0f4f0bdf59910b59215b52f20ef2e4 100644 --- a/core/java/android/app/admin/DnsEvent.java +++ b/core/java/android/app/admin/DnsEvent.java @@ -101,7 +101,7 @@ public final class DnsEvent extends NetworkEvent implements Parcelable { mIpAddressesCount, mTimestamp, mPackageName); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public DnsEvent createFromParcel(Parcel in) { diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 9478a3c83d23063a4fa68a410f83f88164094696..3c389e4aa38c80a4e8a0370ef8a330b9884b6d1a 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -124,6 +124,7 @@ interface IDevicePolicyManager { void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing, int userHandle); boolean isAdminActive(in ComponentName policyReceiver, int userHandle); List getActiveAdmins(int userHandle); + @UnsupportedAppUsage boolean packageHasActiveAdmins(String packageName, int userHandle); void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result, int userHandle); void removeActiveAdmin(in ComponentName policyReceiver, int userHandle); diff --git a/core/java/android/app/admin/NetworkEvent.java b/core/java/android/app/admin/NetworkEvent.java index 947e4fedbb795545857eb43eb234780f73f18e5e..c00ec83d6191074e2dfbc548b9ac7c8cb300ed40 100644 --- a/core/java/android/app/admin/NetworkEvent.java +++ b/core/java/android/app/admin/NetworkEvent.java @@ -85,7 +85,7 @@ public abstract class NetworkEvent implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public NetworkEvent createFromParcel(Parcel in) { final int initialPosition = in.dataPosition(); diff --git a/core/java/android/app/admin/PasswordMetrics.java b/core/java/android/app/admin/PasswordMetrics.java index a6bf5012d9e5efced4d6199bccc6f4325dfc10c7..d71d3553db7e3c195e420efaefe2f3df248f6e40 100644 --- a/core/java/android/app/admin/PasswordMetrics.java +++ b/core/java/android/app/admin/PasswordMetrics.java @@ -210,7 +210,7 @@ public class PasswordMetrics implements Parcelable { dest.writeInt(nonLetter); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PasswordMetrics createFromParcel(Parcel in) { return new PasswordMetrics(in); diff --git a/core/java/android/app/admin/SecurityLog.java b/core/java/android/app/admin/SecurityLog.java index 170c8027cee316864140ed2accfac0b24b4d7bd8..638657342066336f1481bdc06b2d6022f79686d5 100644 --- a/core/java/android/app/admin/SecurityLog.java +++ b/core/java/android/app/admin/SecurityLog.java @@ -602,7 +602,7 @@ public class SecurityLog { dest.writeByteArray(mEvent.getBytes()); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SecurityEvent createFromParcel(Parcel source) { diff --git a/core/java/android/app/admin/SystemUpdateInfo.java b/core/java/android/app/admin/SystemUpdateInfo.java index b0376b503fd90b4f18cadf05c6313c825bab9fef..4019290c883b8cf28561283aa2ccda7a59774ddd 100644 --- a/core/java/android/app/admin/SystemUpdateInfo.java +++ b/core/java/android/app/admin/SystemUpdateInfo.java @@ -111,7 +111,7 @@ public final class SystemUpdateInfo implements Parcelable { return mSecurityPatchState; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SystemUpdateInfo createFromParcel(Parcel in) { diff --git a/core/java/android/app/admin/SystemUpdatePolicy.java b/core/java/android/app/admin/SystemUpdatePolicy.java index dd7284540fefd8e5b87d1eb669d3723736987249..2ba2c0425b2f13adb9b1bc278fe01ef31f7a4fa4 100644 --- a/core/java/android/app/admin/SystemUpdatePolicy.java +++ b/core/java/android/app/admin/SystemUpdatePolicy.java @@ -280,7 +280,7 @@ public final class SystemUpdatePolicy implements Parcelable { dest.writeString(getMessage()); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ValidationFailedException createFromParcel(Parcel source) { @@ -710,7 +710,7 @@ public final class SystemUpdatePolicy implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/app/assist/AssistContent.java b/core/java/android/app/assist/AssistContent.java index ff7e181ba3580f712cc69508ddc1a9e4f8842e0f..db6ae4f2260aa3b56610073054b567410296fae9 100644 --- a/core/java/android/app/assist/AssistContent.java +++ b/core/java/android/app/assist/AssistContent.java @@ -216,7 +216,7 @@ public class AssistContent implements Parcelable { writeToParcelInternal(dest, flags); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AssistContent createFromParcel(Parcel in) { return new AssistContent(in); diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 2b1e7cd9a26eb3810e1372c6bbe2a10dd654aa78..ed3a2967519e55ebab8ad91f54e9a4c651657740 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -2074,7 +2074,7 @@ public class AssistStructure implements Parcelable { } @SuppressWarnings("hiding") - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public HtmlInfoNode createFromParcel(Parcel parcel) { // Always go through the builder to ensure the data ingested by @@ -2430,7 +2430,7 @@ public class AssistStructure implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AssistStructure createFromParcel(Parcel in) { diff --git a/core/java/android/app/backup/BackupProgress.java b/core/java/android/app/backup/BackupProgress.java index 32e62126a6db75d68a5a641d551164a7902a2904..56f69fbe4a3087fd3a7dcee8aa4380b08a63ce97 100644 --- a/core/java/android/app/backup/BackupProgress.java +++ b/core/java/android/app/backup/BackupProgress.java @@ -52,7 +52,7 @@ public class BackupProgress implements Parcelable { out.writeLong(bytesTransferred); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public BackupProgress createFromParcel(Parcel in) { return new BackupProgress(in); } diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl index 8386c72e340644a41e49c89eb32fe48657530a8b..70ecdae92652d747c87818f1dc33c3e5f5ea1a95 100644 --- a/core/java/android/app/backup/IBackupManager.aidl +++ b/core/java/android/app/backup/IBackupManager.aidl @@ -54,6 +54,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.dataChangedForUser} for the calling user id. */ + @UnsupportedAppUsage void dataChanged(String packageName); /** @@ -73,6 +74,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.clearBackupDataForUser} for the calling user id. */ + @UnsupportedAppUsage void clearBackupData(String transportName, String packageName); /** @@ -155,6 +157,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.setBackupEnabledForUser} for the calling user id. */ + @UnsupportedAppUsage void setBackupEnabled(boolean isEnabled); /** @@ -178,6 +181,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.setAutoRestoreForUser} for the calling user id. */ + @UnsupportedAppUsage void setAutoRestore(boolean doAutoRestore); /** @@ -194,6 +198,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.isBackupEnabledForUser} for the calling user id. */ + @UnsupportedAppUsage boolean isBackupEnabled(); /** @@ -322,6 +327,7 @@ interface IBackupManager { * {@link android.app.backup.IBackupManager.acknowledgeFullBackupOrRestoreForUser} for the * calling user id. */ + @UnsupportedAppUsage void acknowledgeFullBackupOrRestore(int token, boolean allow, in String curPassword, in String encryptionPassword, IFullBackupRestoreObserver observer); @@ -371,6 +377,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.getCurrentTransportForUser} for the calling user id. */ + @UnsupportedAppUsage String getCurrentTransport(); /** @@ -397,6 +404,7 @@ interface IBackupManager { /** * {@link android.app.backup.IBackupManager.listAllTransportsForUser} for the calling user id. */ + @UnsupportedAppUsage String[] listAllTransports(); /** @@ -434,6 +442,7 @@ interface IBackupManager { * {@link android.app.backup.IBackupManager.selectBackupTransportForUser} for the calling user * id. */ + @UnsupportedAppUsage String selectBackupTransport(String transport); /** @@ -590,6 +599,7 @@ interface IBackupManager { * @param whichUser User handle of the defined user whose backup active state * is being queried. */ + @UnsupportedAppUsage boolean isBackupServiceActive(int whichUser); /** diff --git a/core/java/android/app/backup/RestoreDescription.java b/core/java/android/app/backup/RestoreDescription.java index 0250326e42f273acc47f73b01a4a30635c74ac41..7854394bb02e33dd37ddcac1472f07bb2e71b55c 100644 --- a/core/java/android/app/backup/RestoreDescription.java +++ b/core/java/android/app/backup/RestoreDescription.java @@ -89,7 +89,7 @@ public class RestoreDescription implements Parcelable { out.writeInt(mDataType); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RestoreDescription createFromParcel(Parcel in) { final RestoreDescription unparceled = new RestoreDescription(in); diff --git a/core/java/android/app/backup/RestoreSet.java b/core/java/android/app/backup/RestoreSet.java index 4a6316c587151c10d3486337042bcd0cd79f15a4..675934629f2da484d7122efe179ba5d926b97022 100644 --- a/core/java/android/app/backup/RestoreSet.java +++ b/core/java/android/app/backup/RestoreSet.java @@ -69,7 +69,7 @@ public class RestoreSet implements Parcelable { out.writeLong(token); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RestoreSet createFromParcel(Parcel in) { return new RestoreSet(in); diff --git a/core/java/android/app/contentsuggestions/ClassificationsRequest.java b/core/java/android/app/contentsuggestions/ClassificationsRequest.java index 9bb39e5991352a4ea1f2355802fb959cf2c802e8..2051a55e1c2f6e8a2e438352cd31e44abc782b6d 100644 --- a/core/java/android/app/contentsuggestions/ClassificationsRequest.java +++ b/core/java/android/app/contentsuggestions/ClassificationsRequest.java @@ -54,10 +54,10 @@ public final class ClassificationsRequest implements Parcelable { } /** - * Return the request extras or {@code null} if there are none. + * Return the request extras, can be an empty bundle. */ - public @Nullable Bundle getExtras() { - return mExtras; + public @NonNull Bundle getExtras() { + return mExtras == null ? new Bundle() : mExtras; } @Override @@ -71,7 +71,7 @@ public final class ClassificationsRequest implements Parcelable { dest.writeBundle(mExtras); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ClassificationsRequest createFromParcel(Parcel source) { @@ -103,7 +103,7 @@ public final class ClassificationsRequest implements Parcelable { /** * Sets the request extras. */ - public Builder setExtras(@NonNull Bundle extras) { + public @NonNull Builder setExtras(@NonNull Bundle extras) { mExtras = extras; return this; } @@ -111,7 +111,7 @@ public final class ClassificationsRequest implements Parcelable { /** * Builds a new request instance. */ - public ClassificationsRequest build() { + public @NonNull ClassificationsRequest build() { return new ClassificationsRequest(mSelections, mExtras); } } diff --git a/core/java/android/app/contentsuggestions/ContentClassification.java b/core/java/android/app/contentsuggestions/ContentClassification.java index 2a00b406f81435021a0c19413fbcbf81521ab488..2317e4a807f663b9b1f74e17bc88f477145141f9 100644 --- a/core/java/android/app/contentsuggestions/ContentClassification.java +++ b/core/java/android/app/contentsuggestions/ContentClassification.java @@ -71,7 +71,7 @@ public final class ContentClassification implements Parcelable { dest.writeBundle(mExtras); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ContentClassification createFromParcel(Parcel source) { diff --git a/core/java/android/app/contentsuggestions/ContentSelection.java b/core/java/android/app/contentsuggestions/ContentSelection.java index 16b4f3f6456d64803eb9e1b21e601154dd7c74ec..4c83f595829c16dfd725e8b432d0080045c8121f 100644 --- a/core/java/android/app/contentsuggestions/ContentSelection.java +++ b/core/java/android/app/contentsuggestions/ContentSelection.java @@ -71,7 +71,7 @@ public final class ContentSelection implements Parcelable { dest.writeBundle(mExtras); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ContentSelection createFromParcel(Parcel source) { diff --git a/core/java/android/app/contentsuggestions/SelectionsRequest.java b/core/java/android/app/contentsuggestions/SelectionsRequest.java index e3c8bc5c7e9ebbefe0844eec40fdd98a7df85166..84f33b55289365e541d07c7bb66da31810fccb67 100644 --- a/core/java/android/app/contentsuggestions/SelectionsRequest.java +++ b/core/java/android/app/contentsuggestions/SelectionsRequest.java @@ -63,10 +63,10 @@ public final class SelectionsRequest implements Parcelable { } /** - * Return the request extras or {@code null} if there aren't any. + * Return the request extras, may be an empty bundle if there aren't any. */ - public @Nullable Bundle getExtras() { - return mExtras; + public @NonNull Bundle getExtras() { + return mExtras == null ? new Bundle() : mExtras; } @Override @@ -81,7 +81,7 @@ public final class SelectionsRequest implements Parcelable { dest.writeBundle(mExtras); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SelectionsRequest createFromParcel(Parcel source) { @@ -118,7 +118,7 @@ public final class SelectionsRequest implements Parcelable { /** * Sets the request extras. */ - public Builder setExtras(@NonNull Bundle extras) { + public @NonNull Builder setExtras(@NonNull Bundle extras) { mExtras = extras; return this; } @@ -126,7 +126,7 @@ public final class SelectionsRequest implements Parcelable { /** * Sets the request interest point. */ - public Builder setInterestPoint(@NonNull Point interestPoint) { + public @NonNull Builder setInterestPoint(@NonNull Point interestPoint) { mInterestPoint = interestPoint; return this; } @@ -134,7 +134,7 @@ public final class SelectionsRequest implements Parcelable { /** * Builds a new request instance. */ - public SelectionsRequest build() { + public @NonNull SelectionsRequest build() { return new SelectionsRequest(mTaskId, mInterestPoint, mExtras); } } diff --git a/core/java/android/app/job/IJobCallback.aidl b/core/java/android/app/job/IJobCallback.aidl index e7695e2e747fd3ca5e161cc81994dadc8b8d45f4..d281da037fdeeb4ed0d75515a85747a57269c4ef 100644 --- a/core/java/android/app/job/IJobCallback.aidl +++ b/core/java/android/app/job/IJobCallback.aidl @@ -36,6 +36,7 @@ interface IJobCallback { * @param ongoing True to indicate that the client is processing the job. False if the job is * complete */ + @UnsupportedAppUsage void acknowledgeStartMessage(int jobId, boolean ongoing); /** * Immediate callback to the system after sending a stop signal, used to quickly detect ANR. @@ -43,14 +44,17 @@ interface IJobCallback { * @param jobId Unique integer used to identify this job. * @param reschedule Whether or not to reschedule this job. */ + @UnsupportedAppUsage void acknowledgeStopMessage(int jobId, boolean reschedule); /* * Called to deqeue next work item for the job. */ + @UnsupportedAppUsage JobWorkItem dequeueWork(int jobId); /* * Called to report that job has completed processing a work item. */ + @UnsupportedAppUsage boolean completeWork(int jobId, int workId); /* * Tell the job manager that the client is done with its execution, so that it can go on to @@ -59,5 +63,6 @@ interface IJobCallback { * @param jobId Unique integer used to identify this job. * @param reschedule Whether or not to reschedule this job. */ + @UnsupportedAppUsage void jobFinished(int jobId, boolean reschedule); } diff --git a/core/java/android/app/job/IJobService.aidl b/core/java/android/app/job/IJobService.aidl index 7f55d29e87edad35609b2324cedc93670ef288f9..22ad252b963942fe7056276605935b039ab808f9 100644 --- a/core/java/android/app/job/IJobService.aidl +++ b/core/java/android/app/job/IJobService.aidl @@ -26,7 +26,9 @@ import android.app.job.JobParameters; */ oneway interface IJobService { /** Begin execution of application's job. */ + @UnsupportedAppUsage void startJob(in JobParameters jobParams); /** Stop execution of application's job. */ + @UnsupportedAppUsage void stopJob(in JobParameters jobParams); } diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index e7fe161230361671b119afe7a65bf7b0ecf2d0bb..907d1f727bd452d925b61b722c2e00f75315173f 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -870,7 +870,7 @@ public class JobInfo implements Parcelable { out.writeInt(this.flags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public JobInfo createFromParcel(Parcel in) { return new JobInfo(in); @@ -963,7 +963,7 @@ public class JobInfo implements Parcelable { out.writeInt(mFlags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public TriggerContentUri createFromParcel(Parcel in) { return new TriggerContentUri(in); diff --git a/core/java/android/app/job/JobParameters.java b/core/java/android/app/job/JobParameters.java index 3cc56ae4b7e66b1913b7b593587ccf9351096367..dadfe3d3746a04dc48ebf1e55b810afcbacc4f12 100644 --- a/core/java/android/app/job/JobParameters.java +++ b/core/java/android/app/job/JobParameters.java @@ -344,7 +344,7 @@ public class JobParameters implements Parcelable { dest.writeString(debugStopReason); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public JobParameters createFromParcel(Parcel in) { return new JobParameters(in); diff --git a/core/java/android/app/job/JobSnapshot.java b/core/java/android/app/job/JobSnapshot.java index ceeaab7c5e6e57008a020b53868a4aedbbf622b1..2c58908a6064dd751b66ff7e9b77ba8e17ad2104 100644 --- a/core/java/android/app/job/JobSnapshot.java +++ b/core/java/android/app/job/JobSnapshot.java @@ -105,7 +105,7 @@ public class JobSnapshot implements Parcelable { out.writeBoolean(mIsRunnable); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public JobSnapshot createFromParcel(Parcel in) { return new JobSnapshot(in); diff --git a/core/java/android/app/job/JobWorkItem.java b/core/java/android/app/job/JobWorkItem.java index f804681cb3e9087f0326367abc59fc0ac80a06cc..a055ab48c76623806e333ae962885a80e4833742 100644 --- a/core/java/android/app/job/JobWorkItem.java +++ b/core/java/android/app/job/JobWorkItem.java @@ -214,7 +214,7 @@ final public class JobWorkItem implements Parcelable { out.writeInt(mWorkId); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public JobWorkItem createFromParcel(Parcel in) { return new JobWorkItem(in); diff --git a/core/java/android/app/prediction/AppPredictionContext.java b/core/java/android/app/prediction/AppPredictionContext.java index 2fbe6e360085da8ef739f3e69c11a651b141288c..2da46719cd79bd6bdc56720b9f4129a814be4a3d 100644 --- a/core/java/android/app/prediction/AppPredictionContext.java +++ b/core/java/android/app/prediction/AppPredictionContext.java @@ -101,7 +101,7 @@ public final class AppPredictionContext implements Parcelable { /** * @see Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppPredictionContext createFromParcel(Parcel parcel) { return new AppPredictionContext(parcel); diff --git a/core/java/android/app/prediction/AppPredictionSessionId.java b/core/java/android/app/prediction/AppPredictionSessionId.java index 1e76c241f8e908390fcf59bbef501c478e23ce0c..1c5d8b49db2c18feef6c39ef25f88dc9d7aba372 100644 --- a/core/java/android/app/prediction/AppPredictionSessionId.java +++ b/core/java/android/app/prediction/AppPredictionSessionId.java @@ -75,7 +75,7 @@ public final class AppPredictionSessionId implements Parcelable { /** * @see Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppPredictionSessionId createFromParcel(Parcel parcel) { return new AppPredictionSessionId(parcel); diff --git a/core/java/android/app/prediction/AppTarget.java b/core/java/android/app/prediction/AppTarget.java index b924cec63823a1480c4a07ab287ea27990c65dfd..752c92bbca2aedd4fe7c0bf2f261cfa6bec0658f 100644 --- a/core/java/android/app/prediction/AppTarget.java +++ b/core/java/android/app/prediction/AppTarget.java @@ -183,7 +183,7 @@ public final class AppTarget implements Parcelable { /** * @see Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppTarget createFromParcel(Parcel parcel) { return new AppTarget(parcel); diff --git a/core/java/android/app/prediction/AppTargetEvent.java b/core/java/android/app/prediction/AppTargetEvent.java index 37e41deba5448aa15e3f9100b75d3c5b1fa4d9f2..01452dffa366c92fa8d1075c948c1edd92915b12 100644 --- a/core/java/android/app/prediction/AppTargetEvent.java +++ b/core/java/android/app/prediction/AppTargetEvent.java @@ -122,7 +122,7 @@ public final class AppTargetEvent implements Parcelable { /** * @see Creator */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public AppTargetEvent createFromParcel(Parcel parcel) { return new AppTargetEvent(parcel); diff --git a/core/java/android/app/prediction/AppTargetId.java b/core/java/android/app/prediction/AppTargetId.java index 639ba78f76f5dfc1dfe724a11935620fa79e1c6c..aa2ec1fc3a62dfe5e5a3b19ff2e8c0a4b8297165 100644 --- a/core/java/android/app/prediction/AppTargetId.java +++ b/core/java/android/app/prediction/AppTargetId.java @@ -83,7 +83,7 @@ public final class AppTargetId implements Parcelable { /** * @see Creator */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public AppTargetId createFromParcel(Parcel parcel) { return new AppTargetId(parcel); diff --git a/core/java/android/app/role/OnRoleHoldersChangedListener.java b/core/java/android/app/role/OnRoleHoldersChangedListener.java index 5958debc86dd7badcfad128b1ad938df1be9658e..d6f76794da203169713ed38284960f113c8aa450 100644 --- a/core/java/android/app/role/OnRoleHoldersChangedListener.java +++ b/core/java/android/app/role/OnRoleHoldersChangedListener.java @@ -18,6 +18,7 @@ package android.app.role; import android.annotation.NonNull; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.UserHandle; /** @@ -26,6 +27,7 @@ import android.os.UserHandle; * @hide */ @SystemApi +@TestApi public interface OnRoleHoldersChangedListener { /** diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java index 7ec21f637e0c991aa1a83c732aa26ebee3d1a06e..f91d8780084fac99367a662211e9a606f039031f 100644 --- a/core/java/android/app/role/RoleManager.java +++ b/core/java/android/app/role/RoleManager.java @@ -187,6 +187,7 @@ public final class RoleManager { * @hide */ @SystemApi + @TestApi public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; /** @@ -467,6 +468,7 @@ public final class RoleManager { */ @RequiresPermission(Manifest.permission.OBSERVE_ROLE_HOLDERS) @SystemApi + @TestApi public void addOnRoleHoldersChangedListenerAsUser(@CallbackExecutor @NonNull Executor executor, @NonNull OnRoleHoldersChangedListener listener, @NonNull UserHandle user) { Preconditions.checkNotNull(executor, "executor cannot be null"); @@ -512,6 +514,7 @@ public final class RoleManager { */ @RequiresPermission(Manifest.permission.OBSERVE_ROLE_HOLDERS) @SystemApi + @TestApi public void removeOnRoleHoldersChangedListenerAsUser( @NonNull OnRoleHoldersChangedListener listener, @NonNull UserHandle user) { Preconditions.checkNotNull(listener, "listener cannot be null"); @@ -553,6 +556,7 @@ public final class RoleManager { */ @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi + @TestApi public void setRoleNamesFromController(@NonNull List roleNames) { Preconditions.checkNotNull(roleNames, "roleNames cannot be null"); try { @@ -583,6 +587,7 @@ public final class RoleManager { */ @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi + @TestApi public boolean addRoleHolderFromController(@NonNull String roleName, @NonNull String packageName) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); @@ -615,6 +620,7 @@ public final class RoleManager { */ @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi + @TestApi public boolean removeRoleHolderFromController(@NonNull String roleName, @NonNull String packageName) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); @@ -634,9 +640,10 @@ public final class RoleManager { * * @hide */ + @NonNull @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi - @NonNull + @TestApi public List getHeldRolesFromController(@NonNull String packageName) { Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); try { diff --git a/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java b/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java index 8ee9e5381b8697de8f1bdd45072627515fe5c9ee..0d4e16bbb0f3a855b3998c9c592c78962bf706fe 100644 --- a/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java @@ -86,7 +86,7 @@ public class ActivityConfigurationChangeItem extends ClientTransactionItem { mConfiguration = in.readTypedObject(Configuration.CREATOR); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ActivityConfigurationChangeItem createFromParcel(Parcel in) { return new ActivityConfigurationChangeItem(in); diff --git a/core/java/android/app/servertransaction/ActivityRelaunchItem.java b/core/java/android/app/servertransaction/ActivityRelaunchItem.java index d8a7463cb0869f14a7a0d974421cf3dedbfdfde6..9844de7b6e8855b4cb17ca04ef44a0a1b85979bc 100644 --- a/core/java/android/app/servertransaction/ActivityRelaunchItem.java +++ b/core/java/android/app/servertransaction/ActivityRelaunchItem.java @@ -130,7 +130,7 @@ public class ActivityRelaunchItem extends ClientTransactionItem { mPreserveWindow = in.readBoolean(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ActivityRelaunchItem createFromParcel(Parcel in) { return new ActivityRelaunchItem(in); diff --git a/core/java/android/app/servertransaction/ActivityResultItem.java b/core/java/android/app/servertransaction/ActivityResultItem.java index bab17dc6b80fabeb8b233e041f4dfa572e82dde2..52ec3e60a9c74b20311479ea1572c2f710a87106 100644 --- a/core/java/android/app/servertransaction/ActivityResultItem.java +++ b/core/java/android/app/servertransaction/ActivityResultItem.java @@ -88,7 +88,7 @@ public class ActivityResultItem extends ClientTransactionItem { mResultInfoList = in.createTypedArrayList(ResultInfo.CREATOR); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ActivityResultItem createFromParcel(Parcel in) { return new ActivityResultItem(in); diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java index f1d87ac029657290d0b148c00b3b2e2ee610adc5..b08e5973faa26a141f6bac1c156edb755d75a444 100644 --- a/core/java/android/app/servertransaction/ClientTransaction.java +++ b/core/java/android/app/servertransaction/ClientTransaction.java @@ -204,7 +204,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { } } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ClientTransaction createFromParcel(Parcel in) { return new ClientTransaction(in); diff --git a/core/java/android/app/servertransaction/ConfigurationChangeItem.java b/core/java/android/app/servertransaction/ConfigurationChangeItem.java index 4ab7251e4d8a701f5f93e46d6027a3be930cd554..0f244d02f7a1479417b5a275528e40894f82f416 100644 --- a/core/java/android/app/servertransaction/ConfigurationChangeItem.java +++ b/core/java/android/app/servertransaction/ConfigurationChangeItem.java @@ -78,7 +78,7 @@ public class ConfigurationChangeItem extends ClientTransactionItem { mConfiguration = in.readTypedObject(Configuration.CREATOR); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ConfigurationChangeItem createFromParcel(Parcel in) { return new ConfigurationChangeItem(in); diff --git a/core/java/android/app/servertransaction/DestroyActivityItem.java b/core/java/android/app/servertransaction/DestroyActivityItem.java index 5941486c099d5a95dbc33594023c50bda6f266f1..3ee761477efd3582173defccb40c070492f4e8fa 100644 --- a/core/java/android/app/servertransaction/DestroyActivityItem.java +++ b/core/java/android/app/servertransaction/DestroyActivityItem.java @@ -92,7 +92,7 @@ public class DestroyActivityItem extends ActivityLifecycleItem { mConfigChanges = in.readInt(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public DestroyActivityItem createFromParcel(Parcel in) { return new DestroyActivityItem(in); diff --git a/core/java/android/app/servertransaction/LaunchActivityItem.java b/core/java/android/app/servertransaction/LaunchActivityItem.java index ed793bfae41adf691d2e5f996e3567ee60ca4674..db22f8d1de875b09d367cbb9fabf6e66ae7731cc 100644 --- a/core/java/android/app/servertransaction/LaunchActivityItem.java +++ b/core/java/android/app/servertransaction/LaunchActivityItem.java @@ -148,7 +148,7 @@ public class LaunchActivityItem extends ClientTransactionItem { in.readTypedObject(ProfilerInfo.CREATOR)); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public LaunchActivityItem createFromParcel(Parcel in) { return new LaunchActivityItem(in); diff --git a/core/java/android/app/servertransaction/MoveToDisplayItem.java b/core/java/android/app/servertransaction/MoveToDisplayItem.java index b3dddfb37eaa1994c3faec55031a6ef884589cdd..f6d3dbdf55960292ad6d3a20a5145aa6be36ff09 100644 --- a/core/java/android/app/servertransaction/MoveToDisplayItem.java +++ b/core/java/android/app/servertransaction/MoveToDisplayItem.java @@ -83,7 +83,7 @@ public class MoveToDisplayItem extends ClientTransactionItem { mConfiguration = in.readTypedObject(Configuration.CREATOR); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public MoveToDisplayItem createFromParcel(Parcel in) { return new MoveToDisplayItem(in); } diff --git a/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java b/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java index c3022d6facc76bf1d462b7be7977d0fe529965ab..b1507177f7e8e814ea030f32ff4031eaf42152d6 100644 --- a/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java +++ b/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java @@ -81,7 +81,7 @@ public class MultiWindowModeChangeItem extends ClientTransactionItem { mOverrideConfig = in.readTypedObject(Configuration.CREATOR); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public MultiWindowModeChangeItem createFromParcel(Parcel in) { return new MultiWindowModeChangeItem(in); diff --git a/core/java/android/app/servertransaction/NewIntentItem.java b/core/java/android/app/servertransaction/NewIntentItem.java index 4f28cd2d58d7fdec50237b89183ad2ea28e9d88f..4c7f56d4b076c53d5793ca4f2fb62a2ab1503187 100644 --- a/core/java/android/app/servertransaction/NewIntentItem.java +++ b/core/java/android/app/servertransaction/NewIntentItem.java @@ -92,7 +92,7 @@ public class NewIntentItem extends ClientTransactionItem { mIntents = in.createTypedArrayList(ReferrerIntent.CREATOR); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public NewIntentItem createFromParcel(Parcel in) { return new NewIntentItem(in); diff --git a/core/java/android/app/servertransaction/PauseActivityItem.java b/core/java/android/app/servertransaction/PauseActivityItem.java index cae93b305a1a874f8a3c1b81b077b20c4767c8ad..f65c843ee76f72b6f6c5969d6c2521453a239cf5 100644 --- a/core/java/android/app/servertransaction/PauseActivityItem.java +++ b/core/java/android/app/servertransaction/PauseActivityItem.java @@ -130,7 +130,7 @@ public class PauseActivityItem extends ActivityLifecycleItem { mDontReport = in.readBoolean(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public PauseActivityItem createFromParcel(Parcel in) { return new PauseActivityItem(in); diff --git a/core/java/android/app/servertransaction/PipModeChangeItem.java b/core/java/android/app/servertransaction/PipModeChangeItem.java index b999cd7e295e8970bf7d5acb27c0eb00e9da4d83..1955897665beab04dde5f908f795dfa8aef57e8b 100644 --- a/core/java/android/app/servertransaction/PipModeChangeItem.java +++ b/core/java/android/app/servertransaction/PipModeChangeItem.java @@ -79,7 +79,7 @@ public class PipModeChangeItem extends ClientTransactionItem { mOverrideConfig = in.readTypedObject(Configuration.CREATOR); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public PipModeChangeItem createFromParcel(Parcel in) { return new PipModeChangeItem(in); diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java index a5b6f7c74e187a29e8494c2e76733b25d77b7ecb..905076b08e69d157f8292e6c74721f30fb9096f6 100644 --- a/core/java/android/app/servertransaction/ResumeActivityItem.java +++ b/core/java/android/app/servertransaction/ResumeActivityItem.java @@ -128,7 +128,7 @@ public class ResumeActivityItem extends ActivityLifecycleItem { mIsForward = in.readBoolean(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ResumeActivityItem createFromParcel(Parcel in) { return new ResumeActivityItem(in); diff --git a/core/java/android/app/servertransaction/StopActivityItem.java b/core/java/android/app/servertransaction/StopActivityItem.java index 87db2062a63d196e24d25b764f928b0ae39b3c99..63efa6fe7c17c8010f8c82acda8644fb4606410f 100644 --- a/core/java/android/app/servertransaction/StopActivityItem.java +++ b/core/java/android/app/servertransaction/StopActivityItem.java @@ -95,7 +95,7 @@ public class StopActivityItem extends ActivityLifecycleItem { mConfigChanges = in.readInt(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public StopActivityItem createFromParcel(Parcel in) { return new StopActivityItem(in); diff --git a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java index 4064a02e54a8cb946fa4da62776e17cd9c2e9d9b..c7e4c36416315495d2301baa30265659b3754a4e 100644 --- a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java +++ b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java @@ -17,9 +17,11 @@ package android.app.servertransaction; 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 @@ public class TopResumedActivityChangeItem extends ClientTransactionItem { 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 @@ -75,7 +97,7 @@ public class TopResumedActivityChangeItem extends ClientTransactionItem { mOnTop = in.readBoolean(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public TopResumedActivityChangeItem createFromParcel(Parcel in) { return new TopResumedActivityChangeItem(in); diff --git a/core/java/android/app/servertransaction/WindowVisibilityItem.java b/core/java/android/app/servertransaction/WindowVisibilityItem.java index d9956b1348b1a733aa819e749e74eecf3471719f..115d1ececc0e5272625e41f44bf12774f29d9519 100644 --- a/core/java/android/app/servertransaction/WindowVisibilityItem.java +++ b/core/java/android/app/servertransaction/WindowVisibilityItem.java @@ -34,7 +34,8 @@ public class WindowVisibilityItem extends ClientTransactionItem { @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); } @@ -75,7 +76,7 @@ public class WindowVisibilityItem extends ClientTransactionItem { mShowWindow = in.readBoolean(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public WindowVisibilityItem createFromParcel(Parcel in) { return new WindowVisibilityItem(in); diff --git a/core/java/android/app/slice/Slice.java b/core/java/android/app/slice/Slice.java index d1aec048bdf15bc3f578949fb2ca7447a283f209..a7319f6a584f45258ee4e29d6e83d033b31745e3 100644 --- a/core/java/android/app/slice/Slice.java +++ b/core/java/android/app/slice/Slice.java @@ -543,7 +543,7 @@ public final class Slice implements Parcelable { } } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Slice createFromParcel(Parcel in) { return new Slice(in); diff --git a/core/java/android/app/slice/SliceItem.java b/core/java/android/app/slice/SliceItem.java index c058a14d88cbbbfcbe6ece394ac74fd3b9ee4e6e..ed32a1b7be2c49cc20b118295a5712c625cccc2f 100644 --- a/core/java/android/app/slice/SliceItem.java +++ b/core/java/android/app/slice/SliceItem.java @@ -378,7 +378,7 @@ public final class SliceItem implements Parcelable { throw new RuntimeException("Unsupported type " + type); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SliceItem createFromParcel(Parcel in) { return new SliceItem(in); diff --git a/core/java/android/app/slice/SliceSpec.java b/core/java/android/app/slice/SliceSpec.java index b3790e22eca549e9b838491f04e61cb2f85f7fff..b1080e07e4501cd2157cb0c75946d65bf91b4c81 100644 --- a/core/java/android/app/slice/SliceSpec.java +++ b/core/java/android/app/slice/SliceSpec.java @@ -108,7 +108,7 @@ public final class SliceSpec implements Parcelable { return String.format("SliceSpec{%s,%d}", mType, mRevision); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SliceSpec createFromParcel(Parcel source) { return new SliceSpec(source); diff --git a/core/java/android/app/timedetector/TimeSignal.java b/core/java/android/app/timedetector/TimeSignal.java index 7ba03cc3345433c57a65c87cc6321e49da7168be..da21794cd64977debcb6419285b9933cfdc35292 100644 --- a/core/java/android/app/timedetector/TimeSignal.java +++ b/core/java/android/app/timedetector/TimeSignal.java @@ -33,7 +33,7 @@ import java.util.Objects; */ public final class TimeSignal implements Parcelable { - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public TimeSignal createFromParcel(Parcel in) { return TimeSignal.createFromParcel(in); diff --git a/core/java/android/app/timezone/DistroFormatVersion.java b/core/java/android/app/timezone/DistroFormatVersion.java index be732e4c0188eb59042befc073c70c00fff17d90..04e31421d1d70f86f344c7084d30969a9f1e6da1 100644 --- a/core/java/android/app/timezone/DistroFormatVersion.java +++ b/core/java/android/app/timezone/DistroFormatVersion.java @@ -45,7 +45,7 @@ public final class DistroFormatVersion implements Parcelable { mMinorVersion = Utils.validateVersion("minor", minorVersion); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public DistroFormatVersion createFromParcel(Parcel in) { int majorVersion = in.readInt(); int minorVersion = in.readInt(); diff --git a/core/java/android/app/timezone/DistroRulesVersion.java b/core/java/android/app/timezone/DistroRulesVersion.java index a680594657ae78c81866e4517bea343c066db2ed..3fae1612fa88491c5a452acca1eca40895d9bcf2 100644 --- a/core/java/android/app/timezone/DistroRulesVersion.java +++ b/core/java/android/app/timezone/DistroRulesVersion.java @@ -46,7 +46,7 @@ public final class DistroRulesVersion implements Parcelable { mRevision = validateVersion("revision", revision); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public DistroRulesVersion createFromParcel(Parcel in) { String rulesVersion = in.readString(); int revision = in.readInt(); diff --git a/core/java/android/app/timezone/RulesState.java b/core/java/android/app/timezone/RulesState.java index 38dd1ebf1c45c4bb623ae6a2f0903f6e6e4cde93..d35967df3416b120ac19aa0836a79017eed441cc 100644 --- a/core/java/android/app/timezone/RulesState.java +++ b/core/java/android/app/timezone/RulesState.java @@ -182,7 +182,7 @@ public final class RulesState implements Parcelable { return mBaseRulesVersion.compareTo(distroRulesVersion.getRulesVersion()) > 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RulesState createFromParcel(Parcel in) { return RulesState.createFromParcel(in); diff --git a/core/java/android/app/usage/AppStandbyInfo.java b/core/java/android/app/usage/AppStandbyInfo.java index 51fe0e2745bef906c81db001d853a742b29a0706..ebdbf833b81a92003033246d4ef2c0b2b07a940a 100644 --- a/core/java/android/app/usage/AppStandbyInfo.java +++ b/core/java/android/app/usage/AppStandbyInfo.java @@ -50,7 +50,7 @@ public final class AppStandbyInfo implements Parcelable { dest.writeInt(mStandbyBucket); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public AppStandbyInfo createFromParcel(Parcel source) { return new AppStandbyInfo(source); diff --git a/core/java/android/app/usage/CacheQuotaHint.java b/core/java/android/app/usage/CacheQuotaHint.java index 1d5c2b05488ee0642d6714e69dc32c1a073ae226..b92d538ce28168c69eaa752f1ffa8b567014f103 100644 --- a/core/java/android/app/usage/CacheQuotaHint.java +++ b/core/java/android/app/usage/CacheQuotaHint.java @@ -140,7 +140,7 @@ public final class CacheQuotaHint implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public CacheQuotaHint createFromParcel(Parcel in) { diff --git a/core/java/android/app/usage/ConfigurationStats.java b/core/java/android/app/usage/ConfigurationStats.java index 87a737db09b246d1c345ed72d79689f1aa90e8a2..da3b76972ced96477ab05b1aad8dbc38aa56b39f 100644 --- a/core/java/android/app/usage/ConfigurationStats.java +++ b/core/java/android/app/usage/ConfigurationStats.java @@ -146,7 +146,7 @@ public final class ConfigurationStats implements Parcelable { dest.writeInt(mActivationCount); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ConfigurationStats createFromParcel(Parcel source) { ConfigurationStats stats = new ConfigurationStats(); diff --git a/core/java/android/app/usage/EventStats.java b/core/java/android/app/usage/EventStats.java index ea95a0557f2b6e3e58f484813dfd0ebee15291f7..7ada092f3a69bbc6455ca42f229495760e14ded9 100644 --- a/core/java/android/app/usage/EventStats.java +++ b/core/java/android/app/usage/EventStats.java @@ -160,7 +160,7 @@ public final class EventStats implements Parcelable { dest.writeInt(mCount); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public EventStats createFromParcel(Parcel in) { EventStats stats = new EventStats(); diff --git a/core/java/android/app/usage/ExternalStorageStats.java b/core/java/android/app/usage/ExternalStorageStats.java index f00e5c29cd7523e36a10970696be0083b5f1800b..3a5120742a38e18644c1f9a9657210dab23a3234 100644 --- a/core/java/android/app/usage/ExternalStorageStats.java +++ b/core/java/android/app/usage/ExternalStorageStats.java @@ -131,7 +131,7 @@ public final class ExternalStorageStats implements Parcelable { dest.writeLong(obbBytes); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ExternalStorageStats createFromParcel(Parcel in) { return new ExternalStorageStats(in); diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index b1500c1938208b42ef915944fccc46e4e53a13c8..62b24e9995e8b43c476d786fb45a4caf0bfd8448 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -28,8 +28,10 @@ import java.util.Map; * {@hide} */ interface IUsageStatsManager { + @UnsupportedAppUsage ParceledListSlice queryUsageStats(int bucketType, long beginTime, long endTime, String callingPackage); + @UnsupportedAppUsage ParceledListSlice queryConfigurationStats(int bucketType, long beginTime, long endTime, String callingPackage); ParceledListSlice queryEventStats(int bucketType, long beginTime, long endTime, @@ -38,7 +40,9 @@ interface IUsageStatsManager { UsageEvents queryEventsForPackage(long beginTime, long endTime, String callingPackage); UsageEvents queryEventsForUser(long beginTime, long endTime, int userId, String callingPackage); UsageEvents queryEventsForPackageForUser(long beginTime, long endTime, int userId, String pkg, String callingPackage); + @UnsupportedAppUsage void setAppInactive(String packageName, boolean inactive, int userId); + @UnsupportedAppUsage boolean isAppInactive(String packageName, int userId); void whitelistAppTemporarily(String packageName, long duration, int userId); void onCarrierPrivilegedAppsChanged(); @@ -56,7 +60,7 @@ interface IUsageStatsManager { in PendingIntent sessionEndCallbackIntent, String callingPackage); void unregisterUsageSessionObserver(int sessionObserverId, String callingPackage); void registerAppUsageLimitObserver(int observerId, in String[] packages, long timeLimitMs, - in PendingIntent callback, String callingPackage); + long timeRemainingMs, in PendingIntent callback, String callingPackage); void unregisterAppUsageLimitObserver(int observerId, String callingPackage); void reportUsageStart(in IBinder activity, String token, String callingPackage); void reportPastUsageStart(in IBinder activity, String token, long timeAgoMs, diff --git a/core/java/android/app/usage/StorageStats.java b/core/java/android/app/usage/StorageStats.java index 3a277518977d96a3253f13ff6f4e6b034f603c2f..a2ff159fa3a82f749ac57230a4c39e09467105b2 100644 --- a/core/java/android/app/usage/StorageStats.java +++ b/core/java/android/app/usage/StorageStats.java @@ -106,7 +106,7 @@ public final class StorageStats implements Parcelable { dest.writeLong(cacheBytes); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public StorageStats createFromParcel(Parcel in) { return new StorageStats(in); diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java index fafea340ccc342ffcbf6b8b02c3566a0f6517119..0d0e466e9688416efb2fb8fd84025499b960418a 100644 --- a/core/java/android/app/usage/UsageEvents.java +++ b/core/java/android/app/usage/UsageEvents.java @@ -880,7 +880,7 @@ public final class UsageEvents implements Parcelable { dest.writeBlob(data.marshall()); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public UsageEvents createFromParcel(Parcel source) { return new UsageEvents(source); diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java index 97efa01e982b870e7fd3859a8db881e20e407760..2c021cc42cb5c1bdeaf7fb8b7bbde476584adb58 100644 --- a/core/java/android/app/usage/UsageStats.java +++ b/core/java/android/app/usage/UsageStats.java @@ -636,7 +636,7 @@ public final class UsageStats implements Parcelable { return bundle; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public UsageStats createFromParcel(Parcel in) { UsageStats stats = new UsageStats(); diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index 9c6bd927dd56c8f9442baf7b41b961e0577553be..cee6b87fd3f1479a80c5e98f370a0665700a87a6 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -35,6 +35,7 @@ import android.util.ArrayMap; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -195,6 +196,8 @@ public final class UsageStatsManager { /** @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; @@ -735,6 +738,23 @@ public final class UsageStatsManager { } } + /** + * @deprecated use + * {@link #registerAppUsageLimitObserver(int, String[], Duration, Duration, PendingIntent)}. + * + * @removed + * @hide + */ + @Deprecated + @UnsupportedAppUsage + // STOPSHIP b/126917290: remove this method once ag/6591106 is merged and it's not being used. + public void registerAppUsageLimitObserver(int observerId, @NonNull String[] observedEntities, + long timeLimit, @NonNull TimeUnit timeUnit, @Nullable PendingIntent callbackIntent) { + final Duration timeLimitDuration = Duration.ofMillis(timeUnit.toMillis(timeLimit)); + registerAppUsageLimitObserver(observerId, observedEntities, + timeLimitDuration, timeLimitDuration, callbackIntent); + } + /** * Register a usage limit observer that receives a callback on the provided intent when the * sum of usages of apps and tokens in the provided {@code observedEntities} array exceeds the @@ -757,19 +777,21 @@ public final class UsageStatsManager { * @see android.content.pm.LauncherApps#getAppUsageLimit * * @param observerId A unique id associated with the group of apps to be monitored. There can - * be multiple groups with common packages and different time limits. + * be multiple groups with common packages and different time limits. * @param observedEntities The list of packages and token to observe for usage time. Cannot be * null and must include at least one package or token. * @param timeLimit The total time the set of apps can be in the foreground before the - * callbackIntent is delivered. Must be at least one minute. Note: a limit of - * 0 can be set to indicate that the user has already exhausted the limit for - * a group, in which case, the given {@code callbackIntent} will be ignored. - * @param timeUnit The unit for time specified in {@code timeLimit}. Cannot be null. + * {@code callbackIntent} is delivered. Must be at least one minute. + * @param timeRemaining The remaining time the set of apps can be in the foreground before the + * {@code callbackIntent} is delivered. Must be greater than + * {@code timeLimit}. Note: a limit of 0 can be set to indicate that the + * user has already exhausted the limit for a group, in which case, + * the given {@code callbackIntent} will be ignored. * @param callbackIntent The PendingIntent that will be dispatched when the usage limit is * exceeded by the group of apps. The delivered Intent will also contain * the extras {@link #EXTRA_OBSERVER_ID}, {@link #EXTRA_TIME_LIMIT} and * {@link #EXTRA_TIME_USED}. Cannot be {@code null} unless the observer is - * being registered with a {@code timeLimit} of 0. + * being registered with a {@code timeRemaining} of 0. * @throws SecurityException if the caller doesn't have both SUSPEND_APPS and OBSERVE_APP_USAGE * permissions. * @hide @@ -779,10 +801,12 @@ public final class UsageStatsManager { android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int observerId, @NonNull String[] observedEntities, - long timeLimit, @NonNull TimeUnit timeUnit, @Nullable PendingIntent callbackIntent) { + @NonNull Duration timeLimit, @NonNull Duration timeRemaining, + @Nullable PendingIntent callbackIntent) { try { mService.registerAppUsageLimitObserver(observerId, observedEntities, - timeUnit.toMillis(timeLimit), callbackIntent, mContext.getOpPackageName()); + timeLimit.toMillis(), timeRemaining.toMillis(), callbackIntent, + mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -972,6 +996,9 @@ public final class UsageStatsManager { 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 43ce521fa9f35d1e1a09578c27d23e91f70174a2..bbec6b386d60a803dc78a392d2395309188f482e 100644 --- a/core/java/android/app/usage/UsageStatsManagerInternal.java +++ b/core/java/android/app/usage/UsageStatsManagerInternal.java @@ -257,12 +257,14 @@ public abstract class UsageStatsManagerInternal { 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/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index d148afb32b0287f3e8b4962cdff3edf6de58938b..2faa9007fc29c66fad619df97c5269c29278a599 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -446,7 +446,7 @@ public class AppWidgetProviderInfo implements Parcelable { /** * Parcelable.Creator that instantiates AppWidgetProviderInfo objects */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppWidgetProviderInfo createFromParcel(Parcel parcel) diff --git a/core/java/android/appwidget/PendingHostUpdate.java b/core/java/android/appwidget/PendingHostUpdate.java index 578031908f52e3ff935870b469d4da1619457f94..e1bf159ccd848fe13764eae77224f41874599a8e 100644 --- a/core/java/android/appwidget/PendingHostUpdate.java +++ b/core/java/android/appwidget/PendingHostUpdate.java @@ -112,7 +112,7 @@ public class PendingHostUpdate implements Parcelable { /** * Parcelable.Creator that instantiates PendingHostUpdate objects */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PendingHostUpdate createFromParcel(Parcel parcel) { return new PendingHostUpdate(parcel); diff --git a/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java index 43b79db6f355205ce285f62ac14f544663e7a9ac..df065bf1bf8d684581b1f569f41f75b5b2316063 100644 --- a/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java +++ b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java @@ -76,7 +76,7 @@ public final class BluetoothActivityEnergyInfo implements Parcelable { + " }"; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothActivityEnergyInfo createFromParcel(Parcel in) { return new BluetoothActivityEnergyInfo(in); diff --git a/core/java/android/bluetooth/BluetoothAudioConfig.java b/core/java/android/bluetooth/BluetoothAudioConfig.java index a4410563c99153f9de2dedc261ea6d9523e3883d..9591a70b05d9515443f22e5d07f518e3e5b6e2e5 100644 --- a/core/java/android/bluetooth/BluetoothAudioConfig.java +++ b/core/java/android/bluetooth/BluetoothAudioConfig.java @@ -64,7 +64,7 @@ public final class BluetoothAudioConfig implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothAudioConfig createFromParcel(Parcel in) { int sampleRate = in.readInt(); diff --git a/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java b/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java index 3d3d80e2b4dd6dcdeac63bda88400e9ee5ef22d0..30aea1abf73ce4bc316510efcb5bdc5b4fdd7a42 100644 --- a/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java +++ b/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java @@ -118,7 +118,7 @@ public final class BluetoothAvrcpPlayerSettings implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothAvrcpPlayerSettings createFromParcel(Parcel in) { return new BluetoothAvrcpPlayerSettings(in); diff --git a/core/java/android/bluetooth/BluetoothClass.java b/core/java/android/bluetooth/BluetoothClass.java index 1edbacbae4f7f490c01de74fdb2ca508cb6a2cb9..260e2fb1b80ca294f407ef6a2b6901a5b3eb1445 100755 --- a/core/java/android/bluetooth/BluetoothClass.java +++ b/core/java/android/bluetooth/BluetoothClass.java @@ -94,7 +94,7 @@ public final class BluetoothClass implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothClass createFromParcel(Parcel in) { return new BluetoothClass(in.readInt()); diff --git a/core/java/android/bluetooth/BluetoothCodecConfig.java b/core/java/android/bluetooth/BluetoothCodecConfig.java index 5a8270e45092cd820d70bd8193e87231d3831094..d3e0bba0bba7e932f58023ca3325c94350bd7c59 100644 --- a/core/java/android/bluetooth/BluetoothCodecConfig.java +++ b/core/java/android/bluetooth/BluetoothCodecConfig.java @@ -42,9 +42,9 @@ public final class BluetoothCodecConfig implements Parcelable { @UnsupportedAppUsage public static final int SOURCE_CODEC_TYPE_APTX_HD = 3; @UnsupportedAppUsage - public static final int SOURCE_CODEC_TYPE_LDAC = 4; + public static final int SOURCE_CODEC_TYPE_APTX_ADAPTIVE = 4; @UnsupportedAppUsage - public static final int SOURCE_CODEC_TYPE_APTX_ADAPTIVE = 5; + public static final int SOURCE_CODEC_TYPE_LDAC = 5; @UnsupportedAppUsage public static final int SOURCE_CODEC_TYPE_MAX = 6; @@ -249,7 +249,7 @@ public final class BluetoothCodecConfig implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothCodecConfig createFromParcel(Parcel in) { final int codecType = in.readInt(); diff --git a/core/java/android/bluetooth/BluetoothCodecStatus.java b/core/java/android/bluetooth/BluetoothCodecStatus.java index 2cb7b2d3c7e9177298f87b3e1564138c9eca3f0a..8eae2b4cf590c0c5b7636da171bde48672fb0d8d 100644 --- a/core/java/android/bluetooth/BluetoothCodecStatus.java +++ b/core/java/android/bluetooth/BluetoothCodecStatus.java @@ -108,7 +108,7 @@ public final class BluetoothCodecStatus implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothCodecStatus createFromParcel(Parcel in) { final BluetoothCodecConfig codecConfig = in.readTypedObject( diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 03b19972a7ba67fef36ad16283765b4d9f0be6e3..7494e34b8676ea545d72589e852fb2c2b61e4141 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1099,7 +1099,7 @@ public final class BluetoothDevice implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothDevice createFromParcel(Parcel in) { return new BluetoothDevice(in.readString()); diff --git a/core/java/android/bluetooth/BluetoothGattCharacteristic.java b/core/java/android/bluetooth/BluetoothGattCharacteristic.java index 6d46b3a4186750a5529632fb6f02dc22905ece76..edacf3e0b7069faf79eb671360f1d995c11ac2c4 100644 --- a/core/java/android/bluetooth/BluetoothGattCharacteristic.java +++ b/core/java/android/bluetooth/BluetoothGattCharacteristic.java @@ -302,7 +302,7 @@ public class BluetoothGattCharacteristic implements Parcelable { out.writeTypedList(mDescriptors); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothGattCharacteristic createFromParcel(Parcel in) { return new BluetoothGattCharacteristic(in); diff --git a/core/java/android/bluetooth/BluetoothGattDescriptor.java b/core/java/android/bluetooth/BluetoothGattDescriptor.java index 3ffbb9e0c052f2989723b1a2eaf9848914f5fb81..0783cd2b73cc7111f230d21353938a23d955c6f0 100644 --- a/core/java/android/bluetooth/BluetoothGattDescriptor.java +++ b/core/java/android/bluetooth/BluetoothGattDescriptor.java @@ -177,7 +177,7 @@ public class BluetoothGattDescriptor implements Parcelable { out.writeInt(mPermissions); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothGattDescriptor createFromParcel(Parcel in) { return new BluetoothGattDescriptor(in); diff --git a/core/java/android/bluetooth/BluetoothGattIncludedService.java b/core/java/android/bluetooth/BluetoothGattIncludedService.java index bccf20ef96b3db30d2c25a01f032fa424c8a9f6b..5580619033a65742d14a0953d7e06863d819dddb 100644 --- a/core/java/android/bluetooth/BluetoothGattIncludedService.java +++ b/core/java/android/bluetooth/BluetoothGattIncludedService.java @@ -64,7 +64,7 @@ public class BluetoothGattIncludedService implements Parcelable { out.writeInt(mServiceType); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothGattIncludedService createFromParcel(Parcel in) { return new BluetoothGattIncludedService(in); diff --git a/core/java/android/bluetooth/BluetoothGattService.java b/core/java/android/bluetooth/BluetoothGattService.java index 8e740ee387d63e2225e9ef11f8d709ff97d66869..c20faf9db69877869156ecc0b411c37f74be942e 100644 --- a/core/java/android/bluetooth/BluetoothGattService.java +++ b/core/java/android/bluetooth/BluetoothGattService.java @@ -165,7 +165,7 @@ public class BluetoothGattService implements Parcelable { out.writeTypedList(includedServices); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothGattService createFromParcel(Parcel in) { return new BluetoothGattService(in); diff --git a/core/java/android/bluetooth/BluetoothHeadsetClientCall.java b/core/java/android/bluetooth/BluetoothHeadsetClientCall.java index e02a2f4ae5d3fb329de2187c67e4b056124db7c5..7165dd56a213fc3885d8a6c907bbc32e0b8e58f1 100644 --- a/core/java/android/bluetooth/BluetoothHeadsetClientCall.java +++ b/core/java/android/bluetooth/BluetoothHeadsetClientCall.java @@ -280,7 +280,7 @@ public final class BluetoothHeadsetClientCall implements Parcelable { /** * {@link Parcelable.Creator} interface implementation. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public BluetoothHeadsetClientCall createFromParcel(Parcel in) { diff --git a/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java b/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java index 9788bbf74e3e3a467f80adda7ff0cf8b9646a735..88e06e58f9ce182d00350146dd86e808fc802b65 100644 --- a/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java +++ b/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java @@ -90,7 +90,7 @@ public final class BluetoothHealthAppConfiguration implements Parcelable { * {@link BluetoothDevice#createL2capChannel(int)} */ @Deprecated - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public BluetoothHealthAppConfiguration createFromParcel(Parcel in) { diff --git a/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java b/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java index a485b898c2d4a04b12913f30a2108a0c64cb24ce..b21ebe59d816964ffa52a2b8a2f8263a3c602b7d 100644 --- a/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java +++ b/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java @@ -98,7 +98,7 @@ public final class BluetoothHidDeviceAppQosSettings implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java index 2f0b44f76ffb37911da5f40c19d13503c32696d5..4e1a2aaedcf0b7f46aa867cd1ddc7679994b84ea 100644 --- a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java +++ b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java @@ -92,7 +92,7 @@ public final class BluetoothHidDeviceAppSdpSettings implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/bluetooth/BluetoothMasInstance.java b/core/java/android/bluetooth/BluetoothMasInstance.java index 7a31328eaf02c4c6e4a4d28a60596b1f775e609e..b64d0492faf5f308cb8188fa19ef9f4ddba5b9ce 100644 --- a/core/java/android/bluetooth/BluetoothMasInstance.java +++ b/core/java/android/bluetooth/BluetoothMasInstance.java @@ -57,7 +57,7 @@ public final class BluetoothMasInstance implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BluetoothMasInstance createFromParcel(Parcel in) { return new BluetoothMasInstance(in.readInt(), in.readString(), diff --git a/core/java/android/bluetooth/OobData.java b/core/java/android/bluetooth/OobData.java index d6325728697557959ee708dcafd0dd5c2446d00e..0d0c6ab2efa93cf965dbfb46e822db862e4dbea2 100644 --- a/core/java/android/bluetooth/OobData.java +++ b/core/java/android/bluetooth/OobData.java @@ -98,7 +98,7 @@ public class OobData implements Parcelable { out.writeByteArray(mLeSecureConnectionsRandom); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public OobData createFromParcel(Parcel in) { return new OobData(in); diff --git a/core/java/android/bluetooth/UidTraffic.java b/core/java/android/bluetooth/UidTraffic.java index cef362b3b573e2e33ef1a7a68723f53d37b3a321..2ee786a5909161a9664d0d25089bfd2d11b12e9b 100644 --- a/core/java/android/bluetooth/UidTraffic.java +++ b/core/java/android/bluetooth/UidTraffic.java @@ -95,7 +95,7 @@ public class UidTraffic implements Cloneable, Parcelable { + mTxBytes + '}'; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public UidTraffic createFromParcel(Parcel source) { return new UidTraffic(source); diff --git a/core/java/android/bluetooth/le/AdvertiseData.java b/core/java/android/bluetooth/le/AdvertiseData.java index c79f03ce1891a1d481af513f96f2b3d3c90a299a..d7f22bf4ac1b9663756e3c9095882a291507d1e2 100644 --- a/core/java/android/bluetooth/le/AdvertiseData.java +++ b/core/java/android/bluetooth/le/AdvertiseData.java @@ -176,7 +176,7 @@ public final class AdvertiseData implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public AdvertiseData[] newArray(int size) { diff --git a/core/java/android/bluetooth/le/AdvertiseSettings.java b/core/java/android/bluetooth/le/AdvertiseSettings.java index 35e232c7500bc0034cadee24b955f6b71903d8a9..7129d762cd95b4e18f7478e889356069011896a7 100644 --- a/core/java/android/bluetooth/le/AdvertiseSettings.java +++ b/core/java/android/bluetooth/le/AdvertiseSettings.java @@ -139,7 +139,7 @@ public final class AdvertiseSettings implements Parcelable { dest.writeInt(mAdvertiseTimeoutMillis); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public AdvertiseSettings[] newArray(int size) { diff --git a/core/java/android/bluetooth/le/AdvertisingSetParameters.java b/core/java/android/bluetooth/le/AdvertisingSetParameters.java index 0c0291eb0ed340431d84f916ab4a50095b9121c1..e39b198ae38476d4658cc379c21a23f099488309 100644 --- a/core/java/android/bluetooth/le/AdvertisingSetParameters.java +++ b/core/java/android/bluetooth/le/AdvertisingSetParameters.java @@ -227,7 +227,7 @@ public final class AdvertisingSetParameters implements Parcelable { dest.writeInt(mTxPowerLevel); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public AdvertisingSetParameters[] newArray(int size) { diff --git a/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java b/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java index 73a2e74de5b3ab2959c68a36d68947f646e15f68..7a8c2c6716e34df3911115e9144671ac2c848801 100644 --- a/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java +++ b/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java @@ -171,7 +171,7 @@ public final class PeriodicAdvertisingReport implements Parcelable { + ", data=" + Objects.toString(mData) + ", timestampNanos=" + mTimestampNanos + '}'; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PeriodicAdvertisingReport createFromParcel(Parcel source) { diff --git a/core/java/android/bluetooth/le/ResultStorageDescriptor.java b/core/java/android/bluetooth/le/ResultStorageDescriptor.java index 63bdf69e727f04877db99dbd685c914be45e6366..796c815d69bbd4309832c731e99ba4a225148a21 100644 --- a/core/java/android/bluetooth/le/ResultStorageDescriptor.java +++ b/core/java/android/bluetooth/le/ResultStorageDescriptor.java @@ -78,7 +78,7 @@ public final class ResultStorageDescriptor implements Parcelable { mLength = in.readInt(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public ResultStorageDescriptor createFromParcel(Parcel source) { diff --git a/core/java/android/bluetooth/le/ScanFilter.java b/core/java/android/bluetooth/le/ScanFilter.java index af0fe6068e68e03dfa9a4d7ce07bec39bbc01bd7..e8ce6e66c05f629cb515555f58fb39471cae3144 100644 --- a/core/java/android/bluetooth/le/ScanFilter.java +++ b/core/java/android/bluetooth/le/ScanFilter.java @@ -185,7 +185,7 @@ public final class ScanFilter implements Parcelable { /** * A {@link android.os.Parcelable.Creator} to create {@link ScanFilter} from parcel. */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override diff --git a/core/java/android/bluetooth/le/ScanResult.java b/core/java/android/bluetooth/le/ScanResult.java index f87a47fb936bd8a578696c01ac97db77b1345759..855d3454170722849489df2c6676bd28dc8181a5 100644 --- a/core/java/android/bluetooth/le/ScanResult.java +++ b/core/java/android/bluetooth/le/ScanResult.java @@ -338,7 +338,7 @@ public final class ScanResult implements Parcelable { + ", periodicAdvertisingInterval=" + mPeriodicAdvertisingInterval + '}'; } - public static final Parcelable.Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public ScanResult createFromParcel(Parcel source) { return new ScanResult(source); diff --git a/core/java/android/bluetooth/le/ScanSettings.java b/core/java/android/bluetooth/le/ScanSettings.java index 2919c27c5d93ad7a25f54869d92d06afb65917b9..bd6e9d59afa1e59355905280975595e2635e76b9 100644 --- a/core/java/android/bluetooth/le/ScanSettings.java +++ b/core/java/android/bluetooth/le/ScanSettings.java @@ -248,7 +248,7 @@ public final class ScanSettings implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public ScanSettings[] newArray(int size) { diff --git a/core/java/android/companion/AssociationRequest.java b/core/java/android/companion/AssociationRequest.java index db54f08d815ca95739e3ee2265743783228a95a9..e4114c66bac73c0fa45b25bd8aedda37412c95f1 100644 --- a/core/java/android/companion/AssociationRequest.java +++ b/core/java/android/companion/AssociationRequest.java @@ -105,7 +105,7 @@ public final class AssociationRequest implements Parcelable { return 0; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public AssociationRequest createFromParcel(Parcel in) { return new AssociationRequest(in); diff --git a/core/java/android/companion/BluetoothDeviceFilter.java b/core/java/android/companion/BluetoothDeviceFilter.java index 7507e174a749e2639396c937265ad92f5a0b7ef6..fe0123c56e5712debeaf954d51f4465e8c73d2b9 100644 --- a/core/java/android/companion/BluetoothDeviceFilter.java +++ b/core/java/android/companion/BluetoothDeviceFilter.java @@ -146,7 +146,7 @@ public final class BluetoothDeviceFilter implements DeviceFilter CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public BluetoothDeviceFilter createFromParcel(Parcel in) { diff --git a/core/java/android/companion/BluetoothDeviceFilterUtils.java b/core/java/android/companion/BluetoothDeviceFilterUtils.java index bd507a6b8bccf49d49983deb5b3c1b70cfbab560..75e726bfad0df29288f984d3432249be5c3c81ca 100644 --- a/core/java/android/companion/BluetoothDeviceFilterUtils.java +++ b/core/java/android/companion/BluetoothDeviceFilterUtils.java @@ -30,6 +30,7 @@ import android.os.Parcelable; import android.util.Log; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -78,11 +79,12 @@ public class BluetoothDeviceFilterUtils { static boolean matchesServiceUuid(ParcelUuid serviceUuid, ParcelUuid serviceUuidMask, BluetoothDevice device) { + ParcelUuid[] uuids = device.getUuids(); final boolean result = serviceUuid == null || ScanFilter.matchesServiceUuids( serviceUuid, serviceUuidMask, - Arrays.asList(device.getUuids())); + uuids == null ? Collections.emptyList() : Arrays.asList(uuids)); if (DEBUG) debugLogMatchResult(result, device, serviceUuid); return result; } diff --git a/core/java/android/companion/BluetoothLeDeviceFilter.java b/core/java/android/companion/BluetoothLeDeviceFilter.java index 1de931eeb67587dad6a365d0516f651a00edd469..37c9cb632577915b9674797fc9822fa585e6e60e 100644 --- a/core/java/android/companion/BluetoothLeDeviceFilter.java +++ b/core/java/android/companion/BluetoothLeDeviceFilter.java @@ -247,7 +247,7 @@ public final class BluetoothLeDeviceFilter implements DeviceFilter { '}'; } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public BluetoothLeDeviceFilter createFromParcel(Parcel in) { diff --git a/core/java/android/companion/WifiDeviceFilter.java b/core/java/android/companion/WifiDeviceFilter.java index b6e704c39998ea242e00829e3851249ec72209b7..62098d556e5be116ba2016eb00a01684d001e0de 100644 --- a/core/java/android/companion/WifiDeviceFilter.java +++ b/core/java/android/companion/WifiDeviceFilter.java @@ -98,7 +98,7 @@ public final class WifiDeviceFilter implements DeviceFilter { return 0; } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public WifiDeviceFilter createFromParcel(Parcel in) { diff --git a/core/java/android/content/AutofillOptions.java b/core/java/android/content/AutofillOptions.java index fd7e52aaebcd11f2954887bb1de3496d522475b8..0d25f4d5fe241b5b57a4cf8218330634ab86887c 100644 --- a/core/java/android/content/AutofillOptions.java +++ b/core/java/android/content/AutofillOptions.java @@ -110,7 +110,7 @@ public final class AutofillOptions implements Parcelable { parcel.writeBoolean(augmentedEnabled); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index 8777b670484530167f61ae2a902cb918d6d61a0c..88e2c220bb8dc637a08ef011111d26e9d8f3cfc9 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -1176,7 +1176,7 @@ public class ClipData implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java index 19295fcf20f6f3d770a4e1fcc522e192ccdab4f0..29acd5df4c511ca33bc4f77b8e1f3d9ea219a299 100644 --- a/core/java/android/content/ClipDescription.java +++ b/core/java/android/content/ClipDescription.java @@ -380,7 +380,7 @@ public class ClipDescription implements Parcelable { mTimeStamp = in.readLong(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ClipDescription createFromParcel(Parcel source) { diff --git a/core/java/android/content/ComponentName.java b/core/java/android/content/ComponentName.java index e6ffe8b4fe8682b287320feeab5b2057cecd4d9e..a5460e92d73a3eca6fa5596b95f6f5b84392dbc6 100644 --- a/core/java/android/content/ComponentName.java +++ b/core/java/android/content/ComponentName.java @@ -376,7 +376,7 @@ public final class ComponentName implements Parcelable, Cloneable, Comparable CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ComponentName createFromParcel(Parcel in) { return new ComponentName(in); diff --git a/core/java/android/content/ContentCaptureOptions.java b/core/java/android/content/ContentCaptureOptions.java index 2fe9f14c9dc90386a1fd631199955baa8a6e27fd..6be0bea4c9f20085af1faf70ec505eb308ce0bd3 100644 --- a/core/java/android/content/ContentCaptureOptions.java +++ b/core/java/android/content/ContentCaptureOptions.java @@ -149,7 +149,7 @@ public final class ContentCaptureOptions implements Parcelable { parcel.writeArraySet(whitelistedComponents); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index e06322df7a7f24d6dba16d11b302e7c1e7724695..ddfe75568eee1abcfee45cb8d58c3a6c6ab06587 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -209,9 +209,10 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall * @hide */ class Transport extends ContentProviderNative { - AppOpsManager mAppOpsManager = null; - int mReadOp = AppOpsManager.OP_NONE; - int mWriteOp = AppOpsManager.OP_NONE; + volatile AppOpsManager mAppOpsManager = null; + volatile int mReadOp = AppOpsManager.OP_NONE; + volatile int mWriteOp = AppOpsManager.OP_NONE; + volatile ContentInterface mInterface = ContentProvider.this; ContentProvider getContentProvider() { return ContentProvider.this; @@ -245,9 +246,11 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Cursor cursor; final String original = setCallingPackage(callingPkg); try { - cursor = ContentProvider.this.query( + cursor = mInterface.query( uri, projection, queryArgs, CancellationSignal.fromTransport(cancellationSignal)); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); } @@ -261,9 +264,11 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "query"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.query( + return mInterface.query( uri, projection, queryArgs, CancellationSignal.fromTransport(cancellationSignal)); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -277,7 +282,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall uri = maybeGetUriWithoutUserId(uri); Trace.traceBegin(TRACE_TAG_DATABASE, "getType"); try { - return ContentProvider.this.getType(uri); + return mInterface.getType(uri); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { Trace.traceEnd(TRACE_TAG_DATABASE); } @@ -299,7 +306,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "insert"); final String original = setCallingPackage(callingPkg); try { - return maybeAddUserId(ContentProvider.this.insert(uri, initialValues), userId); + return maybeAddUserId(mInterface.insert(uri, initialValues), userId); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -316,7 +325,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "bulkInsert"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.bulkInsert(uri, initialValues); + return mInterface.bulkInsert(uri, initialValues); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -357,7 +368,7 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "applyBatch"); final String original = setCallingPackage(callingPkg); try { - ContentProviderResult[] results = ContentProvider.this.applyBatch(authority, + ContentProviderResult[] results = mInterface.applyBatch(authority, operations); if (results != null) { for (int i = 0; i < results.length ; i++) { @@ -368,6 +379,8 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall } } return results; + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -384,7 +397,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "delete"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.delete(uri, selection, selectionArgs); + return mInterface.delete(uri, selection, selectionArgs); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -402,7 +417,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "update"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.update(uri, values, selection, selectionArgs); + return mInterface.update(uri, values, selection, selectionArgs); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -419,8 +436,10 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "openFile"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.openFile( + return mInterface.openFile( uri, mode, CancellationSignal.fromTransport(cancellationSignal)); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -437,8 +456,10 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "openAssetFile"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.openAssetFile( + return mInterface.openAssetFile( uri, mode, CancellationSignal.fromTransport(cancellationSignal)); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -453,7 +474,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "call"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.call(authority, method, arg, extras); + return mInterface.call(authority, method, arg, extras); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -467,7 +490,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall uri = maybeGetUriWithoutUserId(uri); Trace.traceBegin(TRACE_TAG_DATABASE, "getStreamTypes"); try { - return ContentProvider.this.getStreamTypes(uri, mimeTypeFilter); + return mInterface.getStreamTypes(uri, mimeTypeFilter); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { Trace.traceEnd(TRACE_TAG_DATABASE); } @@ -483,8 +508,10 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "openTypedAssetFile"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.openTypedAssetFile( + return mInterface.openTypedAssetFile( uri, mimeType, opts, CancellationSignal.fromTransport(cancellationSignal)); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -507,7 +534,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "canonicalize"); final String original = setCallingPackage(callingPkg); try { - return maybeAddUserId(ContentProvider.this.canonicalize(uri), userId); + return maybeAddUserId(mInterface.canonicalize(uri), userId); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -525,7 +554,9 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "uncanonicalize"); final String original = setCallingPackage(callingPkg); try { - return maybeAddUserId(ContentProvider.this.uncanonicalize(uri), userId); + return maybeAddUserId(mInterface.uncanonicalize(uri), userId); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } finally { setCallingPackage(original); Trace.traceEnd(TRACE_TAG_DATABASE); @@ -543,7 +574,7 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall Trace.traceBegin(TRACE_TAG_DATABASE, "refresh"); final String original = setCallingPackage(callingPkg); try { - return ContentProvider.this.refresh(uri, args, + return mInterface.refresh(uri, args, CancellationSignal.fromTransport(cancellationSignal)); } finally { setCallingPackage(original); @@ -986,6 +1017,15 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall return mTransport.mAppOpsManager; } + /** @hide */ + public final void setTransportLoggingEnabled(boolean enabled) { + if (enabled) { + mTransport.mInterface = new LoggingContentInterface(getClass().getSimpleName(), this); + } else { + mTransport.mInterface = this; + } + } + /** * Implement this to initialize your content provider on startup. * This method is called for all registered content providers on the diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java index ca657b150f9c05574ec2a51e11a4ceefa8557752..994833866f40e7e774572b3f56e1d59c47cf46a9 100644 --- a/core/java/android/content/ContentProviderNative.java +++ b/core/java/android/content/ContentProviderNative.java @@ -800,5 +800,6 @@ final class ContentProviderProxy implements IContentProvider } } + @UnsupportedAppUsage private IBinder mRemote; } diff --git a/core/java/android/content/ContentProviderOperation.java b/core/java/android/content/ContentProviderOperation.java index 6a3fa6b2f197802b415affa0c45fd82eb4fa86e0..a41b5d3fb781833a90a7ab5eafdf6d032900c3d4 100644 --- a/core/java/android/content/ContentProviderOperation.java +++ b/core/java/android/content/ContentProviderOperation.java @@ -460,7 +460,7 @@ public class ContentProviderOperation implements Parcelable { return 0; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ContentProviderOperation createFromParcel(Parcel source) { return new ContentProviderOperation(source); diff --git a/core/java/android/content/ContentProviderResult.java b/core/java/android/content/ContentProviderResult.java index 4196f27f17f88e161afe2e9cc3917119028fbee4..d90173ceb3cd6d0e494c42ca0b7d2b5f0e383a05 100644 --- a/core/java/android/content/ContentProviderResult.java +++ b/core/java/android/content/ContentProviderResult.java @@ -71,7 +71,7 @@ public class ContentProviderResult implements Parcelable { return 0; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ContentProviderResult createFromParcel(Parcel source) { return new ContentProviderResult(source); diff --git a/core/java/android/content/ContentValues.java b/core/java/android/content/ContentValues.java index 06d0f66d85485eb56b4f0889dad89ef741eece68..eafeed220050ae96ec8c6810ce430d2d67969092 100644 --- a/core/java/android/content/ContentValues.java +++ b/core/java/android/content/ContentValues.java @@ -497,7 +497,7 @@ public final class ContentValues implements Parcelable { return mMap.keySet(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ContentValues createFromParcel(Parcel in) { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 29added9aa51b3e70aed8991f342f41a1805eda9..beb1fb68d21885809432b2eb610190377be86a82 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -770,6 +770,7 @@ public abstract class Context { *

* This is not generally intended for third party application developers. */ + @NonNull public String getOpPackageName() { throw new RuntimeException("Not implemented. Must override in a subclass."); } @@ -1741,7 +1742,8 @@ public abstract class Context { */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) @SystemApi - public void startActivityAsUser(@RequiresPermission Intent intent, UserHandle user) { + public void startActivityAsUser(@RequiresPermission @NonNull Intent intent, + @NonNull UserHandle user) { throw new RuntimeException("Not implemented. Must override in a subclass."); } @@ -2981,7 +2983,7 @@ public abstract class Context { * * @see #bindService */ - public boolean bindIsolatedService(@RequiresPermission Intent service, + public boolean bindIsolatedService(@RequiresPermission @NonNull Intent service, @NonNull ServiceConnection conn, @BindServiceFlags int flags, @NonNull String instanceName) { throw new RuntimeException("Not implemented. Must override in a subclass."); diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl index 9f6e236306e0410254c19a43591110457f362bee..a34a9951671cca3115729ff6e2ed058ae63445a4 100644 --- a/core/java/android/content/IContentService.aidl +++ b/core/java/android/content/IContentService.aidl @@ -61,6 +61,7 @@ interface IContentService { */ void sync(in SyncRequest request, String callingPackage); void syncAsUser(in SyncRequest request, int userId, String callingPackage); + @UnsupportedAppUsage void cancelSync(in Account account, String authority, in ComponentName cname); void cancelSyncAsUser(in Account account, String authority, in ComponentName cname, int userId); @@ -118,6 +119,7 @@ interface IContentService { * Check if this account/provider is syncable. * @return >0 if it is syncable, 0 if not, and <0 if the state isn't known yet. */ + @UnsupportedAppUsage int getIsSyncable(in Account account, String providerName); int getIsSyncableAsUser(in Account account, String providerName, int userId); @@ -128,9 +130,11 @@ interface IContentService { void setIsSyncable(in Account account, String providerName, int syncable); void setIsSyncableAsUser(in Account account, String providerName, int syncable, int userId); + @UnsupportedAppUsage void setMasterSyncAutomatically(boolean flag); void setMasterSyncAutomaticallyAsUser(boolean flag, int userId); + @UnsupportedAppUsage boolean getMasterSyncAutomatically(); boolean getMasterSyncAutomaticallyAsUser(int userId); @@ -141,6 +145,7 @@ interface IContentService { * Returns the types of the SyncAdapters that are registered with the system. * @return Returns the types of the SyncAdapters that are registered with the system. */ + @UnsupportedAppUsage SyncAdapterType[] getSyncAdapterTypes(); SyncAdapterType[] getSyncAdapterTypesAsUser(int userId); @@ -154,6 +159,7 @@ interface IContentService { * @param cname component to identify sync service, must be null if account/providerName are * non-null. */ + @UnsupportedAppUsage boolean isSyncActive(in Account account, String authority, in ComponentName cname); /** diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl index 3d9272388e03009ea5f49fbbfe0cea40aff2b136..2b45021db90ed20f3d4bd5c7f9ff5364347542a5 100644 --- a/core/java/android/content/IIntentReceiver.aidl +++ b/core/java/android/content/IIntentReceiver.aidl @@ -27,6 +27,7 @@ import android.os.Bundle; * {@hide} */ oneway interface IIntentReceiver { + @UnsupportedAppUsage void performReceive(in Intent intent, int resultCode, String data, in Bundle extras, boolean ordered, boolean sticky, int sendingUser); } diff --git a/core/java/android/content/ISyncAdapter.aidl b/core/java/android/content/ISyncAdapter.aidl index 0eb581e6b5854b8be094315d23bc8d5d3664fca5..9242d0289cfa2ccfa2be6b72ecd0a42d81d68972 100644 --- a/core/java/android/content/ISyncAdapter.aidl +++ b/core/java/android/content/ISyncAdapter.aidl @@ -32,6 +32,7 @@ oneway interface ISyncAdapter { * * @param cb If called back with {@code false} accounts are not synced. */ + @UnsupportedAppUsage void onUnsyncableAccount(ISyncAdapterUnsyncableAccountCallback cb); /** @@ -44,6 +45,7 @@ oneway interface ISyncAdapter { * @param account the account that should be synced * @param extras SyncAdapter-specific parameters */ + @UnsupportedAppUsage void startSync(ISyncContext syncContext, String authority, in Account account, in Bundle extras); @@ -52,5 +54,6 @@ oneway interface ISyncAdapter { * after the ISyncContext.onFinished() for that sync was called. * @param syncContext the ISyncContext that was passed to {@link #startSync} */ + @UnsupportedAppUsage void cancelSync(ISyncContext syncContext); } diff --git a/core/java/android/content/ISyncServiceAdapter.aidl b/core/java/android/content/ISyncServiceAdapter.aidl index d419307e7fa24c98aa8ec4203a229bf560744371..29f3a406e5a97d5c71b08fea92915484bc5bbb92 100644 --- a/core/java/android/content/ISyncServiceAdapter.aidl +++ b/core/java/android/content/ISyncServiceAdapter.aidl @@ -35,11 +35,13 @@ oneway interface ISyncServiceAdapter { * @param extras SyncAdapter-specific parameters. * */ + @UnsupportedAppUsage void startSync(ISyncContext syncContext, in Bundle extras); /** * Cancel the currently ongoing sync. */ + @UnsupportedAppUsage void cancelSync(ISyncContext syncContext); } diff --git a/core/java/android/content/ISyncStatusObserver.aidl b/core/java/android/content/ISyncStatusObserver.aidl index eb2684544abf42970250a95d6070df90c7045496..64bf3bd355e499a6339237d87349b086fff4f9ff 100644 --- a/core/java/android/content/ISyncStatusObserver.aidl +++ b/core/java/android/content/ISyncStatusObserver.aidl @@ -20,5 +20,6 @@ package android.content; * @hide */ oneway interface ISyncStatusObserver { + @UnsupportedAppUsage void onStatusChanged(int which); } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index af4949a59ef8507f52694ea1c954effc4c0a2cc0..79342328167f80091c9fbb6fb571d80aa15ec930 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -27,6 +27,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; @@ -855,7 +856,7 @@ public class Intent implements Parcelable, Cloneable { /** * Used to read a ShortcutIconResource from a Parcel. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ShortcutIconResource createFromParcel(Parcel source) { @@ -1902,6 +1903,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @SystemApi + @TestApi public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME"; /** @@ -2122,6 +2124,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES) @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES"; @@ -10356,7 +10359,7 @@ public class Intent implements Parcelable, Cloneable { out.writeBundle(mExtras); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Intent createFromParcel(Parcel in) { return new Intent(in); diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index 36d8a3720b5e45e2124e54268e2d0fec87c004b3..9d523633feb6603e1923efae8b089aa4d2ae9ce5 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -1896,7 +1896,7 @@ public class IntentFilter implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public IntentFilter createFromParcel(Parcel source) { return new IntentFilter(source); diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java index bfd1a43d36be85e6cc48f47cae46ae58c0f4ef44..ec0bac486c656d205ae8e41c60ea970047f11c7c 100644 --- a/core/java/android/content/IntentSender.java +++ b/core/java/android/content/IntentSender.java @@ -316,7 +316,7 @@ public class IntentSender implements Parcelable { out.writeStrongBinder(mTarget.asBinder()); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public IntentSender createFromParcel(Parcel in) { IBinder target = in.readStrongBinder(); diff --git a/core/java/android/content/LocusId.java b/core/java/android/content/LocusId.java index 9548f9c32d90ab2802fbd02f66a3654adbc4f359..c67ff7caaf6434d9f7ea925e2f5c18404a543ae5 100644 --- a/core/java/android/content/LocusId.java +++ b/core/java/android/content/LocusId.java @@ -16,7 +16,6 @@ package android.content; import android.annotation.NonNull; -import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; @@ -34,28 +33,30 @@ import java.io.PrintWriter; // TODO(b/123577059): make sure this is well documented and understandable public final class LocusId implements Parcelable { - private final Uri mUri; + private final String mId; /** * Default constructor. + * + * @throws IllegalArgumentException if {@code id} is empty or {@code null}. */ - public LocusId(@NonNull Uri uri) { - mUri = Preconditions.checkNotNull(uri); + public LocusId(@NonNull String id) { + mId = Preconditions.checkStringNotEmpty(id, "id cannot be empty"); } /** - * Gets the {@code uri} associated with the locus. + * Gets the {@code id} associated with the locus. */ @NonNull - public Uri getUri() { - return mUri; + public String getId() { + return mId; } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((mUri == null) ? 0 : mUri.hashCode()); + result = prime * result + ((mId == null) ? 0 : mId.hashCode()); return result; } @@ -65,26 +66,27 @@ public final class LocusId implements Parcelable { if (obj == null) return false; if (getClass() != obj.getClass()) return false; final LocusId other = (LocusId) obj; - if (mUri == null) { - if (other.mUri != null) return false; + if (mId == null) { + if (other.mId != null) return false; } else { - if (!mUri.equals(other.mUri)) return false; + if (!mId.equals(other.mId)) return false; } return true; } @Override public String toString() { - return "LocusId[uri=" + getSanitizedUri() + "]"; + return "LocusId[" + getSanitizedId() + "]"; } /** @hide */ public void dump(@NonNull PrintWriter pw) { - pw.print("uri:"); pw.println(getSanitizedUri()); + pw.print("id:"); pw.println(getSanitizedId()); } - private String getSanitizedUri() { - final int size = mUri.toString().length(); + @NonNull + private String getSanitizedId() { + final int size = mId.length(); return size + "_chars"; } @@ -94,19 +96,20 @@ public final class LocusId implements Parcelable { } @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mUri, flags); + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeString(mId); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { + @NonNull @Override - public LocusId createFromParcel(Parcel source) { - final Uri uri = source.readParcelable(null); - return new LocusId(uri); + public LocusId createFromParcel(Parcel parcel) { + return new LocusId(parcel.readString()); } + @NonNull @Override public LocusId[] newArray(int size) { return new LocusId[size]; diff --git a/core/java/android/content/LoggingContentInterface.java b/core/java/android/content/LoggingContentInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..26d01b99abd0dfb3443bcd3a18087cb3c9efcd47 --- /dev/null +++ b/core/java/android/content/LoggingContentInterface.java @@ -0,0 +1,199 @@ +/* + * 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.content; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.net.Uri; +import android.os.Binder; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.util.Log; + +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * Instance of {@link ContentInterface} that logs all inputs and outputs while + * delegating to another {@link ContentInterface}. + * + * @hide + */ +public class LoggingContentInterface implements ContentInterface { + private final String tag; + private final ContentInterface delegate; + + public LoggingContentInterface(String tag, ContentInterface delegate) { + this.tag = tag; + this.delegate = delegate; + } + + private void log(String method, Object res, Object... args) { + // First, force-unparcel any bundles so we can log them + for (Object arg : args) { + if (arg instanceof Bundle) { + ((Bundle) arg).size(); + } + } + + final StringBuilder sb = new StringBuilder(); + sb.append("callingUid=").append(Binder.getCallingUid()).append(' '); + sb.append(method); + sb.append('(').append(deepToString(args)).append(')'); + if (res instanceof Cursor) { + sb.append('\n'); + DatabaseUtils.dumpCursor((Cursor) res, sb); + } else { + sb.append(" = ").append(deepToString(res)); + } + Log.v(tag, sb.toString()); + } + + private String deepToString(Object value) { + if (value != null && value.getClass().isArray()) { + return Arrays.deepToString((Object[]) value); + } else { + return String.valueOf(value); + } + } + + @Override + public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, + @Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) + throws RemoteException { + final Cursor res = delegate.query(uri, projection, queryArgs, cancellationSignal); + log("query", res, uri, projection, queryArgs, cancellationSignal); + return res; + } + + @Override + public @Nullable String getType(@NonNull Uri uri) throws RemoteException { + final String res = delegate.getType(uri); + log("getType", res, uri); + return res; + } + + @Override + public @Nullable String[] getStreamTypes(@NonNull Uri uri, @NonNull String mimeTypeFilter) + throws RemoteException { + final String[] res = delegate.getStreamTypes(uri, mimeTypeFilter); + log("getStreamTypes", res, uri, mimeTypeFilter); + return res; + } + + @Override + public @Nullable Uri canonicalize(@NonNull Uri uri) throws RemoteException { + final Uri res = delegate.canonicalize(uri); + log("canonicalize", res, uri); + return res; + } + + @Override + public @Nullable Uri uncanonicalize(@NonNull Uri uri) throws RemoteException { + final Uri res = delegate.uncanonicalize(uri); + log("uncanonicalize", res, uri); + return res; + } + + @Override + public boolean refresh(@NonNull Uri uri, @Nullable Bundle args, + @Nullable CancellationSignal cancellationSignal) throws RemoteException { + final boolean res = delegate.refresh(uri, args, cancellationSignal); + log("refresh", res, uri, args, cancellationSignal); + return res; + } + + @Override + public @Nullable Uri insert(@NonNull Uri uri, @Nullable ContentValues initialValues) + throws RemoteException { + final Uri res = delegate.insert(uri, initialValues); + log("insert", res, uri, initialValues); + return res; + } + + @Override + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] initialValues) + throws RemoteException { + final int res = delegate.bulkInsert(uri, initialValues); + log("bulkInsert", res, uri, initialValues); + return res; + } + + @Override + public int delete(@NonNull Uri uri, @Nullable String selection, + @Nullable String[] selectionArgs) throws RemoteException { + final int res = delegate.delete(uri, selection, selectionArgs); + log("delete", res, uri, selection, selectionArgs); + return res; + } + + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, + @Nullable String[] selectionArgs) throws RemoteException { + final int res = delegate.update(uri, values, selection, selectionArgs); + log("update", res, uri, values, selection, selectionArgs); + return res; + } + + @Override + public @Nullable ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) throws RemoteException, FileNotFoundException { + final ParcelFileDescriptor res = delegate.openFile(uri, mode, signal); + log("openFile", res, uri, mode, signal); + return res; + } + + @Override + public @Nullable AssetFileDescriptor openAssetFile(@NonNull Uri uri, @NonNull String mode, + @Nullable CancellationSignal signal) throws RemoteException, FileNotFoundException { + final AssetFileDescriptor res = delegate.openAssetFile(uri, mode, signal); + log("openAssetFile", res, uri, mode, signal); + return res; + } + + @Override + public @Nullable AssetFileDescriptor openTypedAssetFile(@NonNull Uri uri, + @NonNull String mimeTypeFilter, @Nullable Bundle opts, + @Nullable CancellationSignal signal) throws RemoteException, FileNotFoundException { + final AssetFileDescriptor res = delegate.openTypedAssetFile(uri, mimeTypeFilter, opts, signal); + log("openTypedAssetFile", res, uri, mimeTypeFilter, opts, signal); + return res; + } + + @Override + public @NonNull ContentProviderResult[] applyBatch(@NonNull String authority, + @NonNull ArrayList operations) + throws RemoteException, OperationApplicationException { + final ContentProviderResult[] res = delegate.applyBatch(authority, operations); + log("applyBatch", res, authority, operations); + return res; + } + + @Override + public @Nullable Bundle call(@NonNull String authority, @NonNull String method, + @Nullable String arg, @Nullable Bundle extras) throws RemoteException { + final Bundle res = delegate.call(authority, method, arg, extras); + log("call", res, authority, method, arg, extras); + return res; + } +} diff --git a/core/java/android/content/PeriodicSync.java b/core/java/android/content/PeriodicSync.java index 0441cccdd4f306c669c8b8b0a7ed455d94cfa1c2..a075148a62936a2549c1f1729854014528485e19 100644 --- a/core/java/android/content/PeriodicSync.java +++ b/core/java/android/content/PeriodicSync.java @@ -104,7 +104,7 @@ public class PeriodicSync implements Parcelable { dest.writeLong(flexTime); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public PeriodicSync createFromParcel(Parcel source) { return new PeriodicSync(source); diff --git a/core/java/android/content/RestrictionEntry.java b/core/java/android/content/RestrictionEntry.java index 0473475c1a771f2cc00a4bf824690bc4d7d74b9a..010992c98d4857033d70eb5d4a2bb646c6ea69f2 100644 --- a/core/java/android/content/RestrictionEntry.java +++ b/core/java/android/content/RestrictionEntry.java @@ -531,7 +531,7 @@ public class RestrictionEntry implements Parcelable { dest.writeParcelableArray(mRestrictions, 0); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RestrictionEntry createFromParcel(Parcel source) { return new RestrictionEntry(source); } diff --git a/core/java/android/content/SyncAdapterType.java b/core/java/android/content/SyncAdapterType.java index 6cd4841b9cf08c7b38636b284c13c29b44dbf257..8c8fe5a0688807f2b6f6ea727cc739e17e10d58a 100644 --- a/core/java/android/content/SyncAdapterType.java +++ b/core/java/android/content/SyncAdapterType.java @@ -241,7 +241,7 @@ public class SyncAdapterType implements Parcelable { source.readString()); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SyncAdapterType createFromParcel(Parcel source) { return new SyncAdapterType(source); } diff --git a/core/java/android/content/SyncInfo.java b/core/java/android/content/SyncInfo.java index 403cbcbf8b2fcffee8b995fa3297f5d58918c2f4..d3f2eed8126f0e43ab63a4148ca1527fdb7e12d8 100644 --- a/core/java/android/content/SyncInfo.java +++ b/core/java/android/content/SyncInfo.java @@ -106,7 +106,7 @@ public class SyncInfo implements Parcelable { /** @hide */ @UnsupportedAppUsage - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SyncInfo createFromParcel(Parcel in) { return new SyncInfo(in); } diff --git a/core/java/android/content/SyncRequest.java b/core/java/android/content/SyncRequest.java index c18b2823ed47682c46096afc97b7784de8bda7bf..5f1f18016e0d4f3d546476e01d1872036b5f8405 100644 --- a/core/java/android/content/SyncRequest.java +++ b/core/java/android/content/SyncRequest.java @@ -122,7 +122,7 @@ public class SyncRequest implements Parcelable { return mSyncRunTimeSecs; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SyncRequest createFromParcel(Parcel in) { diff --git a/core/java/android/content/SyncResult.java b/core/java/android/content/SyncResult.java index f67d7f53d1c17a0f2adfd8a6e715641723d89a59..8280f8e637baba5d8d7e1ac7262f28202756edbe 100644 --- a/core/java/android/content/SyncResult.java +++ b/core/java/android/content/SyncResult.java @@ -235,7 +235,7 @@ public final class SyncResult implements Parcelable { stats.clear(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SyncResult createFromParcel(Parcel in) { return new SyncResult(in); } diff --git a/core/java/android/content/SyncStats.java b/core/java/android/content/SyncStats.java index b7f2a8520f9cf01688ce4bab90369a188ee06e0a..03b2250edee146f2e10a640a67c3576aa3c670d6 100644 --- a/core/java/android/content/SyncStats.java +++ b/core/java/android/content/SyncStats.java @@ -166,7 +166,7 @@ public class SyncStats implements Parcelable { dest.writeLong(numSkippedEntries); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SyncStats createFromParcel(Parcel in) { return new SyncStats(in); } diff --git a/core/java/android/content/SyncStatusInfo.java b/core/java/android/content/SyncStatusInfo.java index a9065caec13d1902149bfa2bc1b14b9c1b63c575..3f64515772586f8091e65a328814e512e98b4fad 100644 --- a/core/java/android/content/SyncStatusInfo.java +++ b/core/java/android/content/SyncStatusInfo.java @@ -401,7 +401,7 @@ public class SyncStatusInfo implements Parcelable { } @UnsupportedAppUsage - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SyncStatusInfo createFromParcel(Parcel in) { return new SyncStatusInfo(in); } diff --git a/core/java/android/content/UriPermission.java b/core/java/android/content/UriPermission.java index df9200d7084c52280d6c536a4f76dff0a2cc61fc..d3a9cb812539ea3323980f5d64f1c23160c399bd 100644 --- a/core/java/android/content/UriPermission.java +++ b/core/java/android/content/UriPermission.java @@ -103,7 +103,7 @@ public final class UriPermission implements Parcelable { dest.writeLong(mPersistedTime); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public UriPermission createFromParcel(Parcel source) { return new UriPermission(source); diff --git a/core/java/android/content/om/IOverlayManager.aidl b/core/java/android/content/om/IOverlayManager.aidl index 5b3c9dd9337077c5831fdbf08c6bbe82fa08c87e..722c128c0502582fb89eb8da48b584a85b6b695a 100644 --- a/core/java/android/content/om/IOverlayManager.aidl +++ b/core/java/android/content/om/IOverlayManager.aidl @@ -37,6 +37,7 @@ interface IOverlayManager { * mapped to lists of overlays; if no overlays exist for the * requested user, an empty map is returned. */ + @UnsupportedAppUsage Map getAllOverlays(in int userId); /** @@ -60,6 +61,7 @@ interface IOverlayManager { * @return The OverlayInfo for the overlay package; or null if no such * overlay package exists. */ + @UnsupportedAppUsage OverlayInfo getOverlayInfo(in String packageName, in int userId); /** diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java index 1989f06ca76bf4b5ce98defd04d94e8f04e10332..999d986628284e903747d1eba1b4a8994a7075ab 100644 --- a/core/java/android/content/om/OverlayInfo.java +++ b/core/java/android/content/om/OverlayInfo.java @@ -264,7 +264,7 @@ public final class OverlayInfo implements Parcelable { dest.writeBoolean(isStatic); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public OverlayInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 7cc439138527d3e5cfb557eddeaed4eb580dadd9..415c2428405f6e9cb3c79750d5327edc1e1197a9 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -1314,7 +1314,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ActivityInfo createFromParcel(Parcel source) { return new ActivityInfo(source); diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 2f988c0f82adff4d09eda03f8edfc93ec3144c49..9d813d32ca533778aa0fba413a7537ad32a94590 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -664,6 +664,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public static final int PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE = 1 << 26; + /** + * Value for {@link #privateFlags}: true if the application allows its audio playback + * to be captured by other apps. + * + * @hide + */ + public static final int PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE = 1 << 27; + /** @hide */ @IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = { PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE, @@ -690,7 +698,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { PRIVATE_FLAG_VENDOR, PRIVATE_FLAG_VIRTUAL_PRELOAD, PRIVATE_FLAG_HAS_FRAGILE_USER_DATA, - PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE + PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE, + PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE }) @Retention(RetentionPolicy.SOURCE) public @interface ApplicationInfoPrivateFlags {} @@ -1357,6 +1366,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { } pw.println(prefix + "HiddenApiEnforcementPolicy=" + getHiddenApiEnforcementPolicy()); pw.println(prefix + "usesNonSdkApi=" + usesNonSdkApi()); + pw.println(prefix + "allowsPlaybackCapture=" + + (isAudioPlaybackCaptureAllowed() ? "true" : "false")); } super.dumpBack(pw, prefix); } @@ -1644,7 +1655,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeString(zygotePreloadName); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ApplicationInfo createFromParcel(Parcel source) { return new ApplicationInfo(source); @@ -1811,6 +1822,17 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return (privateFlags & PRIVATE_FLAG_HAS_FRAGILE_USER_DATA) != 0; } + /** + * Whether an app allows its playback audio to be captured by other apps. + * + * @return {@code true} if the app indicates that its audio can be captured by other apps. + * + * @hide + */ + public boolean isAudioPlaybackCaptureAllowed() { + return (privateFlags & PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE) != 0; + } + private boolean isAllowedToUseHiddenApis() { if (isSignedWithPlatformKey()) { return true; diff --git a/core/java/android/content/pm/BaseParceledListSlice.java b/core/java/android/content/pm/BaseParceledListSlice.java index a3e5d6d43588d9875067a0bcbdf7b5da1146d631..4178309450bd14d462d3482f3a359b019e23e6d1 100644 --- a/core/java/android/content/pm/BaseParceledListSlice.java +++ b/core/java/android/content/pm/BaseParceledListSlice.java @@ -128,8 +128,8 @@ abstract class BaseParceledListSlice implements Parcelable { 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/ChangedPackages.java b/core/java/android/content/pm/ChangedPackages.java index b78c71d73095e1f4689d6a1ffb84054905be2e79..950a29a8757be3c7ace73213a81a22a3cb2b7b2f 100644 --- a/core/java/android/content/pm/ChangedPackages.java +++ b/core/java/android/content/pm/ChangedPackages.java @@ -71,7 +71,7 @@ public final class ChangedPackages implements Parcelable { return mPackageNames; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ChangedPackages createFromParcel(Parcel in) { return new ChangedPackages(in); diff --git a/core/java/android/content/pm/ConfigurationInfo.java b/core/java/android/content/pm/ConfigurationInfo.java index 8edd436fa8ee29b4a2ab954b8743919a2eef925d..20494e91acce420af873dc99e24df0dfab8caf3b 100644 --- a/core/java/android/content/pm/ConfigurationInfo.java +++ b/core/java/android/content/pm/ConfigurationInfo.java @@ -113,7 +113,7 @@ public class ConfigurationInfo implements Parcelable { dest.writeInt(reqGlEsVersion); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ConfigurationInfo createFromParcel(Parcel source) { return new ConfigurationInfo(source); diff --git a/core/java/android/content/pm/FeatureGroupInfo.java b/core/java/android/content/pm/FeatureGroupInfo.java index 79a6eea9a95569be0c57c4a9b8498e6e266d6c95..38c8f746832b577db2bba71d005224f7baad203b 100644 --- a/core/java/android/content/pm/FeatureGroupInfo.java +++ b/core/java/android/content/pm/FeatureGroupInfo.java @@ -49,7 +49,7 @@ public final class FeatureGroupInfo implements Parcelable { dest.writeTypedArray(features, flags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public FeatureGroupInfo createFromParcel(Parcel source) { FeatureGroupInfo group = new FeatureGroupInfo(); diff --git a/core/java/android/content/pm/FeatureInfo.java b/core/java/android/content/pm/FeatureInfo.java index ff9fd8ec31c533feb9eace587b6c8ba711f44832..dc576e89cf8fbecb1c48934485ac510ca3638a98 100644 --- a/core/java/android/content/pm/FeatureInfo.java +++ b/core/java/android/content/pm/FeatureInfo.java @@ -126,7 +126,7 @@ public class FeatureInfo implements Parcelable { proto.end(token); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public FeatureInfo createFromParcel(Parcel source) { return new FeatureInfo(source); diff --git a/core/java/android/content/pm/IPackageDataObserver.aidl b/core/java/android/content/pm/IPackageDataObserver.aidl index d010ee4327520bb3f5cafc49201a4ea25877342a..926ecda04ba85ef108411ea6a118f53fa1f913c0 100644 --- a/core/java/android/content/pm/IPackageDataObserver.aidl +++ b/core/java/android/content/pm/IPackageDataObserver.aidl @@ -24,5 +24,6 @@ package android.content.pm; * {@hide} */ oneway interface IPackageDataObserver { + @UnsupportedAppUsage void onRemoveCompleted(in String packageName, boolean succeeded); } diff --git a/core/java/android/content/pm/IPackageDeleteObserver.aidl b/core/java/android/content/pm/IPackageDeleteObserver.aidl index 2e2d16ebd7fb31690c58a29e9208721026eda861..faae81e3254bcfc7f67ad654010b4add4a677683 100644 --- a/core/java/android/content/pm/IPackageDeleteObserver.aidl +++ b/core/java/android/content/pm/IPackageDeleteObserver.aidl @@ -23,6 +23,7 @@ package android.content.pm; * {@hide} */ oneway interface IPackageDeleteObserver { + @UnsupportedAppUsage void packageDeleted(in String packageName, in int returnCode); } diff --git a/core/java/android/content/pm/IPackageDeleteObserver2.aidl b/core/java/android/content/pm/IPackageDeleteObserver2.aidl index bff3baa557689a510f1c7baadd41f7970e2812e4..ea8096755e5c45a93a40dae6ec921f0cd2cd0535 100644 --- a/core/java/android/content/pm/IPackageDeleteObserver2.aidl +++ b/core/java/android/content/pm/IPackageDeleteObserver2.aidl @@ -21,5 +21,6 @@ import android.content.Intent; /** {@hide} */ oneway interface IPackageDeleteObserver2 { void onUserActionRequired(in Intent intent); + @UnsupportedAppUsage void onPackageDeleted(String packageName, int returnCode, String msg); } diff --git a/core/java/android/content/pm/IPackageInstallObserver2.aidl b/core/java/android/content/pm/IPackageInstallObserver2.aidl index bb5f22a2faa1c8f75c46dd902810c30d921bab59..ed2eb7dceff5afcb51db1829f5da07fd87a5472a 100644 --- a/core/java/android/content/pm/IPackageInstallObserver2.aidl +++ b/core/java/android/content/pm/IPackageInstallObserver2.aidl @@ -25,6 +25,7 @@ import android.os.Bundle; * @hide */ oneway interface IPackageInstallObserver2 { + @UnsupportedAppUsage void onUserActionRequired(in Intent intent); /** @@ -42,5 +43,6 @@ oneway interface IPackageInstallObserver2 { * * */ + @UnsupportedAppUsage void onPackageInstalled(String basePackageName, int returnCode, String msg, in Bundle extras); } diff --git a/core/java/android/content/pm/IPackageInstaller.aidl b/core/java/android/content/pm/IPackageInstaller.aidl index 0cf83fd4655bcf9a94f50047aca1b76fba4790bf..8e840796e953f0afdc4a705d6492c30f2b87c596 100644 --- a/core/java/android/content/pm/IPackageInstaller.aidl +++ b/core/java/android/content/pm/IPackageInstaller.aidl @@ -47,6 +47,7 @@ interface IPackageInstaller { void registerCallback(IPackageInstallerCallback callback, int userId); void unregisterCallback(IPackageInstallerCallback callback); + @UnsupportedAppUsage void uninstall(in VersionedPackage versionedPackage, String callerPackageName, int flags, in IntentSender statusReceiver, int userId); diff --git a/core/java/android/content/pm/IPackageInstallerCallback.aidl b/core/java/android/content/pm/IPackageInstallerCallback.aidl index 974eb1ede5b2c0918d854f4a9e6ccbe531e262cf..ee265007b39d43784eca98fe9f2601d448da13b1 100644 --- a/core/java/android/content/pm/IPackageInstallerCallback.aidl +++ b/core/java/android/content/pm/IPackageInstallerCallback.aidl @@ -18,9 +18,14 @@ package android.content.pm; /** {@hide} */ oneway interface IPackageInstallerCallback { + @UnsupportedAppUsage void onSessionCreated(int sessionId); + @UnsupportedAppUsage void onSessionBadgingChanged(int sessionId); + @UnsupportedAppUsage void onSessionActiveChanged(int sessionId, boolean active); + @UnsupportedAppUsage void onSessionProgressChanged(int sessionId, float progress); + @UnsupportedAppUsage void onSessionFinished(int sessionId, boolean success); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index dcbb4ac2d5f3f421163b54e4acad1ed04dc9a6d8..fd3529b05c35a51e3f5c9f23699f7fc7ca56499c 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -63,45 +63,60 @@ import android.content.IntentSender; */ interface IPackageManager { void checkPackageStartable(String packageName, int userId); + @UnsupportedAppUsage boolean isPackageAvailable(String packageName, int userId); + @UnsupportedAppUsage PackageInfo getPackageInfo(String packageName, int flags, int userId); PackageInfo getPackageInfoVersioned(in VersionedPackage versionedPackage, int flags, int userId); + @UnsupportedAppUsage int getPackageUid(String packageName, int flags, int userId); int[] getPackageGids(String packageName, int flags, int userId); + @UnsupportedAppUsage String[] currentToCanonicalPackageNames(in String[] names); + @UnsupportedAppUsage String[] canonicalToCurrentPackageNames(in String[] names); PermissionInfo getPermissionInfo(String name, String packageName, int flags); ParceledListSlice queryPermissionsByGroup(String group, int flags); + @UnsupportedAppUsage PermissionGroupInfo getPermissionGroupInfo(String name, int flags); ParceledListSlice getAllPermissionGroups(int flags); + @UnsupportedAppUsage ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId); + @UnsupportedAppUsage ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId); boolean activitySupportsIntent(in ComponentName className, in Intent intent, String resolvedType); + @UnsupportedAppUsage ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage int checkPermission(String permName, String pkgName, int userId); int checkUidPermission(String permName, int uid); + @UnsupportedAppUsage boolean addPermission(in PermissionInfo info); + @UnsupportedAppUsage void removePermission(String name); + @UnsupportedAppUsage void grantRuntimePermission(String packageName, String permissionName, int userId); void revokeRuntimePermission(String packageName, String permissionName, int userId); @@ -120,33 +135,43 @@ interface IPackageManager { boolean isProtectedBroadcast(String actionName); + @UnsupportedAppUsage int checkSignatures(String pkg1, String pkg2); + @UnsupportedAppUsage int checkUidSignatures(int uid1, int uid2); List getAllPackages(); + @UnsupportedAppUsage String[] getPackagesForUid(int uid); + @UnsupportedAppUsage String getNameForUid(int uid); String[] getNamesForUids(in int[] uids); + @UnsupportedAppUsage int getUidForSharedUser(String sharedUserName); + @UnsupportedAppUsage int getFlagsForUid(int uid); int getPrivateFlagsForUid(int uid); + @UnsupportedAppUsage boolean isUidPrivileged(int uid); + @UnsupportedAppUsage String[] getAppOpPermissionPackages(String permissionName); + @UnsupportedAppUsage ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId); boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId); + @UnsupportedAppUsage ParceledListSlice queryIntentActivities(in Intent intent, String resolvedType, int flags, int userId); @@ -173,6 +198,7 @@ interface IPackageManager { * limit that kicks in when flags are included that bloat up the data * returned. */ + @UnsupportedAppUsage ParceledListSlice getInstalledPackages(int flags, in int userId); /** @@ -190,6 +216,7 @@ interface IPackageManager { * limit that kicks in when flags are included that bloat up the data * returned. */ + @UnsupportedAppUsage ParceledListSlice getInstalledApplications(int flags, int userId); /** @@ -210,20 +237,24 @@ interface IPackageManager { * @param outInfo Filled in with a list of the ProviderInfo for each * name in 'outNames'. */ + @UnsupportedAppUsage void querySyncProviders(inout List outNames, inout List outInfo); ParceledListSlice queryContentProviders( String processName, int uid, int flags, String metaDataKey); + @UnsupportedAppUsage InstrumentationInfo getInstrumentationInfo( in ComponentName className, int flags); + @UnsupportedAppUsage ParceledListSlice queryInstrumentation( String targetPackage, int flags); void finishPackageInstall(int token, boolean didLaunch); + @UnsupportedAppUsage void setInstallerPackageName(in String targetPackage, in String installerPackageName); void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName); @@ -243,24 +274,30 @@ interface IPackageManager { void deletePackageVersioned(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId, int flags); + @UnsupportedAppUsage String getInstallerPackageName(in String packageName); void resetApplicationPreferences(int userId); + @UnsupportedAppUsage ResolveInfo getLastChosenActivity(in Intent intent, String resolvedType, int flags); + @UnsupportedAppUsage void setLastChosenActivity(in Intent intent, String resolvedType, int flags, in IntentFilter filter, int match, in ComponentName activity); void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); + @UnsupportedAppUsage void replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); + @UnsupportedAppUsage void clearPackagePreferredActivities(String packageName); + @UnsupportedAppUsage int getPreferredActivities(out List outFilters, out List outActivities, String packageName); @@ -300,6 +337,7 @@ interface IPackageManager { * Report the set of 'Home' activity candidates, plus (if any) which of them * is the current "always use this one" setting. */ + @UnsupportedAppUsage ComponentName getHomeActivities(out List outHomeCandidates); void setHomeActivity(in ComponentName className, int userId); @@ -307,23 +345,27 @@ interface IPackageManager { /** * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}. */ + @UnsupportedAppUsage void setComponentEnabledSetting(in ComponentName componentName, in int newState, in int flags, int userId); /** * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}. */ + @UnsupportedAppUsage int getComponentEnabledSetting(in ComponentName componentName, int userId); /** * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}. */ + @UnsupportedAppUsage void setApplicationEnabledSetting(in String packageName, in int newState, int flags, int userId, String callingPackage); /** * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}. */ + @UnsupportedAppUsage int getApplicationEnabledSetting(in String packageName, int userId); /** @@ -341,6 +383,7 @@ interface IPackageManager { * Set whether the given package should be considered stopped, making * it not visible to implicit intents that filter out stopped packages. */ + @UnsupportedAppUsage void setPackageStoppedState(String packageName, boolean stopped, int userId); /** @@ -396,6 +439,7 @@ interface IPackageManager { * files need to be deleted * @param observer a callback used to notify when the deletion is finished. */ + @UnsupportedAppUsage void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer); /** @@ -436,6 +480,7 @@ interface IPackageManager { * Get a list of shared libraries that are available on the * system. */ + @UnsupportedAppUsage String[] getSystemSharedLibraryNames(); /** @@ -447,8 +492,10 @@ interface IPackageManager { boolean hasSystemFeature(String name, int version); void enterSafeMode(); + @UnsupportedAppUsage boolean isSafeMode(); void systemReady(); + @UnsupportedAppUsage boolean hasSystemUidErrors(); /** @@ -570,9 +617,11 @@ interface IPackageManager { int movePackage(in String packageName, in String volumeUuid); int movePrimaryStorage(in String volumeUuid); + @UnsupportedAppUsage boolean addPermissionAsync(in PermissionInfo info); boolean setInstallLocation(int loc); + @UnsupportedAppUsage int getInstallLocation(); int installExistingPackageAsUser(String packageName, int userId, int installFlags, @@ -600,17 +649,21 @@ interface IPackageManager { boolean isPermissionEnforced(String permission); /** Reflects current DeviceStorageMonitorService state */ + @UnsupportedAppUsage boolean isStorageLow(); + @UnsupportedAppUsage boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId); boolean getApplicationHiddenSettingAsUser(String packageName, int userId); void setSystemAppHiddenUntilInstalled(String packageName, boolean hidden); boolean setSystemAppInstallState(String packageName, boolean installed, int userId); + @UnsupportedAppUsage IPackageInstaller getPackageInstaller(); boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId); + @UnsupportedAppUsage boolean getBlockUninstallForUser(String packageName, int userId); KeySet getKeySetByAlias(String packageName, String alias); @@ -631,6 +684,7 @@ interface IPackageManager { boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId); + @UnsupportedAppUsage String getPermissionControllerPackageName(); ParceledListSlice getInstantApps(int userId); @@ -647,7 +701,9 @@ interface IPackageManager { */ void setUpdateAvailable(String packageName, boolean updateAvaialble); + @UnsupportedAppUsage String getServicesSystemSharedLibraryPackageName(); + @UnsupportedAppUsage String getSharedSystemSharedLibraryPackageName(); ChangedPackages getChangedPackages(int sequenceNumber, int userId); diff --git a/core/java/android/content/pm/IPackageStatsObserver.aidl b/core/java/android/content/pm/IPackageStatsObserver.aidl index ede4d1d9a791ac90e0ecbedb720b27d355bad72f..559a0355de17938d83ad0588808c1f8086eda852 100644 --- a/core/java/android/content/pm/IPackageStatsObserver.aidl +++ b/core/java/android/content/pm/IPackageStatsObserver.aidl @@ -26,5 +26,6 @@ import android.content.pm.PackageStats; */ oneway interface IPackageStatsObserver { + @UnsupportedAppUsage void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); } diff --git a/core/java/android/content/pm/InstantAppInfo.java b/core/java/android/content/pm/InstantAppInfo.java index cb04fc3ce8e117554353e2f96e751a5158372232..24d6a07ec4e8587dd8a714e7a223dbd9a6ac5a90 100644 --- a/core/java/android/content/pm/InstantAppInfo.java +++ b/core/java/android/content/pm/InstantAppInfo.java @@ -136,7 +136,7 @@ public final class InstantAppInfo implements Parcelable { parcel.writeParcelable(mApplicationInfo, flags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public InstantAppInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/content/pm/InstantAppIntentFilter.java b/core/java/android/content/pm/InstantAppIntentFilter.java index 257ab9675b8198bcc15fe4440b390d143f840f5f..7c63406f1d090d62ef8af6186b7575c70130235c 100644 --- a/core/java/android/content/pm/InstantAppIntentFilter.java +++ b/core/java/android/content/pm/InstantAppIntentFilter.java @@ -68,7 +68,7 @@ public final class InstantAppIntentFilter implements Parcelable { out.writeList(mFilters); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public InstantAppIntentFilter createFromParcel(Parcel in) { diff --git a/core/java/android/content/pm/InstantAppResolveInfo.java b/core/java/android/content/pm/InstantAppResolveInfo.java index 8184361bca80007639116159394ad7562622cf1f..4c963a6534b74d91139769c0431b7f9e7f142446 100644 --- a/core/java/android/content/pm/InstantAppResolveInfo.java +++ b/core/java/android/content/pm/InstantAppResolveInfo.java @@ -208,7 +208,7 @@ public final class InstantAppResolveInfo implements Parcelable { out.writeLong(mVersionCode); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InstantAppResolveInfo createFromParcel(Parcel in) { return new InstantAppResolveInfo(in); @@ -383,7 +383,7 @@ public final class InstantAppResolveInfo implements Parcelable { } @SuppressWarnings("hiding") - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public InstantAppDigest createFromParcel(Parcel in) { diff --git a/core/java/android/content/pm/InstrumentationInfo.java b/core/java/android/content/pm/InstrumentationInfo.java index fb2e4a046c9f1247227518f3bc773a73ef6ff5fe..574a1ee2d0cea4540ea61d0da21f8ab6b4978f32 100644 --- a/core/java/android/content/pm/InstrumentationInfo.java +++ b/core/java/android/content/pm/InstrumentationInfo.java @@ -176,7 +176,7 @@ public class InstrumentationInfo extends PackageItemInfo implements Parcelable { dest.writeInt((functionalTest == false) ? 0 : 1); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InstrumentationInfo createFromParcel(Parcel source) { return new InstrumentationInfo(source); diff --git a/core/java/android/content/pm/IntentFilterVerificationInfo.java b/core/java/android/content/pm/IntentFilterVerificationInfo.java index 068973b84d3824b9492bd5683b2bbb974ab7ca55..67bda2ce3944dc525e37d10f3b7ce00a4784c0bd 100644 --- a/core/java/android/content/pm/IntentFilterVerificationInfo.java +++ b/core/java/android/content/pm/IntentFilterVerificationInfo.java @@ -246,7 +246,7 @@ public final class IntentFilterVerificationInfo implements Parcelable { dest.writeStringList(new ArrayList<>(mDomains)); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public IntentFilterVerificationInfo createFromParcel(Parcel source) { return new IntentFilterVerificationInfo(source); diff --git a/core/java/android/content/pm/KeySet.java b/core/java/android/content/pm/KeySet.java index 643db7eff6063cb9d431e156f23f22c76db19964..5c1d35e372adf264718adfb201fd3b92dd3f25ca 100644 --- a/core/java/android/content/pm/KeySet.java +++ b/core/java/android/content/pm/KeySet.java @@ -63,7 +63,7 @@ public class KeySet implements Parcelable { * Implement Parcelable * @hide */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { /** diff --git a/core/java/android/content/pm/LabeledIntent.java b/core/java/android/content/pm/LabeledIntent.java index 68b0046ecac49609ee007d575b61859aa9d380dc..ae41252bc56772ebd4da448f69d604a2120a4359 100644 --- a/core/java/android/content/pm/LabeledIntent.java +++ b/core/java/android/content/pm/LabeledIntent.java @@ -180,7 +180,7 @@ public class LabeledIntent extends Intent { mIcon = in.readInt(); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public LabeledIntent createFromParcel(Parcel source) { return new LabeledIntent(source); diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index bf556ba0b6685c7ef41f5ebce1cacc916a8a1e31..0cc5f39314879deae9e8bd0ba36c3b9bb214c739 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -792,7 +792,7 @@ public class LauncherApps { * * @return an {@link AppUsageLimit} object describing the app time limit containing * the given package with the smallest time remaining, or {@code null} if none exist. - * @throws SecurityException when the caller is not the active launcher. + * @throws SecurityException when the caller is not the recents app. */ @Nullable public LauncherApps.AppUsageLimit getAppUsageLimit(@NonNull String packageName, @@ -1725,7 +1725,7 @@ public class LauncherApps { dest.writeStrongBinder(mInner.asBinder()); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public PinItemRequest createFromParcel(Parcel source) { return new PinItemRequest(source); @@ -1785,7 +1785,7 @@ public class LauncherApps { mUsageRemaining = source.readLong(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public AppUsageLimit createFromParcel(Parcel source) { return new AppUsageLimit(source); diff --git a/core/java/android/content/pm/ModuleInfo.java b/core/java/android/content/pm/ModuleInfo.java index 044e87d3dc7b22ceda8fe88b86c06d01788673fb..d930c92d66edfb6a6760d9c9c128883163bdee75 100644 --- a/core/java/android/content/pm/ModuleInfo.java +++ b/core/java/android/content/pm/ModuleInfo.java @@ -134,7 +134,7 @@ public final class ModuleInfo implements Parcelable { mHidden = source.readBoolean(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ModuleInfo createFromParcel(Parcel source) { return new ModuleInfo(source); diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 27a5b392855eefc9bec443551b6a29fb43ae1a74..725d60117780143e7877bfa47a2d1658e3c8b0be 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -489,7 +489,7 @@ public class PackageInfo implements Parcelable { dest.writeBoolean(isApex); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PackageInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/PackageInfoLite.java b/core/java/android/content/pm/PackageInfoLite.java index b878a955c223c7e07b242e30d19c2366c4e53ac6..f5442ec48d19c750b4a48d7407d95c4a909533c1 100644 --- a/core/java/android/content/pm/PackageInfoLite.java +++ b/core/java/android/content/pm/PackageInfoLite.java @@ -118,7 +118,7 @@ public class PackageInfoLite implements Parcelable { } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PackageInfoLite createFromParcel(Parcel source) { return new PackageInfoLite(source); diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 0304f19cc5b465ba826d2075369057f388bb6a00..b20cce9b7e3e95d9b32b932cff5c19d841c21d9d 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1343,6 +1343,7 @@ public class PackageInstaller { */ public boolean areHiddenOptionsSet() { return (installFlags & (PackageManager.INSTALL_ALLOW_DOWNGRADE + | PackageManager.INSTALL_RESPECT_ALLOW_DOWNGRADE | PackageManager.INSTALL_DONT_KILL_APP | PackageManager.INSTALL_INSTANT_APP | PackageManager.INSTALL_FULL_APP diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index a5464c2137af3417306f2b0f8510bcb53dcbc14f..c133fba031f27bdc7cde3274e50dcf011d9bdde7 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -721,6 +721,7 @@ public abstract class PackageManager { INSTALL_VIRTUAL_PRELOAD, INSTALL_APEX, INSTALL_ENABLE_ROLLBACK, + INSTALL_RESPECT_ALLOW_DOWNGRADE, }) @Retention(RetentionPolicy.SOURCE) public @interface InstallFlags {} @@ -865,6 +866,15 @@ public abstract class PackageManager { */ public static final int INSTALL_DISABLE_VERIFICATION = 0x00080000; + /** + * Flag parameter for {@link #installPackage} to indicate that + * {@link #INSTALL_ALLOW_DOWNGRADE} should be respected. + * + * @hide + */ + // TODO(b/127322579): rename + public static final int INSTALL_RESPECT_ALLOW_DOWNGRADE = 0x00100000; + /** @hide */ @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { DONT_KILL_APP diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 270e3879a71f2bcda90c886841c27d151a2332e3..2c1842c70db908f87778bd7fbd28e1d9df108b6f 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -160,6 +160,14 @@ public abstract class PackageManagerInternal { * @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/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 4db7d0a91c6aa6b0cd50ab68f2fa52b7bd5bff26..e516ed646f9a294ff06960e895a7b9817f965ecc 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -45,6 +45,7 @@ import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.StringRes; import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.ActivityTaskManager; @@ -3260,10 +3261,21 @@ public class PackageParser { private boolean parsePermissionGroup(Package owner, int flags, Resources res, XmlResourceParser parser, String[] outError) throws XmlPullParserException, IOException { - PermissionGroup perm = new PermissionGroup(owner); - TypedArray sa = res.obtainAttributes(parser, com.android.internal.R.styleable.AndroidManifestPermissionGroup); + + int requestDetailResourceId = sa.getResourceId( + com.android.internal.R.styleable.AndroidManifestPermissionGroup_requestDetail, 0); + int backgroundRequestResourceId = sa.getResourceId( + com.android.internal.R.styleable.AndroidManifestPermissionGroup_backgroundRequest, + 0); + int backgroundRequestDetailResourceId = sa.getResourceId( + com.android.internal.R.styleable + .AndroidManifestPermissionGroup_backgroundRequestDetail, 0); + + PermissionGroup perm = new PermissionGroup(owner, requestDetailResourceId, + backgroundRequestResourceId, backgroundRequestDetailResourceId); + if (!parsePackageItemInfo(owner, perm.info, outError, "", sa, true /*nameRequired*/, com.android.internal.R.styleable.AndroidManifestPermissionGroup_name, @@ -3282,14 +3294,6 @@ public class PackageParser { 0); perm.info.requestRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestPermissionGroup_request, 0); - perm.info.requestDetailResourceId = sa.getResourceId( - com.android.internal.R.styleable.AndroidManifestPermissionGroup_requestDetail, 0); - perm.info.backgroundRequestResourceId = sa.getResourceId( - com.android.internal.R.styleable.AndroidManifestPermissionGroup_backgroundRequest, - 0); - perm.info.backgroundRequestDetailResourceId = sa.getResourceId( - com.android.internal.R.styleable - .AndroidManifestPermissionGroup_backgroundRequestDetail, 0); perm.info.flags = sa.getInt( com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0); perm.info.priority = sa.getInt( @@ -3756,6 +3760,12 @@ public class PackageParser { ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE; } + if (sa.getBoolean( + R.styleable.AndroidManifestApplication_allowAudioPlaybackCapture, + owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.Q)) { + ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE; + } + ai.maxAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, 0); ai.minAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_minAspectRatio, 0); @@ -6402,7 +6412,7 @@ public class PackageParser { this.pastSigningCertificates = in.createTypedArray(Signature.CREATOR); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SigningDetails createFromParcel(Parcel source) { if (source.readBoolean()) { @@ -7670,9 +7680,12 @@ public class PackageParser { @UnsupportedAppUsage public final PermissionGroupInfo info; - public PermissionGroup(Package _owner) { - super(_owner); - info = new PermissionGroupInfo(); + public PermissionGroup(Package owner, @StringRes int requestDetailResourceId, + @StringRes int backgroundRequestResourceId, + @StringRes int backgroundRequestDetailResourceId) { + super(owner); + info = new PermissionGroupInfo(requestDetailResourceId, backgroundRequestResourceId, + backgroundRequestDetailResourceId); } public PermissionGroup(Package _owner, PermissionGroupInfo _info) { @@ -8438,6 +8451,21 @@ public class PackageParser { public static PackageInfo generatePackageInfoFromApex(File apexFile, boolean collectCerts) throws PackageParserException { PackageInfo pi = new PackageInfo(); + int parseFlags = 0; + if (collectCerts) { + parseFlags |= PARSE_COLLECT_CERTIFICATES; + try { + if (apexFile.getCanonicalPath().startsWith("/system")) { + // Don't need verify the APK integrity of APEXes on /system, just like + // we don't do that for APKs. + // TODO(b/126514108): we may be able to do this for APEXes on /data as well. + parseFlags |= PARSE_IS_SYSTEM_DIR; + } + } catch (IOException e) { + throw new PackageParserException(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION, + "Failed to get path for " + apexFile.getPath(), e); + } + } // TODO(b/123086053) properly fill in the ApplicationInfo with data from AndroidManifest // Add ApplicationInfo to the PackageInfo. @@ -8452,8 +8480,7 @@ public class PackageParser { // TODO(b/123052859): We should avoid these repeated calls to parseApkLite each time // we want to generate information for APEX modules. - PackageParser.ApkLite apk = PackageParser.parseApkLite(apexFile, - collectCerts ? PackageParser.PARSE_COLLECT_CERTIFICATES : 0); + PackageParser.ApkLite apk = PackageParser.parseApkLite(apexFile, parseFlags); pi.packageName = apk.packageName; ai.packageName = apk.packageName; diff --git a/core/java/android/content/pm/PackageStats.java b/core/java/android/content/pm/PackageStats.java index d3e86a35170e9e0b7dd98f7b718b89d00fe9c969..b0fecfac247180457a9ddbc1abba50cbc52866c3 100644 --- a/core/java/android/content/pm/PackageStats.java +++ b/core/java/android/content/pm/PackageStats.java @@ -79,7 +79,7 @@ public class PackageStats implements Parcelable { /** Size of the package's OBBs placed on external media. */ public long externalObbSize; - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PackageStats createFromParcel(Parcel in) { return new PackageStats(in); diff --git a/core/java/android/content/pm/PathPermission.java b/core/java/android/content/pm/PathPermission.java index 7e49d7df63ceaa3b02b5bf07380c2c765784b5df..11c9a7d19cda287bf3b45625fb420353539f7fc9 100644 --- a/core/java/android/content/pm/PathPermission.java +++ b/core/java/android/content/pm/PathPermission.java @@ -55,7 +55,7 @@ public class PathPermission extends PatternMatcher { mWritePermission = src.readString(); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PathPermission createFromParcel(Parcel source) { return new PathPermission(source); diff --git a/core/java/android/content/pm/PermissionGroupInfo.java b/core/java/android/content/pm/PermissionGroupInfo.java index f21612a58a53111b05b1845e00e689d3021023e9..e65e742cb6ec5ec04a9d595ff8791c7a824d8ae5 100644 --- a/core/java/android/content/pm/PermissionGroupInfo.java +++ b/core/java/android/content/pm/PermissionGroupInfo.java @@ -16,12 +16,20 @@ package android.content.pm; +import static android.content.res.Resources.ID_NULL; + +import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Information you can retrieve about a particular security permission * group known to the system. This corresponds to information collected from the @@ -33,7 +41,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * permission's description. From the "description" attribute or, * if not set, 0. */ - public int descriptionRes; + public @StringRes int descriptionRes; /** * A string resource identifier (in the package's resources) used to request the permissions. @@ -54,7 +62,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * @hide */ @SystemApi - public @StringRes int requestDetailResourceId; + public final @StringRes int requestDetailResourceId; /** * A string resource identifier (in the package's resources) used when requesting background @@ -66,7 +74,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * @hide */ @SystemApi - public @StringRes int backgroundRequestResourceId; + public final @StringRes int backgroundRequestResourceId; /** * A string resource identifier (in the package's resources) used as subtitle when requesting @@ -78,7 +86,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * @hide */ @SystemApi - public @StringRes int backgroundRequestDetailResourceId; + public final @StringRes int backgroundRequestDetailResourceId; /** * The description string provided in the AndroidManifest file, if any. You @@ -86,7 +94,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * is in a resource. You probably want * {@link PermissionInfo#loadDescription} instead. */ - public CharSequence nonLocalizedDescription; + public @Nullable CharSequence nonLocalizedDescription; /** * Flag for {@link #flags}, corresponding to personalInfo @@ -94,21 +102,48 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { */ public static final int FLAG_PERSONAL_INFO = 1<<0; + /** @hide */ + @IntDef(flag = true, prefix = { "FLAG_" }, value = { + FLAG_PERSONAL_INFO, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface Flags {} + /** * Additional flags about this group as given by * {@link android.R.attr#permissionGroupFlags}. */ - public int flags; + public @Flags int flags; /** * Prioritization of this group, for visually sorting with other groups. */ public int priority; + /** + * @hide + */ + public PermissionGroupInfo(@StringRes int requestDetailResourceId, + @StringRes int backgroundRequestResourceId, + @StringRes int backgroundRequestDetailResourceId) { + this.requestDetailResourceId = requestDetailResourceId; + this.backgroundRequestResourceId = backgroundRequestResourceId; + this.backgroundRequestDetailResourceId = backgroundRequestDetailResourceId; + } + + /** + * @deprecated Should only be created by the system. + */ + @Deprecated public PermissionGroupInfo() { + this(ID_NULL, ID_NULL, ID_NULL); } - public PermissionGroupInfo(PermissionGroupInfo orig) { + /** + * @deprecated Should only be created by the system. + */ + @Deprecated + public PermissionGroupInfo(@NonNull PermissionGroupInfo orig) { super(orig); descriptionRes = orig.descriptionRes; requestRes = orig.requestRes; @@ -131,7 +166,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { * @return Returns a CharSequence containing the permission's description. * If there is no description, null is returned. */ - public CharSequence loadDescription(PackageManager pm) { + public @Nullable CharSequence loadDescription(@NonNull PackageManager pm) { if (nonLocalizedDescription != null) { return nonLocalizedDescription; } @@ -166,7 +201,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { dest.writeInt(priority); } - public static final Creator CREATOR = + public static final @NonNull Creator CREATOR = new Creator() { public PermissionGroupInfo createFromParcel(Parcel source) { return new PermissionGroupInfo(source); diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index e24523406ab8d9c4d3c17252fb068a1c55fbbdf6..b093867345c97ff05fbeb835fe67b62e7f7dbe57 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -551,7 +551,7 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public PermissionInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java index f06a628f1913d561710539d299b3b33a2a4afa70..07d42dc823c4e02fbabe7427d7981367a0de40ba 100644 --- a/core/java/android/content/pm/ProviderInfo.java +++ b/core/java/android/content/pm/ProviderInfo.java @@ -158,7 +158,7 @@ public final class ProviderInfo extends ComponentInfo out.writeInt(isSyncable ? 1 : 0); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ProviderInfo createFromParcel(Parcel in) { return new ProviderInfo(in); diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java index 894de94a47a0677f7abe72c5421d8f4b6b41f1d4..1734182b3a9a5130db5a1ad982f905456a21a19d 100644 --- a/core/java/android/content/pm/ResolveInfo.java +++ b/core/java/android/content/pm/ResolveInfo.java @@ -445,7 +445,7 @@ public class ResolveInfo implements Parcelable { dest.writeInt(isInstantAppAvailable ? 1 : 0); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ResolveInfo createFromParcel(Parcel source) { return new ResolveInfo(source); diff --git a/core/java/android/content/pm/ServiceInfo.java b/core/java/android/content/pm/ServiceInfo.java index 4a2f800552f67296e05b620310ef665e9a3b07b1..cd40c95b57370b8f4ea7d280d0ee98ba379e9818 100644 --- a/core/java/android/content/pm/ServiceInfo.java +++ b/core/java/android/content/pm/ServiceInfo.java @@ -217,7 +217,7 @@ public class ServiceInfo extends ComponentInfo dest.writeInt(mForegroundServiceType); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ServiceInfo createFromParcel(Parcel source) { return new ServiceInfo(source); diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java index 35609c9a892693080d56ae7280aeda2e6a8e97bd..13c49a072277da1258f2650d335c553a2c1ce847 100644 --- a/core/java/android/content/pm/SharedLibraryInfo.java +++ b/core/java/android/content/pm/SharedLibraryInfo.java @@ -342,7 +342,7 @@ public final class SharedLibraryInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SharedLibraryInfo createFromParcel(Parcel source) { return new SharedLibraryInfo(source); diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index e674b8b7fd3d82cf40c39efa013e7f9c7058cb92..d5273dba2cc2f664146b920059da7bb3211995e2 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -2050,7 +2050,7 @@ public final class ShortcutInfo implements Parcelable { dest.writeParcelableArray(mPersons, flags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public ShortcutInfo createFromParcel(Parcel source) { return new ShortcutInfo(source); diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java index bd327b0be8748c7c0bebc36bedfe8e69d05feb36..22872437bd24f611687f0780fdbb62752387a803 100644 --- a/core/java/android/content/pm/ShortcutManager.java +++ b/core/java/android/content/pm/ShortcutManager.java @@ -624,7 +624,7 @@ public class ShortcutManager { dest.writeParcelable(mTargetComponent, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ShareShortcutInfo createFromParcel(Parcel in) { return new ShareShortcutInfo(in); diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java index 349bb693bd9c9054700986abc1e24ae8fba85086..25a4dca4d815db130d626c21075cee16662616b9 100644 --- a/core/java/android/content/pm/Signature.java +++ b/core/java/android/content/pm/Signature.java @@ -262,7 +262,7 @@ public class Signature implements Parcelable { dest.writeByteArray(mSignature); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Signature createFromParcel(Parcel source) { return new Signature(source); diff --git a/core/java/android/content/pm/SigningInfo.java b/core/java/android/content/pm/SigningInfo.java index ef874035962799f5fef58848d2696ce4e7a0d932..d14be9c6b734e791fd3d1ce3c9c27b5a35c0ac8b 100644 --- a/core/java/android/content/pm/SigningInfo.java +++ b/core/java/android/content/pm/SigningInfo.java @@ -124,7 +124,7 @@ public final class SigningInfo implements Parcelable { mSigningDetails.writeToParcel(dest, parcelableFlags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SigningInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/SuspendDialogInfo.java b/core/java/android/content/pm/SuspendDialogInfo.java index 53b52f535fa0498ee2c9bb26aed7d5bfe8a33195..db8f8c2387d60746924ad1aa95159ad2d8626d0d 100644 --- a/core/java/android/content/pm/SuspendDialogInfo.java +++ b/core/java/android/content/pm/SuspendDialogInfo.java @@ -261,7 +261,7 @@ public final class SuspendDialogInfo implements Parcelable { mNeutralButtonTextResId = b.mNeutralButtonTextResId; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SuspendDialogInfo createFromParcel(Parcel source) { return new SuspendDialogInfo(source); diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index b75ed35c36aaffaacbb3a825c7de67bcf0ce8ea5..2b1b32ed3df29938e54260aa0ed651e018ce3edb 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -289,7 +289,7 @@ public class UserInfo implements Parcelable { } @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public UserInfo createFromParcel(Parcel source) { return new UserInfo(source); diff --git a/core/java/android/content/pm/VerificationParams.java b/core/java/android/content/pm/VerificationParams.java index f90d295b84788534b749242b1d1d9fbbfeb1ef23..f07216796eb90bd4d59233f7867c3cab556276e3 100644 --- a/core/java/android/content/pm/VerificationParams.java +++ b/core/java/android/content/pm/VerificationParams.java @@ -198,7 +198,7 @@ public class VerificationParams implements Parcelable { mInstallerUid = source.readInt(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public VerificationParams createFromParcel(Parcel source) { return new VerificationParams(source); diff --git a/core/java/android/content/pm/VerifierDeviceIdentity.java b/core/java/android/content/pm/VerifierDeviceIdentity.java index 90be6f316ce61e92e6b0831548f481ed96ccc595..f29aaece6c469db95b92c591e17cf5a8ef612e7c 100644 --- a/core/java/android/content/pm/VerifierDeviceIdentity.java +++ b/core/java/android/content/pm/VerifierDeviceIdentity.java @@ -230,7 +230,7 @@ public class VerifierDeviceIdentity implements Parcelable { dest.writeLong(mIdentity); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public VerifierDeviceIdentity createFromParcel(Parcel source) { return new VerifierDeviceIdentity(source); diff --git a/core/java/android/content/pm/VerifierInfo.java b/core/java/android/content/pm/VerifierInfo.java index b4e72e6659d071245cc601b3d0861042849c7adc..224ca628cf277a70d26225dcb3ec41ffd005e97d 100644 --- a/core/java/android/content/pm/VerifierInfo.java +++ b/core/java/android/content/pm/VerifierInfo.java @@ -72,7 +72,7 @@ public class VerifierInfo implements Parcelable { dest.writeSerializable(publicKey); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public VerifierInfo createFromParcel(Parcel source) { return new VerifierInfo(source); diff --git a/core/java/android/content/pm/VersionedPackage.java b/core/java/android/content/pm/VersionedPackage.java index 395346641b1e40b5d916205e97c9e8fbed0d8bf2..3e22eb21d3693f1946d3ce992789dd65e3571e7e 100644 --- a/core/java/android/content/pm/VersionedPackage.java +++ b/core/java/android/content/pm/VersionedPackage.java @@ -106,7 +106,7 @@ public final class VersionedPackage implements Parcelable { parcel.writeLong(mVersionCode); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public VersionedPackage createFromParcel(Parcel source) { return new VersionedPackage(source); diff --git a/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java b/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java index 9fa863c75fdf1f6d8335892efc7375a43fc48a0a..97312c44a9958b7c9ebbe2d7cebd7f53007d7942 100644 --- a/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java +++ b/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java @@ -101,7 +101,7 @@ public final class RuntimePermissionPresentationInfo implements Parcelable { parcel.writeInt(mFlags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RuntimePermissionPresentationInfo createFromParcel(Parcel source) { return new RuntimePermissionPresentationInfo(source); diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java index b6cbf08e5e78b63bf568da2ec9f479bdcfe36a45..2ba55798d6653cde8891f95016854d3722ce1633 100644 --- a/core/java/android/content/res/AssetFileDescriptor.java +++ b/core/java/android/content/res/AssetFileDescriptor.java @@ -370,7 +370,7 @@ public class AssetFileDescriptor implements Parcelable, Closeable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AssetFileDescriptor createFromParcel(Parcel in) { return new AssetFileDescriptor(in); diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index 16b9726a4b1557e0a69e0718647dae4eef35a0e8..b5b097b33ef3817c374550319c84c047ec5988e5 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -727,7 +727,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { dest.writeIntArray(mColors); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ColorStateList[] newArray(int size) { diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index 635cee3609ad0ad28b2bc6ba576957bc32f05bb1..e80c78653d54d99371cfcfb40edd8459f17b60a6 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -633,7 +633,7 @@ public class CompatibilityInfo implements Parcelable { } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CompatibilityInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 8a9201704c47cb9bb0d162926fbd46fd7ba06282..8b02cae8d64e9b76af8bc833c5ec63f135db66b4 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1829,7 +1829,7 @@ public final class Configuration implements Parcelable, Comparable CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Configuration createFromParcel(Parcel source) { return new Configuration(source); diff --git a/core/java/android/content/res/ObbInfo.java b/core/java/android/content/res/ObbInfo.java index 1d10b4fef45c84de3eec6111093a9568204f8065..8af27ca825d0a67fcf0ddaf6f0a5f351c1907c84 100644 --- a/core/java/android/content/res/ObbInfo.java +++ b/core/java/android/content/res/ObbInfo.java @@ -88,7 +88,7 @@ public class ObbInfo implements Parcelable { dest.writeByteArray(salt); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ObbInfo createFromParcel(Parcel source) { return new ObbInfo(source); diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index a2ae994f7b0f188c9cad39fb9b4d497b6eb51142..c855d45f519ebbeab69f864fc3d871c7a8081f8f 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -1782,10 +1782,16 @@ public class Resources { * @param explicitStyleRes A resource identifier of an explicit style resource. * @return ordered list of resource ID that are considered when resolving attribute values. */ + @NonNull public int[] getAttributeResolutionStack(@AttrRes int defStyleAttr, @StyleRes int defStyleRes, @StyleRes int explicitStyleRes) { - return mThemeImpl.getAttributeResolutionStack( + int[] stack = mThemeImpl.getAttributeResolutionStack( defStyleAttr, defStyleRes, explicitStyleRes); + if (stack == null) { + return new int[0]; + } else { + return stack; + } } } diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index da064c956fcc04e45cad58b214084838f7fdf292..565cd3375c32f9379374671993d9753125236235 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -1507,6 +1507,7 @@ public class ResourcesImpl { * @param explicitStyleRes A resource identifier of an explicit style resource. * @return ordered list of resource ID that are considered when resolving attribute values. */ + @Nullable public int[] getAttributeResolutionStack(@AttrRes int defStyleAttr, @StyleRes int defStyleRes, @StyleRes int explicitStyleRes) { synchronized (mKey) { diff --git a/core/java/android/content/rollback/PackageRollbackInfo.java b/core/java/android/content/rollback/PackageRollbackInfo.java index 7e5532c8e9bb74ade63fb54d64e1f84ab5330c99..03810f50f20ca26b318c509db5d72538e028dc26 100644 --- a/core/java/android/content/rollback/PackageRollbackInfo.java +++ b/core/java/android/content/rollback/PackageRollbackInfo.java @@ -208,7 +208,7 @@ public final class PackageRollbackInfo implements Parcelable { out.writeBoolean(mIsApex); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PackageRollbackInfo createFromParcel(Parcel in) { return new PackageRollbackInfo(in); diff --git a/core/java/android/content/rollback/RollbackInfo.java b/core/java/android/content/rollback/RollbackInfo.java index 0cde6ba38099acc7b8950aba3c4ca185134471df..29b99e034a8bbdc5a20bf56b949484a33d62d5d3 100644 --- a/core/java/android/content/rollback/RollbackInfo.java +++ b/core/java/android/content/rollback/RollbackInfo.java @@ -17,12 +17,10 @@ package android.content.rollback; import android.annotation.SystemApi; -import android.content.pm.PackageInstaller; import android.content.pm.VersionedPackage; import android.os.Parcel; import android.os.Parcelable; -import java.util.Collections; import java.util.List; /** @@ -44,13 +42,7 @@ public final class RollbackInfo implements Parcelable { private final List mCausePackages; private final boolean mIsStaged; - private final int mCommittedSessionId; - - /** @hide */ - public RollbackInfo(int rollbackId, List packages, boolean isStaged) { - this(rollbackId, packages, isStaged, Collections.emptyList(), - PackageInstaller.SessionInfo.INVALID_ID); - } + private int mCommittedSessionId; /** @hide */ public RollbackInfo(int rollbackId, List packages, boolean isStaged, @@ -100,6 +92,14 @@ public final class RollbackInfo implements Parcelable { return mCommittedSessionId; } + /** + * Sets the session ID for the committed rollback for staged rollbacks. + * @hide + */ + public void setCommittedSessionId(int sessionId) { + mCommittedSessionId = sessionId; + } + /** * Gets the list of package versions that motivated this rollback. * As provided to {@link #commitRollback} when the rollback was committed. @@ -123,7 +123,7 @@ public final class RollbackInfo implements Parcelable { out.writeInt(mCommittedSessionId); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RollbackInfo createFromParcel(Parcel in) { return new RollbackInfo(in); diff --git a/core/java/android/content/rollback/RollbackManager.java b/core/java/android/content/rollback/RollbackManager.java index 2788f821e9f5e60156ae2c9165ddc8d97365cdf5..c043491e599b43cd42849987405650aef67267bd 100644 --- a/core/java/android/content/rollback/RollbackManager.java +++ b/core/java/android/content/rollback/RollbackManager.java @@ -187,7 +187,8 @@ public final class RollbackManager { /** * Expire the rollback data for a given package. * This API is meant to facilitate testing of rollback logic for - * expiring rollback data. + * expiring rollback data. Removes rollback data for available and + * recently committed rollbacks that contain the given package. * * @param packageName the name of the package to expire data for. * @throws SecurityException if the caller does not have the diff --git a/core/java/android/database/BulkCursorDescriptor.java b/core/java/android/database/BulkCursorDescriptor.java index c1e5e63b72a02942c58d931600274fc6d9c71209..80a031967edad740c2508acb7ff9b7adeab1a992 100644 --- a/core/java/android/database/BulkCursorDescriptor.java +++ b/core/java/android/database/BulkCursorDescriptor.java @@ -26,7 +26,7 @@ import android.os.Parcelable; * {@hide} */ public final class BulkCursorDescriptor implements Parcelable { - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public BulkCursorDescriptor createFromParcel(Parcel in) { diff --git a/core/java/android/database/BulkCursorNative.java b/core/java/android/database/BulkCursorNative.java index d3c11e785d7f9f4f936f73957ce7a3d4c81fe2c5..77a13cf800730af557255d2a57b6785469ceae0d 100644 --- a/core/java/android/database/BulkCursorNative.java +++ b/core/java/android/database/BulkCursorNative.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; @@ -138,6 +139,7 @@ public abstract class BulkCursorNative extends Binder implements IBulkCursor final class BulkCursorProxy implements IBulkCursor { + @UnsupportedAppUsage private IBinder mRemote; private Bundle mExtras; diff --git a/core/java/android/database/Cursor.java b/core/java/android/database/Cursor.java index 1379138b37c0632a9944e7bf0abdd924b8e4c639..2afb755031b97bb0c3685adf186c00acd57cdad1 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 @@ public interface Cursor extends Closeable { * ContentResolver.registerContentObserver} to find out about changes to this Cursor's * data. May be null if no notification URI has been set. */ - default List getNotificationUris() { + default @Nullable List getNotificationUris() { final Uri notifyUri = getNotificationUri(); return notifyUri == null ? null : Arrays.asList(notifyUri); } diff --git a/core/java/android/database/CursorWindow.java b/core/java/android/database/CursorWindow.java index d9443d9a3c5f6419502554fa6185250298de5787..44bd88376c4fd3c39ef9f3836ceda6270ed9a70e 100644 --- a/core/java/android/database/CursorWindow.java +++ b/core/java/android/database/CursorWindow.java @@ -709,7 +709,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public CursorWindow createFromParcel(Parcel source) { return new CursorWindow(source); diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index dffbd89c33d2aea7bad352b57c7857d9033ecae2..caf3e9337b92f65a7c2073769a808d71f5a40191 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -2655,26 +2655,24 @@ public final class SQLiteDatabase extends SQLiteClosable { * Sets the maximum number of milliseconds that SQLite connection is allowed to be idle * before it is closed and removed from the pool. * - *

DO NOT USE this method unless you fully understand the implication - * of what it does. - * A connection timeout allows the system to internally close a connection to a SQLite - * database after a given timeout. - * This is good for reducing app's memory consumption, but it has - * side effects that are hard to predict. For example, SQLite internally maintains - * a lot of "per-connection" states that apps can typically modify with a {@code PRAGMA} - * statement, and such states will be reset once the connection is closed. - * The system does not provide a callback that would allow apps to - * reconfigure a newly created connection and thus there's no way to re-configure - * connections when they're re-made internally. Do not use it unless you're sure - * your app uses no per-connection states. + *

DO NOT USE this method. + * This feature has negative side effects that are very hard to foresee. + *

A connection timeout allows the system to internally close a connection to + * a SQLite database after a given timeout, which is good for reducing app's memory + * consumption. + * However the side effect is it will reset all of SQLite's per-connection + * states, which are typically modified with a {@code PRAGMA} statement, and + * these states will not be restored when a connection is re-established + * internally, and the system does not provide a callback for an app to reconfigure a + * connection. + * This feature may only be used if an app relies on none of such per-connection states. * * @param idleConnectionTimeoutMs timeout in milliseconds. Use {@link Long#MAX_VALUE} * to allow unlimited idle connections. * * @see SQLiteOpenHelper#setIdleConnectionTimeout(long) * - * @deprecated DO NOT USE this method unless you fully understand the implication - * of what it does. + * @deprecated DO NOT USE this method. See the javadoc for the details. */ @NonNull @Deprecated diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java index 8163c4d412a777dc1704e7fb699db565759676b3..62cec0e1aa92005e046413775b42cadcea42c3fd 100644 --- a/core/java/android/database/sqlite/SQLiteOpenHelper.java +++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java @@ -267,8 +267,8 @@ public abstract class SQLiteOpenHelper implements AutoCloseable { *

This method should be called from the constructor of the subclass, * before opening the database * - *

DO NOT USE this method unless you fully understand the implication - * of what it does. + *

DO NOT USE this method. + * This feature has negative side effects that are very hard to foresee. * See the javadoc of * {@link SQLiteDatabase.OpenParams.Builder#setIdleConnectionTimeout(long)} * for the details. @@ -278,8 +278,9 @@ public abstract class SQLiteOpenHelper implements AutoCloseable { * * @see SQLiteDatabase.OpenParams.Builder#setIdleConnectionTimeout(long) * - * @deprecated DO NOT USE this method unless you fully understand the implication - * of what it does. + * @deprecated DO NOT USE this method. See the javadoc of + * {@link SQLiteDatabase.OpenParams.Builder#setIdleConnectionTimeout(long)} + * for the details. */ @Deprecated public void setIdleConnectionTimeout(@IntRange(from = 0) final long idleConnectionTimeoutMs) { diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index 03e850716bc23e1b828db0c95ffa592f8274e977..a73a71946bc76874125a3971ce4e2a418b9adc96 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -89,7 +89,7 @@ public class SQLiteQueryBuilder { * * @return the list of tables being queried */ - public String getTables() { + public @Nullable String getTables() { return mTables; } @@ -101,7 +101,7 @@ public class SQLiteQueryBuilder { * * @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 @@ public class SQLiteQueryBuilder { * * @param columnMap maps from the user column names to the database column names */ - public void setProjectionMap(Map columnMap) { + public void setProjectionMap(@Nullable Map columnMap) { mProjectionMap = columnMap; } @@ -178,7 +178,7 @@ public class SQLiteQueryBuilder { * Gets the projection map for the query, as last configured by * {@link #setProjectionMap(Map)}. */ - public Map getProjectionMap() { + public @Nullable Map getProjectionMap() { return mProjectionMap; } @@ -189,7 +189,7 @@ public class SQLiteQueryBuilder { * * @hide */ - public void setProjectionGreylist(List projectionGreylist) { + public void setProjectionGreylist(@Nullable List projectionGreylist) { mProjectionGreylist = projectionGreylist; } @@ -199,7 +199,7 @@ public class SQLiteQueryBuilder { * * @hide */ - public List getProjectionGreylist() { + public @Nullable List getProjectionGreylist() { return mProjectionGreylist; } @@ -210,7 +210,7 @@ public class SQLiteQueryBuilder { * * @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 @@ public class SQLiteQueryBuilder { * 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/gesture/Gesture.java b/core/java/android/gesture/Gesture.java index c6a2a875352b0f78f88aba3e6f65589acb261120..08920c18eab8ffca57df5d6b4d6aa9ac2648b4f6 100644 --- a/core/java/android/gesture/Gesture.java +++ b/core/java/android/gesture/Gesture.java @@ -280,7 +280,7 @@ public class Gesture implements Parcelable { return gesture; } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public Gesture createFromParcel(Parcel in) { Gesture gesture = null; final long gestureID = in.readLong(); diff --git a/core/java/android/hardware/CameraInfo.java b/core/java/android/hardware/CameraInfo.java index 53da0ce00e399c3e0a5e9e8572c7e0eca20a9529..072be50ad2fb4f34527ffcfbc8bf26012dc5f31d 100644 --- a/core/java/android/hardware/CameraInfo.java +++ b/core/java/android/hardware/CameraInfo.java @@ -45,7 +45,7 @@ public class CameraInfo implements Parcelable { info.orientation = in.readInt(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CameraInfo createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/CameraStatus.java b/core/java/android/hardware/CameraStatus.java index bc97e3865244dd6df8275dbadd8cc6e77e2133de..08b5b776c94e18854cfbd53eb9582a4c158377e2 100644 --- a/core/java/android/hardware/CameraStatus.java +++ b/core/java/android/hardware/CameraStatus.java @@ -47,7 +47,7 @@ public class CameraStatus implements Parcelable { status = in.readInt(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CameraStatus createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/HardwareBuffer.java b/core/java/android/hardware/HardwareBuffer.java index 87cffc928c85f08eb6c85b6ba7a16771414e9276..c569e05112a38ee73adf02d3f39b60a7937b6182 100644 --- a/core/java/android/hardware/HardwareBuffer.java +++ b/core/java/android/hardware/HardwareBuffer.java @@ -376,7 +376,7 @@ public final class HardwareBuffer implements Parcelable, AutoCloseable { nWriteHardwareBufferToParcel(mNativeObject, dest); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public HardwareBuffer createFromParcel(Parcel in) { long nativeObject = nReadHardwareBufferFromParcel(in); diff --git a/core/java/android/hardware/biometrics/BiometricConstants.java b/core/java/android/hardware/biometrics/BiometricConstants.java index 1cb7eb0d1256accf423cc958c76fc8f129eec899..27c04b4073156a919031955d51b7a117371a9876 100644 --- a/core/java/android/hardware/biometrics/BiometricConstants.java +++ b/core/java/android/hardware/biometrics/BiometricConstants.java @@ -128,7 +128,7 @@ public interface BiometricConstants { /** * The device does not have pin, pattern, or password set up. See - * {@link BiometricPrompt.Builder#setAllowDeviceCredential(boolean)} and + * {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} and * {@link KeyguardManager#isDeviceSecure()} */ int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14; diff --git a/core/java/android/hardware/biometrics/BiometricFaceConstants.java b/core/java/android/hardware/biometrics/BiometricFaceConstants.java index 459ec62d4135b8644ab1a31d1ba6f95ad2dcc7fc..3602a3379e0e77935eae776c89e5d16973772752 100644 --- a/core/java/android/hardware/biometrics/BiometricFaceConstants.java +++ b/core/java/android/hardware/biometrics/BiometricFaceConstants.java @@ -136,7 +136,7 @@ public interface BiometricFaceConstants { /** * The device does not have pin, pattern, or password set up. See - * {@link BiometricPrompt.Builder#setAllowDeviceCredential(boolean)} and + * {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} and * {@link KeyguardManager#isDeviceSecure()} */ public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14; diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java index 6cbab471ce234946cfe77bef972353ebec3532c9..b025508fc70ebfc294e954a7810041775dded8ff 100644 --- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java +++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java @@ -121,7 +121,7 @@ public interface BiometricFingerprintConstants { /** * The device does not have pin, pattern, or password set up. See - * {@link BiometricPrompt.Builder#setAllowDeviceCredential(boolean)} and + * {@link BiometricPrompt.Builder#setDeviceCredentialAllowed(boolean)} and * {@link KeyguardManager#isDeviceSecure()} * @hide */ diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java index baf972b265739f941dc98911ed719b4213fcab4f..e751b2c77dbb15a30024479fc5e57840333bc97f 100644 --- a/core/java/android/hardware/biometrics/BiometricPrompt.java +++ b/core/java/android/hardware/biometrics/BiometricPrompt.java @@ -139,7 +139,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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)) { @@ -204,13 +204,13 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * "Cancel" button, but may be also used to show an alternative method for authentication, * such as screen that asks for a backup password. * - * Note that this should not be set if {@link #setAllowDeviceCredential(boolean) + * Note that this should not be set if {@link #setDeviceCredentialAllowed(boolean)}(boolean) * is set to true. * * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * * @param requireConfirmation */ - public Builder setRequireConfirmation(boolean requireConfirmation) { + @NonNull public Builder setConfirmationRequired(boolean requireConfirmation) { mBundle.putBoolean(KEY_REQUIRE_CONFIRMATION, requireConfirmation); return this; } @@ -255,17 +255,18 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * 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. * - * @param enable When true, the prompt will fall back to ask for the user's device + * @param allowed When true, the prompt will fall back to ask for the user's device * credentials (PIN, pattern, or password). * @return */ - public Builder setAllowDeviceCredential(boolean enable) { - mBundle.putBoolean(KEY_ALLOW_DEVICE_CREDENTIAL, enable); + @NonNull public Builder setDeviceCredentialAllowed(boolean allowed) { + mBundle.putBoolean(KEY_ALLOW_DEVICE_CREDENTIAL, allowed); return this; } @@ -274,7 +275,7 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan * @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 @@ public class BiometricPrompt implements BiometricAuthenticator, BiometricConstan 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/biometrics/BiometricSourceType.java b/core/java/android/hardware/biometrics/BiometricSourceType.java index 4a08cf2cbfc5fc2276b6cfbd0c9038c444fb1d32..f35958f197476bcedf44d2827ff98e2dd2e342bf 100644 --- a/core/java/android/hardware/biometrics/BiometricSourceType.java +++ b/core/java/android/hardware/biometrics/BiometricSourceType.java @@ -37,7 +37,7 @@ public enum BiometricSourceType implements Parcelable { dest.writeString(name()); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public BiometricSourceType createFromParcel(final Parcel source) { return BiometricSourceType.valueOf(source.readString()); diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 0e4ff78af1e012775034757f5de4d816c293bbda..9da8e4eb0a6d5195053478b06e71808ddcdebe29 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -85,7 +85,8 @@ public final class CameraCharacteristics extends CameraMetadata type) { + @UnsupportedAppUsage + public Key(@NonNull String name, @NonNull String fallbackName, @NonNull Class type) { mKey = new CameraMetadataNative.Key(name, fallbackName, type); } @@ -297,10 +298,10 @@ public final class CameraCharacteristics extends CameraMetadataEach key is only listed once in the list. The order of the keys is undefined.

* * @return List of camera characteristic keys that require the - * {@link android.Manifest.permission#CAMERA} permission. The list can be null in case + * {@link android.Manifest.permission#CAMERA} permission. The list can be empty in case * there are no currently present keys that need additional permission. */ - public List> getKeysNeedingPermission() { + public @NonNull List> getKeysNeedingPermission() { if (mKeysNeedingPermission == null) { Object crKey = CameraCharacteristics.Key.class; Class> crKeyTyped = @@ -308,7 +309,9 @@ public final class CameraCharacteristics extends CameraMetadata> ()); + return mKeysNeedingPermission; } mKeysNeedingPermission = getAvailableKeyList(CameraCharacteristics.class, crKeyTyped, filterTags, @@ -682,6 +685,7 @@ public final class CameraCharacteristics extends CameraMetadata COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES = new Key("android.colorCorrection.availableAberrationModes", int[].class); @@ -700,6 +704,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AE_AVAILABLE_ANTIBANDING_MODES = new Key("android.control.aeAvailableAntibandingModes", int[].class); @@ -725,6 +730,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AE_AVAILABLE_MODES = new Key("android.control.aeAvailableModes", int[].class); @@ -764,6 +770,7 @@ public final class CameraCharacteristics extends CameraMetadata[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES = new Key[]>("android.control.aeAvailableTargetFpsRanges", new TypeReference[]>() {{ }}); @@ -784,6 +791,7 @@ public final class CameraCharacteristics extends CameraMetadata> CONTROL_AE_COMPENSATION_RANGE = new Key>("android.control.aeCompensationRange", new TypeReference>() {{ }}); @@ -801,6 +809,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AE_COMPENSATION_STEP = new Key("android.control.aeCompensationStep", Rational.class); @@ -825,6 +834,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AF_AVAILABLE_MODES = new Key("android.control.afAvailableModes", int[].class); @@ -848,6 +858,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AVAILABLE_EFFECTS = new Key("android.control.availableEffects", int[].class); @@ -871,6 +882,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AVAILABLE_SCENE_MODES = new Key("android.control.availableSceneModes", int[].class); @@ -885,6 +897,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES = new Key("android.control.availableVideoStabilizationModes", int[].class); @@ -909,6 +922,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AWB_AVAILABLE_MODES = new Key("android.control.awbAvailableModes", int[].class); @@ -945,6 +959,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_MAX_REGIONS_AE = new Key("android.control.maxRegionsAe", int.class); @@ -961,6 +976,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_MAX_REGIONS_AWB = new Key("android.control.maxRegionsAwb", int.class); @@ -977,6 +993,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_MAX_REGIONS_AF = new Key("android.control.maxRegionsAf", int.class); @@ -1025,7 +1042,7 @@ public final class CameraCharacteristics extends CameraMetadata *

Range of valid values:

*

For each configuration, the fps_max >= 120fps.

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Limited capability - * 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

@@ -1046,6 +1063,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AE_LOCK_AVAILABLE = new Key("android.control.aeLockAvailable", boolean.class); @@ -1058,6 +1076,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AWB_LOCK_AVAILABLE = new Key("android.control.awbLockAvailable", boolean.class); @@ -1074,6 +1093,7 @@ public final class CameraCharacteristics extends CameraMetadata CONTROL_AVAILABLE_MODES = new Key("android.control.availableModes", int[].class); @@ -1088,12 +1108,13 @@ public final class CameraCharacteristics extends CameraMetadata(100, 100) in this key.

*

Units: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

* * @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE = new Key>("android.control.postRawSensitivityBoostRange", new TypeReference>() {{ }}); @@ -1105,7 +1126,7 @@ public final class CameraCharacteristics extends CameraMetadata *

Range of valid values:
* Any value listed in {@link CaptureRequest#EDGE_MODE android.edge.mode}

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Full capability - * 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

@@ -1114,6 +1135,7 @@ public final class CameraCharacteristics extends CameraMetadata EDGE_AVAILABLE_EDGE_MODES = new Key("android.edge.availableEdgeModes", int[].class); @@ -1126,6 +1148,7 @@ public final class CameraCharacteristics extends CameraMetadata */ @PublicKey + @NonNull public static final Key FLASH_INFO_AVAILABLE = new Key("android.flash.info.available", boolean.class); @@ -1135,11 +1158,12 @@ public final class CameraCharacteristics extends CameraMetadataFULL mode camera devices will always support FAST.

*

Range of valid values:
* Any value listed in {@link CaptureRequest#HOT_PIXEL_MODE android.hotPixel.mode}

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

* * @see CaptureRequest#HOT_PIXEL_MODE */ @PublicKey + @NonNull public static final Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES = new Key("android.hotPixel.availableHotPixelModes", int[].class); @@ -1167,6 +1191,7 @@ public final class CameraCharacteristics extends CameraMetadata JPEG_AVAILABLE_THUMBNAIL_SIZES = new Key("android.jpeg.availableThumbnailSizes", android.util.Size[].class); @@ -1178,7 +1203,7 @@ public final class CameraCharacteristics extends CameraMetadataIf the camera device supports a variable aperture, the aperture values * in this list will be sorted in ascending order.

*

Units: The aperture f-number

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Full capability - * 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

@@ -1187,6 +1212,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_AVAILABLE_APERTURES = new Key("android.lens.info.availableApertures", float[].class); @@ -1199,7 +1225,7 @@ public final class CameraCharacteristics extends CameraMetadataUnits: Exposure value (EV)

*

Range of valid values:

*

Values are >= 0

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Full capability - * 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

@@ -1208,6 +1234,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_AVAILABLE_FILTER_DENSITIES = new Key("android.lens.info.availableFilterDensities", float[].class); @@ -1226,6 +1253,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_AVAILABLE_FOCAL_LENGTHS = new Key("android.lens.info.availableFocalLengths", float[].class); @@ -1236,7 +1264,7 @@ public final class CameraCharacteristics extends CameraMetadata *

Range of valid values:
* Any value listed in {@link CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE android.lens.opticalStabilizationMode}

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Limited capability - * 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

@@ -1245,6 +1273,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION = new Key("android.lens.info.availableOpticalStabilization", int[].class); @@ -1256,7 +1285,7 @@ public final class CameraCharacteristics extends CameraMetadataRange of valid values:
* If lens is fixed focus, >= 0. If lens has focuser unit, the value is * within (0.0f, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}]

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Limited capability - * 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

@@ -1267,6 +1296,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_HYPERFOCAL_DISTANCE = new Key("android.lens.info.hyperfocalDistance", float.class); @@ -1278,7 +1308,7 @@ public final class CameraCharacteristics extends CameraMetadataUnits: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details

*

Range of valid values:
* >= 0

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Limited capability - * 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

@@ -1288,6 +1318,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_MINIMUM_FOCUS_DISTANCE = new Key("android.lens.info.minimumFocusDistance", float.class); @@ -1297,7 +1328,7 @@ public final class CameraCharacteristics extends CameraMetadata *

Range of valid values:
* Both values >= 1

- *

Optional - This value may be {@code null} on some devices.

+ *

Optional - The value for this key may be {@code null} on some devices.

*

Full capability - * 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

@@ -1329,7 +1360,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE APPROXIMATE} *
  • {@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED CALIBRATED}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -1344,6 +1375,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INFO_FOCUS_DISTANCE_CALIBRATION = new Key("android.lens.info.focusDistanceCalibration", int.class); @@ -1362,6 +1394,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_FACING = new Key("android.lens.facing", int.class); @@ -1396,10 +1429,11 @@ public final class CameraCharacteristics extends CameraMetadatap' is in the camera-oriented coordinate system.

    *

    Units: * Quaternion coefficients

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    */ @PublicKey + @NonNull public static final Key LENS_POSE_ROTATION = new Key("android.lens.poseRotation", float[].class); @@ -1432,7 +1466,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Units: Meters

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_DISTORTION @@ -1441,6 +1475,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_POSE_TRANSLATION = new Key("android.lens.poseTranslation", float[].class); @@ -1504,7 +1539,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_DISTORTION @@ -1514,6 +1549,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_INTRINSIC_CALIBRATION = new Key("android.lens.intrinsicCalibration", float[].class); @@ -1548,7 +1584,7 @@ public final class CameraCharacteristics extends CameraMetadataThe distortion model used is the Brown-Conrady model.

    *

    Units: * Unitless coefficients.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION @@ -1561,6 +1597,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_RADIAL_DISTORTION = new Key("android.lens.radialDistortion", float[].class); @@ -1573,7 +1610,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link #LENS_POSE_REFERENCE_PRIMARY_CAMERA PRIMARY_CAMERA} *
  • {@link #LENS_POSE_REFERENCE_GYROSCOPE GYROSCOPE}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_POSE_TRANSLATION @@ -1581,6 +1618,7 @@ public final class CameraCharacteristics extends CameraMetadata LENS_POSE_REFERENCE = new Key("android.lens.poseReference", int.class); @@ -1615,13 +1653,14 @@ public final class CameraCharacteristics extends CameraMetadataThe distortion model used is the Brown-Conrady model.

    *

    Units: * Unitless coefficients.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION * @see CameraCharacteristics#LENS_RADIAL_DISTORTION */ @PublicKey + @NonNull public static final Key LENS_DISTORTION = new Key("android.lens.distortion", float[].class); @@ -1634,7 +1673,7 @@ public final class CameraCharacteristics extends CameraMetadataLegacy-capability camera devices will only support FAST mode.

    *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -1643,6 +1682,7 @@ public final class CameraCharacteristics extends CameraMetadata NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES = new Key("android.noiseReduction.availableNoiseReductionModes", int[].class); @@ -1655,7 +1695,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer; replaced by better partials mechanism

    @@ -1728,6 +1768,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_MAX_NUM_OUTPUT_RAW = new Key("android.request.maxNumOutputRaw", int.class); @@ -1764,6 +1805,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_MAX_NUM_OUTPUT_PROC = new Key("android.request.maxNumOutputProc", int.class); @@ -1790,6 +1832,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_MAX_NUM_OUTPUT_PROC_STALLING = new Key("android.request.maxNumOutputProcStalling", int.class); @@ -1809,7 +1852,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:

    *

    0 or 1.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -1817,6 +1860,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_MAX_NUM_INPUT_STREAMS = new Key("android.request.maxNumInputStreams", int.class); @@ -1841,6 +1885,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_PIPELINE_MAX_DEPTH = new Key("android.request.pipelineMaxDepth", byte.class); @@ -1861,9 +1906,10 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * >= 1

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull public static final Key REQUEST_PARTIAL_RESULT_COUNT = new Key("android.request.partialResultCount", int.class); @@ -1923,6 +1969,7 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_AVAILABLE_CAPABILITIES = new Key("android.request.availableCapabilities", int[].class); @@ -2036,7 +2083,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2067,7 +2114,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    All camera devices will support JPEG and YUV_420_888 formats.

    *

    When set to YUV_420_888, application can access the YUV420 data directly.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -2089,7 +2136,7 @@ public final class CameraCharacteristics extends CameraMetadataUnits: Nanoseconds

    *

    Range of valid values:
    * TODO: Remove property.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -2105,7 +2152,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * TODO: Remove property.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE * @deprecated @@ -2135,6 +2182,7 @@ public final class CameraCharacteristics extends CameraMetadata SCALER_AVAILABLE_MAX_DIGITAL_ZOOM = new Key("android.scaler.availableMaxDigitalZoom", float.class); @@ -2148,7 +2196,7 @@ public final class CameraCharacteristics extends CameraMetadataWhen multiple streams are configured, the minimum frame duration will * be >= max(individual stream min durations).

    *

    Units: Nanoseconds

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -2172,7 +2220,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Please reference the documentation for the image data destination to * check if it limits the maximum size for image data.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -2257,7 +2305,7 @@ public final class CameraCharacteristics extends CameraMetadata * * - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES * @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS @@ -2551,6 +2599,7 @@ public final class CameraCharacteristics extends CameraMetadata SCALER_STREAM_CONFIGURATION_MAP = new Key("android.scaler.streamConfigurationMap", android.hardware.camera2.params.StreamConfigurationMap.class); @@ -2579,6 +2628,7 @@ public final class CameraCharacteristics extends CameraMetadata SCALER_CROPPING_TYPE = new Key("android.scaler.croppingType", int.class); @@ -2591,7 +2641,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS = @@ -2607,7 +2657,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP = @@ -2634,7 +2684,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2642,6 +2692,7 @@ public final class CameraCharacteristics extends CameraMetadata SCALER_MANDATORY_STREAM_COMBINATIONS = new Key("android.scaler.mandatoryStreamCombinations", android.hardware.camera2.params.MandatoryStreamCombination[].class); @@ -2681,6 +2732,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_ACTIVE_ARRAY_SIZE = new Key("android.sensor.info.activeArraySize", android.graphics.Rect.class); @@ -2691,7 +2743,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * Min <= 100, Max >= 800

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2700,6 +2752,7 @@ public final class CameraCharacteristics extends CameraMetadata> SENSOR_INFO_SENSITIVITY_RANGE = new Key>("android.sensor.info.sensitivityRange", new TypeReference>() {{ }}); @@ -2718,7 +2771,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO MONO} *
  • {@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR NIR}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2733,6 +2786,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_COLOR_FILTER_ARRANGEMENT = new Key("android.sensor.info.colorFilterArrangement", int.class); @@ -2744,7 +2798,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2753,6 +2807,7 @@ public final class CameraCharacteristics extends CameraMetadata> SENSOR_INFO_EXPOSURE_TIME_RANGE = new Key>("android.sensor.info.exposureTimeRange", new TypeReference>() {{ }}); @@ -2768,7 +2823,7 @@ public final class CameraCharacteristics extends CameraMetadataRange of valid values:
    * For FULL capability devices * ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL), at least 100ms.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2777,6 +2832,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_MAX_FRAME_DURATION = new Key("android.sensor.info.maxFrameDuration", long.class); @@ -2791,6 +2847,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_PHYSICAL_SIZE = new Key("android.sensor.info.physicalSize", android.util.SizeF.class); @@ -2816,6 +2873,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_PIXEL_ARRAY_SIZE = new Key("android.sensor.info.pixelArraySize", android.util.Size.class); @@ -2837,13 +2895,14 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * > 255 (8-bit output)

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN * @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key SENSOR_INFO_WHITE_LEVEL = new Key("android.sensor.info.whiteLevel", int.class); @@ -2863,6 +2922,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_TIMESTAMP_SOURCE = new Key("android.sensor.info.timestampSource", int.class); @@ -2875,11 +2935,12 @@ public final class CameraCharacteristics extends CameraMetadata *

    This key will be null for all devices do not report this information. * Devices with RAW capability will always report this information in this key.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_RAW */ @PublicKey + @NonNull public static final Key SENSOR_INFO_LENS_SHADING_APPLIED = new Key("android.sensor.info.lensShadingApplied", boolean.class); @@ -2945,6 +3006,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE = new Key("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class); @@ -2986,7 +3048,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link #SENSOR_REFERENCE_ILLUMINANT1_D50 D50} *
  • {@link #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN ISO_STUDIO_TUNGSTEN}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1 @@ -3014,6 +3076,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_REFERENCE_ILLUMINANT1 = new Key("android.sensor.referenceIlluminant1", int.class); @@ -3030,7 +3093,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * Any value listed in {@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2 @@ -3039,6 +3102,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_REFERENCE_ILLUMINANT2 = new Key("android.sensor.referenceIlluminant2", byte.class); @@ -3055,12 +3119,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 */ @PublicKey + @NonNull public static final Key SENSOR_CALIBRATION_TRANSFORM1 = new Key("android.sensor.calibrationTransform1", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3080,12 +3145,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 */ @PublicKey + @NonNull public static final Key SENSOR_CALIBRATION_TRANSFORM2 = new Key("android.sensor.calibrationTransform2", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3106,12 +3172,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 */ @PublicKey + @NonNull public static final Key SENSOR_COLOR_TRANSFORM1 = new Key("android.sensor.colorTransform1", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3134,12 +3201,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 */ @PublicKey + @NonNull public static final Key SENSOR_COLOR_TRANSFORM2 = new Key("android.sensor.colorTransform2", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3158,12 +3226,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 */ @PublicKey + @NonNull public static final Key SENSOR_FORWARD_MATRIX1 = new Key("android.sensor.forwardMatrix1", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3184,12 +3253,13 @@ public final class CameraCharacteristics extends CameraMetadata *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 */ @PublicKey + @NonNull public static final Key SENSOR_FORWARD_MATRIX2 = new Key("android.sensor.forwardMatrix2", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -3215,7 +3285,7 @@ public final class CameraCharacteristics extends CameraMetadataFor a MONOCHROME camera device, all of the 2x2 channels must have the same values.

    *

    Range of valid values:
    * >= 0 for each.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT @@ -3224,6 +3294,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_BLACK_LEVEL_PATTERN = new Key("android.sensor.blackLevelPattern", android.hardware.camera2.params.BlackLevelPattern.class); @@ -3234,7 +3305,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3243,6 +3314,7 @@ public final class CameraCharacteristics extends CameraMetadata SENSOR_MAX_ANALOG_SENSITIVITY = new Key("android.sensor.maxAnalogSensitivity", int.class); @@ -3258,6 +3330,7 @@ public final class CameraCharacteristics extends CameraMetadataThis key is available on all devices.

    */ @PublicKey + @NonNull public static final Key SENSOR_ORIENTATION = new Key("android.sensor.orientation", int.class); @@ -3267,11 +3340,12 @@ public final class CameraCharacteristics extends CameraMetadataDefaults to OFF, and always includes OFF if defined.

    *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE */ @PublicKey + @NonNull public static final Key SENSOR_AVAILABLE_TEST_PATTERN_MODES = new Key("android.sensor.availableTestPatternModes", int[].class); @@ -3291,13 +3365,14 @@ public final class CameraCharacteristics extends CameraMetadata *

    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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN * @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL * @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL */ @PublicKey + @NonNull public static final Key SENSOR_OPTICAL_BLACK_REGIONS = new Key("android.sensor.opticalBlackRegions", android.graphics.Rect[].class); @@ -3314,6 +3389,7 @@ public final class CameraCharacteristics extends CameraMetadata SHADING_AVAILABLE_MODES = new Key("android.shading.availableModes", int[].class); @@ -3328,6 +3404,7 @@ public final class CameraCharacteristics extends CameraMetadata STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES = new Key("android.statistics.info.availableFaceDetectModes", int[].class); @@ -3341,6 +3418,7 @@ public final class CameraCharacteristics extends CameraMetadataThis key is available on all devices.

    */ @PublicKey + @NonNull public static final Key STATISTICS_INFO_MAX_FACE_COUNT = new Key("android.statistics.info.maxFaceCount", int.class); @@ -3352,11 +3430,12 @@ public final class CameraCharacteristics extends CameraMetadataON is always supported on devices with the RAW capability.

    *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE android.statistics.hotPixelMapMode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE */ @PublicKey + @NonNull public static final Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES = new Key("android.statistics.info.availableHotPixelMapModes", boolean[].class); @@ -3369,11 +3448,12 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE */ @PublicKey + @NonNull public static final Key STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES = new Key("android.statistics.info.availableLensShadingMapModes", int[].class); @@ -3384,11 +3464,12 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#STATISTICS_OIS_DATA_MODE android.statistics.oisDataMode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#STATISTICS_OIS_DATA_MODE */ @PublicKey + @NonNull public static final Key STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES = new Key("android.statistics.info.availableOisDataModes", int[].class); @@ -3401,7 +3482,7 @@ public final class CameraCharacteristics extends CameraMetadataThe 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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3410,6 +3491,7 @@ public final class CameraCharacteristics extends CameraMetadata TONEMAP_MAX_CURVE_POINTS = new Key("android.tonemap.maxCurvePoints", int.class); @@ -3425,7 +3507,7 @@ public final class CameraCharacteristics extends CameraMetadataThis includes all FULL level devices.

    *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3434,6 +3516,7 @@ public final class CameraCharacteristics extends CameraMetadata TONEMAP_AVAILABLE_TONE_MAP_MODES = new Key("android.tonemap.availableToneMapModes", int[].class); @@ -3443,7 +3526,7 @@ public final class CameraCharacteristics extends CameraMetadata *
  • {@link #LED_AVAILABLE_LEDS_TRANSMIT TRANSMIT}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @see #LED_AVAILABLE_LEDS_TRANSMIT * @hide */ @@ -3534,6 +3617,7 @@ public final class CameraCharacteristics extends CameraMetadata INFO_SUPPORTED_HARDWARE_LEVEL = new Key("android.info.supportedHardwareLevel", int.class); @@ -3543,9 +3627,10 @@ public final class CameraCharacteristics extends CameraMetadataThis 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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull public static final Key INFO_VERSION = new Key("android.info.version", String.class); @@ -3572,6 +3657,7 @@ public final class CameraCharacteristics extends CameraMetadata SYNC_MAX_LATENCY = new Key("android.sync.maxLatency", int.class); @@ -3598,7 +3684,7 @@ public final class CameraCharacteristics extends CameraMetadataUnits: Number of frames.

    *

    Range of valid values:
    * <= 4

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3607,6 +3693,7 @@ public final class CameraCharacteristics extends CameraMetadata REPROCESS_MAX_CAPTURE_STALL = new Key("android.reprocess.maxCaptureStall", int.class); @@ -3625,7 +3712,7 @@ public final class CameraCharacteristics extends CameraMetadata(HAL_PIXEL_FORMAT_BLOB, * android.depth.maxDepthSamples, 1, OUTPUT) in addition to * the entries for HAL_PIXEL_FORMAT_Y16.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3650,7 +3737,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3674,7 +3761,7 @@ public final class CameraCharacteristics extends CameraMetadataAll depth output stream formats may have a nonzero stall * duration.

    *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3697,7 +3784,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3705,6 +3792,7 @@ public final class CameraCharacteristics extends CameraMetadata DEPTH_DEPTH_IS_EXCLUSIVE = new Key("android.depth.depthIsExclusive", boolean.class); @@ -3717,7 +3805,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS = @@ -3736,7 +3824,7 @@ public final class CameraCharacteristics extends CameraMetadata - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE * @hide @@ -3755,7 +3843,7 @@ public final class CameraCharacteristics extends CameraMetadataThe minimum frame duration of a stream (of a particular format, size) * is the same regardless of whether the stream is input or output.

    *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS = @@ -3770,7 +3858,7 @@ public final class CameraCharacteristics extends CameraMetadataAll dynamic depth output streams may have a nonzero stall * duration.

    *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS = @@ -3785,7 +3873,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    The number of physical camera IDs must be no less than 2.

    *

    Units: UTF-8 null-terminated string

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3811,7 +3899,7 @@ public final class CameraCharacteristics extends CameraMetadata{@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE APPROXIMATE} *
  • {@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED CALIBRATED}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3821,6 +3909,7 @@ public final class CameraCharacteristics extends CameraMetadata LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE = new Key("android.logicalMultiCamera.sensorSyncType", int.class); @@ -3831,11 +3920,12 @@ public final class CameraCharacteristics extends CameraMetadata *

    Range of valid values:
    * Any value listed in {@link CaptureRequest#DISTORTION_CORRECTION_MODE android.distortionCorrection.mode}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#DISTORTION_CORRECTION_MODE */ @PublicKey + @NonNull public static final Key DISTORTION_CORRECTION_AVAILABLE_MODES = new Key("android.distortionCorrection.availableModes", int[].class); @@ -3849,7 +3939,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3872,7 +3962,7 @@ public final class CameraCharacteristics extends CameraMetadata *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3896,7 +3986,7 @@ public final class CameraCharacteristics extends CameraMetadataAll HEIC output stream formats may have a nonzero stall * duration.

    *

    Units: (format, width, height, ns) x n

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3913,4 +4003,7 @@ public final class CameraCharacteristics extends CameraMetadataNotification that camera access priorities have changed and the camera may + * now be openable. An application that was previously denied camera access due to + * a higher-priority user already using the camera, or that was disconnected from an + * active camera session due to a higher-priority user trying to open the camera, + * should try to open the camera again if it still wants to use it. Note that + * multiple applications may receive this callback at the same time, and only one of + * them will succeed in opening the camera in practice, depending on exact access + * priority levels and timing. This method is useful in cases where multiple + * applications may be in the resumed state at the same time, and the user switches + * focus between them, or if the current camera-using application moves between + * full-screen and Picture-in-Picture (PiP) states. In such cases, the camera + * available/unavailable callbacks will not be invoked, but another application may + * now have higher priority for camera access than the current camera-using + * application.

    + * + *

    The default implementation of this method does nothing.

    + * + */ + public void onCameraAccessPrioritiesChanged() { + // default empty implementation + } } /** @@ -1136,6 +1161,22 @@ public final class CameraManager { } } + private void postSingleAccessPriorityChangeUpdate(final AvailabilityCallback callback, + final Executor executor) { + final long ident = Binder.clearCallingIdentity(); + try { + executor.execute( + new Runnable() { + @Override + public void run() { + callback.onCameraAccessPrioritiesChanged(); + } + }); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + private void postSingleUpdate(final AvailabilityCallback callback, final Executor executor, final String id, final int status) { if (isAvailable(status)) { @@ -1434,6 +1475,19 @@ public final class CameraManager { } } + @Override + public void onCameraAccessPrioritiesChanged() { + synchronized (mLock) { + final int callbackCount = mCallbackMap.size(); + for (int i = 0; i < callbackCount; i++) { + Executor executor = mCallbackMap.valueAt(i); + final AvailabilityCallback callback = mCallbackMap.keyAt(i); + + postSingleAccessPriorityChangeUpdate(callback, executor); + } + } + } + /** * Try to connect to camera service after some delay if any client registered camera * availability callback or torch status callback. diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index 525070103c2c3ab3ededad9883e855c16f7c9d77..da1bfe4bf309ba4c1567a98ea64233e30527277f 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -493,7 +493,7 @@ public final class CaptureRequest extends CameraMetadata> return HashCodeHelpers.hashCodeGeneric(mPhysicalCameraSettings, mSurfaceSet, mUserTag); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CaptureRequest createFromParcel(Parcel in) { @@ -978,7 +978,7 @@ public final class CaptureRequest extends CameraMetadata> *
  • {@link #COLOR_CORRECTION_MODE_FAST FAST}
  • *
  • {@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -992,6 +992,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #COLOR_CORRECTION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_MODE = new Key("android.colorCorrection.mode", int.class); @@ -1010,7 +1011,7 @@ public final class CaptureRequest extends CameraMetadata> *

    The valid range of each matrix element varies on different devices, but * values within [-1.5, 3.0] are guaranteed not to be clipped.

    *

    Units: Unitless scale factors

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -1019,6 +1020,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_TRANSFORM = new Key("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -1037,7 +1039,7 @@ public final class CaptureRequest extends CameraMetadata> * device allows gains below 1.0, this is usually not recommended because * this can create color artifacts.

    *

    Units: Unitless gain factors

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -1046,6 +1048,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_GAINS = new Key("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class); @@ -1078,6 +1081,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_ABERRATION_MODE = new Key("android.colorCorrection.aberrationMode", int.class); @@ -1134,6 +1138,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AE_ANTIBANDING_MODE_AUTO */ @PublicKey + @NonNull public static final Key CONTROL_AE_ANTIBANDING_MODE = new Key("android.control.aeAntibandingMode", int.class); @@ -1167,6 +1172,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureResult#CONTROL_AE_STATE */ @PublicKey + @NonNull public static final Key CONTROL_AE_EXPOSURE_COMPENSATION = new Key("android.control.aeExposureCompensation", int.class); @@ -1217,6 +1223,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key CONTROL_AE_LOCK = new Key("android.control.aeLock", boolean.class); @@ -1269,6 +1276,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH */ @PublicKey + @NonNull public static final Key CONTROL_AE_MODE = new Key("android.control.aeMode", int.class); @@ -1320,7 +1328,7 @@ public final class CaptureRequest extends CameraMetadata> * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -1329,6 +1337,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AE_REGIONS = new Key("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -1349,6 +1358,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#SENSOR_FRAME_DURATION */ @PublicKey + @NonNull public static final Key> CONTROL_AE_TARGET_FPS_RANGE = new Key>("android.control.aeTargetFpsRange", new TypeReference>() {{ }}); @@ -1407,7 +1417,7 @@ public final class CaptureRequest extends CameraMetadata> *
  • {@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}
  • *
  • {@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -1422,6 +1432,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL */ @PublicKey + @NonNull public static final Key CONTROL_AE_PRECAPTURE_TRIGGER = new Key("android.control.aePrecaptureTrigger", int.class); @@ -1463,6 +1474,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AF_MODE_EDOF */ @PublicKey + @NonNull public static final Key CONTROL_AF_MODE = new Key("android.control.afMode", int.class); @@ -1515,7 +1527,7 @@ public final class CaptureRequest extends CameraMetadata> * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -1524,6 +1536,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AF_REGIONS = new Key("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -1561,6 +1574,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AF_TRIGGER_CANCEL */ @PublicKey + @NonNull public static final Key CONTROL_AF_TRIGGER = new Key("android.control.afTrigger", int.class); @@ -1591,6 +1605,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#CONTROL_AWB_MODE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_LOCK = new Key("android.control.awbLock", boolean.class); @@ -1651,6 +1666,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_AWB_MODE_SHADE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_MODE = new Key("android.control.awbMode", int.class); @@ -1703,7 +1719,7 @@ public final class CaptureRequest extends CameraMetadata> * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -1712,6 +1728,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_REGIONS = new Key("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -1754,6 +1771,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING */ @PublicKey + @NonNull public static final Key CONTROL_CAPTURE_INTENT = new Key("android.control.captureIntent", int.class); @@ -1793,6 +1811,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_EFFECT_MODE_AQUA */ @PublicKey + @NonNull public static final Key CONTROL_EFFECT_MODE = new Key("android.control.effectMode", int.class); @@ -1833,6 +1852,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_MODE_OFF_KEEP_STATE */ @PublicKey + @NonNull public static final Key CONTROL_MODE = new Key("android.control.mode", int.class); @@ -1900,6 +1920,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey + @NonNull public static final Key CONTROL_SCENE_MODE = new Key("android.control.sceneMode", int.class); @@ -1943,6 +1964,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_VIDEO_STABILIZATION_MODE_ON */ @PublicKey + @NonNull public static final Key CONTROL_VIDEO_STABILIZATION_MODE = new Key("android.control.videoStabilizationMode", int.class); @@ -1969,7 +1991,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}

    *

    Range of valid values:
    * {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_AE_MODE * @see CaptureRequest#CONTROL_MODE @@ -1978,6 +2000,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key CONTROL_POST_RAW_SENSITIVITY_BOOST = new Key("android.control.postRawSensitivityBoost", int.class); @@ -2005,12 +2028,13 @@ public final class CaptureRequest extends CameraMetadata> *

    For applications targeting SDK versions older than O, the value of enableZsl in all * capture templates is always false if present.

    *

    For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CaptureResult#SENSOR_TIMESTAMP */ @PublicKey + @NonNull public static final Key CONTROL_ENABLE_ZSL = new Key("android.control.enableZsl", boolean.class); @@ -2045,7 +2069,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2059,6 +2083,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #EDGE_MODE_ZERO_SHUTTER_LAG */ @PublicKey + @NonNull public static final Key EDGE_MODE = new Key("android.edge.mode", int.class); @@ -2094,6 +2119,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #FLASH_MODE_TORCH */ @PublicKey + @NonNull public static final Key FLASH_MODE = new Key("android.flash.mode", int.class); @@ -2110,7 +2136,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES * @see #HOT_PIXEL_MODE_OFF @@ -2118,6 +2144,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #HOT_PIXEL_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key HOT_PIXEL_MODE = new Key("android.hotPixel.mode", int.class); @@ -2130,6 +2157,7 @@ public final class CaptureRequest extends CameraMetadata> *

    This key is available on all devices.

    */ @PublicKey + @NonNull @SyntheticKey public static final Key JPEG_GPS_LOCATION = new Key("android.jpeg.gpsLocation", android.location.Location.class); @@ -2211,6 +2239,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_ORIENTATION */ @PublicKey + @NonNull public static final Key JPEG_ORIENTATION = new Key("android.jpeg.orientation", int.class); @@ -2224,6 +2253,7 @@ public final class CaptureRequest extends CameraMetadata> *

    This key is available on all devices.

    */ @PublicKey + @NonNull public static final Key JPEG_QUALITY = new Key("android.jpeg.quality", byte.class); @@ -2236,6 +2266,7 @@ public final class CaptureRequest extends CameraMetadata> *

    This key is available on all devices.

    */ @PublicKey + @NonNull public static final Key JPEG_THUMBNAIL_QUALITY = new Key("android.jpeg.thumbnailQuality", byte.class); @@ -2275,6 +2306,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#JPEG_ORIENTATION */ @PublicKey + @NonNull public static final Key JPEG_THUMBNAIL_SIZE = new Key("android.jpeg.thumbnailSize", android.util.Size.class); @@ -2298,7 +2330,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: The f-number (f/N)

    *

    Range of valid values:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2312,6 +2344,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key LENS_APERTURE = new Key("android.lens.aperture", float.class); @@ -2332,7 +2365,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: Exposure Value (EV)

    *

    Range of valid values:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2342,6 +2375,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureResult#LENS_STATE */ @PublicKey + @NonNull public static final Key LENS_FILTER_DENSITY = new Key("android.lens.filterDensity", float.class); @@ -2367,6 +2401,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureResult#LENS_STATE */ @PublicKey + @NonNull public static final Key LENS_FOCAL_LENGTH = new Key("android.lens.focalLength", float.class); @@ -2387,7 +2422,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details

    *

    Range of valid values:
    * >= 0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2399,6 +2434,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureResult#LENS_STATE */ @PublicKey + @NonNull public static final Key LENS_FOCUS_DISTANCE = new Key("android.lens.focusDistance", float.class); @@ -2429,7 +2465,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2441,6 +2477,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #LENS_OPTICAL_STABILIZATION_MODE_ON */ @PublicKey + @NonNull public static final Key LENS_OPTICAL_STABILIZATION_MODE = new Key("android.lens.opticalStabilizationMode", int.class); @@ -2481,7 +2518,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2496,6 +2533,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG */ @PublicKey + @NonNull public static final Key NOISE_REDUCTION_MODE = new Key("android.noiseReduction.mode", int.class); @@ -2506,7 +2544,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: arbitrary integer assigned by application

    *

    Range of valid values:
    * Any int

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key REQUEST_ID = @@ -2570,6 +2608,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key SCALER_CROP_REGION = new Key("android.scaler.cropRegion", android.graphics.Rect.class); @@ -2584,7 +2623,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: Nanoseconds

    *

    Range of valid values:
    * {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2595,6 +2634,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE */ @PublicKey + @NonNull public static final Key SENSOR_EXPOSURE_TIME = new Key("android.sensor.exposureTime", long.class); @@ -2665,7 +2705,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Range of valid values:
    * See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }. * The duration is capped to max(duration, exposureTime + overhead).

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2676,6 +2716,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION */ @PublicKey + @NonNull public static final Key SENSOR_FRAME_DURATION = new Key("android.sensor.frameDuration", long.class); @@ -2696,7 +2737,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: ISO arithmetic units

    *

    Range of valid values:
    * {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2708,6 +2749,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY */ @PublicKey + @NonNull public static final Key SENSOR_SENSITIVITY = new Key("android.sensor.sensitivity", int.class); @@ -2720,11 +2762,12 @@ public final class CaptureRequest extends CameraMetadata> * output.

    *

    For example, a sensor with RAW10 Bayer output would use the * 10 most significant bits from each color channel.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE */ @PublicKey + @NonNull public static final Key SENSOR_TEST_PATTERN_DATA = new Key("android.sensor.testPatternData", int[].class); @@ -2749,7 +2792,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES * @see #SENSOR_TEST_PATTERN_MODE_OFF @@ -2760,6 +2803,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1 */ @PublicKey + @NonNull public static final Key SENSOR_TEST_PATTERN_MODE = new Key("android.sensor.testPatternMode", int.class); @@ -2797,7 +2841,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2813,6 +2857,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #SHADING_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key SHADING_MODE = new Key("android.shading.mode", int.class); @@ -2838,6 +2883,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #STATISTICS_FACE_DETECT_MODE_FULL */ @PublicKey + @NonNull public static final Key STATISTICS_FACE_DETECT_MODE = new Key("android.statistics.faceDetectMode", int.class); @@ -2847,12 +2893,13 @@ public final class CaptureRequest extends CameraMetadata> * If set to false, no hot pixel map will be returned.

    *

    Range of valid values:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES */ @PublicKey + @NonNull public static final Key STATISTICS_HOT_PIXEL_MAP_MODE = new Key("android.statistics.hotPixelMapMode", boolean.class); @@ -2870,7 +2917,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2881,6 +2928,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #STATISTICS_LENS_SHADING_MAP_MODE_ON */ @PublicKey + @NonNull public static final Key STATISTICS_LENS_SHADING_MAP_MODE = new Key("android.statistics.lensShadingMapMode", int.class); @@ -2900,13 +2948,14 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @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 STATISTICS_OIS_DATA_MODE = new Key("android.statistics.oisDataMode", int.class); @@ -2915,7 +2964,7 @@ public final class CaptureRequest extends CameraMetadata> * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is * CONTRAST_CURVE.

    *

    See android.tonemap.curveRed for more details.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2932,7 +2981,7 @@ public final class CaptureRequest extends CameraMetadata> * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is * CONTRAST_CURVE.

    *

    See android.tonemap.curveRed for more details.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2993,7 +3042,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Range of valid values:
    * 0-1 on both input and output coordinates, normalized * as a floating-point value such that 0 == black and 1 == white.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3054,7 +3103,7 @@ public final class CaptureRequest extends CameraMetadata> * (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ] * *

    sRGB tonemapping curve

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3064,6 +3113,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#TONEMAP_MODE */ @PublicKey + @NonNull @SyntheticKey public static final Key TONEMAP_CURVE = new Key("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class); @@ -3098,7 +3148,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3114,6 +3164,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #TONEMAP_MODE_PRESET_CURVE */ @PublicKey + @NonNull public static final Key TONEMAP_MODE = new Key("android.tonemap.mode", int.class); @@ -3130,11 +3181,12 @@ public final class CaptureRequest extends CameraMetadata> * value will be returned in capture result.

    *

    The valid range of gamma value varies on different devices, but values * within [1.0, 5.0] are guaranteed not to be clipped.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#TONEMAP_MODE */ @PublicKey + @NonNull public static final Key TONEMAP_GAMMA = new Key("android.tonemap.gamma", float.class); @@ -3153,13 +3205,14 @@ public final class CaptureRequest extends CameraMetadata> *
  • {@link #TONEMAP_PRESET_CURVE_SRGB SRGB}
  • *
  • {@link #TONEMAP_PRESET_CURVE_REC709 REC709}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#TONEMAP_MODE * @see #TONEMAP_PRESET_CURVE_SRGB * @see #TONEMAP_PRESET_CURVE_REC709 */ @PublicKey + @NonNull public static final Key TONEMAP_PRESET_CURVE = new Key("android.tonemap.presetCurve", int.class); @@ -3174,7 +3227,7 @@ public final class CaptureRequest extends CameraMetadata> * data is stored locally on the device.

    *

    The LED may be off if a trusted application is using the data that * doesn't violate the above rules.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key LED_TRANSMIT = @@ -3218,7 +3271,7 @@ public final class CaptureRequest extends CameraMetadata> * possible, only overriding the lock to OFF when changes to * other request parameters require a black level recalculation * or reset.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3226,6 +3279,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key BLACK_LEVEL_LOCK = new Key("android.blackLevel.lock", boolean.class); @@ -3265,7 +3319,7 @@ public final class CaptureRequest extends CameraMetadata> *

    Units: Relative exposure time increase factor.

    *

    Range of valid values:
    * >= 1.0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3276,6 +3330,7 @@ public final class CaptureRequest extends CameraMetadata> * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES */ @PublicKey + @NonNull public static final Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR = new Key("android.reprocess.effectiveExposureFactor", float.class); @@ -3322,7 +3377,7 @@ public final class CaptureRequest extends CameraMetadata> *

    *

    Available values for this device:
    * {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_AE_REGIONS * @see CaptureRequest#CONTROL_AF_REGIONS @@ -3338,6 +3393,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key DISTORTION_CORRECTION_MODE = new Key("android.distortionCorrection.mode", int.class); @@ -3347,4 +3403,7 @@ public final class CaptureRequest extends CameraMetadata> + + + } diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index 13ad092f6efd489d8ca4c66eb1ae3efecd43f808..bb0987dd07986dc78913c4841cbc1f092151b6f9 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -89,7 +89,8 @@ public class CaptureResult extends CameraMetadata> { * * @hide */ - public Key(String name, String fallbackName, Class type) { + @UnsupportedAppUsage + public Key(@NonNull String name, @NonNull String fallbackName, @NonNull Class type) { mKey = new CameraMetadataNative.Key(name, fallbackName, type); } @@ -437,7 +438,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #COLOR_CORRECTION_MODE_FAST FAST}
  • *
  • {@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -451,6 +452,7 @@ public class CaptureResult extends CameraMetadata> { * @see #COLOR_CORRECTION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_MODE = new Key("android.colorCorrection.mode", int.class); @@ -469,7 +471,7 @@ public class CaptureResult extends CameraMetadata> { *

    The valid range of each matrix element varies on different devices, but * values within [-1.5, 3.0] are guaranteed not to be clipped.

    *

    Units: Unitless scale factors

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -478,6 +480,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_TRANSFORM = new Key("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class); @@ -496,7 +499,7 @@ public class CaptureResult extends CameraMetadata> { * device allows gains below 1.0, this is usually not recommended because * this can create color artifacts.

    *

    Units: Unitless gain factors

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -505,6 +508,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_GAINS = new Key("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class); @@ -537,6 +541,7 @@ public class CaptureResult extends CameraMetadata> { * @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key COLOR_CORRECTION_ABERRATION_MODE = new Key("android.colorCorrection.aberrationMode", int.class); @@ -593,6 +598,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AE_ANTIBANDING_MODE_AUTO */ @PublicKey + @NonNull public static final Key CONTROL_AE_ANTIBANDING_MODE = new Key("android.control.aeAntibandingMode", int.class); @@ -626,6 +632,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureResult#CONTROL_AE_STATE */ @PublicKey + @NonNull public static final Key CONTROL_AE_EXPOSURE_COMPENSATION = new Key("android.control.aeExposureCompensation", int.class); @@ -676,6 +683,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key CONTROL_AE_LOCK = new Key("android.control.aeLock", boolean.class); @@ -728,6 +736,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH */ @PublicKey + @NonNull public static final Key CONTROL_AE_MODE = new Key("android.control.aeMode", int.class); @@ -779,7 +788,7 @@ public class CaptureResult extends CameraMetadata> { * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -788,6 +797,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AE_REGIONS = new Key("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -808,6 +818,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_FRAME_DURATION */ @PublicKey + @NonNull public static final Key> CONTROL_AE_TARGET_FPS_RANGE = new Key>("android.control.aeTargetFpsRange", new TypeReference>() {{ }}); @@ -866,7 +877,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}
  • *
  • {@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -881,6 +892,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL */ @PublicKey + @NonNull public static final Key CONTROL_AE_PRECAPTURE_TRIGGER = new Key("android.control.aePrecaptureTrigger", int.class); @@ -1108,7 +1120,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #CONTROL_AE_STATE_FLASH_REQUIRED FLASH_REQUIRED}
  • *
  • {@link #CONTROL_AE_STATE_PRECAPTURE PRECAPTURE}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -1129,6 +1141,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AE_STATE_PRECAPTURE */ @PublicKey + @NonNull public static final Key CONTROL_AE_STATE = new Key("android.control.aeState", int.class); @@ -1170,6 +1183,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AF_MODE_EDOF */ @PublicKey + @NonNull public static final Key CONTROL_AF_MODE = new Key("android.control.afMode", int.class); @@ -1222,7 +1236,7 @@ public class CaptureResult extends CameraMetadata> { * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -1231,6 +1245,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AF_REGIONS = new Key("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -1268,6 +1283,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AF_TRIGGER_CANCEL */ @PublicKey + @NonNull public static final Key CONTROL_AF_TRIGGER = new Key("android.control.afTrigger", int.class); @@ -1677,6 +1693,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AF_STATE_PASSIVE_UNFOCUSED */ @PublicKey + @NonNull public static final Key CONTROL_AF_STATE = new Key("android.control.afState", int.class); @@ -1707,6 +1724,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#CONTROL_AWB_MODE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_LOCK = new Key("android.control.awbLock", boolean.class); @@ -1767,6 +1785,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AWB_MODE_SHADE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_MODE = new Key("android.control.awbMode", int.class); @@ -1819,7 +1838,7 @@ public class CaptureResult extends CameraMetadata> { * Coordinates must be between [(0,0), (width, height)) 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

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB * @see CaptureRequest#DISTORTION_CORRECTION_MODE @@ -1828,6 +1847,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key CONTROL_AWB_REGIONS = new Key("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class); @@ -1870,6 +1890,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING */ @PublicKey + @NonNull public static final Key CONTROL_CAPTURE_INTENT = new Key("android.control.captureIntent", int.class); @@ -1997,7 +2018,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #CONTROL_AWB_STATE_CONVERGED CONVERGED}
  • *
  • {@link #CONTROL_AWB_STATE_LOCKED LOCKED}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2013,6 +2034,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_AWB_STATE_LOCKED */ @PublicKey + @NonNull public static final Key CONTROL_AWB_STATE = new Key("android.control.awbState", int.class); @@ -2052,6 +2074,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_EFFECT_MODE_AQUA */ @PublicKey + @NonNull public static final Key CONTROL_EFFECT_MODE = new Key("android.control.effectMode", int.class); @@ -2092,6 +2115,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_MODE_OFF_KEEP_STATE */ @PublicKey + @NonNull public static final Key CONTROL_MODE = new Key("android.control.mode", int.class); @@ -2159,6 +2183,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey + @NonNull public static final Key CONTROL_SCENE_MODE = new Key("android.control.sceneMode", int.class); @@ -2202,6 +2227,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_VIDEO_STABILIZATION_MODE_ON */ @PublicKey + @NonNull public static final Key CONTROL_VIDEO_STABILIZATION_MODE = new Key("android.control.videoStabilizationMode", int.class); @@ -2228,7 +2254,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}

    *

    Range of valid values:
    * {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_AE_MODE * @see CaptureRequest#CONTROL_MODE @@ -2237,6 +2263,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key CONTROL_POST_RAW_SENSITIVITY_BOOST = new Key("android.control.postRawSensitivityBoost", int.class); @@ -2264,12 +2291,13 @@ public class CaptureResult extends CameraMetadata> { *

    For applications targeting SDK versions older than O, the value of enableZsl in all * capture templates is always false if present.

    *

    For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CaptureResult#SENSOR_TIMESTAMP */ @PublicKey + @NonNull public static final Key CONTROL_ENABLE_ZSL = new Key("android.control.enableZsl", boolean.class); @@ -2287,11 +2315,12 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED NOT_DETECTED}
  • *
  • {@link #CONTROL_AF_SCENE_CHANGE_DETECTED DETECTED}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @see #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED * @see #CONTROL_AF_SCENE_CHANGE_DETECTED */ @PublicKey + @NonNull public static final Key CONTROL_AF_SCENE_CHANGE = new Key("android.control.afSceneChange", int.class); @@ -2326,7 +2355,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2340,6 +2369,7 @@ public class CaptureResult extends CameraMetadata> { * @see #EDGE_MODE_ZERO_SHUTTER_LAG */ @PublicKey + @NonNull public static final Key EDGE_MODE = new Key("android.edge.mode", int.class); @@ -2375,6 +2405,7 @@ public class CaptureResult extends CameraMetadata> { * @see #FLASH_MODE_TORCH */ @PublicKey + @NonNull public static final Key FLASH_MODE = new Key("android.flash.mode", int.class); @@ -2402,7 +2433,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #FLASH_STATE_FIRED FIRED}
  • *
  • {@link #FLASH_STATE_PARTIAL PARTIAL}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2418,6 +2449,7 @@ public class CaptureResult extends CameraMetadata> { * @see #FLASH_STATE_PARTIAL */ @PublicKey + @NonNull public static final Key FLASH_STATE = new Key("android.flash.state", int.class); @@ -2434,7 +2466,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES * @see #HOT_PIXEL_MODE_OFF @@ -2442,6 +2474,7 @@ public class CaptureResult extends CameraMetadata> { * @see #HOT_PIXEL_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key HOT_PIXEL_MODE = new Key("android.hotPixel.mode", int.class); @@ -2454,6 +2487,7 @@ public class CaptureResult extends CameraMetadata> { *

    This key is available on all devices.

    */ @PublicKey + @NonNull @SyntheticKey public static final Key JPEG_GPS_LOCATION = new Key("android.jpeg.gpsLocation", android.location.Location.class); @@ -2535,6 +2569,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_ORIENTATION */ @PublicKey + @NonNull public static final Key JPEG_ORIENTATION = new Key("android.jpeg.orientation", int.class); @@ -2548,6 +2583,7 @@ public class CaptureResult extends CameraMetadata> { *

    This key is available on all devices.

    */ @PublicKey + @NonNull public static final Key JPEG_QUALITY = new Key("android.jpeg.quality", byte.class); @@ -2560,6 +2596,7 @@ public class CaptureResult extends CameraMetadata> { *

    This key is available on all devices.

    */ @PublicKey + @NonNull public static final Key JPEG_THUMBNAIL_QUALITY = new Key("android.jpeg.thumbnailQuality", byte.class); @@ -2599,6 +2636,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#JPEG_ORIENTATION */ @PublicKey + @NonNull public static final Key JPEG_THUMBNAIL_SIZE = new Key("android.jpeg.thumbnailSize", android.util.Size.class); @@ -2622,7 +2660,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: The f-number (f/N)

    *

    Range of valid values:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2636,6 +2674,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key LENS_APERTURE = new Key("android.lens.aperture", float.class); @@ -2656,7 +2695,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: Exposure Value (EV)

    *

    Range of valid values:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2666,6 +2705,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureResult#LENS_STATE */ @PublicKey + @NonNull public static final Key LENS_FILTER_DENSITY = new Key("android.lens.filterDensity", float.class); @@ -2691,6 +2731,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureResult#LENS_STATE */ @PublicKey + @NonNull public static final Key LENS_FOCAL_LENGTH = new Key("android.lens.focalLength", float.class); @@ -2701,7 +2742,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details

    *

    Range of valid values:
    * >= 0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -2710,6 +2751,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION */ @PublicKey + @NonNull public static final Key LENS_FOCUS_DISTANCE = new Key("android.lens.focusDistance", float.class); @@ -2722,7 +2764,7 @@ public class CaptureResult extends CameraMetadata> { * far); see {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details.

    *

    Range of valid values:
    * >=0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2731,6 +2773,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION */ @PublicKey + @NonNull public static final Key> LENS_FOCUS_RANGE = new Key>("android.lens.focusRange", new TypeReference>() {{ }}); @@ -2761,7 +2804,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2773,6 +2816,7 @@ public class CaptureResult extends CameraMetadata> { * @see #LENS_OPTICAL_STABILIZATION_MODE_ON */ @PublicKey + @NonNull public static final Key LENS_OPTICAL_STABILIZATION_MODE = new Key("android.lens.opticalStabilizationMode", int.class); @@ -2802,7 +2846,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #LENS_STATE_STATIONARY STATIONARY}
  • *
  • {@link #LENS_STATE_MOVING MOVING}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -2820,6 +2864,7 @@ public class CaptureResult extends CameraMetadata> { * @see #LENS_STATE_MOVING */ @PublicKey + @NonNull public static final Key LENS_STATE = new Key("android.lens.state", int.class); @@ -2854,10 +2899,11 @@ public class CaptureResult extends CameraMetadata> { * p' is in the camera-oriented coordinate system.

    *

    Units: * Quaternion coefficients

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    */ @PublicKey + @NonNull public static final Key LENS_POSE_ROTATION = new Key("android.lens.poseRotation", float[].class); @@ -2890,7 +2936,7 @@ public class CaptureResult extends CameraMetadata> { * the center of the primary gyroscope on the device. The axis definitions are the same as * with PRIMARY_CAMERA.

    *

    Units: Meters

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_DISTORTION @@ -2899,6 +2945,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#LENS_POSE_ROTATION */ @PublicKey + @NonNull public static final Key LENS_POSE_TRANSLATION = new Key("android.lens.poseTranslation", float[].class); @@ -2962,7 +3009,7 @@ public class CaptureResult extends CameraMetadata> { * Pixels in the * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} * coordinate system.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_DISTORTION @@ -2972,6 +3019,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key LENS_INTRINSIC_CALIBRATION = new Key("android.lens.intrinsicCalibration", float[].class); @@ -3006,7 +3054,7 @@ public class CaptureResult extends CameraMetadata> { *

    The distortion model used is the Brown-Conrady model.

    *

    Units: * Unitless coefficients.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION @@ -3019,6 +3067,7 @@ public class CaptureResult extends CameraMetadata> { */ @Deprecated @PublicKey + @NonNull public static final Key LENS_RADIAL_DISTORTION = new Key("android.lens.radialDistortion", float[].class); @@ -3053,13 +3102,14 @@ public class CaptureResult extends CameraMetadata> { *

    The distortion model used is the Brown-Conrady model.

    *

    Units: * Unitless coefficients.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Permission {@link android.Manifest.permission#CAMERA } is needed to access this property

    * * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION * @see CameraCharacteristics#LENS_RADIAL_DISTORTION */ @PublicKey + @NonNull public static final Key LENS_DISTORTION = new Key("android.lens.distortion", float[].class); @@ -3100,7 +3150,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3115,6 +3165,7 @@ public class CaptureResult extends CameraMetadata> { * @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG */ @PublicKey + @NonNull public static final Key NOISE_REDUCTION_MODE = new Key("android.noiseReduction.mode", int.class); @@ -3134,7 +3185,7 @@ public class CaptureResult extends CameraMetadata> { * only be used by the camera device if quirks.usePartialResult is set to 1.

    *

    Range of valid values:
    * Optional. Default value is FINAL.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -3152,7 +3203,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: count of frames

    *

    Range of valid values:
    * > 0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Not used in HALv3 or newer

    @@ -3169,7 +3220,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: arbitrary integer assigned by application

    *

    Range of valid values:
    * Any int

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key REQUEST_ID = @@ -3190,6 +3241,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH */ @PublicKey + @NonNull public static final Key REQUEST_PIPELINE_DEPTH = new Key("android.request.pipelineDepth", byte.class); @@ -3251,6 +3303,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key SCALER_CROP_REGION = new Key("android.scaler.cropRegion", android.graphics.Rect.class); @@ -3265,7 +3318,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: Nanoseconds

    *

    Range of valid values:
    * {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3276,6 +3329,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE */ @PublicKey + @NonNull public static final Key SENSOR_EXPOSURE_TIME = new Key("android.sensor.exposureTime", long.class); @@ -3346,7 +3400,7 @@ public class CaptureResult extends CameraMetadata> { *

    Range of valid values:
    * See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }. * The duration is capped to max(duration, exposureTime + overhead).

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3357,6 +3411,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION */ @PublicKey + @NonNull public static final Key SENSOR_FRAME_DURATION = new Key("android.sensor.frameDuration", long.class); @@ -3377,7 +3432,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: ISO arithmetic units

    *

    Range of valid values:
    * {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3389,6 +3444,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY */ @PublicKey + @NonNull public static final Key SENSOR_SENSITIVITY = new Key("android.sensor.sensitivity", int.class); @@ -3419,6 +3475,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE */ @PublicKey + @NonNull public static final Key SENSOR_TIMESTAMP = new Key("android.sensor.timestamp", long.class); @@ -3433,9 +3490,10 @@ public class CaptureResult extends CameraMetadata> { *

    The order of the values is R, G, B; where R is in the lowest index.

    *

    Starting from Android Q, this key will not be present for a MONOCHROME camera, even if * the camera device has RAW capability.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull public static final Key SENSOR_NEUTRAL_COLOR_POINT = new Key("android.sensor.neutralColorPoint", Rational[].class); @@ -3460,11 +3518,12 @@ public class CaptureResult extends CameraMetadata> { * Adobe DNG specification for the NoiseProfile tag.

    *

    For a MONOCHROME camera, there is only one color channel. So the noise model coefficients * will only contain one S and one O.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT */ @PublicKey + @NonNull public static final Key[]> SENSOR_NOISE_PROFILE = new Key[]>("android.sensor.noiseProfile", new TypeReference[]>() {{ }}); @@ -3504,9 +3563,10 @@ public class CaptureResult extends CameraMetadata> { * the camera device has RAW capability.

    *

    Range of valid values:

    *

    >= 0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull public static final Key SENSOR_GREEN_SPLIT = new Key("android.sensor.greenSplit", float.class); @@ -3519,11 +3579,12 @@ public class CaptureResult extends CameraMetadata> { * output.

    *

    For example, a sensor with RAW10 Bayer output would use the * 10 most significant bits from each color channel.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE */ @PublicKey + @NonNull public static final Key SENSOR_TEST_PATTERN_DATA = new Key("android.sensor.testPatternData", int[].class); @@ -3548,7 +3609,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES * @see #SENSOR_TEST_PATTERN_MODE_OFF @@ -3559,6 +3620,7 @@ public class CaptureResult extends CameraMetadata> { * @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1 */ @PublicKey + @NonNull public static final Key SENSOR_TEST_PATTERN_MODE = new Key("android.sensor.testPatternMode", int.class); @@ -3575,7 +3637,7 @@ public class CaptureResult extends CameraMetadata> { *

    Range of valid values:
    * >= 0 and < * {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputMinFrameDuration }.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -3584,6 +3646,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key SENSOR_ROLLING_SHUTTER_SKEW = new Key("android.sensor.rollingShutterSkew", long.class); @@ -3617,7 +3680,7 @@ public class CaptureResult extends CameraMetadata> { * camera device advertises this key via {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureResultKeys }.

    *

    Range of valid values:
    * >= 0 for each.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT @@ -3625,6 +3688,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key SENSOR_DYNAMIC_BLACK_LEVEL = new Key("android.sensor.dynamicBlackLevel", float[].class); @@ -3640,7 +3704,7 @@ public class CaptureResult extends CameraMetadata> { * {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureRequestKeys }.

    *

    Range of valid values:
    * >= 0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN * @see CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL @@ -3648,6 +3712,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#SENSOR_SENSITIVITY */ @PublicKey + @NonNull public static final Key SENSOR_DYNAMIC_WHITE_LEVEL = new Key("android.sensor.dynamicWhiteLevel", int.class); @@ -3685,7 +3750,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3701,6 +3766,7 @@ public class CaptureResult extends CameraMetadata> { * @see #SHADING_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key SHADING_MODE = new Key("android.shading.mode", int.class); @@ -3726,6 +3792,7 @@ public class CaptureResult extends CameraMetadata> { * @see #STATISTICS_FACE_DETECT_MODE_FULL */ @PublicKey + @NonNull public static final Key STATISTICS_FACE_DETECT_MODE = new Key("android.statistics.faceDetectMode", int.class); @@ -3818,6 +3885,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE */ @PublicKey + @NonNull @SyntheticKey public static final Key STATISTICS_FACES = new Key("android.statistics.faces", android.hardware.camera2.params.Face[].class); @@ -3886,7 +3954,7 @@ public class CaptureResult extends CameraMetadata> { * *

    Range of valid values:
    * Each gain factor is >= 1

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -3896,6 +3964,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#SENSOR_INFO_LENS_SHADING_APPLIED */ @PublicKey + @NonNull public static final Key STATISTICS_LENS_SHADING_CORRECTION_MAP = new Key("android.statistics.lensShadingCorrectionMap", android.hardware.camera2.params.LensShadingMap.class); @@ -3976,7 +4045,7 @@ public class CaptureResult extends CameraMetadata> { * formats.

    *

    Range of valid values:
    * Each gain factor is >= 1

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4001,7 +4070,7 @@ public class CaptureResult extends CameraMetadata> { * see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.

    *

    This value should always be calculated by the auto-white balance (AWB) block, * regardless of the android.control.* current values.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#COLOR_CORRECTION_GAINS * @deprecated @@ -4029,7 +4098,7 @@ public class CaptureResult extends CameraMetadata> { * capture settings and color transforms are set by the application.

    *

    This value should always be calculated by the auto-white balance (AWB) block, * regardless of the android.control.* current values.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @deprecated *

    Never fully implemented or specified; do not use

    @@ -4061,7 +4130,7 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #STATISTICS_SCENE_FLICKER_50HZ 50HZ}
  • *
  • {@link #STATISTICS_SCENE_FLICKER_60HZ 60HZ}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4075,6 +4144,7 @@ public class CaptureResult extends CameraMetadata> { * @see #STATISTICS_SCENE_FLICKER_60HZ */ @PublicKey + @NonNull public static final Key STATISTICS_SCENE_FLICKER = new Key("android.statistics.sceneFlicker", int.class); @@ -4084,12 +4154,13 @@ public class CaptureResult extends CameraMetadata> { * If set to false, no hot pixel map will be returned.

    *

    Range of valid values:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES */ @PublicKey + @NonNull public static final Key STATISTICS_HOT_PIXEL_MAP_MODE = new Key("android.statistics.hotPixelMapMode", boolean.class); @@ -4105,12 +4176,13 @@ public class CaptureResult extends CameraMetadata> { *

    n <= number of pixels on the sensor. * The (x, y) coordinates must be bounded by * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE */ @PublicKey + @NonNull public static final Key STATISTICS_HOT_PIXEL_MAP = new Key("android.statistics.hotPixelMap", android.graphics.Point[].class); @@ -4128,7 +4200,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4139,6 +4211,7 @@ public class CaptureResult extends CameraMetadata> { * @see #STATISTICS_LENS_SHADING_MAP_MODE_ON */ @PublicKey + @NonNull public static final Key STATISTICS_LENS_SHADING_MAP_MODE = new Key("android.statistics.lensShadingMapMode", int.class); @@ -4158,13 +4231,14 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @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 STATISTICS_OIS_DATA_MODE = new Key("android.statistics.oisDataMode", int.class); @@ -4173,11 +4247,12 @@ public class CaptureResult extends CameraMetadata> { *

    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}.

    *

    Units: nanoseconds

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureResult#SENSOR_TIMESTAMP * @hide */ + @UnsupportedAppUsage public static final Key STATISTICS_OIS_TIMESTAMPS = new Key("android.statistics.oisTimestamps", long[].class); @@ -4194,9 +4269,10 @@ public class CaptureResult extends CameraMetadata> { * since the scaling of OIS shifts would depend on the specific spot on the sensor the shift * is needed.

    *

    Units: Pixels in active array.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ + @UnsupportedAppUsage public static final Key STATISTICS_OIS_X_SHIFTS = new Key("android.statistics.oisXShifts", float[].class); @@ -4213,9 +4289,10 @@ public class CaptureResult extends CameraMetadata> { * since the scaling of OIS shifts would depend on the specific spot on the sensor the shift * is needed.

    *

    Units: Pixels in active array.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ + @UnsupportedAppUsage public static final Key STATISTICS_OIS_Y_SHIFTS = new Key("android.statistics.oisYShifts", float[].class); @@ -4235,9 +4312,10 @@ public class CaptureResult extends CameraMetadata> { * 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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull @SyntheticKey public static final Key STATISTICS_OIS_SAMPLES = new Key("android.statistics.oisSamples", android.hardware.camera2.params.OisSample[].class); @@ -4247,7 +4325,7 @@ public class CaptureResult extends CameraMetadata> { * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is * CONTRAST_CURVE.

    *

    See android.tonemap.curveRed for more details.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4264,7 +4342,7 @@ public class CaptureResult extends CameraMetadata> { * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is * CONTRAST_CURVE.

    *

    See android.tonemap.curveRed for more details.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4325,7 +4403,7 @@ public class CaptureResult extends CameraMetadata> { *

    Range of valid values:
    * 0-1 on both input and output coordinates, normalized * as a floating-point value such that 0 == black and 1 == white.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4386,7 +4464,7 @@ public class CaptureResult extends CameraMetadata> { * (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ] * *

    sRGB tonemapping curve

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4396,6 +4474,7 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#TONEMAP_MODE */ @PublicKey + @NonNull @SyntheticKey public static final Key TONEMAP_CURVE = new Key("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class); @@ -4430,7 +4509,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4446,6 +4525,7 @@ public class CaptureResult extends CameraMetadata> { * @see #TONEMAP_MODE_PRESET_CURVE */ @PublicKey + @NonNull public static final Key TONEMAP_MODE = new Key("android.tonemap.mode", int.class); @@ -4462,11 +4542,12 @@ public class CaptureResult extends CameraMetadata> { * value will be returned in capture result.

    *

    The valid range of gamma value varies on different devices, but values * within [1.0, 5.0] are guaranteed not to be clipped.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#TONEMAP_MODE */ @PublicKey + @NonNull public static final Key TONEMAP_GAMMA = new Key("android.tonemap.gamma", float.class); @@ -4485,13 +4566,14 @@ public class CaptureResult extends CameraMetadata> { *
  • {@link #TONEMAP_PRESET_CURVE_SRGB SRGB}
  • *
  • {@link #TONEMAP_PRESET_CURVE_REC709 REC709}
  • *

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#TONEMAP_MODE * @see #TONEMAP_PRESET_CURVE_SRGB * @see #TONEMAP_PRESET_CURVE_REC709 */ @PublicKey + @NonNull public static final Key TONEMAP_PRESET_CURVE = new Key("android.tonemap.presetCurve", int.class); @@ -4506,7 +4588,7 @@ public class CaptureResult extends CameraMetadata> { * data is stored locally on the device.

    *

    The LED may be off if a trusted application is using the data that * doesn't violate the above rules.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * @hide */ public static final Key LED_TRANSMIT = @@ -4519,7 +4601,7 @@ public class CaptureResult extends CameraMetadata> { * 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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Full capability - * 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

    @@ -4528,6 +4610,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey + @NonNull public static final Key BLACK_LEVEL_LOCK = new Key("android.blackLevel.lock", boolean.class); @@ -4637,7 +4720,7 @@ public class CaptureResult extends CameraMetadata> { *

    Units: Relative exposure time increase factor.

    *

    Range of valid values:
    * >= 1.0

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    *

    Limited capability - * 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

    @@ -4648,6 +4731,7 @@ public class CaptureResult extends CameraMetadata> { * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES */ @PublicKey + @NonNull public static final Key REPROCESS_EFFECTIVE_EXPOSURE_FACTOR = new Key("android.reprocess.effectiveExposureFactor", float.class); @@ -4655,16 +4739,21 @@ public class CaptureResult extends CameraMetadata> { *

    String containing the ID of the underlying active physical camera.

    *

    The ID of the active physical camera that's backing the logical camera. All camera * streams and metadata that are not physical camera specific will be originating from this - * physical camera. This must be one of valid physical IDs advertised in the physicalIds - * static tag.

    + * physical camera.

    *

    For a logical camera made up of physical cameras where each camera's lenses have * different characteristics, the camera device may choose to switch between the physical * 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.

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    This key will be available if the camera device advertises this key via {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureResultKeys }. + * When available, this must be one of valid physical IDs backing this logical multi-camera. + * If this key is not available for a logical multi-camera, the camera device implementation + * may still switch between different active physical cameras based on use case, but the + * current active physical camera information won't be available to the application.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    */ @PublicKey + @NonNull public static final Key LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID = new Key("android.logicalMultiCamera.activePhysicalId", String.class); @@ -4711,7 +4800,7 @@ public class CaptureResult extends CameraMetadata> { *

    *

    Available values for this device:
    * {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}

    - *

    Optional - This value may be {@code null} on some devices.

    + *

    Optional - The value for this key may be {@code null} on some devices.

    * * @see CaptureRequest#CONTROL_AE_REGIONS * @see CaptureRequest#CONTROL_AF_REGIONS @@ -4727,6 +4816,7 @@ public class CaptureResult extends CameraMetadata> { * @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY */ @PublicKey + @NonNull public static final Key DISTORTION_CORRECTION_MODE = new Key("android.distortionCorrection.mode", int.class); @@ -4736,4 +4826,7 @@ public class CaptureResult extends CameraMetadata> { + + + } diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index 65026b6feb9f2088632b90ea19cca209c33b227a..1cdf23530ddc44bc2457111f36a400a5ac6aa949 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -350,7 +350,7 @@ public class CameraMetadataNative implements Parcelable { return newObject; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CameraMetadataNative createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java index 40535e23eaac76fdae857f7c060ffd7b7640e357..edc3d91eaf121d7c0691ffdefc36d37709aedca1 100644 --- a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java +++ b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java @@ -30,7 +30,7 @@ public class CaptureResultExtras implements Parcelable { private int partialResultCount; private int errorStreamId; - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CaptureResultExtras createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java b/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java index 30eaf1373c8923926234aaa1330327205387df8f..09619d0f5c7e05f707a2a57ce79d96a5c8a27132 100644 --- a/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java +++ b/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java @@ -27,7 +27,7 @@ public class PhysicalCaptureResultInfo implements Parcelable { private String cameraId; private CameraMetadataNative cameraMetadata; - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PhysicalCaptureResultInfo createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java index b8e2d7adcf828c87ac8a035c03f6325ce78bf1df..d44b6b5aeb29865b3cfaf581b5721b01c8924fa4 100644 --- a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java +++ b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java @@ -19,9 +19,12 @@ package android.hardware.camera2.params; import static com.android.internal.util.Preconditions.*; import static android.hardware.camera2.params.StreamConfigurationMap.checkArgumentFormat; +import android.annotation.IntRange; import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.Context; import android.graphics.ImageFormat; +import android.graphics.ImageFormat.Format; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraCharacteristics.Key; import android.hardware.camera2.CameraDevice; @@ -44,8 +47,9 @@ import java.util.List; /** * Immutable class to store the available mandatory stream combination. * - *

    The individual stream combinations are generated according to the guidelines - * at {@link CameraDevice#createCaptureSession}.

    + *

    A mandatory stream combination refers to a specific entry in the documented sets of + * required stream {@link CameraDevice#createCaptureSession combinations}. + * These combinations of streams are required to be supported by the camera device. * *

    The list of stream combinations is available by invoking * {@link CameraCharacteristics#get} and passing key @@ -88,7 +92,7 @@ public final class MandatoryStreamCombination { * ImageFormat/PixelFormat. * @hide */ - public MandatoryStreamInformation(@NonNull List availableSizes, int format, + public MandatoryStreamInformation(@NonNull List availableSizes, @Format int format, boolean isInput) { if (availableSizes.isEmpty()) { throw new IllegalArgumentException("No available sizes"); @@ -118,7 +122,7 @@ public final class MandatoryStreamCombination { * * @return non-modifiable ascending list of available sizes. */ - public List getAvailableSizes() { + public @NonNull List getAvailableSizes() { return Collections.unmodifiableList(mAvailableSizes); } @@ -127,7 +131,7 @@ public final class MandatoryStreamCombination { * * @return integer format. */ - public int getFormat() { + public @Format int getFormat() { return mFormat; } @@ -187,7 +191,7 @@ public final class MandatoryStreamCombination { * @hide */ public MandatoryStreamCombination(@NonNull List streamsInformation, - String description, boolean isReprocessable) { + @NonNull String description, boolean isReprocessable) { if (streamsInformation.isEmpty()) { throw new IllegalArgumentException("Empty stream information"); } @@ -199,14 +203,16 @@ public final class MandatoryStreamCombination { /** * Get the mandatory stream combination description. * - * @return String with the mandatory combination description. + * @return CharSequence with the mandatory combination description. */ - public String getDescription() { + public @NonNull CharSequence getDescription() { return mDescription; } /** - * Indicates whether the mandatory stream combination is reprocessable. + * Indicates whether the mandatory stream combination is reprocessable. Reprocessable is defined + * as a stream combination that contains one input stream + * ({@link MandatoryStreamInformation#isInput} return true). * * @return {@code true} in case the mandatory stream combination contains an input, * {@code false} otherwise. @@ -221,7 +227,7 @@ public final class MandatoryStreamCombination { * @return Non-modifiable list of stream information. * */ - public List getStreamsInformation() { + public @NonNull List getStreamsInformation() { return Collections.unmodifiableList(mStreamsInformation); } @@ -274,7 +280,8 @@ public final class MandatoryStreamCombination { this(format, sizeThreshold, /*isInput*/false); } - public StreamTemplate(int format, SizeThreshold sizeThreshold, boolean isInput) { + public StreamTemplate(@Format int format, @NonNull SizeThreshold sizeThreshold, + boolean isInput) { mFormat = format; mSizeThreshold = sizeThreshold; mIsInput = isInput; @@ -286,11 +293,13 @@ public final class MandatoryStreamCombination { public String mDescription; public ReprocessType mReprocessType; - public StreamCombinationTemplate(StreamTemplate[] streamTemplates, String description) { + public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates, + @NonNull String description) { this(streamTemplates, description, /*reprocessType*/ReprocessType.NONE); } - public StreamCombinationTemplate(StreamTemplate[] streamTemplates, String description, + public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates, + @NonNull String description, ReprocessType reprocessType) { mStreamTemplates = streamTemplates; mReprocessType = reprocessType; @@ -680,7 +689,8 @@ public final class MandatoryStreamCombination { * null in case device is not backward compatible or the method encounters * an error. */ - public List getAvailableMandatoryStreamCombinations() { + public @Nullable List + getAvailableMandatoryStreamCombinations() { if (!isColorOutputSupported()) { Log.v(TAG, "Device is not backward compatible!"); return null; @@ -767,8 +777,8 @@ public final class MandatoryStreamCombination { * @return a non-modifiable list of supported mandatory stream combinations or * null in case of errors. */ - private List generateAvailableCombinations( - ArrayList availableTemplates) { + private @Nullable List generateAvailableCombinations( + @NonNull ArrayList availableTemplates) { if (availableTemplates.isEmpty()) { Log.e(TAG, "No available stream templates!"); return null; @@ -873,7 +883,8 @@ public final class MandatoryStreamCombination { /** * Helper method to enumerate all available sizes according to size threshold and format. */ - private HashMap, List> enumerateAvailableSizes() { + private @Nullable HashMap, List> + enumerateAvailableSizes() { final int[] formats = { ImageFormat.PRIVATE, ImageFormat.YUV_420_888, @@ -935,12 +946,8 @@ public final class MandatoryStreamCombination { * Compile a list of sizes smaller than or equal to given bound. * Return an empty list if there is no size smaller than or equal to the bound. */ - private static List getSizesWithinBound(Size[] sizes, Size bound) { - if (sizes == null || sizes.length == 0) { - Log.e(TAG, "Empty or invalid size array!"); - return null; - } - + private static @Nullable List getSizesWithinBound(@NonNull Size[] sizes, + @NonNull Size bound) { ArrayList ret = new ArrayList(); for (Size size : sizes) { if (size.getWidth() <= bound.getWidth() && size.getHeight() <= bound.getHeight()) { @@ -960,7 +967,7 @@ public final class MandatoryStreamCombination { * * @throws IllegalArgumentException if sizes was null or had 0 elements */ - public static Size getMaxSize(Size... sizes) { + public static @Nullable Size getMaxSize(@NonNull Size... sizes) { if (sizes == null || sizes.length == 0) { throw new IllegalArgumentException("sizes was empty"); } @@ -1089,7 +1096,7 @@ public final class MandatoryStreamCombination { * * @return Maximum supported video size. */ - private Size getMaxRecordingSize() { + private @Nullable Size getMaxRecordingSize() { int quality = CamcorderProfile.hasProfile(mCameraId, CamcorderProfile.QUALITY_2160P) ? CamcorderProfile.QUALITY_2160P : @@ -1121,7 +1128,7 @@ public final class MandatoryStreamCombination { * * @return Maximum supported video size. */ - private Size getMaxExternalRecordingSize() { + private @NonNull Size getMaxExternalRecordingSize() { final Size FULLHD = new Size(1920, 1080); Size[] videoSizeArr = mStreamConfigMap.getOutputSizes( @@ -1146,7 +1153,7 @@ public final class MandatoryStreamCombination { return FULLHD; // doesn't matter what size is returned here } - private Size getMaxPreviewSize(List orderedPreviewSizes) { + private @NonNull Size getMaxPreviewSize(List orderedPreviewSizes) { if (orderedPreviewSizes != null) { for (Size size : orderedPreviewSizes) { if ((mDisplaySize.getWidth() >= size.getWidth()) && @@ -1181,7 +1188,7 @@ public final class MandatoryStreamCombination { */ public static class SizeComparator implements Comparator { @Override - public int compare(Size lhs, Size rhs) { + public int compare(@NonNull Size lhs, @NonNull Size rhs) { return compareSizes(lhs.getWidth(), lhs.getHeight(), rhs.getWidth(), rhs.getHeight()); } @@ -1199,12 +1206,8 @@ public final class MandatoryStreamCombination { * @param ascending True if the order is ascending, otherwise descending order * @return The ordered list of sizes */ - private static List getAscendingOrderSizes(final List sizeList, - boolean ascending) { - if (sizeList == null) { - return null; - } - + private static @NonNull List getAscendingOrderSizes( + @NonNull final List sizeList, boolean ascending) { Comparator comparator = new SizeComparator(); List sortedSizes = new ArrayList(); sortedSizes.addAll(sizeList); diff --git a/core/java/android/hardware/camera2/params/OutputConfiguration.java b/core/java/android/hardware/camera2/params/OutputConfiguration.java index cb336597cb8f1519c73655c3aae92811f6c253cd..d7db1f5f8b134a04e80ef8b1776acacd23433fdd 100644 --- a/core/java/android/hardware/camera2/params/OutputConfiguration.java +++ b/core/java/android/hardware/camera2/params/OutputConfiguration.java @@ -626,7 +626,7 @@ public final class OutputConfiguration implements Parcelable { return mSurfaceGroupId; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public OutputConfiguration createFromParcel(Parcel source) { diff --git a/core/java/android/hardware/camera2/params/SessionConfiguration.java b/core/java/android/hardware/camera2/params/SessionConfiguration.java index 3ea58ad83327347e72c39153e368ca6b7a034152..555ff9aff1842df7c70828b21a4108b7e4b50abf 100644 --- a/core/java/android/hardware/camera2/params/SessionConfiguration.java +++ b/core/java/android/hardware/camera2/params/SessionConfiguration.java @@ -134,7 +134,7 @@ public final class SessionConfiguration implements Parcelable { mOutputConfigurations = outConfigs; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator () { @Override public SessionConfiguration createFromParcel(Parcel source) { diff --git a/core/java/android/hardware/camera2/params/VendorTagDescriptor.java b/core/java/android/hardware/camera2/params/VendorTagDescriptor.java index ea424e594081959e22c6a675118533cf5f8103cd..4845ec3e3bd8f841cb715e9f63253a34030e999e 100644 --- a/core/java/android/hardware/camera2/params/VendorTagDescriptor.java +++ b/core/java/android/hardware/camera2/params/VendorTagDescriptor.java @@ -32,7 +32,7 @@ public final class VendorTagDescriptor implements Parcelable { private VendorTagDescriptor(Parcel source) { } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public VendorTagDescriptor createFromParcel(Parcel source) { diff --git a/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java b/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java index 1f92f6d9ebf1fef7ef3f8a0496caca549bdf8cac..450b70bcdcdcf12d0eba8bc7ddea593236ea86de 100644 --- a/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java +++ b/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java @@ -32,7 +32,7 @@ public final class VendorTagDescriptorCache implements Parcelable { private VendorTagDescriptorCache(Parcel source) { } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public VendorTagDescriptorCache createFromParcel(Parcel source) { diff --git a/core/java/android/hardware/camera2/utils/LongParcelable.java b/core/java/android/hardware/camera2/utils/LongParcelable.java index c89b33948fab028039098c8a9a48d6cf4cd24bd1..d36736e3047dc5ea852971a345735e1a9a3301b8 100644 --- a/core/java/android/hardware/camera2/utils/LongParcelable.java +++ b/core/java/android/hardware/camera2/utils/LongParcelable.java @@ -32,7 +32,7 @@ public class LongParcelable implements Parcelable { this.number = number; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public LongParcelable createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/camera2/utils/SubmitInfo.java b/core/java/android/hardware/camera2/utils/SubmitInfo.java index d1692b599f2870d0b8f5a7868bd8ec76ac543a65..9df09c49e59f2e4c74ce238536cc09935331ecc0 100644 --- a/core/java/android/hardware/camera2/utils/SubmitInfo.java +++ b/core/java/android/hardware/camera2/utils/SubmitInfo.java @@ -43,7 +43,7 @@ public class SubmitInfo implements Parcelable { mLastFrameNumber = lastFrameNumber; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SubmitInfo createFromParcel(Parcel in) { diff --git a/core/java/android/hardware/display/AmbientBrightnessDayStats.java b/core/java/android/hardware/display/AmbientBrightnessDayStats.java index 1aa2557f92a2e7c78e2805c09b5743e64c795a53..b25ef8d6a88fb748d161806846fc35b6c6fafce7 100644 --- a/core/java/android/hardware/display/AmbientBrightnessDayStats.java +++ b/core/java/android/hardware/display/AmbientBrightnessDayStats.java @@ -121,7 +121,7 @@ public final class AmbientBrightnessDayStats implements Parcelable { mStats = source.createFloatArray(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java index c6186bb4a58a6c0a1c41c337258fad77fa337b92..7fa1cfb7438eaea5041890b1dfeaa441210adec7 100644 --- a/core/java/android/hardware/display/BrightnessChangeEvent.java +++ b/core/java/android/hardware/display/BrightnessChangeEvent.java @@ -153,7 +153,7 @@ public final class BrightnessChangeEvent implements Parcelable { colorSampleDuration = source.readLong(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public BrightnessChangeEvent createFromParcel(Parcel source) { return new BrightnessChangeEvent(source); diff --git a/core/java/android/hardware/display/BrightnessConfiguration.java b/core/java/android/hardware/display/BrightnessConfiguration.java index ed8a97c7e2636091ea74d05d514041464a00f022..5b63dcfa7ad6fcdc695c1d5ff322ac0913d1d622 100644 --- a/core/java/android/hardware/display/BrightnessConfiguration.java +++ b/core/java/android/hardware/display/BrightnessConfiguration.java @@ -198,7 +198,7 @@ public final class BrightnessConfiguration implements Parcelable { && Objects.equals(mDescription, other.mDescription); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public BrightnessConfiguration createFromParcel(Parcel in) { float[] lux = in.createFloatArray(); @@ -444,6 +444,7 @@ public final class BrightnessConfiguration implements Parcelable { * {@link #getMaxCorrectionsByPackageName}). * */ + @NonNull public Builder addCorrectionByPackageName(@NonNull String packageName, @NonNull BrightnessCorrection correction) { Objects.requireNonNull(packageName, "packageName must not be null"); @@ -472,6 +473,7 @@ public final class BrightnessConfiguration implements Parcelable { * {@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 @@ public final class BrightnessConfiguration implements Parcelable { * @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 @@ public final class BrightnessConfiguration implements Parcelable { /** * 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/hardware/display/BrightnessCorrection.java b/core/java/android/hardware/display/BrightnessCorrection.java index ee8d8467d827549333a91ac7cc98df00879a7d8c..b029accab576be4413e8a6a0eb4c47e3157eb756 100644 --- a/core/java/android/hardware/display/BrightnessCorrection.java +++ b/core/java/android/hardware/display/BrightnessCorrection.java @@ -120,7 +120,7 @@ public final class BrightnessCorrection implements Parcelable { return mImplementation.hashCode(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public BrightnessCorrection createFromParcel(Parcel in) { final int type = in.readInt(); diff --git a/core/java/android/hardware/display/Curve.java b/core/java/android/hardware/display/Curve.java index 41f66f55b01ea681bcb01ae15ab855aea57c6924..0010515392f081f9d54eb21af5cb0422b525c960 100644 --- a/core/java/android/hardware/display/Curve.java +++ b/core/java/android/hardware/display/Curve.java @@ -37,7 +37,7 @@ public final class Curve implements Parcelable { return mY; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public Curve createFromParcel(Parcel in) { float[] x = in.createFloatArray(); float[] y = in.createFloatArray(); diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index ac44fe93ac31b7dc73bc7387c2c7496b48a336b1..ea63776dc5b6d4b7810b435b70381cab04e95d07 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -184,6 +184,21 @@ public final class DisplayManagerGlobal { } } + /** + * Check if specified UID's content is present on display and should be granted access to it. + * + * @param uid UID to be checked. + * @param displayId id of the display where presence of the content is checked. + * @return {@code true} if UID is present on display, {@code false} otherwise. + */ + public boolean isUidPresentOnDisplay(int uid, int displayId) { + try { + return mDm.isUidPresentOnDisplay(uid, displayId); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + /** * Gets information about a logical display. * diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index 43ea68297136cb7657ed4b4d5e7b7ffbb12dca3e..8231985970aae775394d3e6a3b42a1fcb9ecd632 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -186,14 +186,6 @@ public abstract class DisplayManagerInternal { */ public abstract void setDisplayAccessUIDs(SparseArray displayAccessUIDs); - /** - * Check if specified UID's content is present on display and should be granted access to it. - * - * @param uid UID to be checked. - * @param displayId id of the display where presence of the content is checked. - * */ - public abstract boolean isUidPresentOnDisplay(int uid, int displayId); - /** * Persist brightness slider events and ambient brightness stats. */ diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 5ea8bd67ce756baa5d2ec3844904c4f17552f6d0..0143c9129b50cd16f702db67c72199094f880f72 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -30,9 +30,12 @@ import android.view.Surface; /** @hide */ interface IDisplayManager { + @UnsupportedAppUsage DisplayInfo getDisplayInfo(int displayId); int[] getDisplayIds(); + boolean isUidPresentOnDisplay(int uid, int displayId); + void registerCallback(in IDisplayManagerCallback callback); // Requires CONFIGURE_WIFI_DISPLAY permission. diff --git a/core/java/android/hardware/display/Time.java b/core/java/android/hardware/display/Time.java index b943ac65ab062de3d6261680f3665b5b4cc6a271..87e5b3820e5a2a224a36895e0d71092f3a26db3e 100644 --- a/core/java/android/hardware/display/Time.java +++ b/core/java/android/hardware/display/Time.java @@ -62,7 +62,7 @@ public final class Time implements Parcelable { return LocalTime.of(mHour, mMinute, mSecond, mNano); } - public static final Parcelable.Creator

    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 @@ public final class StrictMode { } /** 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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { * @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 @@ public final class StrictMode { * * @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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { *

    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 @@ public final class StrictMode { * *

    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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { } /** @removed */ - public Builder penaltyListener( + public @NonNull Builder penaltyListener( @NonNull OnThreadViolationListener listener, @NonNull Executor executor) { return penaltyListener(executor, listener); } @@ -782,7 +782,7 @@ public final class StrictMode { * 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 @@ public final class StrictMode { } /** 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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { *

    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 @@ public final class StrictMode { *

    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 @@ public final class StrictMode { *

    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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { * @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 @@ public final class StrictMode { *

    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 @@ public final class StrictMode { * @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 @@ public final class StrictMode { * @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 @@ public final class StrictMode { *

  • {@link PackageManager#MATCH_DIRECT_BOOT_AUTO} * */ - 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 @@ public final class StrictMode { * @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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { * * @see #detectCleartextNetwork() */ - public Builder penaltyDeathOnCleartextNetwork() { + public @NonNull Builder penaltyDeathOnCleartextNetwork() { return enable(PENALTY_DEATH_ON_CLEARTEXT_NETWORK); } @@ -1047,12 +1047,12 @@ public final class StrictMode { * * @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 @@ public final class StrictMode { * 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 @@ public final class StrictMode { } /** @removed */ - public Builder penaltyListener( + public @NonNull Builder penaltyListener( @NonNull OnVmViolationListener listener, @NonNull Executor executor) { return penaltyListener(executor, listener); } @@ -2853,7 +2853,7 @@ public final class StrictMode { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ViolationInfo createFromParcel(Parcel in) { diff --git a/core/java/android/os/Temperature.java b/core/java/android/os/Temperature.java index eee2b520afa858997e86a52571afcaf69ef2fdc8..be7e824c49fba3fb20812123cbca5027509accc7 100644 --- a/core/java/android/os/Temperature.java +++ b/core/java/android/os/Temperature.java @@ -177,7 +177,7 @@ public final class Temperature implements Parcelable { p.writeInt(mStatus); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Temperature createFromParcel(Parcel p) { diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 40c48a0746bbc452ec633cd4322dbec653dc1b6f..82d1b1a5a63124067387c5280cc775b1710fc725 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -481,7 +481,7 @@ public final class UserHandle implements Parcelable { return h != USER_NULL ? new UserHandle(h) : null; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public UserHandle createFromParcel(Parcel in) { return new UserHandle(in); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 067375590c99203c15f64359885031898e1bdd18..7f73dab82d880a7ffe288148273f320589ce60d8 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -3021,7 +3021,7 @@ public class UserManager { userRestrictionSource = in.readInt(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public EnforcingUser createFromParcel(Parcel in) { return new EnforcingUser(in); diff --git a/core/java/android/os/VibrationEffect.java b/core/java/android/os/VibrationEffect.java index 99fb608b80dc21f8aba080f5c3304dca4ff41e15..c74cbff567c515d33f0b9b21a21e1685ef959ffa 100644 --- a/core/java/android/os/VibrationEffect.java +++ b/core/java/android/os/VibrationEffect.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.IntDef; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; import android.content.ContentResolver; @@ -240,7 +241,8 @@ public abstract class VibrationEffect implements Parcelable { * * @return The desired effect. */ - public static VibrationEffect createPrebaked(@EffectType int effectId) { + @NonNull + public static VibrationEffect createPredefined(@EffectType int effectId) { return get(effectId, true); } @@ -471,7 +473,7 @@ public abstract class VibrationEffect implements Parcelable { out.writeInt(mAmplitude); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public OneShot createFromParcel(Parcel in) { @@ -659,7 +661,7 @@ public abstract class VibrationEffect implements Parcelable { } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Waveform createFromParcel(Parcel in) { @@ -796,7 +798,7 @@ public abstract class VibrationEffect implements Parcelable { out.writeInt(mEffectStrength); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Prebaked createFromParcel(Parcel in) { @@ -811,7 +813,7 @@ public abstract class VibrationEffect implements Parcelable { }; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public VibrationEffect createFromParcel(Parcel in) { diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java index 76fe560ed902304fb39901fbf8ecdb6df3b4ad3a..9980ade17f6c1bb79cff0cde32d0f92ec0332238 100644 --- a/core/java/android/os/WorkSource.java +++ b/core/java/android/os/WorkSource.java @@ -1030,7 +1030,7 @@ public class WorkSource implements Parcelable { dest.writeStringArray(mTags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WorkChain createFromParcel(Parcel in) { return new WorkChain(in); @@ -1171,7 +1171,7 @@ public class WorkSource implements Parcelable { proto.end(workSourceToken); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WorkSource createFromParcel(Parcel in) { return new WorkSource(in); diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index e49b65e63c770b5b3ada3e362a1aea00823fdac3..60f4f06c96178769f7e1d82c7654870b57a0c3e6 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -82,9 +82,9 @@ public class ZygoteProcess { private static final String LOG_TAG = "ZygoteProcess"; /** - * The default value for enabling the blastula pool. + * The default value for enabling the unspecialized app process (USAP) pool. */ - private static final String BLASTULA_POOL_ENABLED_DEFAULT = "false"; + private static final String USAP_POOL_ENABLED_DEFAULT = "false"; /** * The name of the socket used to communicate with the primary zygote. @@ -97,14 +97,14 @@ public class ZygoteProcess { private final LocalSocketAddress mZygoteSecondarySocketAddress; /** - * The name of the socket used to communicate with the primary blastula pool. + * The name of the socket used to communicate with the primary USAP pool. */ - private final LocalSocketAddress mBlastulaPoolSocketAddress; + private final LocalSocketAddress mUsapPoolSocketAddress; /** - * The name of the socket used to communicate with the secondary (alternate ABI) blastula pool. + * The name of the socket used to communicate with the secondary (alternate ABI) USAP pool. */ - private final LocalSocketAddress mBlastulaPoolSecondarySocketAddress; + private final LocalSocketAddress mUsapPoolSecondarySocketAddress; public ZygoteProcess() { mZygoteSocketAddress = @@ -114,15 +114,15 @@ public class ZygoteProcess { new LocalSocketAddress(Zygote.SECONDARY_SOCKET_NAME, LocalSocketAddress.Namespace.RESERVED); - mBlastulaPoolSocketAddress = - new LocalSocketAddress(Zygote.BLASTULA_POOL_PRIMARY_SOCKET_NAME, + mUsapPoolSocketAddress = + new LocalSocketAddress(Zygote.USAP_POOL_PRIMARY_SOCKET_NAME, LocalSocketAddress.Namespace.RESERVED); - mBlastulaPoolSecondarySocketAddress = - new LocalSocketAddress(Zygote.BLASTULA_POOL_SECONDARY_SOCKET_NAME, + mUsapPoolSecondarySocketAddress = + new LocalSocketAddress(Zygote.USAP_POOL_SECONDARY_SOCKET_NAME, LocalSocketAddress.Namespace.RESERVED); - if (fetchBlastulaPoolEnabledProp()) { - informZygotesOfBlastulaPoolStatus(); + if (fetchUsapPoolEnabledProp()) { + informZygotesOfUsapPoolStatus(); } } @@ -131,8 +131,8 @@ public class ZygoteProcess { mZygoteSocketAddress = primarySocketAddress; mZygoteSecondarySocketAddress = secondarySocketAddress; - mBlastulaPoolSocketAddress = null; - mBlastulaPoolSecondarySocketAddress = null; + mUsapPoolSocketAddress = null; + mUsapPoolSecondarySocketAddress = null; } public LocalSocketAddress getPrimarySocketAddress() { @@ -144,7 +144,7 @@ public class ZygoteProcess { */ public static class ZygoteState { final LocalSocketAddress mZygoteSocketAddress; - final LocalSocketAddress mBlastulaSocketAddress; + final LocalSocketAddress mUsapSocketAddress; private final LocalSocket mZygoteSessionSocket; @@ -156,13 +156,13 @@ public class ZygoteProcess { private boolean mClosed; private ZygoteState(LocalSocketAddress zygoteSocketAddress, - LocalSocketAddress blastulaSocketAddress, + LocalSocketAddress usapSocketAddress, LocalSocket zygoteSessionSocket, DataInputStream zygoteInputStream, BufferedWriter zygoteOutputWriter, List abiList) { this.mZygoteSocketAddress = zygoteSocketAddress; - this.mBlastulaSocketAddress = blastulaSocketAddress; + this.mUsapSocketAddress = usapSocketAddress; this.mZygoteSessionSocket = zygoteSessionSocket; this.mZygoteInputStream = zygoteInputStream; this.mZygoteOutputWriter = zygoteOutputWriter; @@ -171,16 +171,16 @@ public class ZygoteProcess { /** * Create a new ZygoteState object by connecting to the given Zygote socket and saving the - * given blastula socket address. + * given USAP socket address. * * @param zygoteSocketAddress Zygote socket to connect to - * @param blastulaSocketAddress Blastula socket address to save for later + * @param usapSocketAddress USAP socket address to save for later * @return A new ZygoteState object containing a session socket for the given Zygote socket * address * @throws IOException */ public static ZygoteState connect(LocalSocketAddress zygoteSocketAddress, - LocalSocketAddress blastulaSocketAddress) + LocalSocketAddress usapSocketAddress) throws IOException { DataInputStream zygoteInputStream = null; @@ -202,16 +202,16 @@ public class ZygoteProcess { throw ex; } - return new ZygoteState(zygoteSocketAddress, blastulaSocketAddress, + return new ZygoteState(zygoteSocketAddress, usapSocketAddress, zygoteSessionSocket, zygoteInputStream, zygoteOutputWriter, getAbiList(zygoteOutputWriter, zygoteInputStream)); } - LocalSocket getBlastulaSessionSocket() throws IOException { - final LocalSocket blastulaSessionSocket = new LocalSocket(); - blastulaSessionSocket.connect(this.mBlastulaSocketAddress); + LocalSocket getUsapSessionSocket() throws IOException { + final LocalSocket usapSessionSocket = new LocalSocket(); + usapSessionSocket.connect(this.mUsapSocketAddress); - return blastulaSessionSocket; + return usapSessionSocket; } boolean matches(String abi) { @@ -252,6 +252,11 @@ public class ZygoteProcess { */ private int mHiddenApiAccessLogSampleRate; + /** + * Proportion of hidden API accesses that should be logged to statslog; 0 - 0x10000. + */ + private int mHiddenApiAccessStatslogSampleRate; + /** * The state of the connection to the primary zygote. */ @@ -263,13 +268,13 @@ public class ZygoteProcess { private ZygoteState secondaryZygoteState; /** - * If the blastula pool should be created and used to start applications. + * If the USAP pool should be created and used to start applications. * - * Setting this value to false will disable the creation, maintenance, and use of the blastula - * pool. When the blastula pool is disabled the application lifecycle will be identical to + * Setting this value to false will disable the creation, maintenance, and use of the USAP + * pool. When the USAP pool is disabled the application lifecycle will be identical to * previous versions of Android. */ - private boolean mBlastulaPoolEnabled = false; + private boolean mUsapPoolEnabled = false; /** * Start a new process. @@ -323,11 +328,11 @@ public class ZygoteProcess { @Nullable String packageName, @Nullable String[] packagesForUid, @Nullable String sandboxId, - boolean useBlastulaPool, + boolean useUsapPool, @Nullable String[] zygoteArgs) { // TODO (chriswailes): Is there a better place to check this value? - if (fetchBlastulaPoolEnabledPropWithMinInterval()) { - informZygotesOfBlastulaPoolStatus(); + if (fetchUsapPoolEnabledPropWithMinInterval()) { + informZygotesOfUsapPoolStatus(); } try { @@ -335,7 +340,7 @@ public class ZygoteProcess { runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, /*startChildZygote=*/false, packageName, packagesForUid, sandboxId, - useBlastulaPool, zygoteArgs); + useUsapPool, zygoteArgs); } catch (ZygoteStartFailedEx ex) { Log.e(LOG_TAG, "Starting VM process through Zygote failed"); @@ -383,7 +388,7 @@ public class ZygoteProcess { */ @GuardedBy("mLock") private Process.ProcessStartResult zygoteSendArgsAndGetResult( - ZygoteState zygoteState, boolean useBlastulaPool, ArrayList args) + ZygoteState zygoteState, boolean useUsapPool, ArrayList args) throws ZygoteStartFailedEx { // Throw early if any of the arguments are malformed. This means we can // avoid writing a partial response to the zygote. @@ -410,41 +415,41 @@ public class ZygoteProcess { Process.ProcessStartResult result = new Process.ProcessStartResult(); // TODO (chriswailes): Move branch body into separate function. - if (useBlastulaPool && mBlastulaPoolEnabled && isValidBlastulaCommand(args)) { - LocalSocket blastulaSessionSocket = null; + if (useUsapPool && mUsapPoolEnabled && isValidUsapCommand(args)) { + LocalSocket usapSessionSocket = null; try { - blastulaSessionSocket = zygoteState.getBlastulaSessionSocket(); + usapSessionSocket = zygoteState.getUsapSessionSocket(); - final BufferedWriter blastulaWriter = + final BufferedWriter usapWriter = new BufferedWriter( - new OutputStreamWriter(blastulaSessionSocket.getOutputStream()), + new OutputStreamWriter(usapSessionSocket.getOutputStream()), Zygote.SOCKET_BUFFER_SIZE); - final DataInputStream blastulaReader = - new DataInputStream(blastulaSessionSocket.getInputStream()); + final DataInputStream usapReader = + new DataInputStream(usapSessionSocket.getInputStream()); - blastulaWriter.write(msgStr); - blastulaWriter.flush(); + usapWriter.write(msgStr); + usapWriter.flush(); - result.pid = blastulaReader.readInt(); - // Blastulas can't be used to spawn processes that need wrappers. + result.pid = usapReader.readInt(); + // USAPs can't be used to spawn processes that need wrappers. result.usingWrapper = false; if (result.pid < 0) { - throw new ZygoteStartFailedEx("Blastula specialization failed"); + throw new ZygoteStartFailedEx("USAP specialization failed"); } return result; } catch (IOException ex) { - // If there was an IOException using the blastula pool we will log the error and + // If there was an IOException using the USAP pool we will log the error and // attempt to start the process through the Zygote. - Log.e(LOG_TAG, "IO Exception while communicating with blastula pool - " + Log.e(LOG_TAG, "IO Exception while communicating with USAP pool - " + ex.getMessage()); } finally { try { - blastulaSessionSocket.close(); + usapSessionSocket.close(); } catch (IOException ex) { - Log.e(LOG_TAG, "Failed to close blastula session socket: " + ex.getMessage()); + Log.e(LOG_TAG, "Failed to close USAP session socket: " + ex.getMessage()); } } } @@ -476,9 +481,9 @@ public class ZygoteProcess { } /** - * Flags that may not be passed to a blastula. + * Flags that may not be passed to a USAP. */ - private static final String[] INVALID_BLASTULA_FLAGS = { + private static final String[] INVALID_USAP_FLAGS = { "--query-abi-list", "--get-pid", "--preload-default", @@ -487,17 +492,18 @@ public class ZygoteProcess { "--start-child-zygote", "--set-api-blacklist-exemptions", "--hidden-api-log-sampling-rate", + "--hidden-api-statslog-sampling-rate", "--invoke-with" }; /** - * Tests a command list to see if it is valid to send to a blastula. - * @param args Zygote/Blastula command arguments - * @return True if the command can be passed to a blastula; false otherwise + * Tests a command list to see if it is valid to send to a USAP. + * @param args Zygote/USAP command arguments + * @return True if the command can be passed to a USAP; false otherwise */ - private static boolean isValidBlastulaCommand(ArrayList args) { + private static boolean isValidUsapCommand(ArrayList args) { for (String flag : args) { - for (String badFlag : INVALID_BLASTULA_FLAGS) { + for (String badFlag : INVALID_USAP_FLAGS) { if (flag.startsWith(badFlag)) { return false; } @@ -545,7 +551,7 @@ public class ZygoteProcess { @Nullable String packageName, @Nullable String[] packagesForUid, @Nullable String sandboxId, - boolean useBlastulaPool, + boolean useUnspecializedAppProcessPool, @Nullable String[] extraArgs) throws ZygoteStartFailedEx { ArrayList argsForZygote = new ArrayList(); @@ -645,41 +651,41 @@ public class ZygoteProcess { synchronized(mLock) { return zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi), - useBlastulaPool, + useUnspecializedAppProcessPool, argsForZygote); } } - private boolean fetchBlastulaPoolEnabledProp() { - boolean origVal = mBlastulaPoolEnabled; + private boolean fetchUsapPoolEnabledProp() { + boolean origVal = mUsapPoolEnabled; final String propertyString = Zygote.getSystemProperty( - DeviceConfig.RuntimeNative.BLASTULA_POOL_ENABLED, - BLASTULA_POOL_ENABLED_DEFAULT); + DeviceConfig.RuntimeNative.USAP_POOL_ENABLED, + USAP_POOL_ENABLED_DEFAULT); if (!propertyString.isEmpty()) { - mBlastulaPoolEnabled = + mUsapPoolEnabled = Zygote.getSystemPropertyBoolean( - DeviceConfig.RuntimeNative.BLASTULA_POOL_ENABLED, - Boolean.parseBoolean(BLASTULA_POOL_ENABLED_DEFAULT)); + DeviceConfig.RuntimeNative.USAP_POOL_ENABLED, + Boolean.parseBoolean(USAP_POOL_ENABLED_DEFAULT)); } - if (origVal != mBlastulaPoolEnabled) { - Log.i(LOG_TAG, "blastulaPoolEnabled = " + mBlastulaPoolEnabled); + if (origVal != mUsapPoolEnabled) { + Log.i(LOG_TAG, "usapPoolEnabled = " + mUsapPoolEnabled); } - return origVal != mBlastulaPoolEnabled; + return origVal != mUsapPoolEnabled; } private long mLastPropCheckTimestamp = 0; - private boolean fetchBlastulaPoolEnabledPropWithMinInterval() { + private boolean fetchUsapPoolEnabledPropWithMinInterval() { final long currentTimestamp = SystemClock.elapsedRealtime(); if (currentTimestamp - mLastPropCheckTimestamp >= Zygote.PROPERTY_CHECK_INTERVAL) { mLastPropCheckTimestamp = currentTimestamp; - return fetchBlastulaPoolEnabledProp(); + return fetchUsapPoolEnabledProp(); } return false; @@ -776,6 +782,21 @@ public class ZygoteProcess { } } + /** + * Set the precentage of detected hidden API accesses that are logged to the new event log. + * + *

    This rate will take affect for all new processes forked from the zygote after this call. + * + * @param rate An integer between 0 and 0x10000 inclusive. 0 means no event logging. + */ + public void setHiddenApiAccessStatslogSampleRate(int rate) { + synchronized (mLock) { + mHiddenApiAccessStatslogSampleRate = rate; + maybeSetHiddenApiAccessStatslogSampleRate(primaryZygoteState); + maybeSetHiddenApiAccessStatslogSampleRate(secondaryZygoteState); + } + } + @GuardedBy("mLock") private boolean maybeSetApiBlacklistExemptions(ZygoteState state, boolean sendIfEmpty) { if (state == null || state.isClosed()) { @@ -830,6 +851,30 @@ public class ZygoteProcess { } } + private void maybeSetHiddenApiAccessStatslogSampleRate(ZygoteState state) { + if (state == null || state.isClosed()) { + return; + } + if (mHiddenApiAccessStatslogSampleRate == -1) { + return; + } + try { + state.mZygoteOutputWriter.write(Integer.toString(1)); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.write("--hidden-api-statslog-sampling-rate=" + + Integer.toString(mHiddenApiAccessStatslogSampleRate)); + state.mZygoteOutputWriter.newLine(); + state.mZygoteOutputWriter.flush(); + int status = state.mZygoteInputStream.readInt(); + if (status != 0) { + Slog.e(LOG_TAG, "Failed to set hidden API statslog sampling rate; status " + + status); + } + } catch (IOException ioe) { + Slog.e(LOG_TAG, "Failed to set hidden API statslog sampling rate", ioe); + } + } + /** * Creates a ZygoteState for the primary zygote if it doesn't exist or has been disconnected. */ @@ -837,7 +882,7 @@ public class ZygoteProcess { private void attemptConnectionToPrimaryZygote() throws IOException { if (primaryZygoteState == null || primaryZygoteState.isClosed()) { primaryZygoteState = - ZygoteState.connect(mZygoteSocketAddress, mBlastulaPoolSocketAddress); + ZygoteState.connect(mZygoteSocketAddress, mUsapPoolSocketAddress); maybeSetApiBlacklistExemptions(primaryZygoteState, false); maybeSetHiddenApiAccessLogSampleRate(primaryZygoteState); @@ -852,7 +897,7 @@ public class ZygoteProcess { if (secondaryZygoteState == null || secondaryZygoteState.isClosed()) { secondaryZygoteState = ZygoteState.connect(mZygoteSecondarySocketAddress, - mBlastulaPoolSecondarySocketAddress); + mUsapPoolSecondarySocketAddress); maybeSetApiBlacklistExemptions(secondaryZygoteState, false); maybeSetHiddenApiAccessLogSampleRate(secondaryZygoteState); @@ -1007,11 +1052,11 @@ public class ZygoteProcess { } /** - * Sends messages to the zygotes telling them to change the status of their blastula pools. If + * Sends messages to the zygotes telling them to change the status of their USAP pools. If * this notification fails the ZygoteProcess will fall back to the previous behavior. */ - private void informZygotesOfBlastulaPoolStatus() { - final String command = "1\n--blastula-pool-enabled=" + mBlastulaPoolEnabled + "\n"; + private void informZygotesOfUsapPoolStatus() { + final String command = "1\n--usap-pool-enabled=" + mUsapPoolEnabled + "\n"; synchronized (mLock) { try { @@ -1020,8 +1065,8 @@ public class ZygoteProcess { primaryZygoteState.mZygoteOutputWriter.write(command); primaryZygoteState.mZygoteOutputWriter.flush(); } catch (IOException ioe) { - mBlastulaPoolEnabled = !mBlastulaPoolEnabled; - Log.w(LOG_TAG, "Failed to inform zygotes of blastula pool status: " + mUsapPoolEnabled = !mUsapPoolEnabled; + Log.w(LOG_TAG, "Failed to inform zygotes of USAP pool status: " + ioe.getMessage()); return; } @@ -1037,7 +1082,7 @@ public class ZygoteProcess { secondaryZygoteState.mZygoteInputStream.readInt(); } catch (IOException ioe) { throw new IllegalStateException( - "Blastula pool state change cause an irrecoverable error", + "USAP pool state change cause an irrecoverable error", ioe); } } catch (IOException ioe) { @@ -1051,7 +1096,7 @@ public class ZygoteProcess { primaryZygoteState.mZygoteInputStream.readInt(); } catch (IOException ioe) { throw new IllegalStateException( - "Blastula pool state change cause an irrecoverable error", + "USAP pool state change cause an irrecoverable error", ioe); } } @@ -1105,7 +1150,7 @@ public class ZygoteProcess { abi, instructionSet, null /* appDataDir */, null /* invokeWith */, true /* startChildZygote */, null /* packageName */, null /* packagesForUid */, null /* sandboxId */, - false /* useBlastulaPool */, extraArgs); + false /* useUsapPool */, extraArgs); } catch (ZygoteStartFailedEx ex) { throw new RuntimeException("Starting child-zygote through Zygote failed", ex); } diff --git a/core/java/android/os/connectivity/CellularBatteryStats.java b/core/java/android/os/connectivity/CellularBatteryStats.java index c99ecb32d418977b6cc081c0000ac88303f89def..2e0904048d409aa77d46ec62abc641e8882f4f28 100644 --- a/core/java/android/os/connectivity/CellularBatteryStats.java +++ b/core/java/android/os/connectivity/CellularBatteryStats.java @@ -46,7 +46,7 @@ public final class CellularBatteryStats implements Parcelable { private long[] mTxTimeMs; private long mMonitoredRailChargeConsumedMaMs; - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public CellularBatteryStats createFromParcel(Parcel in) { return new CellularBatteryStats(in); diff --git a/core/java/android/os/connectivity/GpsBatteryStats.java b/core/java/android/os/connectivity/GpsBatteryStats.java index f2ac5ef6d40b479fd3d783a2347ba49257e05414..ef03caa6528566c1c7208504225512a4c06b2833 100644 --- a/core/java/android/os/connectivity/GpsBatteryStats.java +++ b/core/java/android/os/connectivity/GpsBatteryStats.java @@ -33,7 +33,7 @@ public final class GpsBatteryStats implements Parcelable { private long mEnergyConsumedMaMs; private long[] mTimeInGpsSignalQualityLevel; - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public GpsBatteryStats createFromParcel(Parcel in) { return new GpsBatteryStats(in); diff --git a/core/java/android/os/connectivity/WifiBatteryStats.java b/core/java/android/os/connectivity/WifiBatteryStats.java index 3639c71ae3b50a32ced97761e47edf0723751635..9d2d5d85950c20247825598aa2e3244837c1b08c 100644 --- a/core/java/android/os/connectivity/WifiBatteryStats.java +++ b/core/java/android/os/connectivity/WifiBatteryStats.java @@ -46,7 +46,7 @@ public final class WifiBatteryStats implements Parcelable { private long[] mTimeInRxSignalStrengthLevelMs; private long mMonitoredRailChargeConsumedMaMs; - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WifiBatteryStats createFromParcel(Parcel in) { return new WifiBatteryStats(in); diff --git a/core/java/android/os/health/HealthStatsParceler.java b/core/java/android/os/health/HealthStatsParceler.java index d358a2e59099114d551299225037857130915cc0..de983595efd47c7039102675408462619f4b4af5 100644 --- a/core/java/android/os/health/HealthStatsParceler.java +++ b/core/java/android/os/health/HealthStatsParceler.java @@ -41,7 +41,7 @@ public class HealthStatsParceler implements Parcelable { private HealthStatsWriter mWriter; private HealthStats mHealthStats; - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public HealthStatsParceler createFromParcel(Parcel in) { return new HealthStatsParceler(in); diff --git a/core/java/android/os/health/TimerStat.java b/core/java/android/os/health/TimerStat.java index 6af1faf25107ce1a234c7985c34679c7cdb3d786..4aaa85fb57223f3ccc174cb53768f72536849336 100644 --- a/core/java/android/os/health/TimerStat.java +++ b/core/java/android/os/health/TimerStat.java @@ -34,7 +34,7 @@ public final class TimerStat implements Parcelable { /** * The CREATOR instance for use by aidl Binder interfaces. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public TimerStat createFromParcel(Parcel in) { return new TimerStat(in); diff --git a/core/java/android/os/storage/DiskInfo.java b/core/java/android/os/storage/DiskInfo.java index 828f1c304ccbf15ed472da067b5f9ddbb1926571..b797324c8007164fc935683d9b73c671959d10cc 100644 --- a/core/java/android/os/storage/DiskInfo.java +++ b/core/java/android/os/storage/DiskInfo.java @@ -198,7 +198,7 @@ public class DiskInfo implements Parcelable { } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public DiskInfo createFromParcel(Parcel in) { return new DiskInfo(in); diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java index 714a06126ef77d084ef97fa13a54cb8e8eca3fdc..225ecfa315aaa2afa49922cb0f462c105bb3531b 100644 --- a/core/java/android/os/storage/StorageVolume.java +++ b/core/java/android/os/storage/StorageVolume.java @@ -431,7 +431,7 @@ public final class StorageVolume implements Parcelable { pw.decreaseIndent(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public StorageVolume createFromParcel(Parcel in) { return new StorageVolume(in); diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index 5d310e1c2db982387c2d8b72e19b6f400021fd8c..7699a0529826823f9298aa7a8bae1bf64083735a 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -527,7 +527,7 @@ public class VolumeInfo implements Parcelable { } @UnsupportedAppUsage - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public VolumeInfo createFromParcel(Parcel in) { return new VolumeInfo(in); diff --git a/core/java/android/os/storage/VolumeRecord.java b/core/java/android/os/storage/VolumeRecord.java index bc2d55a92b906a5fa6c01df5e226c2d8efe7288a..b6ee261149636c4fa98ff29f906389974b280ab0 100644 --- a/core/java/android/os/storage/VolumeRecord.java +++ b/core/java/android/os/storage/VolumeRecord.java @@ -130,7 +130,7 @@ public class VolumeRecord implements Parcelable { } @UnsupportedAppUsage - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public VolumeRecord createFromParcel(Parcel in) { return new VolumeRecord(in); diff --git a/core/java/android/permission/IPermissionController.aidl b/core/java/android/permission/IPermissionController.aidl index cb2517e956dff2a767555f73238a09d1c1c0e508..76e911ddaf5a98fce8e837fbf172ff1f3906b724 100644 --- a/core/java/android/permission/IPermissionController.aidl +++ b/core/java/android/permission/IPermissionController.aidl @@ -40,6 +40,7 @@ oneway interface IPermissionController { void getPermissionUsages(boolean countSystem, long numMillis, in RemoteCallback callback); void isApplicationQualifiedForRole(String roleName, String packageName, in RemoteCallback callback); + void isRoleVisible(String roleName, in RemoteCallback callback); void setRuntimePermissionGrantStateByDeviceAdmin(String callerPackageName, String packageName, String permission, int grantState, in RemoteCallback callback); } diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java index 9d58064ab6d0bdc2d724612385c9a5f3a86cb00e..5695e42bef8e669f5da0e87a46517faab80feaed 100644 --- a/core/java/android/permission/PermissionControllerManager.java +++ b/core/java/android/permission/PermissionControllerManager.java @@ -475,6 +475,26 @@ public final class PermissionControllerManager { mRemoteService, roleName, packageName, executor, callback)); } + /** + * Check whether a role should be visible to user. + * + * @param roleName name of the role to check for + * @param executor Executor on which to invoke the callback + * @param callback Callback to receive the result + * + * @hide + */ + @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) + public void isRoleVisible(@NonNull String roleName, + @NonNull @CallbackExecutor Executor executor, @NonNull Consumer callback) { + checkStringNotEmpty(roleName); + checkNotNull(executor); + checkNotNull(callback); + + mRemoteService.scheduleRequest(new PendingIsRoleVisibleRequest(mRemoteService, roleName, + executor, callback)); + } + /** * A connection to the remote service */ @@ -1222,4 +1242,55 @@ public final class PermissionControllerManager { } } } + + /** + * Request for {@link #isRoleVisible}. + */ + private static final class PendingIsRoleVisibleRequest extends + AbstractRemoteService.PendingRequest { + + private final @NonNull String mRoleName; + private final @NonNull Consumer mCallback; + + private final @NonNull RemoteCallback mRemoteCallback; + + private PendingIsRoleVisibleRequest(@NonNull RemoteService service, + @NonNull String roleName, @NonNull @CallbackExecutor Executor executor, + @NonNull Consumer callback) { + super(service); + + mRoleName = roleName; + mCallback = callback; + + mRemoteCallback = new RemoteCallback(result -> executor.execute(() -> { + long token = Binder.clearCallingIdentity(); + try { + boolean visible; + if (result != null) { + visible = result.getBoolean(KEY_RESULT); + } else { + visible = false; + } + callback.accept(visible); + } finally { + Binder.restoreCallingIdentity(token); + finish(); + } + }), null); + } + + @Override + protected void onTimeout(RemoteService remoteService) { + mCallback.accept(false); + } + + @Override + public void run() { + try { + getService().getServiceInterface().isRoleVisible(mRoleName, mRemoteCallback); + } catch (RemoteException e) { + Log.e(TAG, "Error checking whether role should be visible", e); + } + } + } } diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java index e883d25ab0bdf266dd46e1fbab3714289b5c1880..d375c10e6d4ce737096c8c7625e646e451d8cadc 100644 --- a/core/java/android/permission/PermissionControllerService.java +++ b/core/java/android/permission/PermissionControllerService.java @@ -179,11 +179,20 @@ public abstract class PermissionControllerService extends Service { * @param roleName name of the role to check for * @param packageName package name of the application to check for * - * @return whether the application is qualified for the role. + * @return whether the application is qualified for the role */ public abstract boolean onIsApplicationQualifiedForRole(@NonNull String roleName, @NonNull String packageName); + /** + * Check whether a role should be visible to user. + * + * @param roleName name of the role to check for + * + * @return whether the role should be visible to user + */ + public abstract boolean onIsRoleVisible(@NonNull String roleName); + /** * Set the runtime permission state from a device admin. * @@ -197,7 +206,7 @@ public abstract class PermissionControllerService extends Service { @NonNull String permission, @PermissionGrantState int grantState); @Override - public final IBinder onBind(Intent intent) { + public final @NonNull IBinder onBind(Intent intent) { return new IPermissionController.Stub() { @Override public void revokeRuntimePermissions( @@ -343,6 +352,18 @@ public abstract class PermissionControllerService extends Service { PermissionControllerService.this, roleName, packageName, callback)); } + @Override + public void isRoleVisible(String roleName, RemoteCallback callback) { + checkStringNotEmpty(roleName); + checkNotNull(callback, "callback"); + + enforceCallingPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, null); + + mHandler.sendMessage(obtainMessage( + PermissionControllerService::isRoleVisible, + PermissionControllerService.this, roleName, callback)); + } + @Override public void setRuntimePermissionGrantStateByDeviceAdmin(String callerPackageName, String packageName, String permission, int grantState, @@ -445,6 +466,13 @@ public abstract class PermissionControllerService extends Service { callback.sendResult(result); } + private void isRoleVisible(@NonNull String roleName, @NonNull RemoteCallback callback) { + boolean visible = onIsRoleVisible(roleName); + Bundle result = new Bundle(); + result.putBoolean(PermissionControllerManager.KEY_RESULT, visible); + callback.sendResult(result); + } + private void setRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName, @NonNull String packageName, @NonNull String permission, @PermissionGrantState int grantState, @NonNull RemoteCallback callback) { diff --git a/core/java/android/permission/RuntimePermissionPresentationInfo.java b/core/java/android/permission/RuntimePermissionPresentationInfo.java index ed7b05c83046b39d44b1dd48e46005219169c982..4fce14cef3f0679198a23cec0058c2fddc66ba31 100644 --- a/core/java/android/permission/RuntimePermissionPresentationInfo.java +++ b/core/java/android/permission/RuntimePermissionPresentationInfo.java @@ -21,6 +21,8 @@ import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import com.android.internal.util.Preconditions; + /** * This class contains information about how a runtime permission * is to be presented in the UI. A single runtime permission @@ -35,7 +37,7 @@ public final class RuntimePermissionPresentationInfo implements Parcelable { private static final int FLAG_GRANTED = 1 << 0; private static final int FLAG_STANDARD = 1 << 1; - private final CharSequence mLabel; + private final @NonNull CharSequence mLabel; private final int mFlags; /** @@ -45,8 +47,10 @@ public final class RuntimePermissionPresentationInfo implements Parcelable { * @param granted Whether the permission is granted. * @param standard Whether this is a platform-defined permission. */ - public RuntimePermissionPresentationInfo(CharSequence label, + public RuntimePermissionPresentationInfo(@NonNull CharSequence label, boolean granted, boolean standard) { + Preconditions.checkNotNull(label); + mLabel = label; int flags = 0; if (granted) { @@ -58,11 +62,6 @@ public final class RuntimePermissionPresentationInfo implements Parcelable { mFlags = flags; } - private RuntimePermissionPresentationInfo(Parcel parcel) { - mLabel = parcel.readCharSequence(); - mFlags = parcel.readInt(); - } - /** * @return Whether the permission is granted. */ @@ -97,10 +96,14 @@ public final class RuntimePermissionPresentationInfo implements Parcelable { parcel.writeInt(mFlags); } - public static final Creator CREATOR = + public static final @NonNull Creator CREATOR = new Creator() { public RuntimePermissionPresentationInfo createFromParcel(Parcel source) { - return new RuntimePermissionPresentationInfo(source); + CharSequence label = source.readCharSequence(); + int flags = source.readInt(); + + return new RuntimePermissionPresentationInfo(label, (flags & FLAG_GRANTED) != 0, + (flags & FLAG_STANDARD) != 0); } public RuntimePermissionPresentationInfo[] newArray(int size) { diff --git a/core/java/android/permission/RuntimePermissionUsageInfo.java b/core/java/android/permission/RuntimePermissionUsageInfo.java index af1a1bec37cf398e0268e35b7f309689a9f2cf56..9f954f7dcbe92bb81010333e8e48717104da00af 100644 --- a/core/java/android/permission/RuntimePermissionUsageInfo.java +++ b/core/java/android/permission/RuntimePermissionUsageInfo.java @@ -83,7 +83,7 @@ public final class RuntimePermissionUsageInfo implements Parcelable { parcel.writeInt(mNumUsers); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RuntimePermissionUsageInfo createFromParcel(Parcel source) { return new RuntimePermissionUsageInfo(source); diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java index 96c85890a4726333a0d29d38adbc5c9364adc348..8880296790180654a92fa55bd2a0980f4adb823d 100644 --- a/core/java/android/preference/DialogPreference.java +++ b/core/java/android/preference/DialogPreference.java @@ -519,7 +519,7 @@ public abstract class DialogPreference extends Preference implements super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/EditTextPreference.java b/core/java/android/preference/EditTextPreference.java index c09cec80139c7c9f7d5020e377425f731f13fd32..74c5e3e49d63a1688c8be5d3497bfd25d8b20d80 100644 --- a/core/java/android/preference/EditTextPreference.java +++ b/core/java/android/preference/EditTextPreference.java @@ -234,7 +234,7 @@ public class EditTextPreference extends DialogPreference { super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java index 14c1dc81149ab58029f048cc09abb79725d53e80..830de52576d8961d421881bff0021db85ff45bc8 100644 --- a/core/java/android/preference/ListPreference.java +++ b/core/java/android/preference/ListPreference.java @@ -348,7 +348,7 @@ public class ListPreference extends DialogPreference { super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/MultiCheckPreference.java b/core/java/android/preference/MultiCheckPreference.java index e3d0e26bd59beca57538256a58bf7d48ba09dc75..4b854ade025edd0c1ef6ec2ef218fe72fb32a51c 100644 --- a/core/java/android/preference/MultiCheckPreference.java +++ b/core/java/android/preference/MultiCheckPreference.java @@ -329,7 +329,7 @@ public class MultiCheckPreference extends DialogPreference { super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/MultiSelectListPreference.java b/core/java/android/preference/MultiSelectListPreference.java index 43182d9ebbdd45e2e149e2b52e94f262b17ccaf2..3d807172d80b9b4490999980dfb9ac0102d463c1 100644 --- a/core/java/android/preference/MultiSelectListPreference.java +++ b/core/java/android/preference/MultiSelectListPreference.java @@ -279,7 +279,7 @@ public class MultiSelectListPreference extends DialogPreference { dest.writeStringArray(values.toArray(new String[0])); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 3c1ba9d02d9395c2ca6588db1779f3bb6e81fd2b..e82e60dfe1c4e58a5a75c497997389827e006844 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -2108,7 +2108,7 @@ public class Preference implements Comparable { super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public BaseSavedState createFromParcel(Parcel in) { return new BaseSavedState(in); diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index eab5937a370e7ea87ded581f264ed360f6229ca2..47509713d335dd9f7b9e554ba6d6193d84410b2e 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -518,7 +518,7 @@ public abstract class PreferenceActivity extends ListActivity implements readFromParcel(in); } - public static final Creator

    CREATOR = new Creator
    () { + public static final @android.annotation.NonNull Creator
    CREATOR = new Creator
    () { public Header createFromParcel(Parcel source) { return new Header(source); } diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java index c7653c895cd390266de89dfcdcc09f61e5bf4a80..a353dbc8af1b1c9e1342025c5192f76e54b80b35 100644 --- a/core/java/android/preference/PreferenceScreen.java +++ b/core/java/android/preference/PreferenceScreen.java @@ -315,7 +315,7 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/SeekBarPreference.java b/core/java/android/preference/SeekBarPreference.java index f789e31faa027d0af356d88769ab3936fb044ee0..99ab9dbeb2807270778c6edf6026079e7e6f0f1a 100644 --- a/core/java/android/preference/SeekBarPreference.java +++ b/core/java/android/preference/SeekBarPreference.java @@ -249,7 +249,7 @@ public class SeekBarPreference extends Preference } @SuppressWarnings("unused") - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/TwoStatePreference.java b/core/java/android/preference/TwoStatePreference.java index 454472a51556ef41293a040b8e1a7ff10643cb08..bb771d721d83010ce027e7a353a2655cef6150eb 100644 --- a/core/java/android/preference/TwoStatePreference.java +++ b/core/java/android/preference/TwoStatePreference.java @@ -278,7 +278,7 @@ public abstract class TwoStatePreference extends Preference { super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java index 92d848acc245e4c75ad21ecc564bdb88f23dc4a6..a2d5a2312047b91d6588773afc8ebdfceca2112b 100644 --- a/core/java/android/preference/VolumePreference.java +++ b/core/java/android/preference/VolumePreference.java @@ -236,7 +236,7 @@ public class VolumePreference extends SeekBarDialogPreference implements super(superState); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/print/PageRange.java b/core/java/android/print/PageRange.java index 294128345658ed4fbdf28c9d0d27a037fb00652b..134503874a772c6227ac63275250eea9fd6441a6 100644 --- a/core/java/android/print/PageRange.java +++ b/core/java/android/print/PageRange.java @@ -162,7 +162,7 @@ public final class PageRange implements Parcelable { return builder.toString(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PageRange createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrintAttributes.java b/core/java/android/print/PrintAttributes.java index f0d9a0cebbdb2c1c340ea509730db50f7444010c..e607ced633932c56d0de05df3d0442b0bb685f83 100644 --- a/core/java/android/print/PrintAttributes.java +++ b/core/java/android/print/PrintAttributes.java @@ -1465,7 +1465,7 @@ public final class PrintAttributes implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PrintAttributes createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java index 55c902e19c358470a1e742189500210cfa22e20a..e10c507723e7632ca53c22c1eaa52b4c3b1d883e 100644 --- a/core/java/android/print/PrintDocumentInfo.java +++ b/core/java/android/print/PrintDocumentInfo.java @@ -367,7 +367,7 @@ public final class PrintDocumentInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PrintDocumentInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrintJobId.java b/core/java/android/print/PrintJobId.java index 186ae9b28dae9bbf90805d11bb568fb5e8f74254..606cbb81906504c7f0cf506748ab923f9551546f 100644 --- a/core/java/android/print/PrintJobId.java +++ b/core/java/android/print/PrintJobId.java @@ -109,7 +109,7 @@ public final class PrintJobId implements Parcelable { return new PrintJobId(string); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PrintJobId createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java index 41f261be368ad8fa407e56f482afeb94223bf14d..25f383c09ad1c00ce676945cbc7fd7101cb91353 100644 --- a/core/java/android/print/PrintJobInfo.java +++ b/core/java/android/print/PrintJobInfo.java @@ -881,7 +881,7 @@ public final class PrintJobInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PrintJobInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrinterCapabilitiesInfo.java b/core/java/android/print/PrinterCapabilitiesInfo.java index 01c23f6734b05cd8d2f8f3cbff0483ea6b6d4521..e465d3b6b5decf12a149a45888b946dcc7e6862d 100644 --- a/core/java/android/print/PrinterCapabilitiesInfo.java +++ b/core/java/android/print/PrinterCapabilitiesInfo.java @@ -646,7 +646,7 @@ public final class PrinterCapabilitiesInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PrinterCapabilitiesInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrinterId.java b/core/java/android/print/PrinterId.java index 659e56f19c7931391f0c745f8d44e5a55bab9fc4..42570c69650f27af51792887b0b2811c8073d083 100644 --- a/core/java/android/print/PrinterId.java +++ b/core/java/android/print/PrinterId.java @@ -124,7 +124,7 @@ public final class PrinterId implements Parcelable { return builder.toString(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public PrinterId createFromParcel(Parcel parcel) { diff --git a/core/java/android/print/PrinterInfo.java b/core/java/android/print/PrinterInfo.java index e79cc651c48bfbd45b6b5fb2055e1ee7e7d2adf1..4d5ccc0e803efbd402415593b303e10b470b559a 100644 --- a/core/java/android/print/PrinterInfo.java +++ b/core/java/android/print/PrinterInfo.java @@ -563,7 +563,7 @@ public final class PrinterInfo implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PrinterInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/printservice/PrintServiceInfo.java b/core/java/android/printservice/PrintServiceInfo.java index 57f122923c69bfa40eee47a12c82bdccac26afe8..565843e9bba5cf4aa953880f16f198139679d2ec 100644 --- a/core/java/android/printservice/PrintServiceInfo.java +++ b/core/java/android/printservice/PrintServiceInfo.java @@ -328,7 +328,7 @@ public final class PrintServiceInfo implements Parcelable { return builder.toString(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public PrintServiceInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/printservice/recommendation/RecommendationInfo.java b/core/java/android/printservice/recommendation/RecommendationInfo.java index a3279563122739b4559caa1a67aa1d73ce331f06..156f182b8fe882841f5c29fa1c1a702ab71d88ff 100644 --- a/core/java/android/printservice/recommendation/RecommendationInfo.java +++ b/core/java/android/printservice/recommendation/RecommendationInfo.java @@ -182,7 +182,7 @@ public final class RecommendationInfo implements Parcelable { * * @see #RecommendationInfo(Parcel) */ - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public RecommendationInfo createFromParcel(Parcel in) { diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java index 807c5b0ba365a1752960db118815257130c24086..27da1e137b85bf55e91e0c03daf3855af7ec6902 100644 --- a/core/java/android/provider/CalendarContract.java +++ b/core/java/android/provider/CalendarContract.java @@ -182,6 +182,22 @@ public final class CalendarContract { */ 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 diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index ddb8758e18f463540701962effae60750427ccf0..5d4539cb62afa2f7ee1d03fdaf44b1fed37bc860 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -55,12 +55,23 @@ public final class DeviceConfig { public static final Uri CONTENT_URI = Uri.parse("content://" + Settings.AUTHORITY + "/config"); /** - * Namespace for all Game Driver features. + * Namespace for activity manager related features. These features will be applied + * immediately upon change. * * @hide */ @SystemApi - public static final String NAMESPACE_GAME_DRIVER = "game_driver"; + public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager"; + + /** + * Namespace for all activity manager related features that are used at the native level. + * These features are applied at reboot. + * + * @hide + */ + @SystemApi + public static final String NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT = + "activity_manager_native_boot"; /** * Namespace for autofill feature that provides suggestions across all apps when @@ -82,6 +93,14 @@ public final class DeviceConfig { @TestApi public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture"; + /** + * Namespace for all Game Driver features. + * + * @hide + */ + @SystemApi + public static final String NAMESPACE_GAME_DRIVER = "game_driver"; + /** * Namespace for all input-related features that are used at the native level. * These features are applied at reboot. @@ -91,6 +110,14 @@ public final class DeviceConfig { @SystemApi public static final String NAMESPACE_INPUT_NATIVE_BOOT = "input_native_boot"; + /** + * Namespace for all media native related features. + * + * @hide + */ + @SystemApi + public static final String NAMESPACE_MEDIA_NATIVE = "media_native"; + /** * Namespace for all netd related features. * @@ -99,6 +126,15 @@ public final class DeviceConfig { @SystemApi public static final String NAMESPACE_NETD_NATIVE = "netd_native"; + /** + * Namespace for all runtime native boot related features. Boot in this case refers to the + * fact that the properties only take affect after rebooting the device. + * + * @hide + */ + @SystemApi + public static final String NAMESPACE_RUNTIME_NATIVE_BOOT = "runtime_native_boot"; + /** * Namespace for System UI related features. * @@ -136,66 +172,32 @@ public final class DeviceConfig { */ /** - * If {@code true}, enables the blastula pool feature. + * If {@code true}, enables the unspecialized app process (USAP) pool feature. * * @hide for internal use only */ - String BLASTULA_POOL_ENABLED = "blastula_pool_enabled"; + String USAP_POOL_ENABLED = "usap_pool_enabled"; /** - * The maximum number of processes to keep in the blastula pool. + * The maximum number of processes to keep in the USAP pool. * * @hide for internal use only */ - String BLASTULA_POOL_SIZE_MAX = "blastula_pool_size_max"; + String USAP_POOL_SIZE_MAX = "usap_pool_size_max"; /** - * The minimum number of processes to keep in the blastula pool. + * The minimum number of processes to keep in the USAP pool. * * @hide for internal use only */ - String BLASTULA_POOL_SIZE_MIN = "blastula_pool_size_min"; + String USAP_POOL_SIZE_MIN = "usap_pool_size_min"; /** * The threshold used to determine if the pool should be refilled. * * @hide for internal use only */ - String BLASTULA_POOL_REFILL_THRESHOLD = "blastula_refill_threshold"; - } - - /** - * Namespace for all runtime native boot related features. Boot in this case refers to the - * fact that the properties only take affect after rebooting the device. - * - * @hide - */ - @SystemApi - public interface RuntimeNativeBoot { - String NAMESPACE = "runtime_native_boot"; - } - - /** - * Namespace for all media native related features. - * - * @hide - */ - @SystemApi - public interface MediaNative { - /** The flag namespace for media native features. */ - String NAMESPACE = "media_native"; - } - - /** - * Namespace for all activity manager related features that are used at the native level. - * These features are applied at reboot. - * - * @hide - */ - @SystemApi - public interface ActivityManagerNativeBoot { - String NAMESPACE = "activity_manager_native_boot"; - String OFFLOAD_QUEUE_ENABLED = "offload_queue_enabled"; + String USAP_POOL_REFILL_THRESHOLD = "usap_refill_threshold"; } /** @@ -280,35 +282,6 @@ public final class DeviceConfig { String PRIV_APPS_OOB_WHITELIST = "priv_apps_oob_whitelist"; } - /** - * 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. * @@ -411,6 +384,110 @@ public final class DeviceConfig { return Settings.Config.getString(contentResolver, compositeName); } + /** + * Look up the String value of a property for a particular namespace. + * + * @param namespace The namespace containing the property to look up. + * @param name The name of the property to look up. + * @param defaultValue The value to return if the property does not exist or has no non-null + * value. + * @return the corresponding value, or defaultValue if none exists. + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(READ_DEVICE_CONFIG) + public static String getString(String namespace, String name, String defaultValue) { + String value = getProperty(namespace, name); + return value != null ? value : defaultValue; + } + + /** + * Look up the boolean value of a property for a particular namespace. + * + * @param namespace The namespace containing the property to look up. + * @param name The name of the property to look up. + * @param defaultValue The value to return if the property does not exist or has no non-null + * value. + * @return the corresponding value, or defaultValue if none exists. + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(READ_DEVICE_CONFIG) + public static boolean getBoolean(String namespace, String name, boolean defaultValue) { + String value = getProperty(namespace, name); + return value != null ? Boolean.parseBoolean(value) : defaultValue; + } + + /** + * Look up the int value of a property for a particular namespace. + * + * @param namespace The namespace containing the property to look up. + * @param name The name of the property to look up. + * @param defaultValue The value to return if the property does not exist, has no non-null + * value, or fails to parse into an int. + * @return the corresponding value, or defaultValue if either none exists or it does not parse. + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(READ_DEVICE_CONFIG) + public static int getInt(String namespace, String name, int defaultValue) { + String value = getProperty(namespace, name); + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return defaultValue; + } + } + + /** + * Look up the long value of a property for a particular namespace. + * + * @param namespace The namespace containing the property to look up. + * @param name The name of the property to look up. + * @param defaultValue The value to return if the property does not exist, has no non-null + * value, or fails to parse into a long. + * @return the corresponding value, or defaultValue if either none exists or it does not parse. + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(READ_DEVICE_CONFIG) + public static long getLong(String namespace, String name, long defaultValue) { + String value = getProperty(namespace, name); + try { + return Long.parseLong(value); + } catch (NumberFormatException e) { + return defaultValue; + } + } + + /** + * Look up the float value of a property for a particular namespace. + * + * @param namespace The namespace containing the property to look up. + * @param name The name of the property to look up. + * @param defaultValue The value to return if the property does not exist, has no non-null + * value, or fails to parse into a float. + * @return the corresponding value, or defaultValue if either none exists or it does not parse. + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(READ_DEVICE_CONFIG) + public static float getFloat(String namespace, String name, float defaultValue) { + String value = getProperty(namespace, name); + try { + return Float.parseFloat(value); + } catch (NumberFormatException e) { + return defaultValue; + } catch (NullPointerException e) { + return defaultValue; + } + } + /** * Create a new property with the the provided name and value in the provided namespace, or * update the value of such a property if it already exists. The same name can exist in multiple diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index d282967867596f286c3c58acfcfab5e372ff4ea5..49567b29f71098cf87dcf20d52464a83a0469f58 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -1794,7 +1794,7 @@ public final class DocumentsContract { return 0; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Path createFromParcel(Parcel in) { final String rootId = in.readString(); diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 643307eb89ae2850bd27d93df368f84b12f02711..917b5c2615dbfc3b4ad9da657f2b5528e126d0bf 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -145,6 +145,8 @@ public final class MediaStore { */ public static final String RETRANSLATE_CALL = "update_titles"; + /** {@hide} */ + public static final String GET_VERSION_CALL = "get_version"; /** {@hide} */ public static final String GET_DOCUMENT_URI_CALL = "get_document_uri"; /** {@hide} */ @@ -529,7 +531,6 @@ public final class MediaStore { * * @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 +587,9 @@ public final class MediaStore { * @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 +602,19 @@ public final class MediaStore { * * @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 +719,10 @@ public final class MediaStore { * 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 +987,7 @@ public final class MediaStore { * 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 +1007,8 @@ public final class MediaStore { /** * 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 +1035,6 @@ public final class MediaStore { /** * 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 +1042,6 @@ public final class MediaStore { /** * 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 +1293,7 @@ public final class MediaStore { } /** - * Container for downloaded files. - * - *

    - * 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 +1301,7 @@ public final class MediaStore { /** * The content:// style URI for the internal storage. */ + @NonNull public static final Uri INTERNAL_CONTENT_URI = getContentUri("internal"); @@ -1312,6 +1309,7 @@ public final class MediaStore { * The content:// style URI for the "primary" external storage * volume. */ + @NonNull public static final Uri EXTERNAL_CONTENT_URI = getContentUri("external"); @@ -1336,13 +1334,13 @@ public final class MediaStore { * @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 +1618,9 @@ public final class MediaStore { * @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 +1649,9 @@ public final class MediaStore { * @param description The description of the image * @return The URL to the newly created image, or null 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 +3178,7 @@ public final class MediaStore { * {@link MediaStore.Images.Media#getContentUri(String)} to query media at * that location. */ - public static @NonNull Set getAllVolumeNames(Context context) { + public static @NonNull Set getAllVolumeNames(@NonNull Context context) { final StorageManager sm = context.getSystemService(StorageManager.class); final Set volumeNames = new ArraySet<>(); volumeNames.add(VOLUME_INTERNAL); @@ -3322,21 +3320,41 @@ public final class MediaStore { public static final String MEDIA_IGNORE_FILENAME = ".nomedia"; /** - * Get the media provider's version. - * Applications that import data from the media provider into their own caches - * can use this to detect that the media provider changed, and reimport data - * as needed. No other assumptions should be made about the meaning of the version. - * @param context Context to use for performing the query. - * @return A version string, or null if the version could not be determined. + * Return an opaque version string describing the {@link MediaStore} state. + *

    + * Applications that import data from {@link MediaStore} into their own + * caches can use this to detect that {@link MediaStore} has undergone + * substantial changes, and that data should be rescanned. + *

    + * No other assumptions should be made about the meaning of the version. + *

    + * This method returns the version for {@link MediaStore#VOLUME_EXTERNAL}; + * to obtain a version for a different volume, use + * {@link #getVersion(Context, String)}. */ - public static String getVersion(Context context) { - final Uri uri = AUTHORITY_URI.buildUpon().appendPath("none").appendPath("version").build(); - try (Cursor c = context.getContentResolver().query(uri, null, null, null, null)) { - if (c.moveToFirst()) { - return c.getString(0); - } + public static @NonNull String getVersion(@NonNull Context context) { + return getVersion(context, VOLUME_EXTERNAL); + } + + /** + * Return an opaque version string describing the {@link MediaStore} state. + *

    + * Applications that import data from {@link MediaStore} into their own + * caches can use this to detect that {@link MediaStore} has undergone + * substantial changes, and that data should be rescanned. + *

    + * No other assumptions should be made about the meaning of the version. + */ + public static @NonNull String getVersion(@NonNull Context context, @NonNull String volumeName) { + final ContentResolver resolver = context.getContentResolver(); + try (ContentProviderClient client = resolver.acquireContentProviderClient(AUTHORITY)) { + final Bundle in = new Bundle(); + in.putString(Intent.EXTRA_TEXT, volumeName); + final Bundle out = client.call(GET_VERSION_CALL, null, in); + return out.getString(Intent.EXTRA_TEXT); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } - return null; } /** @@ -3354,7 +3372,7 @@ public final class MediaStore { * 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 uriPermissions = resolver.getPersistedUriPermissions(); @@ -3384,7 +3402,7 @@ public final class MediaStore { * 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 uriPermissions = resolver.getPersistedUriPermissions(); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 2c63767fe4047126613492fb5d33c9d513d80b05..efa371268aa833eafc1149665167e4d2f3dd70a7 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -307,6 +307,22 @@ public final class Settings { public static final String ACTION_ACCESSIBILITY_SETTINGS = "android.settings.ACCESSIBILITY_SETTINGS"; + /** + * Activity Action: Show detail settings of a particular accessibility service. + *

    + * In some cases, a matching Activity may not exist, so ensure you safeguard against this. + *

    + * Input: {@link Intent#EXTRA_COMPONENT_NAME} must specify the accessibility service component + * name to be shown. + *

    + * Output: Nothing. + * @hide + **/ + @SystemApi + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = + "android.settings.ACCESSIBILITY_DETAILS_SETTINGS"; + /** * Activity Action: Show settings to control access to usage information. *

    @@ -496,25 +512,16 @@ public final class Settings { * In some cases, a matching Activity may not exist, so ensure you safeguard * against this by checking WifiManager.isEasyConnectSupported(); *

    - * Input: - * The following keys in the bundle with their associated value. - *

      - *
    • "qrCode": Standard Easy Connect (Wi-Fi DPP) URI bootstrapping information as a - * string.
    • - *
    + * Input: The Intent's data URI specifies bootstrapping information for authenticating and + * provisioning the peer, with the "DPP" scheme. *

    - * Output: Nothing. + * Output: After {@code startActivityForResult}, the callback {@code onActivityResult} will have + * resultCode {@link android.app.Activity#RESULT_OK} if Wi-Fi Easy Connect configuration + * success and the user clicks 'Done' button. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) - public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_QR_CODE = - "android.settings.PROCESS_WIFI_EASY_CONNECT_QR_CODE"; - - /** - * An extra to put in the bundle for {@link #ACTION_PROCESS_WIFI_EASY_CONNECT_QR_CODE} intents. - * It must contain properly formatted Easy Connect (Wi-Fi DPP) URI bootstrapping information for - * the process to proceed. - */ - public static final String EXTRA_QR_CODE = "android.provider.extra.QR_CODE"; + public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_URI = + "android.settings.PROCESS_WIFI_EASY_CONNECT_URI"; /** * Activity Action: Show settings to allow configuration of data and view data usage. @@ -3315,6 +3322,17 @@ public final class Settings { ColorDisplayManager.COLOR_MODE_NATURAL, ColorDisplayManager.COLOR_MODE_AUTOMATIC); + /** + * The user selected peak refresh rate in frames per second. + * + * If this isn't set, the system falls back to a device specific default. + * @hide + */ + public static final String PEAK_REFRESH_RATE = "peak_refresh_rate"; + + private static final Validator PEAK_REFRESH_RATE_VALIDATOR = + new SettingsValidators.InclusiveFloatRangeValidator(24f, Float.MAX_VALUE); + /** * The amount of time in milliseconds before the device goes to sleep or begins * to dream after a period of inactivity. This value is also known as the @@ -8013,9 +8031,9 @@ public final class Settings { /** * Whether or not face unlock always requires user confirmation, meaning {@link - * android.hardware.biometrics.BiometricPrompt.Builder#setRequireConfirmation(boolean)} + * android.hardware.biometrics.BiometricPrompt.Builder#setConfirmationRequired(boolean)} * is always 'true'. This overrides the behavior that apps choose in the - * setRequireConfirmation API. + * setConfirmationRequired API. * @hide */ public static final String FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION = @@ -9651,6 +9669,7 @@ public final class Settings { * when user location settings are off), for emergency purposes. * @hide */ + @TestApi public static final String LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST = "location_ignore_settings_package_whitelist"; @@ -11459,6 +11478,15 @@ public final class Settings { public static final String BACKGROUND_ACTIVITY_STARTS_ENABLED = "background_activity_starts_enabled"; + /** + * The packages temporarily whitelisted to be able so start activities from background. + * The list of packages is {@code ":"} colon delimited. + * + * @hide + */ + public static final String BACKGROUND_ACTIVITY_STARTS_PACKAGE_NAMES_WHITELIST = + "background_activity_starts_package_names_whitelist"; + /** * @hide * @see com.android.server.appbinding.AppBindingConstants @@ -13402,14 +13430,23 @@ public final class Settings { "hidden_api_blacklist_exemptions"; /** - * Sampling rate for hidden API access event logs, as an integer in the range 0 to 0x10000 - * inclusive. + * Sampling rate for hidden API access event logs with libmetricslogger, as an integer in + * the range 0 to 0x10000 inclusive. * * @hide */ public static final String HIDDEN_API_ACCESS_LOG_SAMPLING_RATE = "hidden_api_access_log_sampling_rate"; + /** + * Sampling rate for hidden API access event logging with statslog, as an integer in the + * range 0 to 0x10000 inclusive. + * + * @hide + */ + public static final String HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE = + "hidden_api_access_statslog_sampling_rate"; + /** * Hidden API enforcement policy for apps. * diff --git a/core/java/android/security/KeystoreArguments.java b/core/java/android/security/KeystoreArguments.java index 7d85ca76204f083f4c7ef6a9e01a828f2acefd64..e634234493e31523f4258a780f341fea8b5085bd 100644 --- a/core/java/android/security/KeystoreArguments.java +++ b/core/java/android/security/KeystoreArguments.java @@ -29,7 +29,7 @@ public class KeystoreArguments implements Parcelable { public byte[][] args; @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeystoreArguments createFromParcel(Parcel in) { return new KeystoreArguments(in); diff --git a/core/java/android/security/keymaster/ExportResult.java b/core/java/android/security/keymaster/ExportResult.java index 1ab79fbee0b66b19be652920c98c9927568ba46a..1be5ae90d911ac8e369b4f0f56db8f845e466db1 100644 --- a/core/java/android/security/keymaster/ExportResult.java +++ b/core/java/android/security/keymaster/ExportResult.java @@ -34,7 +34,7 @@ public class ExportResult implements Parcelable { } @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ExportResult createFromParcel(Parcel in) { return new ExportResult(in); diff --git a/core/java/android/security/keymaster/KeyAttestationApplicationId.java b/core/java/android/security/keymaster/KeyAttestationApplicationId.java index 8e585f4b80371cd1650bb5b70881a7dd5214ebd1..670f30e1b04bcbeef4c29887224db0b826c3b145 100644 --- a/core/java/android/security/keymaster/KeyAttestationApplicationId.java +++ b/core/java/android/security/keymaster/KeyAttestationApplicationId.java @@ -55,7 +55,7 @@ public class KeyAttestationApplicationId implements Parcelable { dest.writeTypedArray(mAttestationPackageInfos, flags); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeyAttestationApplicationId createFromParcel(Parcel source) { diff --git a/core/java/android/security/keymaster/KeyAttestationPackageInfo.java b/core/java/android/security/keymaster/KeyAttestationPackageInfo.java index a93d1e113eec473ca14453a4cf39dd18a0050bf6..c0b8d8dfd4d9cda9258d7b93930a2018e72b9ae6 100644 --- a/core/java/android/security/keymaster/KeyAttestationPackageInfo.java +++ b/core/java/android/security/keymaster/KeyAttestationPackageInfo.java @@ -74,7 +74,7 @@ public class KeyAttestationPackageInfo implements Parcelable { dest.writeTypedArray(mPackageSignatures, flags); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeyAttestationPackageInfo createFromParcel(Parcel source) { diff --git a/core/java/android/security/keymaster/KeyCharacteristics.java b/core/java/android/security/keymaster/KeyCharacteristics.java index a4fe75d6d0c083fb56c927af3fcaea17f7feb02f..2eb2cefc361728b51fd14f2ea379e366ea181d8e 100644 --- a/core/java/android/security/keymaster/KeyCharacteristics.java +++ b/core/java/android/security/keymaster/KeyCharacteristics.java @@ -32,7 +32,7 @@ public class KeyCharacteristics implements Parcelable { public KeymasterArguments swEnforced; public KeymasterArguments hwEnforced; - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeyCharacteristics createFromParcel(Parcel in) { diff --git a/core/java/android/security/keymaster/KeymasterArgument.java b/core/java/android/security/keymaster/KeymasterArgument.java index 6ad53a4f678ae278cdba9250b7b5b5520b9e3950..8b86d41c8cf0100492d4e9785e7418e66da53be6 100644 --- a/core/java/android/security/keymaster/KeymasterArgument.java +++ b/core/java/android/security/keymaster/KeymasterArgument.java @@ -30,7 +30,7 @@ import android.os.ParcelFormatException; abstract class KeymasterArgument implements Parcelable { public final int tag; - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeymasterArgument createFromParcel(Parcel in) { diff --git a/core/java/android/security/keymaster/KeymasterArguments.java b/core/java/android/security/keymaster/KeymasterArguments.java index 5aa0f913f7d93803c490346eb81db92806f5f69d..d2dbdec7f726005406767ffc417f126a6b889cfd 100644 --- a/core/java/android/security/keymaster/KeymasterArguments.java +++ b/core/java/android/security/keymaster/KeymasterArguments.java @@ -42,7 +42,7 @@ public class KeymasterArguments implements Parcelable { private List mArguments; @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeymasterArguments createFromParcel(Parcel in) { diff --git a/core/java/android/security/keymaster/KeymasterBlob.java b/core/java/android/security/keymaster/KeymasterBlob.java index 0659a22dc09008c34cfd1e4ea04064b52f044bdd..6a2024f0feb6deca5ffa5983d07c5e5b4ca78e5b 100644 --- a/core/java/android/security/keymaster/KeymasterBlob.java +++ b/core/java/android/security/keymaster/KeymasterBlob.java @@ -30,7 +30,7 @@ public class KeymasterBlob implements Parcelable { this.blob = blob; } @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeymasterBlob createFromParcel(Parcel in) { return new KeymasterBlob(in); diff --git a/core/java/android/security/keymaster/KeymasterCertificateChain.java b/core/java/android/security/keymaster/KeymasterCertificateChain.java index 00a1a1c06e79b737ebd793b4e3d751e4fff1945c..4bad462596bb9f6d2ddb85e2f6930818cb01918e 100644 --- a/core/java/android/security/keymaster/KeymasterCertificateChain.java +++ b/core/java/android/security/keymaster/KeymasterCertificateChain.java @@ -32,7 +32,7 @@ public class KeymasterCertificateChain implements Parcelable { private List mCertificates; - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeymasterCertificateChain createFromParcel(Parcel in) { return new KeymasterCertificateChain(in); diff --git a/core/java/android/security/keymaster/OperationResult.java b/core/java/android/security/keymaster/OperationResult.java index bc4f36000b8542b54849665aecb13acb663fe4e6..c278eb3b85fdce1a7b530c2b312d5c8be503ac73 100644 --- a/core/java/android/security/keymaster/OperationResult.java +++ b/core/java/android/security/keymaster/OperationResult.java @@ -35,7 +35,7 @@ public class OperationResult implements Parcelable { public final KeymasterArguments outParams; @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR = new + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public OperationResult createFromParcel(Parcel in) { diff --git a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java index 4af1af5f90cf292e4e3ed71a5314aa76e5ef1941..8f6b6ec13c50c2bae6749e1dae5def772542d1ef 100644 --- a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java +++ b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java @@ -236,7 +236,7 @@ public final class KeyChainProtectionParams implements Parcelable { Arrays.fill(mSecret, (byte) 0); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeyChainProtectionParams createFromParcel(Parcel in) { return new KeyChainProtectionParams(in); diff --git a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java index 035b226fc7249e4ec7c75e240d6fb4e95b746104..18517aaf84bf0b9ead83aff2422a020efaa11755 100644 --- a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java +++ b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java @@ -147,7 +147,7 @@ public final class KeyChainSnapshot implements Parcelable { return mEncryptedRecoveryKeyBlob; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public KeyChainSnapshot createFromParcel(Parcel in) { return new KeyChainSnapshot(in); diff --git a/core/java/android/security/keystore/recovery/KeyDerivationParams.java b/core/java/android/security/keystore/recovery/KeyDerivationParams.java index 5165f0c30a36cd703a3003482c2f9f6bd7b45c63..6d1533ecb6f4f8f0e4d4ee9c99ddef54914aab2d 100644 --- a/core/java/android/security/keystore/recovery/KeyDerivationParams.java +++ b/core/java/android/security/keystore/recovery/KeyDerivationParams.java @@ -140,7 +140,7 @@ public final class KeyDerivationParams implements Parcelable { return mMemoryDifficulty; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeyDerivationParams createFromParcel(Parcel in) { return new KeyDerivationParams(in); diff --git a/core/java/android/security/keystore/recovery/RecoveryCertPath.java b/core/java/android/security/keystore/recovery/RecoveryCertPath.java index f3604febaa870898e7daa2f53331de220e6db3fa..04e965f062de3391671df4e021d9d164aebe4c71 100644 --- a/core/java/android/security/keystore/recovery/RecoveryCertPath.java +++ b/core/java/android/security/keystore/recovery/RecoveryCertPath.java @@ -74,7 +74,7 @@ public final class RecoveryCertPath implements Parcelable { mEncodedCertPath = in.createByteArray(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RecoveryCertPath createFromParcel(Parcel in) { return new RecoveryCertPath(in); diff --git a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java index dbfd655953d60ee0e67abd3170db34f58d382c20..c6e62726ae6041463e6e38e6b3a0b78ff4a77e24 100644 --- a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java +++ b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java @@ -143,7 +143,7 @@ public final class WrappedApplicationKey implements Parcelable { return mMetadata; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WrappedApplicationKey createFromParcel(Parcel in) { return new WrappedApplicationKey(in); diff --git a/core/java/android/service/autofill/AutofillFieldClassificationService.java b/core/java/android/service/autofill/AutofillFieldClassificationService.java index 261291741f964530eeda81a4c85f2bd2dae15966..5f64755f73379256fa40b146be84f31a4fa1e898 100644 --- a/core/java/android/service/autofill/AutofillFieldClassificationService.java +++ b/core/java/android/service/autofill/AutofillFieldClassificationService.java @@ -349,7 +349,7 @@ public abstract class AutofillFieldClassificationService extends Service { } } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Scores createFromParcel(Parcel parcel) { return new Scores(parcel); diff --git a/core/java/android/service/autofill/BatchUpdates.java b/core/java/android/service/autofill/BatchUpdates.java index 2ba03762ec29b4ed18a68e7859e192fe649a3315..e0b1c2f91ed2a8e321a79c6973981d888b7159f3 100644 --- a/core/java/android/service/autofill/BatchUpdates.java +++ b/core/java/android/service/autofill/BatchUpdates.java @@ -187,7 +187,7 @@ public final class BatchUpdates implements Parcelable { } dest.writeParcelable(mUpdates, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public BatchUpdates createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/CharSequenceTransformation.java b/core/java/android/service/autofill/CharSequenceTransformation.java index 271707addb019ef4f472434ed941cf415ebe462d..e3e884406188a67b344f5cb4ceddd2ebca46cb2b 100644 --- a/core/java/android/service/autofill/CharSequenceTransformation.java +++ b/core/java/android/service/autofill/CharSequenceTransformation.java @@ -208,7 +208,7 @@ public final class CharSequenceTransformation extends InternalTransformation imp parcel.writeStringArray(substs); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CharSequenceTransformation createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/CompositeUserData.java b/core/java/android/service/autofill/CompositeUserData.java index 2df4ddf7f8ee1a6cc7bd8763fc747e2ea9cdb694..c7dc15a8c774da74b5da8a28fa4367fe01d31b32 100644 --- a/core/java/android/service/autofill/CompositeUserData.java +++ b/core/java/android/service/autofill/CompositeUserData.java @@ -191,7 +191,7 @@ public final class CompositeUserData implements FieldClassificationUserData, Par parcel.writeParcelable(mPackageUserData, 0); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CompositeUserData createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/CustomDescription.java b/core/java/android/service/autofill/CustomDescription.java index fdbb1c2dcab6f2eed7b1f99e92f236890bf95b90..c28d2bbe30ea63fff65e18fad411f44a45a694fd 100644 --- a/core/java/android/service/autofill/CustomDescription.java +++ b/core/java/android/service/autofill/CustomDescription.java @@ -176,6 +176,7 @@ public final class CustomDescription implements Parcelable { * by the Android System. * @throws IllegalStateException if {@link #build()} was already called. */ + @NonNull public Builder addChild(int id, @NonNull Transformation transformation) { throwIfDestroyed(); Preconditions.checkArgument((transformation instanceof InternalTransformation), @@ -270,6 +271,7 @@ public final class CustomDescription implements Parcelable { * by the Android System. * @throws IllegalStateException if {@link #build()} was already called. */ + @NonNull public Builder batchUpdate(@NonNull Validator condition, @NonNull BatchUpdates updates) { throwIfDestroyed(); Preconditions.checkArgument((condition instanceof InternalValidator), @@ -323,6 +325,7 @@ public final class CustomDescription implements Parcelable { * by the Android System. * @throws IllegalStateException if {@link #build()} was already called. */ + @NonNull public Builder addOnClickAction(int id, @NonNull OnClickAction action) { throwIfDestroyed(); Preconditions.checkArgument((action instanceof InternalOnClickAction), @@ -338,6 +341,7 @@ public final class CustomDescription implements Parcelable { /** * Creates a new {@link CustomDescription} instance. */ + @NonNull public CustomDescription build() { throwIfDestroyed(); mDestroyed = true; @@ -425,7 +429,7 @@ public final class CustomDescription implements Parcelable { dest.writeParcelableArray(values, flags); } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CustomDescription createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java index f8408bedd7bcea280b7af15bbcdb1bf6057f5147..d53e62a4fc9093c6e5bd52eb5eeef9711e439b34 100644 --- a/core/java/android/service/autofill/Dataset.java +++ b/core/java/android/service/autofill/Dataset.java @@ -500,7 +500,7 @@ public final class Dataset implements Parcelable { parcel.writeString(mId); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Dataset createFromParcel(Parcel parcel) { // Always go through the builder to ensure the data ingested by @@ -572,7 +572,7 @@ public final class Dataset implements Parcelable { } @SuppressWarnings("hiding") - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override diff --git a/core/java/android/service/autofill/DateTransformation.java b/core/java/android/service/autofill/DateTransformation.java index ec24a09a470fea305536b9e0607f20e1ac55deb4..338ba749eb794506200a48620ca41ed36d3f3609 100644 --- a/core/java/android/service/autofill/DateTransformation.java +++ b/core/java/android/service/autofill/DateTransformation.java @@ -111,7 +111,7 @@ public final class DateTransformation extends InternalTransformation implements parcel.writeSerializable(mDateFormat); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public DateTransformation createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/DateValueSanitizer.java b/core/java/android/service/autofill/DateValueSanitizer.java index 4f797f46da2ab10e5bc0d2ddb74a0600cbae464e..707bab1ec177b26c50cd63ea4848c5d9bb98e53d 100644 --- a/core/java/android/service/autofill/DateValueSanitizer.java +++ b/core/java/android/service/autofill/DateValueSanitizer.java @@ -108,7 +108,7 @@ public final class DateValueSanitizer extends InternalSanitizer implements Sanit parcel.writeSerializable(mDateFormat); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public DateValueSanitizer createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/FillContext.java b/core/java/android/service/autofill/FillContext.java index 535c00bc53196bc5f2392a755f70986235bc3712..70f434c128639e5e8b9c5eca6ffc5e6c53724481 100644 --- a/core/java/android/service/autofill/FillContext.java +++ b/core/java/android/service/autofill/FillContext.java @@ -49,6 +49,7 @@ import java.util.LinkedList; 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 @@ public final class FillContext implements Parcelable { /** @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 @@ public final class FillContext implements Parcelable { /** * @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 final class FillContext implements Parcelable { public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(mRequestId); parcel.writeParcelable(mStructure, flags); + parcel.writeParcelable(mFocusedId, flags); } /** @@ -177,14 +190,16 @@ public final class FillContext implements Parcelable { return foundNodes; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @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/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java index 6e5bacf1aad18b10ecbc033be11ac869f5de3021..c65e773283cb42a7d972e6ce23a34bffa6ed6158 100644 --- a/core/java/android/service/autofill/FillEventHistory.java +++ b/core/java/android/service/autofill/FillEventHistory.java @@ -517,7 +517,7 @@ public final class FillEventHistory implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public FillEventHistory createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/FillRequest.java b/core/java/android/service/autofill/FillRequest.java index cbd0cd94c0e39eb4deee150727a7eef051245888..66864c68dbde191dd2805e2fc5e54e8ce15869b0 100644 --- a/core/java/android/service/autofill/FillRequest.java +++ b/core/java/android/service/autofill/FillRequest.java @@ -176,7 +176,7 @@ public final class FillRequest implements Parcelable { parcel.writeInt(mFlags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public FillRequest createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java index 93ee8c33195b244bdf4cf0e629164d71857312d7..6b3009f9f9ef27d419a6618e2cc8ccc13a38d184 100644 --- a/core/java/android/service/autofill/FillResponse.java +++ b/core/java/android/service/autofill/FillResponse.java @@ -272,7 +272,8 @@ public final class FillResponse implements Parcelable { * * @see android.app.PendingIntent#getIntentSender() */ - public @NonNull Builder setAuthentication(@NonNull AutofillId[] ids, + @NonNull + public Builder setAuthentication(@NonNull AutofillId[] ids, @Nullable IntentSender authentication, @Nullable RemoteViews presentation) { throwIfDestroyed(); throwIfDisableAutofillCalled(); @@ -298,6 +299,7 @@ public final class FillResponse implements Parcelable { *

    This is typically used when the service cannot autofill the view; for example, a * text field representing the result of a Captcha challenge. */ + @NonNull public Builder setIgnoredIds(AutofillId...ids) { throwIfDestroyed(); mIgnoredIds = ids; @@ -318,7 +320,8 @@ public final class FillResponse implements Parcelable { * * @return This builder. */ - public @NonNull Builder addDataset(@Nullable Dataset dataset) { + @NonNull + public Builder addDataset(@Nullable Dataset dataset) { throwIfDestroyed(); throwIfDisableAutofillCalled(); if (dataset == null) { @@ -359,6 +362,7 @@ public final class FillResponse implements Parcelable { * @param clientState The custom client state. * @return This builder. */ + @NonNull public Builder setClientState(@Nullable Bundle clientState) { throwIfDestroyed(); throwIfDisableAutofillCalled(); @@ -379,6 +383,7 @@ public final class FillResponse implements Parcelable { * already called. * @throws NullPointerException if {@code ids} or any element on it is {@code null}. */ + @NonNull public Builder setFieldClassificationIds(@NonNull AutofillId... ids) { throwIfDestroyed(); throwIfDisableAutofillCalled(); @@ -398,6 +403,7 @@ public final class FillResponse implements Parcelable { * * @return This builder. */ + @NonNull public Builder setFlags(@FillResponseFlags int flags) { throwIfDestroyed(); mFlags = Preconditions.checkFlagsArgument(flags, @@ -437,6 +443,7 @@ public final class FillResponse implements Parcelable { * {@link #setSaveInfo(SaveInfo)}, {@link #setClientState(Bundle)}, or * {@link #setFieldClassificationIds(AutofillId...)} was already called. */ + @NonNull public Builder disableAutofill(long duration) { throwIfDestroyed(); if (duration <= 0) { @@ -475,6 +482,7 @@ public final class FillResponse implements Parcelable { * already set for this builder. */ // TODO(b/69796626): make it sticky / update javadoc + @NonNull public Builder setHeader(@NonNull RemoteViews header) { throwIfDestroyed(); throwIfAuthenticationCalled(); @@ -506,6 +514,7 @@ public final class FillResponse implements Parcelable { * requires authentication}. */ // TODO(b/69796626): make it sticky / update javadoc + @NonNull public Builder setFooter(@NonNull RemoteViews footer) { throwIfDestroyed(); throwIfAuthenticationCalled(); @@ -524,6 +533,7 @@ public final class FillResponse implements Parcelable { * {@link #setAuthentication(AutofillId[], IntentSender, RemoteViews) * requires authentication}. */ + @NonNull public Builder setUserData(@NonNull UserData userData) { throwIfDestroyed(); throwIfAuthenticationCalled(); @@ -548,6 +558,7 @@ public final class FillResponse implements Parcelable { * * @return A built response. */ + @NonNull public FillResponse build() { throwIfDestroyed(); if (mAuthentication == null && mDatasets == null && mSaveInfo == null @@ -658,7 +669,7 @@ public final class FillResponse implements Parcelable { parcel.writeInt(mRequestId); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public FillResponse createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/ImageTransformation.java b/core/java/android/service/autofill/ImageTransformation.java index 4afda249afea424f6ffd6829d816a4a6ac01d342..12376e85e63e2fa893da76072f0eca97339633f9 100644 --- a/core/java/android/service/autofill/ImageTransformation.java +++ b/core/java/android/service/autofill/ImageTransformation.java @@ -242,7 +242,7 @@ public final class ImageTransformation extends InternalTransformation implements parcel.writeCharSequenceArray(contentDescriptions); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ImageTransformation createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/LuhnChecksumValidator.java b/core/java/android/service/autofill/LuhnChecksumValidator.java index c56ae84b4ae3cbe78eb36da36512f5ad77776176..ef0bd7463e556cb5ae82c2b4ee0fb4e13296865d 100644 --- a/core/java/android/service/autofill/LuhnChecksumValidator.java +++ b/core/java/android/service/autofill/LuhnChecksumValidator.java @@ -124,7 +124,7 @@ public final class LuhnChecksumValidator extends InternalValidator implements Va parcel.writeParcelableArray(mIds, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public LuhnChecksumValidator createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/NegationValidator.java b/core/java/android/service/autofill/NegationValidator.java index a963f9f94346a709fab29bfcd53b9a28b4ffbb2c..2f098e2821014346c6dd38eb06dcb9a099670bea 100644 --- a/core/java/android/service/autofill/NegationValidator.java +++ b/core/java/android/service/autofill/NegationValidator.java @@ -64,7 +64,7 @@ final class NegationValidator extends InternalValidator { dest.writeParcelable(mValidator, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public NegationValidator createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/OptionalValidators.java b/core/java/android/service/autofill/OptionalValidators.java index 7aec59f6267d58c8790b533c473994563d207de2..7189c886aa069b590942b429a81b39180a2766af 100644 --- a/core/java/android/service/autofill/OptionalValidators.java +++ b/core/java/android/service/autofill/OptionalValidators.java @@ -79,7 +79,7 @@ final class OptionalValidators extends InternalValidator { dest.writeParcelableArray(mValidators, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public OptionalValidators createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/RegexValidator.java b/core/java/android/service/autofill/RegexValidator.java index 9dfe78d2b372b409f36566913e4a6ca8b3a93b3a..8cb67d08e8a89db7a0b8a4a3177beec95994c327 100644 --- a/core/java/android/service/autofill/RegexValidator.java +++ b/core/java/android/service/autofill/RegexValidator.java @@ -93,7 +93,7 @@ public final class RegexValidator extends InternalValidator implements Validator parcel.writeSerializable(mRegex); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public RegexValidator createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/RequiredValidators.java b/core/java/android/service/autofill/RequiredValidators.java index 9e1db2bca5dffce55c8f5b5b13064e1a02438389..619eba0a79adeb690953b0ef5903d2314cb9a760 100644 --- a/core/java/android/service/autofill/RequiredValidators.java +++ b/core/java/android/service/autofill/RequiredValidators.java @@ -78,7 +78,7 @@ final class RequiredValidators extends InternalValidator { dest.writeParcelableArray(mValidators, flags); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public RequiredValidators createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/SaveInfo.java b/core/java/android/service/autofill/SaveInfo.java index dfaf49ad6a03438f0cdcb5c35d9fa695e3b1731e..94b9d050a44dc65cbaf8a47033009d99bf9cf1c7 100644 --- a/core/java/android/service/autofill/SaveInfo.java +++ b/core/java/android/service/autofill/SaveInfo.java @@ -776,7 +776,7 @@ public final class SaveInfo implements Parcelable { parcel.writeInt(mFlags); } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SaveInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/SaveRequest.java b/core/java/android/service/autofill/SaveRequest.java index c9b5b5529111b76c1b1be25b6bd0c00f06b7114b..5dd07c491980a3d29879a9d88c3ca1e9e7eaa086 100644 --- a/core/java/android/service/autofill/SaveRequest.java +++ b/core/java/android/service/autofill/SaveRequest.java @@ -101,7 +101,7 @@ public final class SaveRequest implements Parcelable { parcel.writeStringList(mDatasetIds); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SaveRequest createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/TextValueSanitizer.java b/core/java/android/service/autofill/TextValueSanitizer.java index a8c080a178187779cd3a90b92dde8f8be03b7429..cc48fcbe734edc9a3c44e1d4f5ec7fa53892d0a2 100644 --- a/core/java/android/service/autofill/TextValueSanitizer.java +++ b/core/java/android/service/autofill/TextValueSanitizer.java @@ -116,7 +116,7 @@ public final class TextValueSanitizer extends InternalSanitizer implements parcel.writeString(mSubst); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextValueSanitizer createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/UserData.java b/core/java/android/service/autofill/UserData.java index a793e09e79f1777e5eee1834c34e603d87a7d903..7814f70b612b856218b7340c53f4dfbae2708f6e 100644 --- a/core/java/android/service/autofill/UserData.java +++ b/core/java/android/service/autofill/UserData.java @@ -266,6 +266,7 @@ public final class UserData implements FieldClassificationUserData, Parcelable { * * @return this builder */ + @NonNull public Builder setFieldClassificationAlgorithm(@Nullable String name, @Nullable Bundle args) { throwIfDestroyed(); @@ -291,6 +292,7 @@ public final class UserData implements FieldClassificationUserData, Parcelable { * * @return this builder */ + @NonNull public Builder setFieldClassificationAlgorithmForCategory(@NonNull String categoryId, @Nullable String name, @Nullable Bundle args) { throwIfDestroyed(); @@ -333,6 +335,7 @@ public final class UserData implements FieldClassificationUserData, Parcelable { * {@link UserData#getMaxValueLength()}

  • * */ + @NonNull public Builder add(@NonNull String value, @NonNull String categoryId) { throwIfDestroyed(); checkNotEmpty("categoryId", categoryId); @@ -386,6 +389,7 @@ public final class UserData implements FieldClassificationUserData, Parcelable { * * @return The built dataset. */ + @NonNull public UserData build() { throwIfDestroyed(); mDestroyed = true; @@ -435,7 +439,7 @@ public final class UserData implements FieldClassificationUserData, Parcelable { parcel.writeMap(mCategoryArgs); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public UserData createFromParcel(Parcel parcel) { diff --git a/core/java/android/service/autofill/VisibilitySetterAction.java b/core/java/android/service/autofill/VisibilitySetterAction.java index 9f977d79c184eb4da6bae7a430dfb4b81635e965..e29a23f9b8d785bed91cccf6937df25d870eadae 100644 --- a/core/java/android/service/autofill/VisibilitySetterAction.java +++ b/core/java/android/service/autofill/VisibilitySetterAction.java @@ -70,7 +70,7 @@ public final class VisibilitySetterAction extends InternalOnClickAction implemen /** * 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 @@ public final class VisibilitySetterAction extends InternalOnClickAction implemen * @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 @@ public final class VisibilitySetterAction extends InternalOnClickAction implemen /** * Creates a new {@link VisibilitySetterAction} instance. */ + @NonNull public VisibilitySetterAction build() { throwIfDestroyed(); mDestroyed = true; @@ -145,8 +147,10 @@ public final class VisibilitySetterAction extends InternalOnClickAction implemen parcel.writeSparseIntArray(mVisibilities); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { + + @NonNull @Override public VisibilitySetterAction createFromParcel(Parcel parcel) { // Always go through the builder to ensure the data ingested by @@ -165,6 +169,7 @@ public final class VisibilitySetterAction extends InternalOnClickAction implemen 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/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java index 463eae681f05cf504e671d4e0e2b388a80ac4e5a..cd549301f5d1a6c1637a4632dd4ae80450e0a22c 100644 --- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java +++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java @@ -253,6 +253,7 @@ public abstract class AugmentedAutofillService extends Service { } @Override + /** @hide */ protected final void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mAutofillProxies != null) { final int size = mAutofillProxies.size(); diff --git a/core/java/android/service/autofill/augmented/FillResponse.java b/core/java/android/service/autofill/augmented/FillResponse.java index 2ac406c5b08cbcd30724f61e11cfc177b1296f5a..48a3c1b183348ec04e216b53a0cf2c119f56404e 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.NonNull; 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 @@ public final class FillResponse { * * @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 @@ -70,19 +68,6 @@ public final class FillResponse { return this; } - /** - * 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 ids) { - // TODO(b/123100695): implement / check not null / unit test - return this; - } - /** * Builds a new {@link FillResponse} instance. * @@ -95,6 +80,7 @@ public final class FillResponse { * * @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/ApnService.java b/core/java/android/service/carrier/ApnService.java index d53eb37ca7869d401778a9b4c19f873bacb46d2f..57e4b1b4074886f04c19d7d7cf2e4df4b6070be3 100644 --- a/core/java/android/service/carrier/ApnService.java +++ b/core/java/android/service/carrier/ApnService.java @@ -16,6 +16,8 @@ package android.service.carrier; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.WorkerThread; import android.app.Service; @@ -60,7 +62,8 @@ public abstract class ApnService extends Service { }; @Override - public IBinder onBind(Intent intent) { + @NonNull + public IBinder onBind(@Nullable Intent intent) { return mBinder; } @@ -73,5 +76,6 @@ public abstract class ApnService extends Service { * subId. */ @WorkerThread + @NonNull public abstract List onRestoreApns(int subId); } diff --git a/core/java/android/service/carrier/CarrierIdentifier.java b/core/java/android/service/carrier/CarrierIdentifier.java index d3910748d9635b6e35bca477f02d57951d83b5bc..5dd006d15fde6bbc0140bc4f5ba8d9eb6e23d9a5 100644 --- a/core/java/android/service/carrier/CarrierIdentifier.java +++ b/core/java/android/service/carrier/CarrierIdentifier.java @@ -16,6 +16,7 @@ package android.service.carrier; +import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; @@ -35,7 +36,7 @@ import java.util.Objects; public class CarrierIdentifier implements Parcelable { /** Used to create a {@link CarrierIdentifier} from a {@link Parcel}. */ - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public CarrierIdentifier createFromParcel(Parcel parcel) { return new CarrierIdentifier(parcel); @@ -75,7 +76,7 @@ public class CarrierIdentifier implements Parcelable { * @param preciseCarrierId precise carrier identifier * {@link TelephonyManager#getSimPreciseCarrierId()} */ - public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, + public CarrierIdentifier(@NonNull String mcc, @NonNull String mnc, @Nullable String spn, @Nullable String imsi, @Nullable String gid1, @Nullable String gid2, int carrierid, int preciseCarrierId) { this(mcc, mnc, spn, imsi, gid1, gid2, null, carrierid, preciseCarrierId); diff --git a/core/java/android/service/carrier/CarrierMessagingClientService.java b/core/java/android/service/carrier/CarrierMessagingClientService.java index 13f4fc4b0dcb5b863c622c9b87d1a95e30499cee..767c1d1a49c6fc4be308f085189df5d39a8e274b 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 @@ public class CarrierMessagingClientService extends Service { } @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/carrier/MessagePdu.java b/core/java/android/service/carrier/MessagePdu.java index ca18e53274ba88207096d7cbcbdcd8cc16dcefb0..19c41b1298e6ed6205228b26f53f34cf21863d6b 100644 --- a/core/java/android/service/carrier/MessagePdu.java +++ b/core/java/android/service/carrier/MessagePdu.java @@ -72,7 +72,7 @@ public final class MessagePdu implements Parcelable { /** * Constructs a {@link MessagePdu} from a {@link Parcel}. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public MessagePdu createFromParcel(Parcel source) { diff --git a/core/java/android/service/chooser/ChooserTarget.java b/core/java/android/service/chooser/ChooserTarget.java index c2f70cc02f056da9be8bf9980e1764a8f43251f8..5d2d667b438a09470ce6db99453bfd0a0b92a360 100644 --- a/core/java/android/service/chooser/ChooserTarget.java +++ b/core/java/android/service/chooser/ChooserTarget.java @@ -202,7 +202,7 @@ public final class ChooserTarget implements Parcelable { dest.writeBundle(mIntentExtras); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ChooserTarget createFromParcel(Parcel source) { diff --git a/core/java/android/service/contentcapture/SnapshotData.java b/core/java/android/service/contentcapture/SnapshotData.java index c3af1f0cc60868a553c7de3069fda087d468368c..5b3930ab63362551411d8236144ddaf34455580a 100644 --- a/core/java/android/service/contentcapture/SnapshotData.java +++ b/core/java/android/service/contentcapture/SnapshotData.java @@ -60,6 +60,7 @@ public final class SnapshotData implements Parcelable { /** * Returns the assist data for this snapshot. */ + @NonNull public Bundle getAssistData() { return mAssistData; } @@ -67,6 +68,7 @@ public final class SnapshotData implements Parcelable { /** * Returns the assist structure for this snapshot. */ + @NonNull public AssistStructure getAssistStructure() { return mAssistStructure; } @@ -74,6 +76,7 @@ public final class SnapshotData implements Parcelable { /** * Returns the assist context for this snapshot. */ + @Nullable public AssistContent getAssistContent() { return mAssistContent; } @@ -90,15 +93,17 @@ public final class SnapshotData implements Parcelable { parcel.writeParcelable(mAssistContent, flags); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @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/service/contentsuggestions/ContentSuggestionsService.java b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java index 333f4bec8f7eb09e7c5eb012c0038847a9b18247..28143003fcc48659c1e054b17619ea899fc47bd8 100644 --- a/core/java/android/service/contentsuggestions/ContentSuggestionsService.java +++ b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java @@ -52,6 +52,10 @@ public abstract class ContentSuggestionsService extends Service { /** * The action for the intent used to define the content suggestions service. + * + *

    To be supported, the service must also require the + * * {@link android.Manifest.permission#BIND_CONTENT_SUGGESTIONS_SERVICE} permission so + * * that other applications can not abuse it. */ public static final String SERVICE_INTERFACE = "android.service.contentsuggestions.ContentSuggestionsService"; @@ -60,11 +64,17 @@ public abstract class ContentSuggestionsService extends Service { @Override public void provideContextImage(int taskId, GraphicBuffer contextImage, Bundle imageContextRequestExtras) { + + Bitmap wrappedBuffer = null; + if (contextImage != null) { + wrappedBuffer = Bitmap.wrapHardwareBuffer( + HardwareBuffer.createFromGraphicBuffer(contextImage), null); + } + mHandler.sendMessage( obtainMessage(ContentSuggestionsService::processContextImage, ContentSuggestionsService.this, taskId, - Bitmap.wrapHardwareBuffer( - HardwareBuffer.createFromGraphicBuffer(contextImage), null), + wrappedBuffer, imageContextRequestExtras)); } diff --git a/core/java/android/service/euicc/DownloadSubscriptionResult.java b/core/java/android/service/euicc/DownloadSubscriptionResult.java index b410e35f3f83b6727bdd16ffb498c8cd3bb9a56f..3b1a2c9def4f24cd21cc24e8be365054aa2d234d 100644 --- a/core/java/android/service/euicc/DownloadSubscriptionResult.java +++ b/core/java/android/service/euicc/DownloadSubscriptionResult.java @@ -28,7 +28,7 @@ import android.service.euicc.EuiccService.Result; @SystemApi public final class DownloadSubscriptionResult implements Parcelable { - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public DownloadSubscriptionResult createFromParcel(Parcel in) { diff --git a/core/java/android/service/euicc/EuiccProfileInfo.java b/core/java/android/service/euicc/EuiccProfileInfo.java index 4a3978242a114d2e49f7d29a287770f55ca5c930..702837b3083cdd2312cec23a5607dca88033d476 100644 --- a/core/java/android/service/euicc/EuiccProfileInfo.java +++ b/core/java/android/service/euicc/EuiccProfileInfo.java @@ -126,7 +126,7 @@ public final class EuiccProfileInfo implements Parcelable { */ private final @Nullable UiccAccessRule[] mAccessRules; - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public EuiccProfileInfo createFromParcel(Parcel in) { return new EuiccProfileInfo(in); diff --git a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java index bd91ca00145d31042746c289189d4c330787639b..c7a985160730cbb9517dbd4a02bda76c027d6a7c 100644 --- a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java +++ b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java @@ -32,7 +32,7 @@ import java.util.List; @SystemApi public final class GetDefaultDownloadableSubscriptionListResult implements Parcelable { - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public GetDefaultDownloadableSubscriptionListResult createFromParcel(Parcel in) { diff --git a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java index 71f1d22d603df3ca5084072088b1ec7f0c47602e..abd4065c754ac09fdf2462ac48505e7d526f9a10 100644 --- a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java +++ b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java @@ -29,7 +29,7 @@ import android.telephony.euicc.DownloadableSubscription; @SystemApi public final class GetDownloadableSubscriptionMetadataResult implements Parcelable { - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public GetDownloadableSubscriptionMetadataResult createFromParcel(Parcel in) { diff --git a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java index 464d136e70e55bdfb6f965d941f99bcdbc12249f..7a9d8a05ab4715a566128c11f171a97b3f52d88b 100644 --- a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java +++ b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java @@ -30,7 +30,7 @@ import java.util.List; @SystemApi public final class GetEuiccProfileInfoListResult implements Parcelable { - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public GetEuiccProfileInfoListResult createFromParcel(Parcel in) { diff --git a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl index 4667066df866485a3527abd8bc9022a3abfc4e51..aff8f1b7b3466f12c60ecd34a20f36fa9e155f00 100644 --- a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl +++ b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IDeleteSubscriptionCallback { + @UnsupportedAppUsage void onComplete(int result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl index c975f1894aa2abf14612c8e42fdd8a3cb3e8f53b..34b53cc71dfb1734d725633f89220187dd779ae5 100644 --- a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl +++ b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IEraseSubscriptionsCallback { + @UnsupportedAppUsage void onComplete(int result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl b/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl index 0c5a0c692cb55c341ed72eb8c7803dd7d87b09e5..ad69ef13242850aec4cda6ec61bca6d69fdda16e 100644 --- a/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl +++ b/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetDefaultDownloadableSubscriptionListResult; /** @hide */ oneway interface IGetDefaultDownloadableSubscriptionListCallback { + @UnsupportedAppUsage void onComplete(in GetDefaultDownloadableSubscriptionListResult result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl b/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl index 3353061ad93e658468e5e11530be18b73f404f2c..01f187ed11e2525732f3b138ff638ca71a982da5 100644 --- a/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl +++ b/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetDownloadableSubscriptionMetadataResult; /** @hide */ oneway interface IGetDownloadableSubscriptionMetadataCallback { + @UnsupportedAppUsage void onComplete(in GetDownloadableSubscriptionMetadataResult result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEidCallback.aidl b/core/java/android/service/euicc/IGetEidCallback.aidl index 35ee9c25a48eca38d4d1e66223e55ebaf0087545..e405a981c85a0434e803fd97d5c2106a7ed64829 100644 --- a/core/java/android/service/euicc/IGetEidCallback.aidl +++ b/core/java/android/service/euicc/IGetEidCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IGetEidCallback { + @UnsupportedAppUsage void onSuccess(String eid); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl b/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl index 6d281487602afa7c7b3a4858e908e025b48d5c29..c0611825ff0f582c15da57180ec27228be73e903 100644 --- a/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl +++ b/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl @@ -20,5 +20,6 @@ import android.telephony.euicc.EuiccInfo; /** @hide */ oneway interface IGetEuiccInfoCallback { + @UnsupportedAppUsage void onSuccess(in EuiccInfo euiccInfo); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl b/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl index 761ec1f01324c4764b620303b3f1e5bb44231823..0485f7be29d3b73d821260f3c999329326ceafa4 100644 --- a/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl +++ b/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetEuiccProfileInfoListResult; /** @hide */ oneway interface IGetEuiccProfileInfoListCallback { + @UnsupportedAppUsage void onComplete(in GetEuiccProfileInfoListResult result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl b/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl index 127683059c0218d140db5ed6ae02c232cd781733..340401fe89cbb625dfa47e9f9826d4a7ee1d24c5 100644 --- a/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl +++ b/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IRetainSubscriptionsForFactoryResetCallback { + @UnsupportedAppUsage void onComplete(int result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl index 0f91a6b29e26ced4018c11e286d047c5c401adc6..b8f984d1c28b103d48a974d0caf0fe7f4caea725 100644 --- a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl +++ b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface ISwitchToSubscriptionCallback { + @UnsupportedAppUsage void onComplete(int result); } \ No newline at end of file diff --git a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl index 66669330c8c0a95587ffa07442fc1f03acf282f6..0aa66978bb917e6771d37baa8bb212948a1ecd0f 100644 --- a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl +++ b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IUpdateSubscriptionNicknameCallback { + @UnsupportedAppUsage void onComplete(int result); } \ No newline at end of file diff --git a/core/java/android/service/gatekeeper/GateKeeperResponse.java b/core/java/android/service/gatekeeper/GateKeeperResponse.java index 9b529345851b0b53d32c0b336dbef0d84ffe82ca..66fee1e90affd6367420a0ed13f80b164c69d751 100644 --- a/core/java/android/service/gatekeeper/GateKeeperResponse.java +++ b/core/java/android/service/gatekeeper/GateKeeperResponse.java @@ -66,7 +66,7 @@ public final class GateKeeperResponse implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public GateKeeperResponse createFromParcel(Parcel source) { diff --git a/core/java/android/service/notification/Adjustment.java b/core/java/android/service/notification/Adjustment.java index bddc5ef3dd2de0520a8e1c4e9ceadeebf8790ac1..af0dfd2c26e583f6d402634f1918533b769c0a48 100644 --- a/core/java/android/service/notification/Adjustment.java +++ b/core/java/android/service/notification/Adjustment.java @@ -15,6 +15,7 @@ */ package android.service.notification; +import android.annotation.NonNull; import android.annotation.SystemApi; import android.app.Notification; import android.os.Bundle; @@ -132,8 +133,9 @@ public final class Adjustment implements Parcelable { * @param explanation A human-readable justification for the adjustment. * @param userHandle User handle for for whose the adjustments will be applied. */ - public Adjustment(String pkg, String key, Bundle signals, CharSequence explanation, - UserHandle userHandle) { + public Adjustment(@NonNull String pkg, @NonNull String key, @NonNull Bundle signals, + @NonNull CharSequence explanation, + @NonNull UserHandle userHandle) { mPackage = pkg; mKey = key; mSignals = signals; @@ -165,7 +167,7 @@ public final class Adjustment implements Parcelable { mUser = in.readInt(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Adjustment createFromParcel(Parcel in) { return new Adjustment(in); @@ -177,19 +179,19 @@ public final class Adjustment implements Parcelable { } }; - public String getPackage() { + public @NonNull String getPackage() { return mPackage; } - public String getKey() { + public @NonNull String getKey() { return mKey; } - public CharSequence getExplanation() { + public @NonNull CharSequence getExplanation() { return mExplanation; } - public Bundle getSignals() { + public @NonNull Bundle getSignals() { return mSignals; } @@ -199,7 +201,7 @@ public final class Adjustment implements Parcelable { return mUser; } - public UserHandle getUserHandle() { + public @NonNull UserHandle getUserHandle() { return UserHandle.of(mUser); } diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index 30d98045f3f40ed9299d9b81480d8e257eb2a689..e506509bb1beae2fd1b1c313f899e7624ff46561 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -227,7 +227,7 @@ public final class Condition implements Parcelable { return id != null && SCHEME.equals(id.getScheme()) && pkg.equals(id.getAuthority()); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Condition createFromParcel(Parcel source) { diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java index a697248606343e3635c118eaf19caeb38062784c..ceb21e7d418aa5dc7d9cf6e6f7cc0dda9a1875f6 100644 --- a/core/java/android/service/notification/NotificationAssistantService.java +++ b/core/java/android/service/notification/NotificationAssistantService.java @@ -20,8 +20,8 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SdkConstant; -import android.annotation.SystemApi; import android.app.Notification; import android.app.NotificationChannel; import android.app.admin.DevicePolicyManager; @@ -68,7 +68,14 @@ public abstract class NotificationAssistantService extends NotificationListenerS @Retention(SOURCE) @IntDef({SOURCE_FROM_APP, SOURCE_FROM_ASSISTANT}) public @interface Source {} + + /** + * To indicate an adjustment is from an app. + */ public static final int SOURCE_FROM_APP = 0; + /** + * To indicate an adjustment is from a {@link NotificationAssistantService}. + */ public static final int SOURCE_FROM_ASSISTANT = 1; /** @@ -90,7 +97,7 @@ public abstract class NotificationAssistantService extends NotificationListenerS } @Override - public final IBinder onBind(Intent intent) { + public final @NonNull IBinder onBind(@Nullable Intent intent) { if (mWrapper == null) { mWrapper = new NotificationAssistantServiceWrapper(); } @@ -126,8 +133,8 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param channel the channel the notification was posted to * @return an adjustment or null to take no action, within 100ms. */ - public Adjustment onNotificationEnqueued(StatusBarNotification sbn, - NotificationChannel channel) { + public @Nullable Adjustment onNotificationEnqueued(@NonNull StatusBarNotification sbn, + @NonNull NotificationChannel channel) { return onNotificationEnqueued(sbn); } @@ -155,8 +162,9 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param reason see {@link #REASON_LISTENER_CANCEL}, etc. */ @Override - public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap, - NotificationStats stats, int reason) { + public void onNotificationRemoved(@NonNull StatusBarNotification sbn, + @NonNull RankingMap rankingMap, + @NonNull NotificationStats stats, int reason) { onNotificationRemoved(sbn, rankingMap, reason); } @@ -164,7 +172,7 @@ public abstract class NotificationAssistantService extends NotificationListenerS * Implement this to know when a user has seen notifications, as triggered by * {@link #setNotificationsShown(String[])}. */ - public void onNotificationsSeen(List keys) { + public void onNotificationsSeen(@NonNull List keys) { } @@ -211,7 +219,7 @@ public abstract class NotificationAssistantService extends NotificationListenerS * * @param adjustment the adjustment with an explanation */ - public final void adjustNotification(Adjustment adjustment) { + public final void adjustNotification(@NonNull Adjustment adjustment) { if (!isBound()) return; try { getNotificationInterface().applyAdjustmentFromAssistant(mWrapper, adjustment); @@ -228,7 +236,7 @@ public abstract class NotificationAssistantService extends NotificationListenerS * * @param adjustments a list of adjustments with explanations */ - public final void adjustNotifications(List adjustments) { + public final void adjustNotifications(@NonNull List adjustments) { if (!isBound()) return; try { getNotificationInterface().applyAdjustmentsFromAssistant(mWrapper, adjustments); diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index d3285bb53eb3e2f254aff074c4fb5fc63d0e8c59..767a3f7fda34adaea4eb24f40155c42359ad5d6b 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -1638,7 +1638,7 @@ public abstract class NotificationListenerService extends Service { * Returns a list of smart {@link Notification.Action} that can be added by the * {@link NotificationAssistantService} */ - public List getSmartActions() { + public @NonNull List getSmartActions() { return mSmartActions; } @@ -1646,7 +1646,7 @@ public abstract class NotificationListenerService extends Service { * Returns a list of smart replies that can be added by the * {@link NotificationAssistantService} */ - public List getSmartReplies() { + public @NonNull List getSmartReplies() { return mSmartReplies; } @@ -2163,7 +2163,7 @@ public abstract class NotificationListenerService extends Service { dest.writeParcelable(mRankingUpdate, flags); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public RankingMap createFromParcel(Parcel source) { NotificationRankingUpdate rankingUpdate = source.readParcelable(null); diff --git a/core/java/android/service/notification/NotificationRankingUpdate.java b/core/java/android/service/notification/NotificationRankingUpdate.java index 230ae27135546c682087844af0be068dbb2756cc..c5c70f808325ff3090486ff84a82063e0dd63424 100644 --- a/core/java/android/service/notification/NotificationRankingUpdate.java +++ b/core/java/android/service/notification/NotificationRankingUpdate.java @@ -119,7 +119,7 @@ public class NotificationRankingUpdate implements Parcelable { out.writeBooleanArray(mCanBubble); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public NotificationRankingUpdate createFromParcel(Parcel parcel) { return new NotificationRankingUpdate(parcel); diff --git a/core/java/android/service/notification/NotificationStats.java b/core/java/android/service/notification/NotificationStats.java index ebfabbfda3260db2f1dd6ba14f0f2e7d3665a000..5a54a439bbf42a7d60e7a7a7d45369184e36f67a 100644 --- a/core/java/android/service/notification/NotificationStats.java +++ b/core/java/android/service/notification/NotificationStats.java @@ -131,7 +131,7 @@ public final class NotificationStats implements Parcelable { return 0; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public NotificationStats createFromParcel(Parcel in) { return new NotificationStats(in); diff --git a/core/java/android/service/notification/NotifyingApp.java b/core/java/android/service/notification/NotifyingApp.java index 38f18c6f20bfb8a3a558e97d7b2d0d632c513949..a5606234070966288143d995cec8b710029d6704 100644 --- a/core/java/android/service/notification/NotifyingApp.java +++ b/core/java/android/service/notification/NotifyingApp.java @@ -74,7 +74,7 @@ public final class NotifyingApp implements Parcelable, Comparable return this; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public NotifyingApp createFromParcel(Parcel in) { return new NotifyingApp(in); diff --git a/core/java/android/service/notification/SnoozeCriterion.java b/core/java/android/service/notification/SnoozeCriterion.java index bd93eff95dbd3e1a3feebdab9dbdbb0f906d0d9c..938cc10fec2a64a90c9813f7cc2612a319901b27 100644 --- a/core/java/android/service/notification/SnoozeCriterion.java +++ b/core/java/android/service/notification/SnoozeCriterion.java @@ -78,7 +78,7 @@ public final class SnoozeCriterion implements Parcelable { return mConfirmation; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SnoozeCriterion createFromParcel(Parcel in) { return new SnoozeCriterion(in); diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java index 954dc39430193c6d585fdd3112929d5687fee15b..0836327bd07e3aeffc2c13cf4d48b7c99588ba5b 100644 --- a/core/java/android/service/notification/StatusBarNotification.java +++ b/core/java/android/service/notification/StatusBarNotification.java @@ -205,7 +205,7 @@ public class StatusBarNotification implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public StatusBarNotification createFromParcel(Parcel parcel) diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index bff118eaa6fab6537ed1413c03bf89313f6f1b08..cb7d41bdf21a2187246a0441e14e941f92e52833 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -921,7 +921,7 @@ public class ZenModeConfig implements Parcelable { } } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ZenModeConfig createFromParcel(Parcel source) { @@ -1860,7 +1860,7 @@ public class ZenModeConfig implements Parcelable { || condition.state == Condition.STATE_UNKNOWN); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ZenRule createFromParcel(Parcel source) { diff --git a/core/java/android/service/notification/ZenPolicy.java b/core/java/android/service/notification/ZenPolicy.java index 6392704a680f6589c19d9e67b9518332ad5df5b0..7ef40cd2089512a86a066b2c1d7a9f376c34ae80 100644 --- a/core/java/android/service/notification/ZenPolicy.java +++ b/core/java/android/service/notification/ZenPolicy.java @@ -17,6 +17,7 @@ package android.service.notification; import android.annotation.IntDef; +import android.annotation.NonNull; import android.app.Notification; import android.app.NotificationChannel; import android.os.Parcel; @@ -378,14 +379,14 @@ public final class ZenPolicy implements Parcelable { /** * Builds the current ZenPolicy. */ - public ZenPolicy build() { + public @NonNull ZenPolicy build() { return mZenPolicy.copy(); } /** * Allows all notifications to bypass DND and unmutes all streams. */ - public Builder allowAllSounds() { + public @NonNull Builder allowAllSounds() { for (int i = 0; i < mZenPolicy.mPriorityCategories.size(); i++) { mZenPolicy.mPriorityCategories.set(i, STATE_ALLOW); } @@ -401,7 +402,7 @@ public final class ZenPolicy implements Parcelable { * {@link NotificationChannel#canBypassDnd can bypass DND}. If no channels can bypass DND, * the ringer stream is also muted. */ - public Builder disallowAllSounds() { + public @NonNull Builder disallowAllSounds() { for (int i = 0; i < mZenPolicy.mPriorityCategories.size(); i++) { mZenPolicy.mPriorityCategories.set(i, STATE_DISALLOW); } @@ -413,7 +414,7 @@ public final class ZenPolicy implements Parcelable { /** * Allows notifications intercepted by DND to show on all surfaces when DND is active. */ - public Builder showAllVisualEffects() { + public @NonNull Builder showAllVisualEffects() { for (int i = 0; i < mZenPolicy.mVisualEffects.size(); i++) { mZenPolicy.mVisualEffects.set(i, STATE_ALLOW); } @@ -423,7 +424,7 @@ public final class ZenPolicy implements Parcelable { /** * Disallows notifications intercepted by DND from showing when DND is active. */ - public Builder hideAllVisualEffects() { + public @NonNull Builder hideAllVisualEffects() { for (int i = 0; i < mZenPolicy.mVisualEffects.size(); i++) { mZenPolicy.mVisualEffects.set(i, STATE_DISALLOW); } @@ -435,7 +436,7 @@ public final class ZenPolicy implements Parcelable { * unset categories will default to the current applied policy. * @hide */ - public Builder unsetPriorityCategory(@PriorityCategory int category) { + public @NonNull Builder unsetPriorityCategory(@PriorityCategory int category) { mZenPolicy.mPriorityCategories.set(category, STATE_UNSET); if (category == PRIORITY_CATEGORY_MESSAGES) { @@ -452,7 +453,7 @@ public final class ZenPolicy implements Parcelable { * unset effects will default to the current applied policy. * @hide */ - public Builder unsetVisualEffect(@VisualEffect int effect) { + public @NonNull Builder unsetVisualEffect(@VisualEffect int effect) { mZenPolicy.mVisualEffects.set(effect, STATE_UNSET); return this; } @@ -461,7 +462,7 @@ public final class ZenPolicy implements Parcelable { * Whether to allow notifications with category {@link Notification#CATEGORY_REMINDER} * to play sounds and visually appear or to intercept them when DND is active. */ - public Builder allowReminders(boolean allow) { + public @NonNull Builder allowReminders(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_REMINDERS, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -471,7 +472,7 @@ public final class ZenPolicy implements Parcelable { * Whether to allow notifications with category {@link Notification#CATEGORY_EVENT} * to play sounds and visually appear or to intercept them when DND is active. */ - public Builder allowEvents(boolean allow) { + public @NonNull Builder allowEvents(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_EVENTS, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -483,7 +484,7 @@ public final class ZenPolicy implements Parcelable { * them when DND is active. * @param audienceType message senders that are allowed to bypass DND */ - public Builder allowMessages(@PeopleType int audienceType) { + public @NonNull Builder allowMessages(@PeopleType int audienceType) { if (audienceType == STATE_UNSET) { return unsetPriorityCategory(PRIORITY_CATEGORY_MESSAGES); } @@ -507,7 +508,7 @@ public final class ZenPolicy implements Parcelable { * them when DND is active. * @param audienceType callers that are allowed to bypass DND */ - public Builder allowCalls(@PeopleType int audienceType) { + public @NonNull Builder allowCalls(@PeopleType int audienceType) { if (audienceType == STATE_UNSET) { return unsetPriorityCategory(PRIORITY_CATEGORY_CALLS); } @@ -530,7 +531,7 @@ public final class ZenPolicy implements Parcelable { * {@link Notification#CATEGORY_CALL} that have recently called * to play sounds and visually appear. */ - public Builder allowRepeatCallers(boolean allow) { + public @NonNull Builder allowRepeatCallers(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_REPEAT_CALLERS, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -542,7 +543,7 @@ public final class ZenPolicy implements Parcelable { * to play sounds and visually appear or to intercept them when DND is active. * Disallowing alarms will mute the alarm stream when DND is active. */ - public Builder allowAlarms(boolean allow) { + public @NonNull Builder allowAlarms(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_ALARMS, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -553,7 +554,7 @@ public final class ZenPolicy implements Parcelable { * appear or to intercept them when DND is active. * Disallowing media will mute the media stream when DND is active. */ - public Builder allowMedia(boolean allow) { + public @NonNull Builder allowMedia(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_MEDIA, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -563,7 +564,7 @@ public final class ZenPolicy implements Parcelable { * Whether to allow system sounds to play when DND is active. * Disallowing system sounds will mute the system stream when DND is active. */ - public Builder allowSystem(boolean allow) { + public @NonNull Builder allowSystem(boolean allow) { mZenPolicy.mPriorityCategories.set(PRIORITY_CATEGORY_SYSTEM, allow ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -573,7 +574,7 @@ public final class ZenPolicy implements Parcelable { * Whether to allow {@link PriorityCategory} sounds to play when DND is active. * @hide */ - public Builder allowCategory(@PriorityCategory int category, boolean allow) { + public @NonNull Builder allowCategory(@PriorityCategory int category, boolean allow) { switch (category) { case PRIORITY_CATEGORY_ALARMS: allowAlarms(allow); @@ -601,7 +602,7 @@ public final class ZenPolicy implements Parcelable { * Whether {@link Notification#fullScreenIntent full screen intents} that are intercepted * by DND are shown. */ - public Builder showFullScreenIntent(boolean show) { + public @NonNull Builder showFullScreenIntent(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_FULL_SCREEN_INTENT, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -611,7 +612,7 @@ public final class ZenPolicy implements Parcelable { * Whether {@link NotificationChannel#shouldShowLights() notification lights} from * notifications intercepted by DND are blocked. */ - public Builder showLights(boolean show) { + public @NonNull Builder showLights(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_LIGHTS, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -620,7 +621,7 @@ public final class ZenPolicy implements Parcelable { /** * Whether notifications intercepted by DND are prevented from peeking. */ - public Builder showPeeking(boolean show) { + public @NonNull Builder showPeeking(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_PEEK, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -630,7 +631,7 @@ public final class ZenPolicy implements Parcelable { * Whether notifications intercepted by DND are prevented from appearing in the status bar * on devices that support status bars. */ - public Builder showStatusBarIcons(boolean show) { + public @NonNull Builder showStatusBarIcons(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_STATUS_BAR, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -640,7 +641,7 @@ public final class ZenPolicy implements Parcelable { * Whether {@link NotificationChannel#canShowBadge() badges} from * notifications intercepted by DND are allowed on devices that support badging. */ - public Builder showBadges(boolean show) { + public @NonNull Builder showBadges(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_BADGE, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -650,7 +651,7 @@ public final class ZenPolicy implements Parcelable { * Whether notification intercepted by DND are prevented from appearing on ambient displays * on devices that support ambient display. */ - public Builder showInAmbientDisplay(boolean show) { + public @NonNull Builder showInAmbientDisplay(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_AMBIENT, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -661,7 +662,7 @@ public final class ZenPolicy implements Parcelable { * list views like the notification shade or lockscreen on devices that support those * views. */ - public Builder showInNotificationList(boolean show) { + public @NonNull Builder showInNotificationList(boolean show) { mZenPolicy.mVisualEffects.set(VISUAL_EFFECT_NOTIFICATION_LIST, show ? STATE_ALLOW : STATE_DISALLOW); return this; @@ -672,7 +673,7 @@ public final class ZenPolicy implements Parcelable { * {@link VisualEffect} * @hide */ - public Builder showVisualEffect(@VisualEffect int effect, boolean show) { + public @NonNull Builder showVisualEffect(@VisualEffect int effect, boolean show) { switch (effect) { case VISUAL_EFFECT_FULL_SCREEN_INTENT: showFullScreenIntent(show); @@ -713,7 +714,7 @@ public final class ZenPolicy implements Parcelable { dest.writeInt(mPriorityMessages); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ZenPolicy createFromParcel(Parcel source) { @@ -1001,7 +1002,7 @@ public final class ZenPolicy implements Parcelable { * Makes deep copy of this ZenPolicy. * @hide */ - public ZenPolicy copy() { + public @NonNull ZenPolicy copy() { final Parcel parcel = Parcel.obtain(); try { writeToParcel(parcel, 0); diff --git a/core/java/android/service/quicksettings/Tile.java b/core/java/android/service/quicksettings/Tile.java index 6b569cfa9722cea69161c168c8987ae2270ec719..419104033bcd84cd03bfd7fe0e087c4fbe577463 100644 --- a/core/java/android/service/quicksettings/Tile.java +++ b/core/java/android/service/quicksettings/Tile.java @@ -229,7 +229,7 @@ public final class Tile implements Parcelable { mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Tile createFromParcel(Parcel source) { return new Tile(source); diff --git a/core/java/android/service/resolver/ResolverTarget.java b/core/java/android/service/resolver/ResolverTarget.java index fb3e2d738469016ef7b8429fd626602dbc6bd704..33b32839302859bf1cf09d581aa85295e065e1e2 100644 --- a/core/java/android/service/resolver/ResolverTarget.java +++ b/core/java/android/service/resolver/ResolverTarget.java @@ -201,7 +201,7 @@ public final class ResolverTarget implements Parcelable { } // creator definition for the class. - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ResolverTarget createFromParcel(Parcel source) { diff --git a/core/java/android/service/settings/suggestions/Suggestion.java b/core/java/android/service/settings/suggestions/Suggestion.java index e97f963a0986536b6e097b8188638a6b73d3488d..3e63efbda9c013feee8dcc26446774d9be38f6c1 100644 --- a/core/java/android/service/settings/suggestions/Suggestion.java +++ b/core/java/android/service/settings/suggestions/Suggestion.java @@ -125,7 +125,7 @@ public final class Suggestion implements Parcelable { mPendingIntent = in.readParcelable(PendingIntent.class.getClassLoader()); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Suggestion createFromParcel(Parcel in) { return new Suggestion(in); diff --git a/core/java/android/service/textclassifier/ITextSelectionCallback.aidl b/core/java/android/service/textclassifier/ITextClassifierCallback.aidl similarity index 82% rename from core/java/android/service/textclassifier/ITextSelectionCallback.aidl rename to core/java/android/service/textclassifier/ITextClassifierCallback.aidl index 1b4c4d10d4273ffc28c40e72e5e760bd492e700d..2926734086a5741ab701f00da0c945cbd5c941cc 100644 --- a/core/java/android/service/textclassifier/ITextSelectionCallback.aidl +++ b/core/java/android/service/textclassifier/ITextClassifierCallback.aidl @@ -16,13 +16,14 @@ package android.service.textclassifier; +import android.os.Bundle; import android.view.textclassifier.TextSelection; /** - * Callback for a TextSelection request. + * Callback for all requests from SystemTextClassifier. * @hide */ -oneway interface ITextSelectionCallback { - void onSuccess(in TextSelection selection); +oneway interface ITextClassifierCallback { + void onSuccess(in Bundle result); void onFailure(); } \ No newline at end of file diff --git a/core/java/android/service/textclassifier/ITextClassifierService.aidl b/core/java/android/service/textclassifier/ITextClassifierService.aidl index 794179415fc0ba7b52dd410e63950500c3d4f397..2f8d67b6cceecc8ba5bc32aeb427b8e8e4cb51eb 100644 --- a/core/java/android/service/textclassifier/ITextClassifierService.aidl +++ b/core/java/android/service/textclassifier/ITextClassifierService.aidl @@ -16,11 +16,7 @@ package android.service.textclassifier; -import android.service.textclassifier.IConversationActionsCallback; -import android.service.textclassifier.ITextClassificationCallback; -import android.service.textclassifier.ITextLanguageCallback; -import android.service.textclassifier.ITextLinksCallback; -import android.service.textclassifier.ITextSelectionCallback; +import android.service.textclassifier.ITextClassifierCallback; import android.view.textclassifier.ConversationActions; import android.view.textclassifier.SelectionEvent; import android.view.textclassifier.TextClassification; @@ -41,17 +37,17 @@ oneway interface ITextClassifierService { void onSuggestSelection( in TextClassificationSessionId sessionId, in TextSelection.Request request, - in ITextSelectionCallback callback); + in ITextClassifierCallback callback); void onClassifyText( in TextClassificationSessionId sessionId, in TextClassification.Request request, - in ITextClassificationCallback callback); + in ITextClassifierCallback callback); void onGenerateLinks( in TextClassificationSessionId sessionId, in TextLinks.Request request, - in ITextLinksCallback callback); + in ITextClassifierCallback callback); // TODO: Remove void onSelectionEvent( @@ -72,10 +68,10 @@ oneway interface ITextClassifierService { void onDetectLanguage( in TextClassificationSessionId sessionId, in TextLanguage.Request request, - in ITextLanguageCallback callback); + in ITextClassifierCallback callback); void onSuggestConversationActions( in TextClassificationSessionId sessionId, in ConversationActions.Request request, - in IConversationActionsCallback callback); + in ITextClassifierCallback callback); } diff --git a/core/java/android/service/textclassifier/TextClassifierService.java b/core/java/android/service/textclassifier/TextClassifierService.java index 235b8e8c9176c6e92ef2b023e3ae2340de9806f2..4088ce8ea4b0c5450a2d76589ec0780139eef531 100644 --- a/core/java/android/service/textclassifier/TextClassifierService.java +++ b/core/java/android/service/textclassifier/TextClassifierService.java @@ -17,6 +17,7 @@ package android.service.textclassifier; import android.Manifest; +import android.annotation.MainThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -27,8 +28,12 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; +import android.os.Bundle; import android.os.CancellationSignal; +import android.os.Handler; import android.os.IBinder; +import android.os.Looper; +import android.os.Parcelable; import android.os.RemoteException; import android.text.TextUtils; import android.util.Slog; @@ -46,6 +51,10 @@ import android.view.textclassifier.TextSelection; import com.android.internal.util.Preconditions; +import java.lang.ref.WeakReference; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** * Abstract base class for the TextClassifier service. * @@ -68,6 +77,11 @@ import com.android.internal.util.Preconditions; * * } * + *

    From {@link android.os.Build.VERSION_CODES#Q} onward, all callbacks are called on the main + * thread. Prior to Q, there is no guarantee on what thread the callback will happen. You should + * make sure the callbacks are executed in your desired thread by using a executor, a handler or + * something else along the line. + * * @see TextClassifier * @hide */ @@ -85,201 +99,102 @@ public abstract class TextClassifierService extends Service { public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService"; + /** @hide **/ + private static final String KEY_RESULT = "key_result"; + + private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper(), null, true); + private final ExecutorService mSingleThreadExecutor = Executors.newSingleThreadExecutor(); + private final ITextClassifierService.Stub mBinder = new ITextClassifierService.Stub() { // TODO(b/72533911): Implement cancellation signal @NonNull private final CancellationSignal mCancellationSignal = new CancellationSignal(); - /** {@inheritDoc} */ @Override public void onSuggestSelection( TextClassificationSessionId sessionId, - TextSelection.Request request, ITextSelectionCallback callback) { + TextSelection.Request request, ITextClassifierCallback callback) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(callback); - TextClassifierService.this.onSuggestSelection( - sessionId, request, mCancellationSignal, - new Callback() { - @Override - public void onSuccess(TextSelection result) { - try { - callback.onSuccess(result); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - - @Override - public void onFailure(CharSequence error) { - try { - if (callback.asBinder().isBinderAlive()) { - callback.onFailure(); - } - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - }); + mMainThreadHandler.post(() -> TextClassifierService.this.onSuggestSelection( + sessionId, request, mCancellationSignal, new ProxyCallback<>(callback))); + } - /** {@inheritDoc} */ @Override public void onClassifyText( TextClassificationSessionId sessionId, - TextClassification.Request request, ITextClassificationCallback callback) { + TextClassification.Request request, ITextClassifierCallback callback) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(callback); - TextClassifierService.this.onClassifyText( - sessionId, request, mCancellationSignal, - new Callback() { - @Override - public void onSuccess(TextClassification result) { - try { - callback.onSuccess(result); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - - @Override - public void onFailure(CharSequence error) { - try { - callback.onFailure(); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - }); + mMainThreadHandler.post(() -> TextClassifierService.this.onClassifyText( + sessionId, request, mCancellationSignal, new ProxyCallback<>(callback))); } - /** {@inheritDoc} */ @Override public void onGenerateLinks( TextClassificationSessionId sessionId, - TextLinks.Request request, ITextLinksCallback callback) { + TextLinks.Request request, ITextClassifierCallback callback) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(callback); - TextClassifierService.this.onGenerateLinks( - sessionId, request, - mCancellationSignal, - new Callback() { - @Override - public void onSuccess(TextLinks result) { - try { - callback.onSuccess(result); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - - @Override - public void onFailure(CharSequence error) { - try { - callback.onFailure(); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - }); + mMainThreadHandler.post(() -> TextClassifierService.this.onGenerateLinks( + sessionId, request, mCancellationSignal, new ProxyCallback<>(callback))); } - /** {@inheritDoc} */ @Override public void onSelectionEvent( TextClassificationSessionId sessionId, SelectionEvent event) { Preconditions.checkNotNull(event); - TextClassifierService.this.onSelectionEvent(sessionId, event); + mMainThreadHandler.post( + () -> TextClassifierService.this.onSelectionEvent(sessionId, event)); } - /** {@inheritDoc} */ @Override public void onTextClassifierEvent( TextClassificationSessionId sessionId, TextClassifierEvent event) { Preconditions.checkNotNull(event); - TextClassifierService.this.onTextClassifierEvent(sessionId, event); + mMainThreadHandler.post( + () -> TextClassifierService.this.onTextClassifierEvent(sessionId, event)); } - /** {@inheritDoc} */ @Override public void onDetectLanguage( TextClassificationSessionId sessionId, TextLanguage.Request request, - ITextLanguageCallback callback) { + ITextClassifierCallback callback) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(callback); - TextClassifierService.this.onDetectLanguage( - sessionId, - request, - mCancellationSignal, - new Callback() { - @Override - public void onSuccess(TextLanguage result) { - try { - callback.onSuccess(result); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - - @Override - public void onFailure(CharSequence error) { - try { - callback.onFailure(); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - }; - }); + mMainThreadHandler.post(() -> TextClassifierService.this.onDetectLanguage( + sessionId, request, mCancellationSignal, new ProxyCallback<>(callback))); } - /** {@inheritDoc} */ @Override public void onSuggestConversationActions( TextClassificationSessionId sessionId, ConversationActions.Request request, - IConversationActionsCallback callback) { + ITextClassifierCallback callback) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(callback); - TextClassifierService.this.onSuggestConversationActions( - sessionId, - request, - mCancellationSignal, - new Callback() { - @Override - public void onSuccess(ConversationActions result) { - try { - callback.onSuccess(result); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - - @Override - public void onFailure(CharSequence error) { - try { - callback.onFailure(); - } catch (RemoteException e) { - Slog.d(LOG_TAG, "Error calling callback"); - } - } - }); + mMainThreadHandler.post(() -> TextClassifierService.this.onSuggestConversationActions( + sessionId, request, mCancellationSignal, new ProxyCallback<>(callback))); } - /** {@inheritDoc} */ @Override public void onCreateTextClassificationSession( TextClassificationContext context, TextClassificationSessionId sessionId) { Preconditions.checkNotNull(context); Preconditions.checkNotNull(sessionId); - TextClassifierService.this.onCreateTextClassificationSession(context, sessionId); + mMainThreadHandler.post( + () -> TextClassifierService.this.onCreateTextClassificationSession( + context, sessionId)); } - /** {@inheritDoc} */ @Override public void onDestroyTextClassificationSession(TextClassificationSessionId sessionId) { - TextClassifierService.this.onDestroyTextClassificationSession(sessionId); + mMainThreadHandler.post( + () -> TextClassifierService.this.onDestroyTextClassificationSession(sessionId)); } }; @@ -301,6 +216,7 @@ public abstract class TextClassifierService extends Service { * @param cancellationSignal object to watch for canceling the current operation * @param callback the callback to return the result to */ + @MainThread public abstract void onSuggestSelection( @Nullable TextClassificationSessionId sessionId, @NonNull TextSelection.Request request, @@ -316,6 +232,7 @@ public abstract class TextClassifierService extends Service { * @param cancellationSignal object to watch for canceling the current operation * @param callback the callback to return the result to */ + @MainThread public abstract void onClassifyText( @Nullable TextClassificationSessionId sessionId, @NonNull TextClassification.Request request, @@ -331,6 +248,7 @@ public abstract class TextClassifierService extends Service { * @param cancellationSignal object to watch for canceling the current operation * @param callback the callback to return the result to */ + @MainThread public abstract void onGenerateLinks( @Nullable TextClassificationSessionId sessionId, @NonNull TextLinks.Request request, @@ -345,12 +263,14 @@ public abstract class TextClassifierService extends Service { * @param cancellationSignal object to watch for canceling the current operation * @param callback the callback to return the result to */ + @MainThread public void onDetectLanguage( @Nullable TextClassificationSessionId sessionId, @NonNull TextLanguage.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback callback) { - callback.onSuccess(getLocalTextClassifier().detectLanguage(request)); + mSingleThreadExecutor.submit(() -> + callback.onSuccess(getLocalTextClassifier().detectLanguage(request))); } /** @@ -361,12 +281,14 @@ public abstract class TextClassifierService extends Service { * @param cancellationSignal object to watch for canceling the current operation * @param callback the callback to return the result to */ + @MainThread public void onSuggestConversationActions( @Nullable TextClassificationSessionId sessionId, @NonNull ConversationActions.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback callback) { - callback.onSuccess(getLocalTextClassifier().suggestConversationActions(request)); + mSingleThreadExecutor.submit(() -> + callback.onSuccess(getLocalTextClassifier().suggestConversationActions(request))); } /** @@ -383,6 +305,7 @@ public abstract class TextClassifierService extends Service { * instead */ @Deprecated + @MainThread public void onSelectionEvent( @Nullable TextClassificationSessionId sessionId, @NonNull SelectionEvent event) {} @@ -396,6 +319,7 @@ public abstract class TextClassifierService extends Service { * @param sessionId the session id * @param event the TextClassifier event */ + @MainThread public void onTextClassifierEvent( @Nullable TextClassificationSessionId sessionId, @NonNull TextClassifierEvent event) {} @@ -405,6 +329,7 @@ public abstract class TextClassifierService extends Service { * @param context the text classification context * @param sessionId the session's Id */ + @MainThread public void onCreateTextClassificationSession( @NonNull TextClassificationContext context, @NonNull TextClassificationSessionId sessionId) {} @@ -414,6 +339,7 @@ public abstract class TextClassifierService extends Service { * * @param sessionId the id of the session to destroy */ + @MainThread public void onDestroyTextClassificationSession( @NonNull TextClassificationSessionId sessionId) {} @@ -441,6 +367,11 @@ public abstract class TextClassifierService extends Service { return TextClassifier.NO_OP; } + /** @hide **/ + public static T getResponse(Bundle bundle) { + return bundle.getParcelable(KEY_RESULT); + } + /** * Callbacks for TextClassifierService results. * @@ -494,4 +425,44 @@ public abstract class TextClassifierService extends Service { si.permission)); return null; } + + /** + * Forwards the callback result to a wrapped binder callback. + */ + private static final class ProxyCallback implements Callback { + private WeakReference mTextClassifierCallback; + + private ProxyCallback(ITextClassifierCallback textClassifierCallback) { + mTextClassifierCallback = + new WeakReference<>(Preconditions.checkNotNull(textClassifierCallback)); + } + + @Override + public void onSuccess(T result) { + ITextClassifierCallback callback = mTextClassifierCallback.get(); + if (callback == null) { + return; + } + try { + Bundle bundle = new Bundle(1); + bundle.putParcelable(KEY_RESULT, result); + callback.onSuccess(bundle); + } catch (RemoteException e) { + Slog.d(LOG_TAG, "Error calling callback"); + } + } + + @Override + public void onFailure(CharSequence error) { + ITextClassifierCallback callback = mTextClassifierCallback.get(); + if (callback == null) { + return; + } + try { + callback.onFailure(); + } catch (RemoteException e) { + Slog.d(LOG_TAG, "Error calling callback"); + } + } + } } diff --git a/core/java/android/service/vr/IVrManager.aidl b/core/java/android/service/vr/IVrManager.aidl index b0269e3325bff373ff590335be6e8f35443b0dd1..a8293b47db30d669a72d6fdf2bc06c0d7edd2ef4 100644 --- a/core/java/android/service/vr/IVrManager.aidl +++ b/core/java/android/service/vr/IVrManager.aidl @@ -57,6 +57,7 @@ interface IVrManager { * * @return {@code true} if VR mode is enabled. */ + @UnsupportedAppUsage boolean getVrModeState(); /** @@ -93,6 +94,7 @@ interface IVrManager { * @return {@link android.view.Display.INVALID_DISPLAY} if there is no virtual display * currently, else return the display id of the virtual display */ + @UnsupportedAppUsage int getVr2dDisplayId(); /** diff --git a/core/java/android/service/wallpaper/IWallpaperEngine.aidl b/core/java/android/service/wallpaper/IWallpaperEngine.aidl index ebce4846c16b1a9b02def92e1ce3c51fd7e48edf..00e0b7c170becaf4bbc4a2dd01c912b2cb17b726 100644 --- a/core/java/android/service/wallpaper/IWallpaperEngine.aidl +++ b/core/java/android/service/wallpaper/IWallpaperEngine.aidl @@ -26,11 +26,15 @@ import android.os.Bundle; oneway interface IWallpaperEngine { void setDesiredSize(int width, int height); void setDisplayPadding(in Rect padding); + @UnsupportedAppUsage void setVisibility(boolean visible); void setInAmbientMode(boolean inAmbientDisplay, long animationDuration); + @UnsupportedAppUsage void dispatchPointer(in MotionEvent event); + @UnsupportedAppUsage void dispatchWallpaperCommand(String action, int x, int y, int z, in Bundle extras); void requestWallpaperColors(); + @UnsupportedAppUsage void destroy(); } diff --git a/core/java/android/speech/IRecognitionListener.aidl b/core/java/android/speech/IRecognitionListener.aidl index 3d3c44bf1efe67de1f39b5411a2913deeba85a06..e77851b0e40529668ba229506849c79b658900f0 100644 --- a/core/java/android/speech/IRecognitionListener.aidl +++ b/core/java/android/speech/IRecognitionListener.aidl @@ -83,5 +83,6 @@ oneway interface IRecognitionListener { * @param eventType the type of the occurred event * @param params a Bundle containing the passed parameters */ + @UnsupportedAppUsage void onEvent(in int eventType, in Bundle params); } diff --git a/core/java/android/speech/tts/Voice.java b/core/java/android/speech/tts/Voice.java index dcf598014fdb5716388585b5e1f1825c4c8ce923..fefc35e775e3c628d5d44b5eb8ebff87d9f67a74 100644 --- a/core/java/android/speech/tts/Voice.java +++ b/core/java/android/speech/tts/Voice.java @@ -106,7 +106,7 @@ public class Voice implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Voice createFromParcel(Parcel in) { return new Voice(in); diff --git a/core/java/android/text/style/AccessibilityClickableSpan.java b/core/java/android/text/style/AccessibilityClickableSpan.java index 7f39cc14718a668c16fa00d0bcb211fa0018dc4f..534ce63349e0c9c061401fea3be641c5809dfd90 100644 --- a/core/java/android/text/style/AccessibilityClickableSpan.java +++ b/core/java/android/text/style/AccessibilityClickableSpan.java @@ -144,7 +144,7 @@ public class AccessibilityClickableSpan extends ClickableSpan R.id.accessibilityActionClickOnClickableSpan, arguments); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AccessibilityClickableSpan createFromParcel(Parcel parcel) { diff --git a/core/java/android/text/style/LineHeightSpan.java b/core/java/android/text/style/LineHeightSpan.java index a5d5af2433fea86aebabd4709096d6ebbe7ed49a..7fb0f950f583b1340e29e293c8e5971bb66ef682 100644 --- a/core/java/android/text/style/LineHeightSpan.java +++ b/core/java/android/text/style/LineHeightSpan.java @@ -88,7 +88,7 @@ public interface LineHeightSpan extends ParagraphStyle, WrapTogetherSpan { /** * Constructor called from {@link TextUtils} to restore the span from a parcel */ - public Standard(Parcel src) { + public Standard(@NonNull Parcel src) { mHeight = src.readInt(); } diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java index dd073e9142b17c8563f8e68b6dc29fd38774af68..c000ae3f6b2a0708e8251ee39ac994056ffea08e 100644 --- a/core/java/android/text/style/SuggestionSpan.java +++ b/core/java/android/text/style/SuggestionSpan.java @@ -344,7 +344,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { languageTag, localeStringForCompatibility}); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SuggestionSpan createFromParcel(Parcel source) { diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java index 294a1799a2d38176db90a72216f7132618d89e32..436cb4ff7072c69b2063534960ce1b3597a2cfc8 100644 --- a/core/java/android/util/ArrayMap.java +++ b/core/java/android/util/ArrayMap.java @@ -19,6 +19,9 @@ package android.util; import libcore.util.EmptyArray; import android.annotation.UnsupportedAppUsage; + +import com.android.internal.util.ArrayUtils; + import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.Map; @@ -816,7 +819,7 @@ public final class ArrayMap implements Map { buffer.append('='); Object value = valueAt(i); if (value != this) { - buffer.append(value); + buffer.append(ArrayUtils.deepToString(value)); } else { buffer.append("(this Map)"); } diff --git a/core/java/android/util/DocumentsStatsLog.java b/core/java/android/util/DocumentsStatsLog.java index f483944c97c734d807c2e51cce527ae15f7857c2..a67bbde8b30bf09fa959bbc5343e94bc7d4e54e2 100644 --- a/core/java/android/util/DocumentsStatsLog.java +++ b/core/java/android/util/DocumentsStatsLog.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.provider.DocumentsContract; import android.provider.DocumentsProvider; @@ -126,7 +127,7 @@ public class DocumentsStatsLog { * * @param packageName */ - public static void logPickerLaunchedFrom(String packageName) { + public static void logPickerLaunchedFrom(@Nullable String packageName) { StatsLog.write(StatsLog.DOCS_UI_PICKER_LAUNCHED_FROM_REPORTED, packageName); } diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index fac699ece642a6aaea5d3775cde82e3bbbde5458..43786f7489b5262a4977494b6e506dc18c34c850 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -46,7 +46,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS = new HashMap<>(); DEFAULT_FLAGS.put("settings_audio_switcher", "true"); DEFAULT_FLAGS.put("settings_mobile_network_v2", "true"); - DEFAULT_FLAGS.put("settings_network_and_internet_v2", "false"); + DEFAULT_FLAGS.put("settings_network_and_internet_v2", "true"); DEFAULT_FLAGS.put("settings_slice_injection", "true"); DEFAULT_FLAGS.put("settings_systemui_theme", "true"); DEFAULT_FLAGS.put("settings_wifi_mac_randomization", "true"); diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java index adfa4fc555679f43152e374f2ffddd9588881301..8b5659b3fa31fe5896c327e60aa0232ec09fddad 100644 --- a/core/java/android/util/LocalLog.java +++ b/core/java/android/util/LocalLog.java @@ -17,6 +17,7 @@ package android.util; import android.annotation.UnsupportedAppUsage; + import java.io.FileDescriptor; import java.io.PrintWriter; import java.time.LocalDateTime; @@ -55,6 +56,10 @@ public final class LocalLog { @UnsupportedAppUsage public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + dump(pw); + } + + public synchronized void dump(PrintWriter pw) { Iterator itr = mLog.iterator(); while (itr.hasNext()) { pw.println(itr.next()); @@ -62,6 +67,10 @@ public final class LocalLog { } public synchronized void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { + reverseDump(pw); + } + + public synchronized void reverseDump(PrintWriter pw) { Iterator itr = mLog.descendingIterator(); while (itr.hasNext()) { pw.println(itr.next()); @@ -75,10 +84,16 @@ public final class LocalLog { } @UnsupportedAppUsage public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - mLog.dump(fd, pw, args); + mLog.dump(pw); + } + public void dump(PrintWriter pw) { + mLog.dump(pw); } public void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { - mLog.reverseDump(fd, pw, args); + mLog.reverseDump(pw); + } + public void reverseDump(PrintWriter pw) { + mLog.reverseDump(pw); } } diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java index 9ba0f5da135e5da16ed8995d71b4942be5155991..cf49803a72251458e95475199fd63f615c85b33e 100644 --- a/core/java/android/util/LongSparseArray.java +++ b/core/java/android/util/LongSparseArray.java @@ -21,6 +21,9 @@ import com.android.internal.util.GrowingArrayUtils; import libcore.util.EmptyArray; +import java.util.Arrays; +import java.util.Objects; + /** * SparseArray mapping longs to Objects. Unlike a normal array of Objects, * there can be gaps in the indices. It is intended to be more memory efficient diff --git a/core/java/android/util/LongSparseLongArray.java b/core/java/android/util/LongSparseLongArray.java index af163ac8f24663dcc20798f780e5035d54849c7f..8dcdb402624658781a211f7c5e78b1484664c463 100644 --- a/core/java/android/util/LongSparseLongArray.java +++ b/core/java/android/util/LongSparseLongArray.java @@ -22,6 +22,8 @@ import com.android.internal.util.GrowingArrayUtils; import android.annotation.UnsupportedAppUsage; import libcore.util.EmptyArray; +import java.util.Arrays; + /** * Map of {@code long} to {@code long}. Unlike a normal array of longs, there * can be gaps in the indices. It is intended to be more memory efficient than using a diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java index d5bec0fff088051fcf0bbab7a5e02c3b8970cf12..74fea3f4dd30756fd87743f5794a21f94104c67f 100644 --- a/core/java/android/util/MemoryIntArray.java +++ b/core/java/android/util/MemoryIntArray.java @@ -235,7 +235,7 @@ public final class MemoryIntArray implements Parcelable, Closeable { return MAX_SIZE; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public MemoryIntArray createFromParcel(Parcel parcel) { diff --git a/core/java/android/util/MergedConfiguration.java b/core/java/android/util/MergedConfiguration.java index ae6605043b2ea9527025bf4a9590b0d010659d83..2399adac3cbac62926842a283a330148cadd9d95 100644 --- a/core/java/android/util/MergedConfiguration.java +++ b/core/java/android/util/MergedConfiguration.java @@ -74,7 +74,7 @@ public class MergedConfiguration implements Parcelable { return 0; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public MergedConfiguration createFromParcel(Parcel in) { return new MergedConfiguration(in); diff --git a/core/java/android/util/RecurrenceRule.java b/core/java/android/util/RecurrenceRule.java index 209a5912259becd0f389971e34cb6cc6e8580d0d..9c60228b4f87b2f146a1dba000caa74aa1f58389 100644 --- a/core/java/android/util/RecurrenceRule.java +++ b/core/java/android/util/RecurrenceRule.java @@ -140,7 +140,7 @@ public class RecurrenceRule implements Parcelable { return false; } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public RecurrenceRule createFromParcel(Parcel source) { return new RecurrenceRule(source); diff --git a/core/java/android/util/apk/ApkSignatureVerifier.java b/core/java/android/util/apk/ApkSignatureVerifier.java index b4bfb42804ca33c1cee68b657871d3b58387b1e9..fd00f9eea009d63f16ab85f94e34b0c350389f57 100644 --- a/core/java/android/util/apk/ApkSignatureVerifier.java +++ b/core/java/android/util/apk/ApkSignatureVerifier.java @@ -495,15 +495,18 @@ public class ApkSignatureVerifier { /** * @return the verity root hash in the Signing Block. */ - public static byte[] getVerityRootHash(String apkPath) - throws IOException, SignatureNotFoundException, SecurityException { + public static byte[] getVerityRootHash(String apkPath) throws IOException, SecurityException { // first try v3 try { return ApkSignatureSchemeV3Verifier.getVerityRootHash(apkPath); } catch (SignatureNotFoundException e) { // try older version } - return ApkSignatureSchemeV2Verifier.getVerityRootHash(apkPath); + try { + return ApkSignatureSchemeV2Verifier.getVerityRootHash(apkPath); + } catch (SignatureNotFoundException e) { + return null; + } } /** diff --git a/core/java/android/view/AbsSavedState.java b/core/java/android/view/AbsSavedState.java index 6b616c0a7c50a4f1fc2a03ec0e3172c2ae559878..009898ee303e2430d4e929cdf3b76da60a024d7a 100644 --- a/core/java/android/view/AbsSavedState.java +++ b/core/java/android/view/AbsSavedState.java @@ -80,7 +80,7 @@ public abstract class AbsSavedState implements Parcelable { dest.writeParcelable(mSuperState, flags); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.ClassLoaderCreator() { @Override diff --git a/core/java/android/view/AppTransitionAnimationSpec.java b/core/java/android/view/AppTransitionAnimationSpec.java index 6585e40c67d168393f1c64373a886958841d7835..4c0ed52946bde16ad236d39894641d74f96c3fd6 100644 --- a/core/java/android/view/AppTransitionAnimationSpec.java +++ b/core/java/android/view/AppTransitionAnimationSpec.java @@ -44,7 +44,7 @@ public class AppTransitionAnimationSpec implements Parcelable { dest.writeParcelable(buffer, 0); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AppTransitionAnimationSpec createFromParcel(Parcel in) { return new AppTransitionAnimationSpec(in); diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 94a9a1c0ff302cc2bebda7e00248cd3693373142..b3d98b8de0a37ead7a6c1c7f331a3178cae0fc17 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -231,7 +231,6 @@ public final class Display { * bar, navigation bar, home activity or IME. *

    * - * @see #supportsSystemDecorations * @hide */ // TODO (b/114338689): Remove the flag and use IWindowManager#setShouldShowSystemDecors @@ -906,18 +905,6 @@ public final class Display { return mDisplayInfo.removeMode; } - /** - * Returns whether this display should support showing system decorations. - * - * @see #FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS - * @hide - */ - @TestApi - // TODO (b/114338689): Remove the method and use IWindowManager#shouldShowSystemDecors - public boolean supportsSystemDecorations() { - return (mDisplayInfo.flags & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0; - } - /** * Returns the display's HDR capabilities. * @@ -1110,16 +1097,19 @@ public final class Display { * Returns true if the specified UID has access to this display. * @hide */ + @TestApi public boolean hasAccess(int uid) { - return Display.hasAccess(uid, mFlags, mOwnerUid); + return hasAccess(uid, mFlags, mOwnerUid, mDisplayId); } /** @hide */ - public static boolean hasAccess(int uid, int flags, int ownerUid) { + public static boolean hasAccess(int uid, int flags, int ownerUid, int displayId) { return (flags & Display.FLAG_PRIVATE) == 0 || uid == ownerUid || uid == Process.SYSTEM_UID - || uid == 0; + || uid == 0 + // Check if the UID is present on given display. + || DisplayManagerGlobal.getInstance().isUidPresentOnDisplay(uid, displayId); } /** @@ -1375,7 +1365,7 @@ public final class Display { } @SuppressWarnings("hiding") - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Mode createFromParcel(Parcel in) { @@ -1504,7 +1494,7 @@ public final class Display { return hash; } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public HdrCapabilities createFromParcel(Parcel source) { return new HdrCapabilities(source); diff --git a/core/java/android/view/DisplayAddress.java b/core/java/android/view/DisplayAddress.java index 17ea4c423be59b61de65b997ac6548ad55c5656f..13608150babecc6c0460fda7820cc8b32de312b9 100644 --- a/core/java/android/view/DisplayAddress.java +++ b/core/java/android/view/DisplayAddress.java @@ -109,7 +109,7 @@ public abstract class DisplayAddress implements Parcelable { mPhysicalDisplayId = physicalDisplayId; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Physical createFromParcel(Parcel in) { @@ -153,7 +153,7 @@ public abstract class DisplayAddress implements Parcelable { mMacAddress = macAddress; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Network createFromParcel(Parcel in) { diff --git a/core/java/android/view/DisplayCutout.java b/core/java/android/view/DisplayCutout.java index e9f1edf52b5f2eb61d859e1bf267424ad2a806da..610f7edef451d1ac2eb09840de2fef47ee507c26 100644 --- a/core/java/android/view/DisplayCutout.java +++ b/core/java/android/view/DisplayCutout.java @@ -233,6 +233,9 @@ public final class DisplayCutout { /** * Creates a DisplayCutout instance. * + *

    Note that this is only useful for tests. For production code, developers should always + * use a {@link DisplayCutout} obtained from the system.

    + * * @param safeInsets the insets from each edge which avoid the display cutout as returned by * {@link #getSafeInsetTop()} etc. * @param boundLeft the left bounding rect of the display cutout in pixels. If null is passed, @@ -253,6 +256,9 @@ public final class DisplayCutout { /** * Creates a DisplayCutout instance. * + *

    Note that this is only useful for tests. For production code, developers should always + * use a {@link DisplayCutout} obtained from the system.

    + * * @param safeInsets the insets from each edge which avoid the display cutout as returned by * {@link #getSafeInsetTop()} etc. * @param boundingRects the bounding rects of the display cutouts as returned by @@ -765,7 +771,7 @@ public final class DisplayCutout { mInner = readCutoutFromParcel(in); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ParcelableWrapper createFromParcel(Parcel in) { return new ParcelableWrapper(readCutoutFromParcel(in)); diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index 3aa779bc3df61ba5356ebccd04e3743e1a9d9428..2efebf6457ab03bb6c1501e60cc73cb72f6aaecc 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -57,6 +57,11 @@ public final class DisplayInfo implements Parcelable { */ public int type; + /** + * Logical display identifier. + */ + public int displayId; + /** * Display address, or null if none. * Interpretation varies by display type. @@ -271,7 +276,7 @@ public final class DisplayInfo implements Parcelable { // TODO (b/114338689): Remove the flag and use IWindowManager#getRemoveContentMode public int removeMode = Display.REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY; - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public DisplayInfo createFromParcel(Parcel source) { return new DisplayInfo(source); @@ -305,6 +310,7 @@ public final class DisplayInfo implements Parcelable { && layerStack == other.layerStack && flags == other.flags && type == other.type + && displayId == other.displayId && Objects.equals(address, other.address) && Objects.equals(uniqueId, other.uniqueId) && appWidth == other.appWidth @@ -346,6 +352,7 @@ public final class DisplayInfo implements Parcelable { layerStack = other.layerStack; flags = other.flags; type = other.type; + displayId = other.displayId; address = other.address; name = other.name; uniqueId = other.uniqueId; @@ -385,6 +392,7 @@ public final class DisplayInfo implements Parcelable { layerStack = source.readInt(); flags = source.readInt(); type = source.readInt(); + displayId = source.readInt(); address = source.readParcelable(null); name = source.readString(); appWidth = source.readInt(); @@ -432,6 +440,7 @@ public final class DisplayInfo implements Parcelable { dest.writeInt(layerStack); dest.writeInt(this.flags); dest.writeInt(type); + dest.writeInt(displayId); dest.writeParcelable(address, flags); dest.writeString(name); dest.writeInt(appWidth); @@ -579,7 +588,7 @@ public final class DisplayInfo implements Parcelable { * Returns true if the specified UID has access to this display. */ public boolean hasAccess(int uid) { - return Display.hasAccess(uid, flags, ownerUid); + return Display.hasAccess(uid, flags, ownerUid, displayId); } private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, @@ -610,6 +619,8 @@ public final class DisplayInfo implements Parcelable { StringBuilder sb = new StringBuilder(); sb.append("DisplayInfo{\""); sb.append(name); + sb.append(", displayId "); + sb.append(displayId); sb.append("\", uniqueId \""); sb.append(uniqueId); sb.append("\", app "); diff --git a/core/java/android/view/DragAndDropPermissions.java b/core/java/android/view/DragAndDropPermissions.java index c198e1f3dd84b99d7f1238c5690a6db54599c42f..e72ff38ce3f04510e3e267f2f64b6f9fad2f8e45 100644 --- a/core/java/android/view/DragAndDropPermissions.java +++ b/core/java/android/view/DragAndDropPermissions.java @@ -117,7 +117,7 @@ public final class DragAndDropPermissions implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator () { @Override public DragAndDropPermissions createFromParcel(Parcel source) { diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java index bd4dda2112083c9b8f69ff4be557bbfd8d3f8a47..2a43bcc00daf7fef97d76da7c4053510ed0c7bed 100644 --- a/core/java/android/view/DragEvent.java +++ b/core/java/android/view/DragEvent.java @@ -528,7 +528,7 @@ public class DragEvent implements Parcelable { /** * A container for creating a DragEvent from a Parcel. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public DragEvent createFromParcel(Parcel in) { DragEvent event = DragEvent.obtain(); diff --git a/core/java/android/view/GestureExclusionTracker.java b/core/java/android/view/GestureExclusionTracker.java new file mode 100644 index 0000000000000000000000000000000000000000..8eccc04fa647fe9d5a375ad83ff2ddd4a426a2d4 --- /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 mGestureExclusionViewInfos = new ArrayList<>(); + private List mGestureExclusionRects = Collections.emptyList(); + + public void updateRectsForView(@NonNull View view) { + boolean found = false; + final Iterator 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 computeChangedRects() { + boolean changed = false; + final Iterator i = mGestureExclusionViewInfos.iterator(); + final List 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 mView; + boolean mDirty = true; + List 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 localRects = excludedView.getSystemGestureExclusionRects(); + final List 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/IRecentsAnimationController.aidl b/core/java/android/view/IRecentsAnimationController.aidl index 94b9bc099d564f5a0b3a0ef5abf99105fc47cc1e..b1f934a44cdb32754cf8a865b2e72ba9392e560c 100644 --- a/core/java/android/view/IRecentsAnimationController.aidl +++ b/core/java/android/view/IRecentsAnimationController.aidl @@ -33,6 +33,7 @@ interface IRecentsAnimationController { * Takes a screenshot of the task associated with the given {@param taskId}. Only valid for the * current set of task ids provided to the handler. */ + @UnsupportedAppUsage ActivityManager.TaskSnapshot screenshotTask(int taskId); /** @@ -41,6 +42,7 @@ interface IRecentsAnimationController { * the home activity should be moved to the top. Otherwise, the home activity is hidden and the * user is returned to the app. */ + @UnsupportedAppUsage void finish(boolean moveHomeToTop); /** @@ -50,6 +52,7 @@ interface IRecentsAnimationController { * may register the recents animation input consumer prior to starting the recents animation * and then enable it mid-animation to start receiving touch events. */ + @UnsupportedAppUsage void setInputConsumerEnabled(boolean enabled); /** @@ -58,6 +61,7 @@ interface IRecentsAnimationController { * they can control the SystemUI flags, otherwise the SystemUI flags from home activity will be * taken. */ + @UnsupportedAppUsage void setAnimationTargetsBehindSystemBars(boolean behindSystemBars); /** diff --git a/core/java/android/view/IRecentsAnimationRunner.aidl b/core/java/android/view/IRecentsAnimationRunner.aidl index 4cdf664415146dca43dd2862cf77a3cc476ee97e..6e382f416b62f5ed147988cb00a59fe059d01761 100644 --- a/core/java/android/view/IRecentsAnimationRunner.aidl +++ b/core/java/android/view/IRecentsAnimationRunner.aidl @@ -33,6 +33,7 @@ oneway interface IRecentsAnimationRunner { * wallpaper not drawing in time, or the handler not finishing the animation within a predefined * amount of time. */ + @UnsupportedAppUsage void onAnimationCanceled() = 1; /** @@ -42,6 +43,7 @@ oneway interface IRecentsAnimationRunner { * @param minimizedHomeBounds Specifies the bounds of the minimized home app, will be * {@code null} if the device is not currently in split screen */ + @UnsupportedAppUsage void onAnimationStart(in IRecentsAnimationController controller, in RemoteAnimationTarget[] apps, in Rect homeContentInsets, in Rect minimizedHomeBounds) = 2; diff --git a/core/java/android/view/IRemoteAnimationFinishedCallback.aidl b/core/java/android/view/IRemoteAnimationFinishedCallback.aidl index ae58b226ec030dded464a59273bc4ca05284fbb5..a99162b6c857f43865e53e99fb21fdbac5fbd75b 100644 --- a/core/java/android/view/IRemoteAnimationFinishedCallback.aidl +++ b/core/java/android/view/IRemoteAnimationFinishedCallback.aidl @@ -23,5 +23,6 @@ package android.view; * {@hide} */ interface IRemoteAnimationFinishedCallback { + @UnsupportedAppUsage void onAnimationFinished(); } diff --git a/core/java/android/view/IRemoteAnimationRunner.aidl b/core/java/android/view/IRemoteAnimationRunner.aidl index 1350ebf10a4f9313b754a57bde891fb96d19353b..73b023c99665202564dfba33c031bed136821e73 100644 --- a/core/java/android/view/IRemoteAnimationRunner.aidl +++ b/core/java/android/view/IRemoteAnimationRunner.aidl @@ -33,6 +33,7 @@ oneway interface IRemoteAnimationRunner { * @param apps The list of apps to animate. * @param finishedCallback The callback to invoke when the animation is finished. */ + @UnsupportedAppUsage void onAnimationStart(in RemoteAnimationTarget[] apps, in IRemoteAnimationFinishedCallback finishedCallback); @@ -40,5 +41,6 @@ oneway interface IRemoteAnimationRunner { * Called when the animation was cancelled. From this point on, any updates onto the leashes * won't have any effect anymore. */ + @UnsupportedAppUsage void onAnimationCancelled(); } diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 5dc54a56667695f96ccc5438cf6379047f417ac4..e32c4e136a6ee7656279ba2e38b780a5935a02a1 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -74,10 +74,13 @@ interface IWindowManager IWindowSession openSession(in IWindowSessionCallback callback); + @UnsupportedAppUsage void getInitialDisplaySize(int displayId, out Point size); + @UnsupportedAppUsage void getBaseDisplaySize(int displayId, out Point size); void setForcedDisplaySize(int displayId, int width, int height); void clearForcedDisplaySize(int displayId); + @UnsupportedAppUsage int getInitialDisplayDensity(int displayId); int getBaseDisplayDensity(int displayId); void setForcedDisplayDensityForUser(int displayId, int density, int userId); @@ -97,17 +100,21 @@ interface IWindowManager * used for recents, where generating the thumbnails of the specs takes a non-trivial amount of * time, so we want to move that off the critical path for starting the new activity. */ + @UnsupportedAppUsage void overridePendingAppTransitionMultiThumbFuture( IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback startedCallback, boolean scaleUp, int displayId); + @UnsupportedAppUsage void overridePendingAppTransitionRemote(in RemoteAnimationAdapter remoteAnimationAdapter, int displayId); + @UnsupportedAppUsage void executeAppTransition(); /** * Used by system ui to report that recents has shown itself. * @deprecated to be removed once prebuilts are updated */ + @UnsupportedAppUsage void endProlongedAnimations(); void startFreezingScreen(int exitAnim, int enterAnim); @@ -119,7 +126,9 @@ interface IWindowManager /** @deprecated use Activity.setShowWhenLocked instead. */ void reenableKeyguard(IBinder token, int userId); void exitKeyguardSecurely(IOnKeyguardExitResult callback); + @UnsupportedAppUsage boolean isKeyguardLocked(); + @UnsupportedAppUsage boolean isKeyguardSecure(); void dismissKeyguard(IKeyguardDismissCallback callback, CharSequence message); @@ -129,9 +138,13 @@ interface IWindowManager void closeSystemDialogs(String reason); // These can only be called with the SET_ANIMATON_SCALE permission. + @UnsupportedAppUsage float getAnimationScale(int which); + @UnsupportedAppUsage float[] getAnimationScales(); + @UnsupportedAppUsage void setAnimationScale(int which, float scale); + @UnsupportedAppUsage void setAnimationScales(in float[] scales); float getCurrentAnimatorScale(); @@ -150,6 +163,7 @@ interface IWindowManager // should be enabled. The 'enabled' value is null or blank for // the system default (differs per build variant) or any valid // boolean string as parsed by SystemProperties.getBoolean(). + @UnsupportedAppUsage void setStrictModeVisualIndicatorPreference(String enabled); /** @@ -188,6 +202,7 @@ interface IWindowManager * Remove a rotation watcher set using watchRotation. * @hide */ + @UnsupportedAppUsage void removeRotationWatcher(IRotationWatcher watcher); /** @@ -203,12 +218,14 @@ interface IWindowManager * Equivalent to calling {@link #freezeDisplayRotation(int, int)} with {@link * android.view.Display#DEFAULT_DISPLAY} and given rotation. */ + @UnsupportedAppUsage void freezeRotation(int rotation); /** * Equivalent to calling {@link #thawDisplayRotation(int)} with {@link * android.view.Display#DEFAULT_DISPLAY}. */ + @UnsupportedAppUsage void thawRotation(); /** @@ -286,11 +303,13 @@ interface IWindowManager /** * Called by System UI to notify of changes to the visibility and height of the shelf. */ + @UnsupportedAppUsage void setShelfHeight(boolean visible, int shelfHeight); /** * Called by System UI to enable or disable haptic feedback on the navigation bar buttons. */ + @UnsupportedAppUsage void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled); /** @@ -298,6 +317,7 @@ interface IWindowManager * * @param displayId the id of display to check if there is a software navigation bar. */ + @UnsupportedAppUsage boolean hasNavigationBar(int displayId); /** @@ -308,11 +328,13 @@ interface IWindowManager /** * Lock the device immediately with the specified options (can be null). */ + @UnsupportedAppUsage void lockNow(in Bundle options); /** * Device is in safe mode. */ + @UnsupportedAppUsage boolean isSafeModeEnabled(); /** @@ -340,6 +362,7 @@ interface IWindowManager * @return the dock side the current docked stack is at; must be one of the * WindowManagerGlobal.DOCKED_* values */ + @UnsupportedAppUsage int getDockedStackSide(); /** @@ -352,6 +375,7 @@ interface IWindowManager * Registers a listener that will be called when the dock divider changes its visibility or when * the docked stack gets added/removed. */ + @UnsupportedAppUsage void registerDockedStackListener(IDockedStackListener listener); /** @@ -378,6 +402,7 @@ interface IWindowManager /** * Retrieves the current stable insets from the primary display. */ + @UnsupportedAppUsage void getStableInsets(int displayId, out Rect outInsets); /** @@ -400,6 +425,7 @@ interface IWindowManager /** * Create an input consumer by name and display id. */ + @UnsupportedAppUsage void createInputConsumer(IBinder token, String name, int displayId, out InputChannel inputChannel); @@ -407,6 +433,7 @@ interface IWindowManager * Destroy an input consumer by name and display id. * This method will also dispose the input channels associated with that InputConsumer. */ + @UnsupportedAppUsage boolean destroyInputConsumer(String name, int displayId); /** diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 240aad5a0c5677333af87c07790e1c43dcb6cf18..1fcd4321cddeae0b7664f95d9242a69969061630 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -46,6 +46,7 @@ interface IWindowSession { int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, out Rect outContentInsets, out Rect outStableInsets, out InsetsState insetsState); + @UnsupportedAppUsage void remove(IWindow window); /** @@ -122,6 +123,7 @@ interface IWindowSession { * completely transparent, allowing it to work with the surface flinger * to optimize compositing of this part of the window. */ + @UnsupportedAppUsage void setTransparentRegion(IWindow window, in Region region); /** @@ -143,11 +145,15 @@ interface IWindowSession { */ void getDisplayFrame(IWindow window, out Rect outDisplayFrame); + @UnsupportedAppUsage void finishDrawing(IWindow window); + @UnsupportedAppUsage void setInTouchMode(boolean showFocus); + @UnsupportedAppUsage boolean getInTouchMode(); + @UnsupportedAppUsage boolean performHapticFeedback(int effectId, boolean always); /** @@ -166,6 +172,7 @@ interface IWindowSession { * @param data Data transferred by drag and drop * @return Token of drag operation which will be passed to cancelDragAndDrop. */ + @UnsupportedAppUsage IBinder performDrag(IWindow window, int flags, in SurfaceControl surface, int touchSource, float touchX, float touchY, float thumbCenterX, float thumbCenterY, in ClipData data); @@ -199,6 +206,7 @@ interface IWindowSession { */ void setWallpaperPosition(IBinder windowToken, float x, float y, float xstep, float ystep); + @UnsupportedAppUsage void wallpaperOffsetsComplete(IBinder window); /** @@ -209,6 +217,7 @@ interface IWindowSession { Bundle sendWallpaperCommand(IBinder window, String action, int x, int y, int z, in Bundle extras, boolean sync); + @UnsupportedAppUsage void wallpaperCommandComplete(IBinder window, in Bundle result); /** diff --git a/core/java/android/view/InputChannel.java b/core/java/android/view/InputChannel.java index 84c8e7a2221ed2a1c765e73d1cc71c4651e8d11f..af2b992ccba2da8597371dd63a9e95db31064ba6 100644 --- a/core/java/android/view/InputChannel.java +++ b/core/java/android/view/InputChannel.java @@ -35,7 +35,7 @@ public final class InputChannel implements Parcelable { private static final boolean DEBUG = false; @UnsupportedAppUsage - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InputChannel createFromParcel(Parcel source) { InputChannel result = new InputChannel(); diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index 868a9de939729d8aeae2147823db539283e27a34..e723f91887c1cf0e51b95ab52feb1cb3b53db010 100644 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -397,7 +397,7 @@ public final class InputDevice implements Parcelable { private static final int MAX_RANGES = 1000; - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InputDevice createFromParcel(Parcel in) { return new InputDevice(in); diff --git a/core/java/android/view/InputEvent.java b/core/java/android/view/InputEvent.java index c2848d40e59571aa8533a0ce45cadd3127e8397e..4b88a6a54efe180cc72eca36adb6434e664a71ea 100644 --- a/core/java/android/view/InputEvent.java +++ b/core/java/android/view/InputEvent.java @@ -237,7 +237,7 @@ public abstract class InputEvent implements Parcelable { return 0; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InputEvent createFromParcel(Parcel in) { int token = in.readInt(); diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java index fbc72a0f978ec5f6fcdc4aff24d57a042109fb38..16e00da82e1aad482b445877e3fe4b3feb0800d1 100644 --- a/core/java/android/view/InsetsSource.java +++ b/core/java/android/view/InsetsSource.java @@ -151,7 +151,7 @@ public class InsetsSource implements Parcelable { dest.writeBoolean(mVisible); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public InsetsSource createFromParcel(Parcel in) { return new InsetsSource(in); diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java index 9fb6bdba48e35e12528cf4312bda0382153948d6..4940981748a8beda8b485b8625db7692b843c7dc 100644 --- a/core/java/android/view/InsetsSourceControl.java +++ b/core/java/android/view/InsetsSourceControl.java @@ -76,7 +76,7 @@ public class InsetsSourceControl implements Parcelable { dest.writeParcelable(mSurfacePosition, 0 /* flags*/); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public InsetsSourceControl createFromParcel(Parcel in) { return new InsetsSourceControl(in); diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 69f86aa5b37e2963dd1e3a8e0a3ab7ea3d3002bb..1382fbc25b9c2d973a05460ef64d7d2d9d6303af 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -386,7 +386,7 @@ public class InsetsState implements Parcelable { } } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public InsetsState createFromParcel(Parcel in) { return new InsetsState(in); diff --git a/core/java/android/view/KeyCharacterMap.java b/core/java/android/view/KeyCharacterMap.java index 989bf675485ffd967c67c67758a212c57b59c7e9..bd033480ea876f637677857cb4c3f7dcc0b08b61 100644 --- a/core/java/android/view/KeyCharacterMap.java +++ b/core/java/android/view/KeyCharacterMap.java @@ -272,7 +272,7 @@ public class KeyCharacterMap implements Parcelable { sDeadKeyCache.put(combination, result); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeyCharacterMap createFromParcel(Parcel in) { return new KeyCharacterMap(in); diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index f9a46b13d0e1325a018acf2bc4c1ed8404007390..f700d32fa797e9ddd54d670b407ee09560e4b3b2 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -3065,7 +3065,7 @@ public class KeyEvent extends InputEvent implements Parcelable { return result.toString(); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public KeyEvent createFromParcel(Parcel in) { diff --git a/core/java/android/view/KeyboardShortcutGroup.java b/core/java/android/view/KeyboardShortcutGroup.java index 52e9832eeb90f22f676e1e7f3fa7bd6c718368db..763ca2621e936d627f33f1cc67a5c5a85cee9f23 100644 --- a/core/java/android/view/KeyboardShortcutGroup.java +++ b/core/java/android/view/KeyboardShortcutGroup.java @@ -125,7 +125,7 @@ public final class KeyboardShortcutGroup implements Parcelable { dest.writeInt(mSystemGroup ? 1 : 0); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public KeyboardShortcutGroup createFromParcel(Parcel source) { return new KeyboardShortcutGroup(source); diff --git a/core/java/android/view/KeyboardShortcutInfo.java b/core/java/android/view/KeyboardShortcutInfo.java index c934a4e31f985eb4f69317e2c95461da9de87e43..2660e74dcb2058879dcd5965bc0a3883e928910d 100644 --- a/core/java/android/view/KeyboardShortcutInfo.java +++ b/core/java/android/view/KeyboardShortcutInfo.java @@ -156,7 +156,7 @@ public final class KeyboardShortcutInfo implements Parcelable { dest.writeInt(mModifiers); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public KeyboardShortcutInfo createFromParcel(Parcel source) { return new KeyboardShortcutInfo(source); diff --git a/core/java/android/view/MagnificationSpec.java b/core/java/android/view/MagnificationSpec.java index 956a211525ee147f23191f12e53ef0c6f3c051a4..aea337e3266e199fbc4cf4fa68070e5d66c5779a 100644 --- a/core/java/android/view/MagnificationSpec.java +++ b/core/java/android/view/MagnificationSpec.java @@ -146,7 +146,7 @@ public class MagnificationSpec implements Parcelable { offsetY = parcel.readFloat(); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public MagnificationSpec[] newArray(int size) { return new MagnificationSpec[size]; diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index b6c4cbbbe54de113b38e177bdb13fbd99e696893..86e94f4da170acebfe91fd28c48217c231e936c1 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -3660,7 +3660,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { return (getButtonState() & button) == button; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public MotionEvent createFromParcel(Parcel in) { in.readInt(); // skip token, we already know this is a MotionEvent diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java index c3d13bd46eb3ec0e43eaec7fb3f573ccc38bd1f0..dfe34c80bb8f6294be6feed7c4fe38832fd383f9 100644 --- a/core/java/android/view/PointerIcon.java +++ b/core/java/android/view/PointerIcon.java @@ -361,7 +361,7 @@ public final class PointerIcon implements Parcelable { return mType; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public PointerIcon createFromParcel(Parcel in) { int type = in.readInt(); diff --git a/core/java/android/view/RemoteAnimationAdapter.java b/core/java/android/view/RemoteAnimationAdapter.java index 6f5a85d210af67b1e5514d9d2dd72f7512694deb..bc2fe545a8acd9df6c6a256cfe051f49e92ae980 100644 --- a/core/java/android/view/RemoteAnimationAdapter.java +++ b/core/java/android/view/RemoteAnimationAdapter.java @@ -129,7 +129,7 @@ public class RemoteAnimationAdapter implements Parcelable { dest.writeBoolean(mChangeNeedsSnapshot); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RemoteAnimationAdapter createFromParcel(Parcel in) { return new RemoteAnimationAdapter(in); diff --git a/core/java/android/view/RemoteAnimationDefinition.java b/core/java/android/view/RemoteAnimationDefinition.java index beb1c1d2aa60aff978cd9427c8072ba863167741..884cae440bed092c1ca64fd64aab36fbf965d5ff 100644 --- a/core/java/android/view/RemoteAnimationDefinition.java +++ b/core/java/android/view/RemoteAnimationDefinition.java @@ -139,7 +139,7 @@ public class RemoteAnimationDefinition implements Parcelable { } } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RemoteAnimationDefinition createFromParcel(Parcel in) { return new RemoteAnimationDefinition(in); @@ -181,7 +181,7 @@ public class RemoteAnimationDefinition implements Parcelable { return 0; } - private static final Creator CREATOR + private static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java index 9b3efe13817012bc83cda3099b49444f6aa1545c..ae3e1d0a96911f4e0d48f86520cb95ed22d36ce0 100644 --- a/core/java/android/view/RemoteAnimationTarget.java +++ b/core/java/android/view/RemoteAnimationTarget.java @@ -255,7 +255,7 @@ public class RemoteAnimationTarget implements Parcelable { proto.end(token); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public RemoteAnimationTarget createFromParcel(Parcel in) { return new RemoteAnimationTarget(in); diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java index 23f2b8a0a3ca429fc22de484ab097dba183375a8..7ab9534941c7db3c1bff312dda6d871a26b9a2eb 100644 --- a/core/java/android/view/RenderNodeAnimator.java +++ b/core/java/android/view/RenderNodeAnimator.java @@ -336,6 +336,7 @@ public class RenderNodeAnimator extends Animator { return mUnscaledStartDelay; } + @UnsupportedAppUsage @Override public RenderNodeAnimator setDuration(long duration) { checkMutable(); diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index a15a20a58abb3967c0f84486623083314d14c88e..6ff699e54dd1b74eebd2befef1ce7ce3e3129ce2 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -84,7 +84,7 @@ public class Surface implements Parcelable { private static native int nativeSetSharedBufferModeEnabled(long nativeObject, boolean enabled); private static native int nativeSetAutoRefreshEnabled(long nativeObject, boolean enabled); - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Surface createFromParcel(Parcel source) { diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 351654eac91ad492b4618a77c583e1dfcba29ecc..d4df7be28971401682183d7a29391b54afbcdff5 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -117,6 +117,8 @@ public final class SurfaceControl implements Parcelable { float dtdy, float dsdy); private static native void nativeSetColorTransform(long transactionObj, long nativeObject, float[] matrix, float[] translation); + private static native void nativeSetColorSpaceAgnostic(long transactionObj, long nativeObject, + boolean agnostic); private static native void nativeSetGeometry(long transactionObj, long nativeObject, Rect sourceCrop, Rect dest, long orientation); private static native void nativeSetColor(long transactionObj, long nativeObject, float[] color); @@ -160,6 +162,7 @@ public final class SurfaceControl implements Parcelable { private static native boolean nativeSetActiveConfig(IBinder displayToken, int id); private static native boolean nativeSetAllowedDisplayConfigs(IBinder displayToken, int[] allowedConfigs); + private static native int[] nativeGetAllowedDisplayConfigs(IBinder displayToken); private static native int[] nativeGetDisplayColorModes(IBinder displayToken); private static native SurfaceControl.DisplayPrimaries nativeGetDisplayNativePrimaries( IBinder displayToken); @@ -849,7 +852,7 @@ public final class SurfaceControl implements Parcelable { proto.end(token); } - public static final Creator CREATOR + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SurfaceControl createFromParcel(Parcel in) { return new SurfaceControl(in); @@ -1236,6 +1239,19 @@ public final class SurfaceControl implements Parcelable { } } + /** + * Sets the Surface to be color space agnostic. If a surface is color space agnostic, + * the color can be interpreted in any color space. + * @param agnostic A boolean to indicate whether the surface is color space agnostic + * @hide + */ + public void setColorSpaceAgnostic(boolean agnostic) { + checkNotReleased(); + synchronized (SurfaceControl.class) { + sGlobalTransaction.setColorSpaceAgnostic(this, agnostic); + } + } + /** * Bounds the surface and its children to the bounds specified. Size of the surface will be * ignored and only the crop and buffer size will be used to determine the bounds of the @@ -1566,6 +1582,16 @@ public final class SurfaceControl implements Parcelable { return nativeSetAllowedDisplayConfigs(displayToken, allowedConfigs); } + /** + * @hide + */ + public static int[] getAllowedDisplayConfigs(IBinder displayToken) { + if (displayToken == null) { + throw new IllegalArgumentException("displayToken must not be null"); + } + return nativeGetAllowedDisplayConfigs(displayToken); + } + /** * @hide */ @@ -2246,6 +2272,18 @@ public final class SurfaceControl implements Parcelable { return this; } + /** + * Sets the Surface to be color space agnostic. If a surface is color space agnostic, + * the color can be interpreted in any color space. + * @param agnostic A boolean to indicate whether the surface is color space agnostic + * @hide + */ + public Transaction setColorSpaceAgnostic(SurfaceControl sc, boolean agnostic) { + sc.checkNotReleased(); + nativeSetColorSpaceAgnostic(mNativeObject, sc.mNativeObject, agnostic); + return this; + } + /** * @hide */ diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index fe9aa234ba54e2de485a1a53584ca84d73bb95c6..ee8d66313ea2aa90a4699621d0ae95905ded78de 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -210,7 +210,7 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb 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/TEST_MAPPING b/core/java/android/view/TEST_MAPPING new file mode 100644 index 0000000000000000000000000000000000000000..87d428ab551ed0e985ed65b32f37a665c034d151 --- /dev/null +++ b/core/java/android/view/TEST_MAPPING @@ -0,0 +1,10 @@ +{ + "presubmit": [ + { + "name": "CtsUiRenderingTestCases" + }, + { + "name": "CtsAccelerationTestCases" + } + ] +} \ No newline at end of file diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 9c36608f79a26757605616523755ca282d0053b9..18f27cd54dc498270f2237a711456835ebae1ea9 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -880,12 +880,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ 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 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private ArrayList mUnhandledKeyListeners; private WindowInsetsAnimationListener mWindowInsetsAnimationListener; + + /** + * This lives here since it's only valid for interactive views. + */ + private List mSystemGestureExclusionRects; + + /** + * Used to track {@link #mSystemGestureExclusionRects} + */ + public RenderNode.PositionUpdateListener mPositionUpdateListener; } @UnsupportedAppUsage @@ -5170,11 +5174,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // 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; @@ -5972,7 +5971,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @NonNull public List getAttributeResolutionStack(@AttrRes int attribute) { ArrayList stack = new ArrayList<>(); - if (!sDebugViewAttributes) { + if (!sDebugViewAttributes || mAttributeResolutionStacks == null) { return stack; } if (mSourceLayoutId != ID_NULL) { @@ -6004,7 +6003,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @NonNull public Map getAttributeSourceResourceMap() { HashMap map = new HashMap<>(); - if (!sDebugViewAttributes) { + if (!sDebugViewAttributes || mAttributeSourceResId == null) { return map; } for (int i = 0; i < mAttributeSourceResId.size(); i++) { @@ -10973,6 +10972,95 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + /** + * 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. This method should + * be called by {@link #onLayout(boolean, int, int, int, int)} or {@link #onDraw(Canvas)}. + * + *

    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 + * ScrollView or for simple press and release click targets such as + * Button. 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 SeekBar thumb.

    + * + *

    Do not modify the provided list after this method is called.

    + * + * @param rects A list of precision gesture regions that this view needs to function correctly + */ + public void setSystemGestureExclusionRects(@NonNull List 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. + * + *

    Do not modify the returned list.

    + * + * @return the list set by {@link #setSystemGestureExclusionRects(List)} + */ + @NonNull + public List getSystemGestureExclusionRects() { + final ListenerInfo info = mListenerInfo; + if (info != null) { + final List list = info.mSystemGestureExclusionRects; + if (list != null) { + return list; + } + } + return Collections.emptyList(); + } + /** * Compute the view's coordinate within the surface. * @@ -17991,21 +18079,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } - /** - * 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), @@ -18520,7 +18593,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @FlagMap(target = FADING_EDGE_VERTICAL, name = "vertical"), @FlagMap(target = FADING_EDGE_HORIZONTAL, name = "horizontal") }) - int getFadingEdge() { + public int getFadingEdge() { return mViewFlags & FADING_EDGE_MASK; } @@ -18531,7 +18604,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ @InspectableProperty - int getFadingEdgeLength() { + public int getFadingEdgeLength() { if (mScrollCache != null && (mViewFlags & FADING_EDGE_MASK) != FADING_EDGE_NONE) { return mScrollCache.fadingEdgeLength; } @@ -27920,7 +27993,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, out.writeInt(mAutofillViewId); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.ClassLoaderCreator() { @Override public BaseSavedState createFromParcel(Parcel in) { diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index aefb3789f09b15263913cfd7fc7fac714ef4d3f3..58e346336f05f64b693368f2041ab5a94724d78d 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -609,6 +609,8 @@ public final class ViewRootImpl implements ViewParent, private final InsetsController mInsetsController = new InsetsController(this); + private final GestureExclusionTracker mGestureExclusionTracker = new GestureExclusionTracker(); + static final class SystemUiVisibilityInfo { int seq; int globalVisibility; @@ -3483,7 +3485,7 @@ public final class ViewRootImpl implements ViewParent, usingAsyncReport = true; final Handler handler = mAttachInfo.mHandler; mAttachInfo.mThreadedRenderer.setFrameCompleteCallback((long frameNr) -> - handler.post(() -> { + handler.postAtFrontOfQueue(() -> { // TODO: Use the frame number pendingDrawFinished(); if (commitCallbacks != null) { @@ -3495,7 +3497,7 @@ public final class ViewRootImpl implements ViewParent, } else if (commitCallbacks != null && commitCallbacks.size() > 0) { final Handler handler = mAttachInfo.mHandler; mAttachInfo.mThreadedRenderer.setFrameCompleteCallback((long frameNr) -> - handler.post(() -> { + handler.postAtFrontOfQueue(() -> { for (int i = 0; i < commitCallbacks.size(); i++) { commitCallbacks.get(i).run(); } @@ -3992,6 +3994,20 @@ public final class ViewRootImpl implements ViewParent, return mAttachInfo.mAccessibilityFocusDrawable; } + void updateSystemGestureExclusionRectsForView(View view) { + mGestureExclusionTracker.updateRectsForView(view); + mHandler.sendEmptyMessage(MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED); + } + + void systemGestureExclusionChanged() { + final List 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. @@ -4448,35 +4464,36 @@ public final class ViewRootImpl implements ViewParent, } } - 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 @@ -4534,6 +4551,10 @@ public final class ViewRootImpl implements ViewParent, 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); } @@ -4765,6 +4786,9 @@ public final class ViewRootImpl implements ViewParent, 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 763ce4f45b01afd7a16f178c507be20a21b9a214..2896bd049e7cd6e2b328a2f5f9a2d67126d7b915 100644 --- a/core/java/android/view/ViewTreeObserver.java +++ b/core/java/android/view/ViewTreeObserver.java @@ -26,7 +26,9 @@ import android.os.Build; 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 @@ public final class ViewTreeObserver { private CopyOnWriteArray mOnScrollChangedListeners; private CopyOnWriteArray mOnPreDrawListeners; private CopyOnWriteArray mOnWindowShownListeners; + private CopyOnWriteArray>> mGestureExclusionListeners; // These listeners cannot be mutated during dispatch private boolean mInDispatchOnDraw; @@ -450,6 +453,14 @@ public final class ViewTreeObserver { } } + if (observer.mGestureExclusionListeners != null) { + if (mGestureExclusionListeners != null) { + mGestureExclusionListeners.addAll(observer.mGestureExclusionListeners); + } else { + mGestureExclusionListeners = observer.mGestureExclusionListeners; + } + } + observer.kill(); } @@ -913,6 +924,35 @@ public final class ViewTreeObserver { mOnEnterAnimationCompleteListeners.remove(listener); } + /** + * Add a listener to be notified when the tree's transformed 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> 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> 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 @@ public final class ViewTreeObserver { } } + void dispatchOnSystemGestureExclusionRectsChanged(@NonNull List rects) { + final CopyOnWriteArray>> listeners = mGestureExclusionListeners; + if (listeners != null && listeners.size() > 0) { + CopyOnWriteArray.Access>> 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/WindowAnimationFrameStats.java b/core/java/android/view/WindowAnimationFrameStats.java index 0233c862b9840b8cdecb58e2b5fdecd70c990ced..399dfba64461772e642d0644cf976c7d94399727 100644 --- a/core/java/android/view/WindowAnimationFrameStats.java +++ b/core/java/android/view/WindowAnimationFrameStats.java @@ -81,7 +81,7 @@ public final class WindowAnimationFrameStats extends FrameStats implements Parce return builder.toString(); } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public WindowAnimationFrameStats createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/WindowContentFrameStats.java b/core/java/android/view/WindowContentFrameStats.java index 96878e90925c1e650afae32ee5838f63e50e4123..9fa5a005055d4fb5424e0d187f3f2a9523eb3e69 100644 --- a/core/java/android/view/WindowContentFrameStats.java +++ b/core/java/android/view/WindowContentFrameStats.java @@ -139,7 +139,7 @@ public final class WindowContentFrameStats extends FrameStats implements Parcela return builder.toString(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public WindowContentFrameStats createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/WindowId.java b/core/java/android/view/WindowId.java index 12e58f14e4f90376f16a2133f4061bd9b0488014..26d340542e7adfc577ceed887bb3d5c86221e735 100644 --- a/core/java/android/view/WindowId.java +++ b/core/java/android/view/WindowId.java @@ -196,7 +196,7 @@ public class WindowId implements Parcelable { out.writeStrongBinder(mToken.asBinder()); } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public WindowId createFromParcel(Parcel in) { IBinder target = in.readStrongBinder(); diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java index 82e9a5c71eaedd2c94136bd4ced54364a390604c..74fc15acf3eabd4eb890a65227a9b440e9cea992 100644 --- a/core/java/android/view/WindowInfo.java +++ b/core/java/android/view/WindowInfo.java @@ -176,7 +176,7 @@ public class WindowInfo implements Parcelable { hasFlagWatchOutsideTouch = false; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public WindowInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java index 135a8912fc60c62002377a7c82da7c266a6d3d35..f3bbca3500c7a73aea84c5f3f8bfe87721f8b08c 100644 --- a/core/java/android/view/WindowInsets.java +++ b/core/java/android/view/WindowInsets.java @@ -22,6 +22,7 @@ import static android.view.WindowInsets.Type.IME; import static android.view.WindowInsets.Type.LAST; import static android.view.WindowInsets.Type.SIDE_BARS; import static android.view.WindowInsets.Type.SIZE; +import static android.view.WindowInsets.Type.SYSTEM_GESTURES; import static android.view.WindowInsets.Type.TOP_BAR; import static android.view.WindowInsets.Type.all; import static android.view.WindowInsets.Type.compatSystemInsets; @@ -35,7 +36,6 @@ import android.annotation.UnsupportedAppUsage; import android.graphics.Insets; import android.graphics.Rect; import android.util.SparseArray; -import android.view.InsetsState.InternalInsetType; import android.view.WindowInsets.Type.InsetType; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethod; @@ -229,6 +229,7 @@ public final class WindowInsets { static void assignCompatInsets(Insets[] typeInsetMap, Rect insets) { typeInsetMap[indexOf(TOP_BAR)] = Insets.of(0, insets.top, 0, 0); typeInsetMap[indexOf(SIDE_BARS)] = Insets.of(insets.left, 0, insets.right, insets.bottom); + typeInsetMap[indexOf(SYSTEM_GESTURES)] = Insets.of(insets); } private static boolean[] createCompatVisibilityMap(@Nullable Insets[] typeInsetMap) { @@ -629,6 +630,28 @@ public final class WindowInsets { return !getStableInsets().equals(Insets.NONE); } + /** + * Returns the system gesture insets. + * + *

    The system gesture insets represent the area of a window where system gestures have + * priority and may consume some or all touch input, e.g. due to the a system bar + * occupying it, or it being reserved for touch-only gestures. + * + *

    Simple taps are guaranteed to reach the window even within the system gesture insets, + * as long as they are outside the {@link #getSystemWindowInsets() system window insets}. + * + *

    When {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} is requested, an inset will be returned + * even when the system gestures are inactive due to + * {@link View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN} or + * {@link View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}. + * + *

    This inset does not affect the result of {@link #isConsumed()} and cannot be consumed. + */ + @NonNull + public Insets getSystemGestureInsets() { + return getInsets(mTypeInsetsMap, SYSTEM_GESTURES); + } + /** * Returns a copy of this WindowInsets with the stable insets fully consumed. * @@ -852,6 +875,22 @@ public final class WindowInsets { return this; } + /** + * Sets system gesture insets in pixels. + * + *

    The system gesture insets represent the area of a window where system gestures have + * priority and may consume some or all touch input, e.g. due to the a system bar + * occupying it, or it being reserved for touch-only gestures. + * + * @see #getSystemGestureInsets() + * @return itself + */ + @NonNull + public Builder setSystemGestureInsets(@NonNull Insets insets) { + WindowInsets.setInsets(mTypeInsetsMap, SYSTEM_GESTURES, insets); + return this; + } + /** * Sets the insets of a specific window type in pixels. * @@ -1005,8 +1044,10 @@ public final class WindowInsets { static final int IME = 0x2; static final int SIDE_BARS = 0x4; - static final int LAST = 0x8; - static final int SIZE = 4; + static final int SYSTEM_GESTURES = 0x8; + + static final int LAST = 0x10; + static final int SIZE = 5; static final int WINDOW_DECOR = LAST; static int indexOf(@InsetType int type) { @@ -1017,8 +1058,10 @@ public final class WindowInsets { return 1; case SIDE_BARS: return 2; - case WINDOW_DECOR: + case SYSTEM_GESTURES: return 3; + case WINDOW_DECOR: + return 4; default: throw new IllegalArgumentException("type needs to be >= FIRST and <= LAST," + " type=" + type); @@ -1030,7 +1073,7 @@ public final class WindowInsets { /** @hide */ @Retention(RetentionPolicy.SOURCE) - @IntDef(flag = true, value = { TOP_BAR, IME, SIDE_BARS, WINDOW_DECOR }) + @IntDef(flag = true, value = { TOP_BAR, IME, SIDE_BARS, WINDOW_DECOR, SYSTEM_GESTURES }) public @interface InsetType { } @@ -1063,6 +1106,27 @@ public final class WindowInsets { return WINDOW_DECOR; } + /** + * Returns an inset type representing the system gesture insets. + * + *

    The system gesture insets represent the area of a window where system gestures have + * priority and may consume some or all touch input, e.g. due to the a system bar + * occupying it, or it being reserved for touch-only gestures. + * + *

    Simple taps are guaranteed to reach the window even within the system gesture insets, + * as long as they are outside the {@link #getSystemWindowInsets() system window insets}. + * + *

    When {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} is requested, an inset will be returned + * even when the system gestures are inactive due to + * {@link View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN} or + * {@link View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}. + * + * @see #getSystemGestureInsets() + */ + public static @InsetType int systemGestures() { + return SYSTEM_GESTURES; + } + /** * @return All system bars. Includes {@link #topBar()} as well as {@link #sideBars()}, but * not {@link #ime()}. @@ -1082,6 +1146,9 @@ public final class WindowInsets { /** * @return All inset types combined. + * + * TODO: Figure out if this makes sense at all, mixing e.g {@link #systemGestures()} and + * {@link #ime()} does not seem very useful. */ public static @InsetType int all() { return 0xFFFFFFFF; diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 6326c591aa040b13b1a98fd80924f5d416e7bd29..bd38327d2c93e2cbe9295a8b79dd167a95b0f923 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -481,12 +481,28 @@ public interface WindowManager extends ViewManager { * * @param displayId The id of the display. * @param shouldShow Indicates that the display should show system decors. + * @see #shouldShowSystemDecors(int) * @hide */ @TestApi default void setShouldShowSystemDecors(int displayId, boolean shouldShow) { } + /** + * Checks if the display supports showing system decors. + *

    + * System decors include status bar, navigation bar, launcher. + *

    + * + * @param displayId The id of the display. + * @see #setShouldShowSystemDecors(int, boolean) + * @hide + */ + @TestApi + default boolean shouldShowSystemDecors(int displayId) { + return false; + } + /** * Sets that the display should show IME. * @@ -1776,6 +1792,13 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION = 0x00800000; + /** + * Flag to indicate that the window is color space agnostic, and the color can be + * interpreted to any color space. + * @hide + */ + public static final int PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC = 0x01000000; + /** * An internal annotation for flags that can be specified to {@link #softInputMode}. * @@ -1876,7 +1899,11 @@ public interface WindowManager extends ViewManager { @ViewDebug.FlagToString( mask = PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION, equals = PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION, - name = "STATUS_FORCE_SHOW_NAVIGATION") + name = "STATUS_FORCE_SHOW_NAVIGATION"), + @ViewDebug.FlagToString( + mask = PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC, + equals = PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC, + name = "COLOR_SPACE_AGNOSTIC") }) @TestApi public int privateFlags; @@ -2724,7 +2751,7 @@ public interface WindowManager extends ViewManager { out.writeLong(hideTimeoutMilliseconds); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public LayoutParams createFromParcel(Parcel in) { return new LayoutParams(in); diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 6d3edbc90bfd60e0c20641572ac76de9653479cc..db412e6306282c887f1cc0c01a906ace600c7927 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -178,6 +178,15 @@ public final class WindowManagerImpl implements WindowManager { } } + @Override + public boolean shouldShowSystemDecors(int displayId) { + try { + return WindowManagerGlobal.getWindowManagerService().shouldShowSystemDecors(displayId); + } catch (RemoteException e) { + } + return false; + } + @Override public void setShouldShowIme(int displayId, boolean shouldShow) { try { diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java index 87e18b71069cf1fa311c5163176393b1b545e23a..5d59e4205579caf2eaeff104cdda006748093201 100644 --- a/core/java/android/view/accessibility/AccessibilityCache.java +++ b/core/java/android/view/accessibility/AccessibilityCache.java @@ -424,20 +424,28 @@ public class AccessibilityCache { * * @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 nodes, + private boolean clearSubTreeRecursiveLocked(LongSparseArray 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/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index dccf9d40a605b1ba0a7473c94b6339fd0423f948..2ac44d2fac2260a4ecc275f3776a58dd1148d590 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -1430,7 +1430,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par /** * @see Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public AccessibilityEvent createFromParcel(Parcel parcel) { AccessibilityEvent event = AccessibilityEvent.obtain(); diff --git a/core/java/android/view/accessibility/AccessibilityNodeIdManager.java b/core/java/android/view/accessibility/AccessibilityNodeIdManager.java index 1ac704774e7f74ac78aa88bb7c6bd4effc98d948..0f5e950582dd7e04b22c1435aadccb0cb26979e2 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeIdManager.java +++ b/core/java/android/view/accessibility/AccessibilityNodeIdManager.java @@ -45,7 +45,9 @@ public final class AccessibilityNodeIdManager { * @param id The accessibilityViewId of the view. */ public void registerViewWithId(View view, int id) { - mIdsToViews.append(id, view); + synchronized (mIdsToViews) { + mIdsToViews.append(id, view); + } } /** @@ -53,7 +55,9 @@ public final class AccessibilityNodeIdManager { * @param id The id returned from registerView when the view as first associated. */ public void unregisterViewWithId(int id) { - mIdsToViews.remove(id); + synchronized (mIdsToViews) { + mIdsToViews.remove(id); + } } /** @@ -62,7 +66,10 @@ public final class AccessibilityNodeIdManager { * @return The view. */ public View findView(int id) { - final View view = mIdsToViews.get(id); + View view = null; + synchronized (mIdsToViews) { + view = mIdsToViews.get(id); + } return view != null && view.includeForAccessibility() ? view : null; } } diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 793c31523023a3f1c4d1abc7ad7f950bb17b3034..a8a787edde04b2a47d934fbc72b5dec65e1d8fcb 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -5144,7 +5144,7 @@ public class AccessibilityNodeInfo implements Parcelable { /** * @see android.os.Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TouchDelegateInfo createFromParcel(Parcel parcel) { @@ -5173,7 +5173,7 @@ public class AccessibilityNodeInfo implements Parcelable { /** * @see android.os.Parcelable.Creator */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AccessibilityNodeInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java index c1c9174c0f9f8cdad9959c99f7b5c28981ca7ac7..4383f8a02d43c754cc6413f8ae28f44149e05e02 100644 --- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java +++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java @@ -770,7 +770,7 @@ public final class AccessibilityWindowInfo implements Parcelable { return changes; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { @Override public AccessibilityWindowInfo createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java index e0950948afb8b13524e76e3f633f6e53e641605a..3b60aee8f6043fa6ebc2f27d8785be621af90176 100644 --- a/core/java/android/view/animation/Animation.java +++ b/core/java/android/view/animation/Animation.java @@ -207,6 +207,7 @@ public abstract class Animation implements Cloneable { private float mScaleFactor = 1f; private boolean mShowWallpaper; + private boolean mHasRoundedCorners; private boolean mMore = true; private boolean mOneMoreTime = true; @@ -263,6 +264,8 @@ public abstract class Animation implements Cloneable { 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); @@ -677,6 +680,19 @@ public abstract class Animation implements Cloneable { mShowWallpaper = showWallpaper; } + /** + * 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. * @@ -803,6 +819,16 @@ public abstract class Animation implements Cloneable { return mShowWallpaper; } + /** + * @return if a window animation should have rounded corners or not. + * + * @attr ref android.R.styleable#Animation_hasRoundedCorners + * @hide + */ + public boolean hasRoundedCorners() { + return mHasRoundedCorners; + } + /** *

    Indicates whether or not this animation will affect the transformation * matrix. For instance, a fade animation will not affect the matrix whereas diff --git a/core/java/android/view/autofill/AutofillId.java b/core/java/android/view/autofill/AutofillId.java index 5608bb37270103ea219eaa2c03136b9d231f45ad..8fa29f3e633170a4d5d9d3b30cb2cbcd168e7d9b 100644 --- a/core/java/android/view/autofill/AutofillId.java +++ b/core/java/android/view/autofill/AutofillId.java @@ -206,7 +206,7 @@ public final class AutofillId implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AutofillId createFromParcel(Parcel source) { diff --git a/core/java/android/view/autofill/AutofillValue.java b/core/java/android/view/autofill/AutofillValue.java index 186a97dd2592ab5f80b31cf63b3323252019079a..64c877759338748f8c24f8f499e0badfd1276a95 100644 --- a/core/java/android/view/autofill/AutofillValue.java +++ b/core/java/android/view/autofill/AutofillValue.java @@ -241,7 +241,7 @@ public final class AutofillValue implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public AutofillValue createFromParcel(Parcel source) { diff --git a/core/java/android/view/autofill/ParcelableMap.java b/core/java/android/view/autofill/ParcelableMap.java index f97b1a0d5f44b9f7290747a1690d63b5e8db5f67..d8459aa22fa1e0102615781318ed512553fd93bb 100644 --- a/core/java/android/view/autofill/ParcelableMap.java +++ b/core/java/android/view/autofill/ParcelableMap.java @@ -47,7 +47,7 @@ class ParcelableMap extends HashMap implements Parcel } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ParcelableMap createFromParcel(Parcel source) { diff --git a/core/java/android/view/contentcapture/ContentCaptureContext.java b/core/java/android/view/contentcapture/ContentCaptureContext.java index 8bb4d210ad4424c8907027a3c4255a1199977849..b9dc0dd99a1d5dc5e589664a8d2d7b6be641d4b3 100644 --- a/core/java/android/view/contentcapture/ContentCaptureContext.java +++ b/core/java/android/view/contentcapture/ContentCaptureContext.java @@ -24,7 +24,6 @@ import android.app.TaskInfo; import android.content.ComponentName; import android.content.Context; import android.content.LocusId; -import android.net.Uri; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -212,10 +211,11 @@ public final class ContentCaptureContext implements Parcelable { } /** - * Helper that creates a {@link ContentCaptureContext} associated with the given {@code uri}. + * Helper that creates a {@link ContentCaptureContext} associated with the given {@code id}. */ - public static ContentCaptureContext forLocusId(@NonNull Uri uri) { - return new Builder(new LocusId(uri)).build(); + @NonNull + public static ContentCaptureContext forLocusId(@NonNull String id) { + return new Builder(new LocusId(id)).build(); } /** @@ -269,6 +269,7 @@ public final class ContentCaptureContext implements Parcelable { * * @return the built {@code ContentCaptureContext} */ + @NonNull public ContentCaptureContext build() { throwIfDestroyed(); mDestroyed = true; @@ -351,10 +352,11 @@ public final class ContentCaptureContext implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override + @NonNull public ContentCaptureContext createFromParcel(Parcel parcel) { final boolean hasClientContext = parcel.readInt() == 1; @@ -383,6 +385,7 @@ public final class ContentCaptureContext implements Parcelable { } @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 2585b746583d90aa3ce56cbabf8872d71b03563a..67d3629eeb4980f9763331d704c6ce5a42c5a4c2 100644 --- a/core/java/android/view/contentcapture/ContentCaptureEvent.java +++ b/core/java/android/view/contentcapture/ContentCaptureEvent.java @@ -383,10 +383,11 @@ public final class ContentCaptureEvent implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override + @NonNull public ContentCaptureEvent createFromParcel(Parcel parcel) { final String sessionId = parcel.readString(); final int type = parcel.readInt(); @@ -415,6 +416,7 @@ public final class ContentCaptureEvent implements Parcelable { } @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 ab8f346bdd2e668a82d97bfe846c5567e9d24b00..6bf1eba30f554a23944903d90d4b0f64437a4e69 100644 --- a/core/java/android/view/contentcapture/ContentCaptureSession.java +++ b/core/java/android/view/contentcapture/ContentCaptureSession.java @@ -208,6 +208,7 @@ public abstract class ContentCaptureSession implements AutoCloseable { /** * 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 d7f9fcc4f7af5bef7cbbea9c3752e01eaf7625a0..e7c350a12b928110912c855f6b42a3a91bec3cbf 100644 --- a/core/java/android/view/contentcapture/ContentCaptureSessionId.java +++ b/core/java/android/view/contentcapture/ContentCaptureSessionId.java @@ -96,15 +96,17 @@ public final class ContentCaptureSessionId implements Parcelable { parcel.writeString(mValue); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @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 7d66af92e9f678a5bc6de8a8336b027e4dbf3937..3e1e4abaa84c970dbed7fbf20e5820aef882ca1b 100644 --- a/core/java/android/view/contentcapture/UserDataRemovalRequest.java +++ b/core/java/android/view/contentcapture/UserDataRemovalRequest.java @@ -15,6 +15,7 @@ */ package android.view.contentcapture; +import android.annotation.IntDef; import android.annotation.NonNull; import android.app.ActivityThread; import android.content.LocusId; @@ -24,6 +25,8 @@ import android.util.IntArray; import com.android.internal.util.Preconditions; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; @@ -33,6 +36,19 @@ import java.util.List; */ public final class UserDataRemovalRequest implements Parcelable { + /** + * When set, service should use the {@link LocusId#getId()} as prefix for the data to be + * removed. + */ + public static final int FLAG_IS_PREFIX = 0x1; + + /** @hide */ + @IntDef(prefix = { "FLAG" }, flag = true, value = { + FLAG_IS_PREFIX + }) + @Retention(RetentionPolicy.SOURCE) + @interface Flags {} + private final String mPackageName; private final boolean mForEverything; @@ -46,7 +62,7 @@ public final class UserDataRemovalRequest implements Parcelable { mLocusIdRequests = new ArrayList<>(size); for (int i = 0; i < size; i++) { mLocusIdRequests.add(new LocusIdRequest(builder.mLocusIds.get(i), - builder.mRecursive.get(i) == 1)); + builder.mFlags.get(i))); } } } @@ -59,7 +75,7 @@ public final class UserDataRemovalRequest implements Parcelable { mLocusIdRequests = new ArrayList<>(size); for (int i = 0; i < size; i++) { mLocusIdRequests.add(new LocusIdRequest((LocusId) parcel.readValue(null), - parcel.readBoolean())); + parcel.readInt())); } } } @@ -94,7 +110,7 @@ public final class UserDataRemovalRequest implements Parcelable { private boolean mForEverything; private ArrayList mLocusIds; - private IntArray mRecursive; + private IntArray mFlags; private boolean mDestroyed; @@ -116,23 +132,24 @@ public final class UserDataRemovalRequest implements Parcelable { * Request service to remove data associated with a given {@link LocusId}. * * @param locusId the {@link LocusId} being requested to be removed. - * @param recursive whether it should remove the data associated with just the - * {@code LocusId} or its tree of descendants. + * @param flags either {@link UserDataRemovalRequest#FLAG_IS_PREFIX} or {@code 0} * * @return this builder */ - public Builder addLocusId(@NonNull LocusId locusId, boolean recursive) { + @NonNull + public Builder addLocusId(@NonNull LocusId locusId, @Flags int flags) { throwIfDestroyed(); Preconditions.checkState(!mForEverything, "Already is for everything"); Preconditions.checkNotNull(locusId); + // felipeal: check flags if (mLocusIds == null) { mLocusIds = new ArrayList<>(); - mRecursive = new IntArray(); + mFlags = new IntArray(); } mLocusIds.add(locusId); - mRecursive.add(recursive ? 1 : 0); + mFlags.add(flags); return this; } @@ -143,7 +160,8 @@ public final class UserDataRemovalRequest implements Parcelable { public UserDataRemovalRequest build() { throwIfDestroyed(); - Preconditions.checkState(mForEverything || mLocusIds != null); + Preconditions.checkState(mForEverything || mLocusIds != null, + "must call either #forEverything() or add one #addLocusId()"); mDestroyed = true; return new UserDataRemovalRequest(this); @@ -169,20 +187,22 @@ public final class UserDataRemovalRequest implements Parcelable { for (int i = 0; i < size; i++) { final LocusIdRequest request = mLocusIdRequests.get(i); parcel.writeValue(request.getLocusId()); - parcel.writeBoolean(request.isRecursive()); + parcel.writeInt(request.getFlags()); } } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override + @NonNull public UserDataRemovalRequest createFromParcel(Parcel parcel) { return new UserDataRemovalRequest(parcel); } @Override + @NonNull public UserDataRemovalRequest[] newArray(int size) { return new UserDataRemovalRequest[size]; } @@ -193,11 +213,11 @@ public final class UserDataRemovalRequest implements Parcelable { */ public final class LocusIdRequest { private final @NonNull LocusId mLocusId; - private final boolean mRecursive; + private final @Flags int mFlags; - private LocusIdRequest(@NonNull LocusId locusId, boolean recursive) { + private LocusIdRequest(@NonNull LocusId locusId, @Flags int flags) { this.mLocusId = locusId; - this.mRecursive = recursive; + this.mFlags = flags; } /** @@ -209,12 +229,13 @@ public final class UserDataRemovalRequest implements Parcelable { } /** - * Checks whether the request is to remove just the data associated with the {@link LocusId} - * per se, or also its descendants. + * Gets the flags associates with request. + * + * @return either {@link UserDataRemovalRequest#FLAG_IS_PREFIX} or {@code 0}. */ @NonNull - public boolean isRecursive() { - return mRecursive; + public @Flags int getFlags() { + return mFlags; } } } diff --git a/core/java/android/view/inputmethod/CompletionInfo.java b/core/java/android/view/inputmethod/CompletionInfo.java index 70b8059a475b7977c8bd4720873a14b02a3e371f..eee8a62fe11c2ee65f6250f3dce4eb04fd9482d5 100644 --- a/core/java/android/view/inputmethod/CompletionInfo.java +++ b/core/java/android/view/inputmethod/CompletionInfo.java @@ -153,7 +153,7 @@ public final class CompletionInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public CompletionInfo createFromParcel(Parcel source) { return new CompletionInfo(source); diff --git a/core/java/android/view/inputmethod/CorrectionInfo.java b/core/java/android/view/inputmethod/CorrectionInfo.java index a43dfe89cee14cc379e9a8925aa5215c9ac42474..6db57844d6cd01ce3fc2a583f0da2548302e8c62 100644 --- a/core/java/android/view/inputmethod/CorrectionInfo.java +++ b/core/java/android/view/inputmethod/CorrectionInfo.java @@ -88,7 +88,7 @@ public final class CorrectionInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public CorrectionInfo createFromParcel(Parcel source) { return new CorrectionInfo(source); diff --git a/core/java/android/view/inputmethod/CursorAnchorInfo.java b/core/java/android/view/inputmethod/CursorAnchorInfo.java index 24739bf8f3b3ed56d294b4a9109ecb78d3921862..ee5b3ecc768250c192b7cc70dbf0e346c8acfbf7 100644 --- a/core/java/android/view/inputmethod/CursorAnchorInfo.java +++ b/core/java/android/view/inputmethod/CursorAnchorInfo.java @@ -559,7 +559,7 @@ public final class CursorAnchorInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CursorAnchorInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java index 8e7b0db21946266130dc79902c2dbb247c236e80..e1a9898b6292c0b094cd6a56eb9c191c661537b9 100644 --- a/core/java/android/view/inputmethod/EditorInfo.java +++ b/core/java/android/view/inputmethod/EditorInfo.java @@ -585,7 +585,7 @@ public class EditorInfo implements InputType, Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public EditorInfo createFromParcel(Parcel source) { EditorInfo res = new EditorInfo(); diff --git a/core/java/android/view/inputmethod/ExtractedText.java b/core/java/android/view/inputmethod/ExtractedText.java index 1eb300eafb661197ed45ee8335a93e72a7d30ebe..159d2aae5671c63903f64b631e5541693496006f 100644 --- a/core/java/android/view/inputmethod/ExtractedText.java +++ b/core/java/android/view/inputmethod/ExtractedText.java @@ -115,7 +115,7 @@ public class ExtractedText implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ExtractedText createFromParcel(Parcel source) { ExtractedText res = new ExtractedText(); diff --git a/core/java/android/view/inputmethod/ExtractedTextRequest.java b/core/java/android/view/inputmethod/ExtractedTextRequest.java index bf0bef3124763cebbd02ccb6a16084da54d0b4a6..e442185fa19465f3dff39c1c5d913bd69f99a665 100644 --- a/core/java/android/view/inputmethod/ExtractedTextRequest.java +++ b/core/java/android/view/inputmethod/ExtractedTextRequest.java @@ -63,7 +63,7 @@ public class ExtractedTextRequest implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public ExtractedTextRequest createFromParcel(Parcel source) { ExtractedTextRequest res = new ExtractedTextRequest(); diff --git a/core/java/android/view/inputmethod/InputBinding.java b/core/java/android/view/inputmethod/InputBinding.java index bcd459e6555d6f950f54f5cc0b88d686bc89a672..2bfeb5abb395d679c16d40c0cdc761fb28093e81 100644 --- a/core/java/android/view/inputmethod/InputBinding.java +++ b/core/java/android/view/inputmethod/InputBinding.java @@ -135,7 +135,7 @@ public final class InputBinding implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public InputBinding createFromParcel(Parcel source) { return new InputBinding(source); } diff --git a/core/java/android/view/inputmethod/InputContentInfo.java b/core/java/android/view/inputmethod/InputContentInfo.java index 0d0fea6edd1fa86aec7eea58aced80c5f01c8db8..9aa410f8d17e9e5f7257493cc52d14f1c62be9a3 100644 --- a/core/java/android/view/inputmethod/InputContentInfo.java +++ b/core/java/android/view/inputmethod/InputContentInfo.java @@ -265,7 +265,7 @@ public final class InputContentInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public InputContentInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java index 04028aeacd53d8d8469f6bea6d18d839bc67c9b0..fe07feef3bfa65d112b6a8f08171b85213dfbff8 100644 --- a/core/java/android/view/inputmethod/InputMethodInfo.java +++ b/core/java/android/view/inputmethod/InputMethodInfo.java @@ -548,7 +548,7 @@ public final class InputMethodInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public InputMethodInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java index 14c879e78551855e304b921d2b134300b3896691..59898479c519a5453fe0eacab617a8f4253963d3 100644 --- a/core/java/android/view/inputmethod/InputMethodSubtype.java +++ b/core/java/android/view/inputmethod/InputMethodSubtype.java @@ -636,7 +636,7 @@ public final class InputMethodSubtype implements Parcelable { dest.writeInt(mIsAsciiCapable ? 1 : 0); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public InputMethodSubtype createFromParcel(Parcel source) { diff --git a/core/java/android/view/inputmethod/SparseRectFArray.java b/core/java/android/view/inputmethod/SparseRectFArray.java index 484fe46ffbb184b45f73114bcb2baee2b451769e..596ea86853e3311ae1275289a5098d90c5cd5aed 100644 --- a/core/java/android/view/inputmethod/SparseRectFArray.java +++ b/core/java/android/view/inputmethod/SparseRectFArray.java @@ -292,7 +292,7 @@ public final class SparseRectFArray implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SparseRectFArray createFromParcel(Parcel source) { diff --git a/core/java/android/view/inspector/InspectableProperty.java b/core/java/android/view/inspector/InspectableProperty.java index f85952108f0783d5583900588ed7df4d9d30d0ff..97ede862bfaa7a4ea86ecf4fabc231680c09efcd 100644 --- a/core/java/android/view/inspector/InspectableProperty.java +++ b/core/java/android/view/inspector/InspectableProperty.java @@ -16,6 +16,7 @@ package android.view.inspector; +import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.SOURCE; @@ -39,7 +40,7 @@ import java.lang.annotation.Target; * @see InspectionCompanion#readProperties(Object, PropertyReader) * @hide */ -@Target({METHOD}) +@Target({METHOD, FIELD}) @Retention(SOURCE) @TestApi public @interface InspectableProperty { @@ -232,6 +233,17 @@ public @interface InspectableProperty { * @hide */ @TestApi - GRAVITY + GRAVITY, + + /** + * Value is a resource ID + * + * This type is inferred from the presence of a resource ID annotation such as + * {@link android.annotation.AnyRes}. + * + * @hide + */ + @TestApi + RESOURCE_ID } } diff --git a/core/java/android/view/inspector/PropertyMapper.java b/core/java/android/view/inspector/PropertyMapper.java index 00b18d172eed0ad624ddd99fad94b1a53e51999c..54d99df843a1a344d3d0347d51d899baa118f7b5 100644 --- a/core/java/android/view/inspector/PropertyMapper.java +++ b/core/java/android/view/inspector/PropertyMapper.java @@ -156,6 +156,16 @@ public interface PropertyMapper { @AttrRes int attributeId, @NonNull IntEnumMapping mapping); + /** + * Map a string name to an integer ID for an attribute that contains resource IDs. + * + * @param name The name of the property + * @param attributeId If the property is from an XML attribute, the resource ID of the property + * @return An integer ID for the property + * @throws PropertyConflictException If the property name is already mapped as another type. + */ + int mapResourceId(@NonNull String name, @AttrRes int attributeId); + /** * Map a string name to an integer ID for a flag set packed into an int property. * diff --git a/core/java/android/view/inspector/PropertyReader.java b/core/java/android/view/inspector/PropertyReader.java index a8b7ecc3f57edb69702a3389e4f49e639a468db8..b5020ce6495f4d02172cf1f1893b92249295aeeb 100644 --- a/core/java/android/view/inspector/PropertyReader.java +++ b/core/java/android/view/inspector/PropertyReader.java @@ -16,6 +16,7 @@ package android.view.inspector; +import android.annotation.AnyRes; import android.annotation.ColorInt; import android.annotation.ColorLong; import android.annotation.NonNull; @@ -150,7 +151,7 @@ public interface PropertyReader { void readColor(int id, @Nullable Color value); /** - * Read {@link android.view.Gravity} packed into an primitive {int}. + * Read {@link android.view.Gravity} packed into an primitive {@code int}. * * @param id Identifier of the property from a {@link PropertyMapper} * @param value Value of the property @@ -159,7 +160,7 @@ public interface PropertyReader { void readGravity(int id, int value); /** - * Read an enumeration packed into a primitive {int}. + * Read an enumeration packed into a primitive {@code int}. * * @param id Identifier of the property from a {@link PropertyMapper} * @param value Value of the property @@ -168,7 +169,7 @@ public interface PropertyReader { void readIntEnum(int id, int value); /** - * Read a flag packed into a primitive {int}. + * Read a flag packed into a primitive {@code int}. * * @param id Identifier of the property from a {@link PropertyMapper} * @param value Value of the property @@ -176,6 +177,15 @@ public interface PropertyReader { */ void readIntFlag(int id, int value); + /** + * Read an integer that contains a resource ID. + * + * @param id Identifier of the property from a {@link PropertyMapper} + * @param value Value of the property + * @throws PropertyTypeMismatchException If the property ID is not mapped as a resource ID. + */ + void readResourceId(int id, @AnyRes int value); + /** * Thrown if a client calls a typed read method for a property of a different type. */ diff --git a/core/java/android/view/textclassifier/ConversationAction.java b/core/java/android/view/textclassifier/ConversationAction.java index ae6a645c90a1d548db517654f4290293a1ca76b1..2b952a3fad34330edfe3fc661b949822daf8583e 100644 --- a/core/java/android/view/textclassifier/ConversationAction.java +++ b/core/java/android/view/textclassifier/ConversationAction.java @@ -95,7 +95,7 @@ public final class ConversationAction implements Parcelable { /** @hide **/ public static final String TYPE_ADD_CONTACT = "add_contact"; - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ConversationAction createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/ConversationActions.java b/core/java/android/view/textclassifier/ConversationActions.java index cf3144558b76436e9153a302e25983bf88852a2f..9f9e66699d84217f45522f3e8673c4833560f314 100644 --- a/core/java/android/view/textclassifier/ConversationActions.java +++ b/core/java/android/view/textclassifier/ConversationActions.java @@ -44,7 +44,7 @@ import java.util.List; */ public final class ConversationActions implements Parcelable { - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public ConversationActions createFromParcel(Parcel in) { @@ -175,7 +175,7 @@ public final class ConversationActions implements Parcelable { return 0; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Message createFromParcel(Parcel in) { @@ -367,7 +367,7 @@ public final class ConversationActions implements Parcelable { return 0; } - public static final Creator CREATOR = + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Request createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/EntityConfidence.java b/core/java/android/view/textclassifier/EntityConfidence.java index 69a59a5b4b3686ca0e4ffdf901fa6b20f22c6bab..3c51c38952f0ca4ad8fde6a9febc83ca0e52d468 100644 --- a/core/java/android/view/textclassifier/EntityConfidence.java +++ b/core/java/android/view/textclassifier/EntityConfidence.java @@ -108,7 +108,7 @@ final class EntityConfidence implements Parcelable { } } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public EntityConfidence createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/SelectionEvent.java b/core/java/android/view/textclassifier/SelectionEvent.java index b07359697063a1361444db2ed39bcc431cb8981d..105cbcc06496c20b09906c2a84de3a0b4378b1fb 100644 --- a/core/java/android/view/textclassifier/SelectionEvent.java +++ b/core/java/android/view/textclassifier/SelectionEvent.java @@ -643,7 +643,7 @@ public final class SelectionEvent implements Parcelable { mSessionId, mStart, mEnd, mSmartStart, mSmartEnd); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SelectionEvent createFromParcel(Parcel in) { return new SelectionEvent(in); diff --git a/core/java/android/view/textclassifier/SystemTextClassifier.java b/core/java/android/view/textclassifier/SystemTextClassifier.java index 8b370f543cccfdf102611827a482f806ed45fb15..8f8766e3f783d3c9b6301ce7fd2092fcf86c08dc 100644 --- a/core/java/android/view/textclassifier/SystemTextClassifier.java +++ b/core/java/android/view/textclassifier/SystemTextClassifier.java @@ -20,15 +20,14 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.WorkerThread; import android.content.Context; +import android.os.Bundle; import android.os.Looper; +import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; -import android.service.textclassifier.IConversationActionsCallback; -import android.service.textclassifier.ITextClassificationCallback; +import android.service.textclassifier.ITextClassifierCallback; import android.service.textclassifier.ITextClassifierService; -import android.service.textclassifier.ITextLanguageCallback; -import android.service.textclassifier.ITextLinksCallback; -import android.service.textclassifier.ITextSelectionCallback; +import android.service.textclassifier.TextClassifierService; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting.Visibility; @@ -73,9 +72,10 @@ public final class SystemTextClassifier implements TextClassifier { Utils.checkMainThread(); try { request.setCallingPackageName(mPackageName); - final TextSelectionCallback callback = new TextSelectionCallback(); + final BlockingCallback callback = + new BlockingCallback<>("textselection"); mManagerService.onSuggestSelection(mSessionId, request, callback); - final TextSelection selection = callback.mReceiver.get(); + final TextSelection selection = callback.get(); if (selection != null) { return selection; } @@ -95,9 +95,10 @@ public final class SystemTextClassifier implements TextClassifier { Utils.checkMainThread(); try { request.setCallingPackageName(mPackageName); - final TextClassificationCallback callback = new TextClassificationCallback(); + final BlockingCallback callback = + new BlockingCallback<>("textclassification"); mManagerService.onClassifyText(mSessionId, request, callback); - final TextClassification classification = callback.mReceiver.get(); + final TextClassification classification = callback.get(); if (classification != null) { return classification; } @@ -122,9 +123,10 @@ public final class SystemTextClassifier implements TextClassifier { try { request.setCallingPackageName(mPackageName); - final TextLinksCallback callback = new TextLinksCallback(); + final BlockingCallback callback = + new BlockingCallback<>("textlinks"); mManagerService.onGenerateLinks(mSessionId, request, callback); - final TextLinks links = callback.mReceiver.get(); + final TextLinks links = callback.get(); if (links != null) { return links; } @@ -165,9 +167,10 @@ public final class SystemTextClassifier implements TextClassifier { try { request.setCallingPackageName(mPackageName); - final TextLanguageCallback callback = new TextLanguageCallback(); + final BlockingCallback callback = + new BlockingCallback<>("textlanguage"); mManagerService.onDetectLanguage(mSessionId, request, callback); - final TextLanguage textLanguage = callback.mReceiver.get(); + final TextLanguage textLanguage = callback.get(); if (textLanguage != null) { return textLanguage; } @@ -184,9 +187,10 @@ public final class SystemTextClassifier implements TextClassifier { try { request.setCallingPackageName(mPackageName); - final ConversationActionsCallback callback = new ConversationActionsCallback(); + final BlockingCallback callback = + new BlockingCallback<>("conversation-actions"); mManagerService.onSuggestConversationActions(mSessionId, request, callback); - final ConversationActions conversationActions = callback.mReceiver.get(); + final ConversationActions conversationActions = callback.get(); if (conversationActions != null) { return conversationActions; } @@ -245,82 +249,28 @@ public final class SystemTextClassifier implements TextClassifier { } } - private static final class TextSelectionCallback extends ITextSelectionCallback.Stub { + private static final class BlockingCallback + extends ITextClassifierCallback.Stub { + private final ResponseReceiver mReceiver; - final ResponseReceiver mReceiver = new ResponseReceiver<>("textselection"); - - @Override - public void onSuccess(TextSelection selection) { - mReceiver.onSuccess(selection); + BlockingCallback(String name) { + mReceiver = new ResponseReceiver<>(name); } @Override - public void onFailure() { - mReceiver.onFailure(); - } - } - - private static final class TextClassificationCallback extends ITextClassificationCallback.Stub { - - final ResponseReceiver mReceiver = - new ResponseReceiver<>("textclassification"); - - @Override - public void onSuccess(TextClassification classification) { - mReceiver.onSuccess(classification); + public void onSuccess(Bundle result) { + mReceiver.onSuccess(TextClassifierService.getResponse(result)); } @Override public void onFailure() { mReceiver.onFailure(); } - } - private static final class TextLinksCallback extends ITextLinksCallback.Stub { - - final ResponseReceiver mReceiver = new ResponseReceiver<>("textlinks"); - - @Override - public void onSuccess(TextLinks links) { - mReceiver.onSuccess(links); - } - - @Override - public void onFailure() { - mReceiver.onFailure(); - } - } - - private static final class TextLanguageCallback extends ITextLanguageCallback.Stub { - - final ResponseReceiver mReceiver = new ResponseReceiver<>("textlanguage"); - - @Override - public void onSuccess(TextLanguage textLanguage) { - mReceiver.onSuccess(textLanguage); - } - - @Override - public void onFailure() { - mReceiver.onFailure(); - } - } - - private static final class ConversationActionsCallback - extends IConversationActionsCallback.Stub { - - final ResponseReceiver mReceiver = - new ResponseReceiver<>("conversationaction"); - - @Override - public void onSuccess(ConversationActions conversationActions) { - mReceiver.onSuccess(conversationActions); + public T get() { + return mReceiver.get(); } - @Override - public void onFailure() { - mReceiver.onFailure(); - } } private static final class ResponseReceiver { diff --git a/core/java/android/view/textclassifier/TextClassification.java b/core/java/android/view/textclassifier/TextClassification.java index 052ee953e97116c75addd000b8bd66204f426d51..034da01e1de1b0f310bf7422b6852c7d85c065dc 100644 --- a/core/java/android/view/textclassifier/TextClassification.java +++ b/core/java/android/view/textclassifier/TextClassification.java @@ -756,7 +756,7 @@ public final class TextClassification implements Parcelable { return request; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Request createFromParcel(Parcel in) { @@ -785,7 +785,7 @@ public final class TextClassification implements Parcelable { dest.writeBundle(mExtras); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextClassification createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/TextClassificationContext.java b/core/java/android/view/textclassifier/TextClassificationContext.java index a15411f0416e086e7645aec6f0b86a6a641943c8..3bf8e9bd2bf0bd3759ce863dee6a587b4ac95837 100644 --- a/core/java/android/view/textclassifier/TextClassificationContext.java +++ b/core/java/android/view/textclassifier/TextClassificationContext.java @@ -141,7 +141,7 @@ public final class TextClassificationContext implements Parcelable { mWidgetVersion = in.readString(); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextClassificationContext createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/textclassifier/TextClassificationSessionId.java b/core/java/android/view/textclassifier/TextClassificationSessionId.java index 1378bd9c9035f506df63b6c52cc091fc0e1dfd0e..5e62a116947d511136bc7ee2986efc2786eb230e 100644 --- a/core/java/android/view/textclassifier/TextClassificationSessionId.java +++ b/core/java/android/view/textclassifier/TextClassificationSessionId.java @@ -115,7 +115,7 @@ public final class TextClassificationSessionId implements Parcelable { return new TextClassificationSessionId(string); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextClassificationSessionId createFromParcel(Parcel parcel) { diff --git a/core/java/android/view/textclassifier/TextClassifier.java b/core/java/android/view/textclassifier/TextClassifier.java index e0101556910fd696635d507a4021e24bae2c7913..23ce90e42b0cc6fdeb8cfc40b6073af23057dc52 100644 --- a/core/java/android/view/textclassifier/TextClassifier.java +++ b/core/java/android/view/textclassifier/TextClassifier.java @@ -550,7 +550,7 @@ public interface TextClassifier { return 0; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public EntityConfig createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/TextClassifierEvent.java b/core/java/android/view/textclassifier/TextClassifierEvent.java index 0d4338b0af6b46b547411ac03d9368b9f84f29a3..236f89bf921a38a0a8708d08ab708b608fc25f08 100644 --- a/core/java/android/view/textclassifier/TextClassifierEvent.java +++ b/core/java/android/view/textclassifier/TextClassifierEvent.java @@ -35,7 +35,7 @@ import java.util.Arrays; // TODO: Comprehensive javadoc. public final class TextClassifierEvent implements Parcelable { - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public TextClassifierEvent createFromParcel(Parcel in) { return readFromParcel(in); diff --git a/core/java/android/view/textclassifier/TextLanguage.java b/core/java/android/view/textclassifier/TextLanguage.java index 735c3eba226e2a76c6a56d5c0ab96b5c5769fa1d..eaf4d7f5d5d1a23a1864955f082dafa898ecb795 100644 --- a/core/java/android/view/textclassifier/TextLanguage.java +++ b/core/java/android/view/textclassifier/TextLanguage.java @@ -43,7 +43,7 @@ import java.util.Map; */ public final class TextLanguage implements Parcelable { - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public TextLanguage createFromParcel(Parcel in) { return readFromParcel(in); @@ -212,7 +212,7 @@ public final class TextLanguage implements Parcelable { */ public static final class Request implements Parcelable { - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public Request createFromParcel(Parcel in) { return readFromParcel(in); diff --git a/core/java/android/view/textclassifier/TextLinks.java b/core/java/android/view/textclassifier/TextLinks.java index ab341782ac58783662350d3951cd8069c6748ff0..d8216efc1ef24fcd96b4708e51afb544b477b5fe 100644 --- a/core/java/android/view/textclassifier/TextLinks.java +++ b/core/java/android/view/textclassifier/TextLinks.java @@ -180,7 +180,7 @@ public final class TextLinks implements Parcelable { dest.writeBundle(mExtras); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextLinks createFromParcel(Parcel in) { @@ -315,7 +315,7 @@ public final class TextLinks implements Parcelable { return new TextLink(start, end, entityConfidence, extras, null /* urlSpan */); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextLink createFromParcel(Parcel in) { @@ -528,7 +528,7 @@ public final class TextLinks implements Parcelable { return request; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Request createFromParcel(Parcel in) { diff --git a/core/java/android/view/textclassifier/TextSelection.java b/core/java/android/view/textclassifier/TextSelection.java index 4a6f3e53b223b515111fc40cf1130e76aef1f153..52c532bb91f0d0e3fa0905f4f3d86445ba393ce6 100644 --- a/core/java/android/view/textclassifier/TextSelection.java +++ b/core/java/android/view/textclassifier/TextSelection.java @@ -413,7 +413,7 @@ public final class TextSelection implements Parcelable { return request; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public Request createFromParcel(Parcel in) { @@ -441,7 +441,7 @@ public final class TextSelection implements Parcelable { dest.writeBundle(mExtras); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextSelection createFromParcel(Parcel in) { diff --git a/core/java/android/view/textservice/SentenceSuggestionsInfo.java b/core/java/android/view/textservice/SentenceSuggestionsInfo.java index afd62eb513f9810cc6b2ab53496db404a1b63ff8..0d37632beb7e11c5edfde80f4172b369cd47485c 100644 --- a/core/java/android/view/textservice/SentenceSuggestionsInfo.java +++ b/core/java/android/view/textservice/SentenceSuggestionsInfo.java @@ -129,7 +129,7 @@ public final class SentenceSuggestionsInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SentenceSuggestionsInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/textservice/SpellCheckerInfo.java b/core/java/android/view/textservice/SpellCheckerInfo.java index 7aa2c23ae5e02c77418f160ff1019a592ff20c3b..13d44daa5a48b905717f74376473b7ea2bb943cc 100644 --- a/core/java/android/view/textservice/SpellCheckerInfo.java +++ b/core/java/android/view/textservice/SpellCheckerInfo.java @@ -192,7 +192,7 @@ public final class SpellCheckerInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SpellCheckerInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/textservice/SpellCheckerSubtype.java b/core/java/android/view/textservice/SpellCheckerSubtype.java index d904d4672db9696aa02cab2b1507cb167b0d7550..8224e0eb48dae65276df20e9b5401869301543d3 100644 --- a/core/java/android/view/textservice/SpellCheckerSubtype.java +++ b/core/java/android/view/textservice/SpellCheckerSubtype.java @@ -271,7 +271,7 @@ public final class SpellCheckerSubtype implements Parcelable { dest.writeInt(mSubtypeId); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SpellCheckerSubtype createFromParcel(Parcel source) { diff --git a/core/java/android/view/textservice/SuggestionsInfo.java b/core/java/android/view/textservice/SuggestionsInfo.java index dc2051cccbf69c64365e81aa98bda6eb32c3bc6e..e69b6e7277a86c5bc7c06458ce4948d81e7b2c47 100644 --- a/core/java/android/view/textservice/SuggestionsInfo.java +++ b/core/java/android/view/textservice/SuggestionsInfo.java @@ -162,7 +162,7 @@ public final class SuggestionsInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SuggestionsInfo createFromParcel(Parcel source) { diff --git a/core/java/android/view/textservice/TextInfo.java b/core/java/android/view/textservice/TextInfo.java index 5499918a8c05d239622f9c791e5f2bf9a272b22c..571bdf307e838c28fb0002bbc5b0594a9708cabb 100644 --- a/core/java/android/view/textservice/TextInfo.java +++ b/core/java/android/view/textservice/TextInfo.java @@ -138,7 +138,7 @@ public final class TextInfo implements Parcelable { /** * Used to make this class parcelable. */ - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public TextInfo createFromParcel(Parcel source) { diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl index dbca7ff72c7bfc98d3c6eee2e47c97b477ca0889..10cfea166abd5867e84f188aed404b5053bd87fa 100644 --- a/core/java/android/webkit/IWebViewUpdateService.aidl +++ b/core/java/android/webkit/IWebViewUpdateService.aidl @@ -51,6 +51,7 @@ interface IWebViewUpdateService { * DevelopmentSettings uses this to get the current available WebView * providers (to display as choices to the user). */ + @UnsupportedAppUsage WebViewProviderInfo[] getValidWebViewPackages(); /** @@ -61,6 +62,7 @@ interface IWebViewUpdateService { /** * Used by DevelopmentSetting to get the name of the WebView provider currently in use. */ + @UnsupportedAppUsage String getCurrentWebViewPackageName(); /** @@ -72,6 +74,7 @@ interface IWebViewUpdateService { * Used by Settings to determine whether a certain package can be enabled/disabled by the user - * the package should not be modifiable in this way if it is a fallback package. */ + @UnsupportedAppUsage boolean isFallbackPackage(String packageName); /** diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java index ef69b6333cce0e29f861ff060c238823d32c775b..3d3d941984480413e3a36dcc9e2cf52f12d3d20c 100644 --- a/core/java/android/webkit/WebViewDelegate.java +++ b/core/java/android/webkit/WebViewDelegate.java @@ -79,7 +79,10 @@ public final class WebViewDelegate { /** * Returns {@code true} if the draw GL functor can be invoked (see {@link #invokeDrawGlFunctor}) * and {@code false} otherwise. + * + * @deprecated Use {@link #drawWebViewFunctor(Canvas, int)} */ + @Deprecated public boolean canInvokeDrawGlFunctor(View containerView) { return true; } @@ -90,7 +93,9 @@ public final class WebViewDelegate { * * @param nativeDrawGLFunctor the pointer to the native functor that implements * system/core/include/utils/Functor.h + * @deprecated Use {@link #drawWebViewFunctor(Canvas, int)} */ + @Deprecated public void invokeDrawGlFunctor(View containerView, long nativeDrawGLFunctor, boolean waitForCompletion) { ViewRootImpl.invokeFunctor(nativeDrawGLFunctor, waitForCompletion); @@ -105,7 +110,9 @@ public final class WebViewDelegate { * @param nativeDrawGLFunctor the pointer to the native functor that implements * system/core/include/utils/Functor.h * @throws IllegalArgumentException if the canvas is not hardware accelerated + * @deprecated Use {@link #drawWebViewFunctor(Canvas, int)} */ + @Deprecated public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) { if (!(canvas instanceof RecordingCanvas)) { // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas. @@ -126,7 +133,9 @@ public final class WebViewDelegate { * @param releasedRunnable Called when this nativeDrawGLFunctor is no longer referenced by this * canvas, so is safe to be destroyed. * @throws IllegalArgumentException if the canvas is not hardware accelerated + * @deprecated Use {@link #drawWebViewFunctor(Canvas, int)} */ + @Deprecated public void callDrawGlFunction(@NonNull Canvas canvas, long nativeDrawGLFunctor, @Nullable Runnable releasedRunnable) { if (!(canvas instanceof RecordingCanvas)) { @@ -139,7 +148,7 @@ public final class WebViewDelegate { /** * Call webview draw functor. See API in draw_fn.h. - * @param canvas a hardware accelerated canvas (see {@link Canvas#isHardwareAccelerated()}). + * @param canvas a {@link RecordingCanvas}. * @param functor created by AwDrawFn_CreateFunctor in draw_fn.h. */ public void drawWebViewFunctor(@NonNull Canvas canvas, int functor) { @@ -156,7 +165,9 @@ public final class WebViewDelegate { * * @param nativeDrawGLFunctor the pointer to the native functor that implements * system/core/include/utils/Functor.h + * @deprecated Use {@link #drawWebViewFunctor(Canvas, int)} */ + @Deprecated public void detachDrawGlFunctor(View containerView, long nativeDrawGLFunctor) { ViewRootImpl viewRootImpl = containerView.getViewRootImpl(); if (nativeDrawGLFunctor != 0 && viewRootImpl != null) { diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index baf582693bd8cf3af6bf1a40b169c55a1ed3a1e1..4c8f72aa77eb27f8aa35b2793db6d996dc681f31 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -351,7 +351,7 @@ public interface WebViewProvider { } 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/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java index 170475772cb2333f0ebfbe4ff41e07617f7e65db..7e00cded2c5a4047aa57ac2f0d043c6150bf60be 100644 --- a/core/java/android/webkit/WebViewProviderInfo.java +++ b/core/java/android/webkit/WebViewProviderInfo.java @@ -46,7 +46,7 @@ public final class WebViewProviderInfo implements Parcelable { } // aidl stuff - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WebViewProviderInfo createFromParcel(Parcel in) { return new WebViewProviderInfo(in); diff --git a/core/java/android/webkit/WebViewProviderResponse.java b/core/java/android/webkit/WebViewProviderResponse.java index 0edcb6fdefac9016e4917e7f9d884dee7fd468e7..5622abe0e99f5ef662b5eb2ebf9844a1fb669fad 100644 --- a/core/java/android/webkit/WebViewProviderResponse.java +++ b/core/java/android/webkit/WebViewProviderResponse.java @@ -30,7 +30,7 @@ public final class WebViewProviderResponse implements Parcelable { } // aidl stuff - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public WebViewProviderResponse createFromParcel(Parcel in) { return new WebViewProviderResponse(in); diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index cb6b760216783257700edd5f831b4b4cf19e1b4f..e713c7d1d148b8322770e5750a1b80212a54700a 100755 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -1826,7 +1826,7 @@ public abstract class AbsListView extends AdapterView implements Te + " checkState=" + checkState + "}"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SavedState createFromParcel(Parcel in) { @@ -2844,7 +2844,7 @@ public abstract class AbsListView extends AdapterView implements Te * @attr ref android.R.styleable#AbsListView_drawSelectorOnTop */ @InspectableProperty - public boolean getDrawSelectorOnTop() { + public boolean isDrawSelectorOnTop() { return mDrawSelectorOnTop; } diff --git a/core/java/android/widget/AbsSpinner.java b/core/java/android/widget/AbsSpinner.java index 3dcba48b8dc8cb4b0ff7e4da5e7cb6b8837f6d88..daf6914ff030d039d35b0eb2fc2e83db86abc674 100644 --- a/core/java/android/widget/AbsSpinner.java +++ b/core/java/android/widget/AbsSpinner.java @@ -415,7 +415,7 @@ public abstract class AbsSpinner extends AdapterView { + " position=" + position + "}"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index eb20a76754ea88d32f1c04bb6768268f295059fa..cfb93ec2321f4a04b0ba1a261aff407971baf7b3 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -830,7 +830,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter dest.writeInt(openSubMenuId); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java index 5174c1a34fcd114c556006acc65966e4d94de761..d93b635cbcf5dcdce64f9dd8b71c9b485d9cc555 100644 --- a/core/java/android/widget/AdapterViewAnimator.java +++ b/core/java/android/widget/AdapterViewAnimator.java @@ -804,7 +804,7 @@ public abstract class AdapterViewAnimator extends AdapterView return "AdapterViewAnimator.SavedState{ whichChild = " + this.whichChild + " }"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index 99440f862871d213f67df69c3fcb8f3c8be3333e..a211b4686f4cdcb15722727078517388b16437d2 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -493,7 +493,7 @@ public class CheckedTextView extends TextView implements Checkable { + " checked=" + checked + "}"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java index 3cfd373c29069ee2d2cc56aee7ce3d760c057152..80ec1c65293b59dbbc7b5ba32f48e719e4139991 100644 --- a/core/java/android/widget/CompoundButton.java +++ b/core/java/android/widget/CompoundButton.java @@ -545,7 +545,7 @@ public abstract class CompoundButton extends Button implements Checkable { } @SuppressWarnings("hiding") - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public SavedState createFromParcel(Parcel in) { diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index ada4f00256eb2abf7e9dd4fdb126f4cc8a3cf1d1..ecb846b1fccef6e146d88a8fe500247ede29891d 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -791,7 +791,7 @@ public class DatePicker extends FrameLayout { @SuppressWarnings("all") // suppress unused and hiding - public static final Parcelable.Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/ExpandableListConnector.java b/core/java/android/widget/ExpandableListConnector.java index bda64ba2ee155e02953b60b4457d6b269090e8f0..f04f605f3224eef7291e4c89855abb67b6b1de2f 100644 --- a/core/java/android/widget/ExpandableListConnector.java +++ b/core/java/android/widget/ExpandableListConnector.java @@ -927,7 +927,7 @@ class ExpandableListConnector extends BaseAdapter implements Filterable { dest.writeLong(gId); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public GroupMetadata createFromParcel(Parcel in) { diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java index 2cc013ec4f78d093f613fb53b144dcb5962e2def..cae91fce64a315bf5818b5933441f857c62e2ae8 100644 --- a/core/java/android/widget/ExpandableListView.java +++ b/core/java/android/widget/ExpandableListView.java @@ -1318,7 +1318,7 @@ public class ExpandableListView extends ListView { out.writeList(expandedGroupMetadataList); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 25cfdc7e4411a3d05c3dfe47f3d033dd7809e18a..5921feb7a75873a78e6c6263ab82e4ccb105f3c4 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -1844,7 +1844,7 @@ public class HorizontalScrollView extends FrameLayout { + "}"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java index b7cdad2d5e51837d4579882bf11044b6a2803678..50e883679eb9f096187e6bdcd4a0c7c17a4b426b 100644 --- a/core/java/android/widget/Magnifier.java +++ b/core/java/android/widget/Magnifier.java @@ -1116,7 +1116,7 @@ public final class Magnifier { /** * Builder class for {@link Magnifier} objects. */ - public static class Builder { + public static final class Builder { private @NonNull View mView; private @Px @IntRange(from = 0) int mWidth; private @Px @IntRange(from = 0) int mHeight; diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index 8113b40eaee098c54139f2d21c5d295742fcbf46..0b433b1f9dca19d3246466d00b8a3a8df2b5bc6c 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -2061,7 +2061,7 @@ public class ProgressBar extends View { out.writeInt(secondaryProgress); } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 8514b85cec00db6fe0e36af2b2dbf370671ba2fa..564d972ac26d3f071d5e3c2125035cb37ecb4f97 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -2803,7 +2803,7 @@ public class RemoteViews implements Parcelable, Filter { * @param viewId The id of the view that will trigger the {@link RemoteResponse} when clicked * @param response The {@link RemoteResponse} to send when user clicks */ - public void setOnClickResponse(int viewId, RemoteResponse response) { + public void setOnClickResponse(int viewId, @NonNull RemoteResponse response) { addAction(new SetOnClickResponse(viewId, response)); } @@ -3783,7 +3783,7 @@ public class RemoteViews implements Parcelable, Filter { /** * Parcelable.Creator that instantiates RemoteViews objects */ - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public RemoteViews createFromParcel(Parcel parcel) { return new RemoteViews(parcel); } @@ -3926,7 +3926,8 @@ public class RemoteViews implements Parcelable, Filter { * * @param pendingIntent The {@link PendingIntent} to send as part of the response */ - public static RemoteResponse fromPendingIntent(PendingIntent pendingIntent) { + @NonNull + public static RemoteResponse fromPendingIntent(@NonNull PendingIntent pendingIntent) { RemoteResponse response = new RemoteResponse(); response.mPendingIntent = pendingIntent; return response; @@ -3957,7 +3958,8 @@ public class RemoteViews implements Parcelable, Filter { * @see RemoteViews#setOnClickFillInIntent(int, Intent) * @return */ - public static RemoteResponse fromFillInIntent(Intent fillIntent) { + @NonNull + public static RemoteResponse fromFillInIntent(@NonNull Intent fillIntent) { RemoteResponse response = new RemoteResponse(); response.mFillIntent = fillIntent; return response; @@ -3974,7 +3976,8 @@ public class RemoteViews implements Parcelable, Filter { * * @see ActivityOptions#makeSceneTransitionAnimation(Activity, Pair[]) */ - public RemoteResponse addSharedElement(int viewId, String sharedElementName) { + @NonNull + public RemoteResponse addSharedElement(int viewId, @NonNull String sharedElementName) { if (mViewIds == null) { mViewIds = new IntArray(); mElementNames = new ArrayList<>(); diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 7e72c6a4789c6ed26ccbe3f1e8e4d4994d12e90e..a3e89c85fcbc7f7ccf373083a6652b87f84ea3ad 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -1474,7 +1474,7 @@ public class ScrollView extends FrameLayout { * * @param child the View to scroll to */ - public void scrollToDescendant(View child) { + public void scrollToDescendant(@NonNull View child) { if (!mIsLayoutDirty) { child.getDrawingRect(mTempRect); @@ -1978,7 +1978,7 @@ public class ScrollView extends FrameLayout { + " scrollPosition=" + scrollPosition + "}"; } - public static final Parcelable.Creator CREATOR + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index 172f1d8a8f2050f0c430329aafaa14e0bbb7fb67..89d9e97bddadeec036610f94739526240d08349c 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -1433,7 +1433,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { + " isIconified=" + isIconified + "}"; } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index d6c657b4dc21f806a75d806091f6559037076bd6..92fcea348b1a3d0f01238b41463b946a3d66e6bb 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -944,7 +944,7 @@ public class Spinner extends AbsSpinner implements OnClickListener { out.writeByte((byte) (showDropdown ? 1 : 0)); } - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 51eaa12aa3145bf077f6ebc1296078b7382fae0d..04bcb1451b61919148c9a999b1894c0869026303 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -12744,7 +12744,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * return value may not be the same as the one TextView uses if the View's layout direction is * not resolved or detached from parent root view. */ - public TextDirectionHeuristic getTextDirectionHeuristic() { + public @NonNull TextDirectionHeuristic getTextDirectionHeuristic() { if (hasPasswordTransformationMethod()) { // passwords fields should be LTR return TextDirectionHeuristics.LTR; @@ -13062,7 +13062,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } @SuppressWarnings("hiding") - public static final Parcelable.Creator CREATOR = + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java index 97a8ade589d1ef2e5865aa90351f91cfbeaef711..c7a298016d446bbf4f75f2abe5f506c7269a3450 100644 --- a/core/java/android/widget/TimePicker.java +++ b/core/java/android/widget/TimePicker.java @@ -552,7 +552,7 @@ public class TimePicker extends FrameLayout { } @SuppressWarnings({"unused", "hiding"}) - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { public SavedState createFromParcel(Parcel in) { return new SavedState(in); } diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java index b76c2cafd912f106a796b81ffa7a101c8fbe82ba..9255ccb5cda730e00668527123dbef031eed7e97 100644 --- a/core/java/android/widget/ToggleButton.java +++ b/core/java/android/widget/ToggleButton.java @@ -16,6 +16,7 @@ package android.widget; +import android.annotation.FloatRange; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; @@ -129,6 +130,7 @@ public class ToggleButton extends CompoundButton { * @return the alpha value, 0.0-1.0 */ @InspectableProperty + @FloatRange(from = 0.0, to = 1.0) public float getDisabledAlpha() { return mDisabledAlpha; } diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index f25109ee82dfcb8d67e4800d727333d42f7d38f5..a21fb41b7c998508a52e413fc6e5fe7a3adf2d12 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -2384,7 +2384,7 @@ public class Toolbar extends ViewGroup { out.writeInt(isOverflowOpen ? 1 : 0); } - public static final Creator CREATOR = new Creator() { + public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public SavedState createFromParcel(Parcel source) { diff --git a/core/java/android/widget/ViewFlipper.java b/core/java/android/widget/ViewFlipper.java index 414b1369d23ec10f9581e2033277433b41adcfd9..b962298e3d46c11b5264d07c8e85e991d1cb4e3a 100644 --- a/core/java/android/widget/ViewFlipper.java +++ b/core/java/android/widget/ViewFlipper.java @@ -16,6 +16,7 @@ package android.widget; +import android.annotation.IntRange; import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.Context; @@ -130,7 +131,7 @@ public class ViewFlipper extends ViewAnimator { * time in milliseconds */ @android.view.RemotableViewMethod - public void setFlipInterval(int milliseconds) { + public void setFlipInterval(@IntRange(from = 0) int milliseconds) { mFlipInterval = milliseconds; } @@ -140,6 +141,7 @@ public class ViewFlipper extends ViewAnimator { * @return delay time in milliseconds */ @InspectableProperty + @IntRange(from = 0) public int getFlipInterval() { return mFlipInterval; } diff --git a/core/java/android/widget/ZoomControls.java b/core/java/android/widget/ZoomControls.java index dd6a27b8f1e407ff01b2e1cb9c4347bf4933f2a9..7a5b7e8058f39dd4b8526d10d2998cb2f2d2f717 100644 --- a/core/java/android/widget/ZoomControls.java +++ b/core/java/android/widget/ZoomControls.java @@ -30,7 +30,11 @@ import com.android.internal.R; /** * 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/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index 89e3d6b6460faf8827a634e958c79ed38657bc11..67e0446e19e5b1de34e0b319855b47c5bb77a89b 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -135,7 +135,7 @@ public class ChooserActivity extends ResolverActivity { * {@link AppPredictionManager} will be queried for direct share targets. */ // TODO(b/123089490): Replace with system flag - private static final boolean USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS = false; + private static final boolean USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS = true; // TODO(b/123088566) Share these in a better way. private static final String APP_PREDICTION_SHARE_UI_SURFACE = "share"; public static final String LAUNCH_LOCATON_DIRECT_SHARE = "direct_share"; @@ -1889,11 +1889,19 @@ public class ChooserActivity extends ResolverActivity { * Set to true to reveal all service targets at once. */ public void setShowServiceTargets(boolean show) { + // mShowServiceTargets is only flipped once to show direct share targets. But after the + // initial display the list can be re-sorted and the user will see the target list + // change. This will log the initial show and the subsequent shuffle to help us get + // accurate timing of the UX. + if (show) { + getMetricsLogger().write( + new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET) + .setSubtype(mShowServiceTargets ? MetricsEvent.PREVIOUSLY_VISIBLE + : MetricsEvent.PREVIOUSLY_HIDDEN)); + } if (show != mShowServiceTargets) { mShowServiceTargets = show; notifyDataSetChanged(); - getMetricsLogger().write( - new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET)); } } diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl index 8a90cade35a238a3b848fb8946d20d16e3a6ef77..c4af4c797d374ee5f4931a3d59c652e9bf569951 100644 --- a/core/java/com/android/internal/app/IAppOpsService.aidl +++ b/core/java/com/android/internal/app/IAppOpsService.aidl @@ -32,6 +32,7 @@ interface IAppOpsService { int noteOperation(int code, int uid, String packageName); int startOperation(IBinder token, int code, int uid, String packageName, boolean startIfModeDefault); + @UnsupportedAppUsage void finishOperation(IBinder token, int code, int uid, String packageName); void startWatchingMode(int op, String packageName, IAppOpsCallback callback); void stopWatchingMode(IAppOpsCallback callback); @@ -42,12 +43,14 @@ interface IAppOpsService { // Remaining methods are only used in Java. int checkPackage(int uid, String packageName); + @UnsupportedAppUsage List getPackagesForOps(in int[] ops); + @UnsupportedAppUsage List getOpsForPackage(int uid, String packageName, in int[] ops); void getHistoricalOps(int uid, String packageName, in List ops, long beginTimeMillis, - long endTimeMillis, in RemoteCallback callback); + long endTimeMillis, int flags, in RemoteCallback callback); void getHistoricalOpsFromDiskRaw(int uid, String packageName, in List ops, - long beginTimeMillis, long endTimeMillis, in RemoteCallback callback); + long beginTimeMillis, long endTimeMillis, int flags, in RemoteCallback callback); void offsetHistory(long duration); void setHistoryParameters(int mode, long baseSnapshotInterval, int compressionStep); void addHistoricalOps(in AppOpsManager.HistoricalOps ops); @@ -55,7 +58,9 @@ interface IAppOpsService { void clearHistory(); List getUidOps(int uid, in int[] ops); void setUidMode(int code, int uid, int mode); + @UnsupportedAppUsage void setMode(int code, int uid, String packageName, int mode); + @UnsupportedAppUsage void resetAllModes(int reqUserId, String reqPackageName); int checkAudioOperation(int code, int usage, int uid, String packageName); void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages); diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index d7514d1fe26c231bf0b09355536d4ee907b7a988..114d31f207bda983c69be0b3c5f0158891f8e79f 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -49,11 +49,13 @@ interface IBatteryStats { void noteResetFlashlight(); // Remaining methods are only used in Java. + @UnsupportedAppUsage byte[] getStatistics(); ParcelFileDescriptor getStatisticsStream(); // Return true if we see the battery as currently charging. + @UnsupportedAppUsage boolean isCharging(); // Return the computed amount of time remaining on battery, in milliseconds. @@ -62,6 +64,7 @@ interface IBatteryStats { // Return the computed amount of time remaining to fully charge, in milliseconds. // Returns -1 if nothing could be computed. + @UnsupportedAppUsage long computeChargeTimeRemaining(); void noteEvent(int code, String name, int uid); @@ -131,6 +134,7 @@ interface IBatteryStats { void noteDeviceIdleMode(int mode, String activeReason, int activeUid); void setBatteryState(int status, int health, int plugType, int level, int temp, int volt, int chargeUAh, int chargeFullUAh); + @UnsupportedAppUsage long getAwakeTimeBattery(); long getAwakeTimePlugged(); diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl index 9ce7ed1562cef5933a672d802df29a63488ceea2..420749e558e0f333c442eb126be855beaec85c50 100644 --- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl +++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl @@ -51,6 +51,7 @@ interface IVoiceInteractionManagerService { * @param keyphraseId The unique identifier for the keyphrase. * @param bcp47Locale The BCP47 language tag for the keyphrase's locale. */ + @UnsupportedAppUsage SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId, in String bcp47Locale); /** * Add/Update the given keyphrase sound model. diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl index f9bf3736422bfe1c62a86c4d98104d04cf5f9d46..6d1d1abd1ec4a8c48099f50ea08abf29ace605cb 100644 --- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl +++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl @@ -42,6 +42,7 @@ interface IAppWidgetService { void deleteAppWidgetId(String callingPackage, int appWidgetId); void deleteHost(String packageName, int hostId); void deleteAllHosts(); + @UnsupportedAppUsage RemoteViews getAppWidgetViews(String callingPackage, int appWidgetId); int[] getAppWidgetIdsForHost(String callingPackage, int hostId); IntentSender createAppWidgetConfigIntentSender(String callingPackage, int appWidgetId, @@ -63,11 +64,14 @@ interface IAppWidgetService { AppWidgetProviderInfo getAppWidgetInfo(String callingPackage, int appWidgetId); boolean hasBindAppWidgetPermission(in String packageName, int userId); void setBindAppWidgetPermission(in String packageName, int userId, in boolean permission); + @UnsupportedAppUsage boolean bindAppWidgetId(in String callingPackage, int appWidgetId, int providerProfileId, in ComponentName providerComponent, in Bundle options); + @UnsupportedAppUsage boolean bindRemoteViewsService(String callingPackage, int appWidgetId, in Intent intent, IApplicationThread caller, IBinder token, IServiceConnection connection, int flags); + @UnsupportedAppUsage int[] getAppWidgetIds(in ComponentName providerComponent); boolean isBoundWidgetPackage(String packageName, int userId); boolean requestPinAppWidget(String packageName, in ComponentName providerComponent, diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java index 74c6651003e5006db35d1897f8a51a850d1b6e46..f3bf9130b163a530df53e8b9608ba959c843536e 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 final class SystemUiDeviceConfigFlags { */ 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/java/com/android/internal/os/BinderCallsStats.java b/core/java/com/android/internal/os/BinderCallsStats.java index bab478748467dd7af076c00344f88930d6351422..aa1e0d439c86f6b13c907c35e8fbd3e6c521d9eb 100644 --- a/core/java/com/android/internal/os/BinderCallsStats.java +++ b/core/java/com/android/internal/os/BinderCallsStats.java @@ -54,7 +54,7 @@ public class BinderCallsStats implements BinderInternal.Observer { public static final int PERIODIC_SAMPLING_INTERVAL_DEFAULT = 1000; public static final boolean DEFAULT_TRACK_SCREEN_INTERACTIVE = false; public static final boolean DEFAULT_TRACK_DIRECT_CALLING_UID = true; - public static final int MAX_BINDER_CALL_STATS_COUNT_DEFAULT = 5000; + public static final int MAX_BINDER_CALL_STATS_COUNT_DEFAULT = 1500; private static final String DEBUG_ENTRY_PREFIX = "__DEBUG_"; private static class OverflowBinder extends Binder {} diff --git a/core/java/com/android/internal/os/IDropBoxManagerService.aidl b/core/java/com/android/internal/os/IDropBoxManagerService.aidl index 70844ee4ef11e48e915edd86cf979f5bd206de70..5e60394e56750298d08c7087bbfc2af529a08890 100644 --- a/core/java/com/android/internal/os/IDropBoxManagerService.aidl +++ b/core/java/com/android/internal/os/IDropBoxManagerService.aidl @@ -37,5 +37,6 @@ interface IDropBoxManagerService { boolean isTagEnabled(String tag); /** @see DropBoxManager#getNextEntry */ + @UnsupportedAppUsage DropBoxManager.Entry getNextEntry(String tag, long millis, String packageName); } diff --git a/core/java/com/android/internal/os/KernelCpuThreadReader.java b/core/java/com/android/internal/os/KernelCpuThreadReader.java index 6bbfc2b1277a7e3b0db4bb4051ebef63fa4f6a9e..6a9db1004912301e8783fdc0f9d373fe9fb9ec93 100644 --- a/core/java/com/android/internal/os/KernelCpuThreadReader.java +++ b/core/java/com/android/internal/os/KernelCpuThreadReader.java @@ -102,6 +102,16 @@ public class KernelCpuThreadReader { */ private static final int ID_ERROR = -1; + /** + * Thread ID used when reporting CPU used by other threads + */ + private static final int OTHER_THREADS_ID = -1; + + /** + * Thread name used when reporting CPU used by other threads + */ + private static final String OTHER_THREADS_NAME = "__OTHER_THREADS"; + /** * When checking whether to report data for a thread, we check the UID of the thread's owner * against this predicate @@ -140,9 +150,10 @@ public class KernelCpuThreadReader { /** * Create with a path where `proc` is mounted. Used primarily for testing * - * @param procPath where `proc` is mounted (to find, see {@code mount | grep ^proc}) + * @param procPath where `proc` is mounted (to find, see {@code mount | grep + * ^proc}) * @param initialTimeInStatePath where the initial {@code time_in_state} file exists to define - * format + * format */ @VisibleForTesting public KernelCpuThreadReader( @@ -250,8 +261,8 @@ public class KernelCpuThreadReader { * Read all of the CPU usage statistics for each child thread of a process * * @param processPath the {@code /proc} path of the thread - * @param processId the ID of the process - * @param uid the ID of the user who owns the process + * @param processId the ID of the process + * @param uid the ID of the user who owns the process * @return process CPU usage containing usage of all child threads. Null if the process exited * and its {@code proc} directory was removed while collecting information */ @@ -263,14 +274,24 @@ public class KernelCpuThreadReader { + " and user ID " + uid); } + int[] filteredThreadsCpuUsage = null; final Path allThreadsPath = processPath.resolve("task"); final ArrayList threadCpuUsages = new ArrayList<>(); try (DirectoryStream threadPaths = Files.newDirectoryStream(allThreadsPath)) { for (Path threadDirectory : threadPaths) { ThreadCpuUsage threadCpuUsage = getThreadCpuUsage(threadDirectory); - if (threadCpuUsage != null) { - threadCpuUsages.add(threadCpuUsage); + if (threadCpuUsage == null) { + continue; } + if (mMinimumTotalCpuUsageMillis < totalCpuUsage(threadCpuUsage.usageTimesMillis)) { + if (filteredThreadsCpuUsage == null) { + filteredThreadsCpuUsage = new int[mFrequenciesKhz.length]; + } + filteredThreadsCpuUsage = + sumCpuUsage(filteredThreadsCpuUsage, threadCpuUsage.usageTimesMillis); + continue; + } + threadCpuUsages.add(threadCpuUsage); } } catch (IOException e) { // Expected when a process finishes @@ -282,6 +303,12 @@ public class KernelCpuThreadReader { return null; } + // Add the filtered out thread CPU usage under an "other threads" ThreadCpuUsage + if (filteredThreadsCpuUsage != null) { + threadCpuUsages.add(new ThreadCpuUsage( + OTHER_THREADS_ID, OTHER_THREADS_NAME, filteredThreadsCpuUsage)); + } + if (DEBUG) { Slog.d(TAG, "Read CPU usage of " + threadCpuUsages.size() + " threads"); } @@ -368,15 +395,6 @@ public class KernelCpuThreadReader { } int[] cpuUsages = mFrequencyBucketCreator.getBucketedValues(cpuUsagesLong); - // Check if the total CPU usage below the threshold - int totalCpuUsage = 0; - for (int i = 0; i < cpuUsages.length; i++) { - totalCpuUsage += cpuUsages[i]; - } - if (totalCpuUsage < mMinimumTotalCpuUsageMillis) { - return null; - } - return new ThreadCpuUsage(threadId, threadName, cpuUsages); } @@ -423,6 +441,28 @@ public class KernelCpuThreadReader { } } + /** + * Get the sum of all CPU usage across all frequencies + */ + private static int totalCpuUsage(int[] cpuUsage) { + int total = 0; + for (int i = 0; i < cpuUsage.length; i++) { + total += cpuUsage[i]; + } + return total; + } + + /** + * Add two CPU frequency usages together + */ + private static int[] sumCpuUsage(int[] a, int[] b) { + int[] summed = new int[a.length]; + for (int i = 0; i < a.length; i++) { + summed[i] = a[i] + b[i]; + } + return summed; + } + /** * Puts frequencies and usage times into buckets */ @@ -440,7 +480,7 @@ public class KernelCpuThreadReader { * Buckets based of a list of frequencies * * @param frequencies the frequencies to base buckets off - * @param numBuckets how many buckets to create + * @param numBuckets how many buckets to create */ @VisibleForTesting public FrequencyBucketCreator(long[] frequencies, int numBuckets) { diff --git a/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java b/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java index 718bcb43bd9ab4203e00eee03e083b6e749b6633..b8dfe0d63a66dffb8ffa63f6b116f053ebf87ff6 100644 --- a/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java +++ b/core/java/com/android/internal/os/KernelCpuThreadReaderSettingsObserver.java @@ -57,14 +57,14 @@ public class KernelCpuThreadReaderSettingsObserver extends ContentObserver { * List of UIDs to report data for */ private static final String COLLECTED_UIDS_SETTINGS_KEY = "collected_uids"; - private static final String COLLECTED_UIDS_DEFAULT = "1000-1000"; + private static final String COLLECTED_UIDS_DEFAULT = "0-0;1000-1000"; /** * Minimum total CPU usage to report */ private static final String MINIMUM_TOTAL_CPU_USAGE_MILLIS_SETTINGS_KEY = "minimum_total_cpu_usage_millis"; - private static final int MINIMUM_TOTAL_CPU_USAGE_MILLIS_DEFAULT = 0; + private static final int MINIMUM_TOTAL_CPU_USAGE_MILLIS_DEFAULT = 10000; private final Context mContext; diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index 58b48d88fa38b3ff225cd2951663184b6a2de255..2bba3c914664365fc4ae0c3b52a759abd95d6b1c 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -126,8 +126,8 @@ public final class Zygote { /** Read-write external storage should be mounted instead of package sandbox */ public static final int MOUNT_EXTERNAL_FULL = IVold.REMOUNT_MODE_FULL; - /** Number of bytes sent to the Zygote over blastula pipes or the pool event FD */ - public static final int BLASTULA_MANAGEMENT_MESSAGE_BYTES = 8; + /** Number of bytes sent to the Zygote over USAP pipes or the pool event FD */ + public static final int USAP_MANAGEMENT_MESSAGE_BYTES = 8; /** * An extraArg passed when a zygote process is forking a child-zygote, specifying a name @@ -187,12 +187,12 @@ public final class Zygote { /** * @hide for internal use only */ - public static final String BLASTULA_POOL_PRIMARY_SOCKET_NAME = "blastula_pool"; + public static final String USAP_POOL_PRIMARY_SOCKET_NAME = "usap_pool_primary"; /** * @hide for internal use only */ - public static final String BLASTULA_POOL_SECONDARY_SOCKET_NAME = "blastula_pool_secondary"; + public static final String USAP_POOL_SECONDARY_SOCKET_NAME = "usap_pool_secondary"; private Zygote() {} @@ -262,7 +262,7 @@ public final class Zygote { String sandboxId); /** - * Specialize a Blastula instance. The current VM must have been started + * Specialize an unspecialized app process. The current VM must have been started * with the -Xzygote flag. * * @param uid The UNIX uid that the new process should setuid() to before spawning any threads @@ -282,12 +282,11 @@ public final class Zygote { * @param instructionSet null-ok The instruction set to use. * @param appDataDir null-ok The data directory of the app. */ - public static void specializeBlastula(int uid, int gid, int[] gids, int runtimeFlags, + public static void specializeAppProcess(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, boolean startChildZygote, String instructionSet, String appDataDir, String packageName, String[] packagesForUID, String sandboxId) { - - nativeSpecializeBlastula(uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo, + nativeSpecializeAppProcess(uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo, niceName, startChildZygote, instructionSet, appDataDir, packageName, packagesForUID, sandboxId); @@ -306,7 +305,7 @@ public final class Zygote { ZygoteHooks.postForkCommon(); } - private static native void nativeSpecializeBlastula(int uid, int gid, int[] gids, + private static native void nativeSpecializeAppProcess(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, boolean startChildZygote, String instructionSet, String appDataDir, String packageName, String[] packagesForUID, String sandboxId); @@ -427,11 +426,11 @@ public final class Zygote { defaultValue); } - protected static void emptyBlastulaPool() { - nativeEmptyBlastulaPool(); + protected static void emptyUsapPool() { + nativeEmptyUsapPool(); } - private static native void nativeEmptyBlastulaPool(); + private static native void nativeEmptyUsapPool(); /** * Returns the value of a system property converted to a boolean using specific logic. @@ -454,105 +453,105 @@ public final class Zygote { } /** - * @return Number of blastulas currently in the pool + * @return Number of unspecialized app processes currently in the pool */ - static int getBlastulaPoolCount() { - return nativeGetBlastulaPoolCount(); + static int getUsapPoolCount() { + return nativeGetUsapPoolCount(); } - private static native int nativeGetBlastulaPoolCount(); + private static native int nativeGetUsapPoolCount(); /** * @return The event FD used for communication between the signal handler and the ZygoteServer * poll loop */ - static FileDescriptor getBlastulaPoolEventFD() { + static FileDescriptor getUsapPoolEventFD() { FileDescriptor fd = new FileDescriptor(); - fd.setInt$(nativeGetBlastulaPoolEventFD()); + fd.setInt$(nativeGetUsapPoolEventFD()); return fd; } - private static native int nativeGetBlastulaPoolEventFD(); + private static native int nativeGetUsapPoolEventFD(); /** - * Fork a new blastula process from the zygote + * Fork a new unspecialized app process from the zygote * * @param sessionSocketRawFDs Anonymous session sockets that are currently open - * @return In the Zygote process this function will always return null; in blastula processes - * this function will return a Runnable object representing the new application that is - * passed up from blastulaMain. + * @return In the Zygote process this function will always return null; in unspecialized app + * processes this function will return a Runnable object representing the new + * application that is passed up from usapMain. */ - static Runnable forkBlastula(LocalServerSocket blastulaPoolSocket, - int[] sessionSocketRawFDs) { + static Runnable forkUsap(LocalServerSocket usapPoolSocket, + int[] sessionSocketRawFDs) { FileDescriptor[] pipeFDs = null; try { pipeFDs = Os.pipe2(O_CLOEXEC); } catch (ErrnoException errnoEx) { - throw new IllegalStateException("Unable to create blastula pipe.", errnoEx); + throw new IllegalStateException("Unable to create USAP pipe.", errnoEx); } int pid = - nativeForkBlastula(pipeFDs[0].getInt$(), pipeFDs[1].getInt$(), sessionSocketRawFDs); + nativeForkUsap(pipeFDs[0].getInt$(), pipeFDs[1].getInt$(), sessionSocketRawFDs); if (pid == 0) { IoUtils.closeQuietly(pipeFDs[0]); - return blastulaMain(blastulaPoolSocket, pipeFDs[1]); + return usapMain(usapPoolSocket, pipeFDs[1]); } else { // The read-end of the pipe will be closed by the native code. - // See removeBlastulaTableEntry(); + // See removeUsapTableEntry(); IoUtils.closeQuietly(pipeFDs[1]); return null; } } - private static native int nativeForkBlastula(int readPipeFD, + private static native int nativeForkUsap(int readPipeFD, int writePipeFD, int[] sessionSocketRawFDs); /** - * This function is used by blastulas to wait for specialization requests from the system - * server. + * This function is used by unspecialized app processes to wait for specialization requests from + * the system server. * * @param writePipe The write end of the reporting pipe used to communicate with the poll loop * of the ZygoteServer. * @return A runnable oject representing the new application. */ - private static Runnable blastulaMain(LocalServerSocket blastulaPoolSocket, - FileDescriptor writePipe) { + private static Runnable usapMain(LocalServerSocket usapPoolSocket, + FileDescriptor writePipe) { final int pid = Process.myPid(); LocalSocket sessionSocket = null; - DataOutputStream blastulaOutputStream = null; + DataOutputStream usapOutputStream = null; Credentials peerCredentials = null; ZygoteArguments args = null; while (true) { try { - sessionSocket = blastulaPoolSocket.accept(); + sessionSocket = usapPoolSocket.accept(); - BufferedReader blastulaReader = + BufferedReader usapReader = new BufferedReader(new InputStreamReader(sessionSocket.getInputStream())); - blastulaOutputStream = + usapOutputStream = new DataOutputStream(sessionSocket.getOutputStream()); peerCredentials = sessionSocket.getPeerCredentials(); - String[] argStrings = readArgumentList(blastulaReader); + String[] argStrings = readArgumentList(usapReader); if (argStrings != null) { args = new ZygoteArguments(argStrings); // TODO (chriswailes): Should this only be run for debug builds? - validateBlastulaCommand(args); + validateUsapCommand(args); break; } else { - Log.e("Blastula", "Truncated command received."); + Log.e("USAP", "Truncated command received."); IoUtils.closeQuietly(sessionSocket); } } catch (Exception ex) { - Log.e("Blastula", ex.getMessage()); + Log.e("USAP", ex.getMessage()); IoUtils.closeQuietly(sessionSocket); } } @@ -571,29 +570,29 @@ public final class Zygote { try { // Used by ZygoteProcess.zygoteSendArgsAndGetResult to fill in a // Process.ProcessStartResult object. - blastulaOutputStream.writeInt(pid); + usapOutputStream.writeInt(pid); } catch (IOException ioEx) { - Log.e("Blastula", "Failed to write response to session socket: " + ioEx.getMessage()); + Log.e("USAP", "Failed to write response to session socket: " + ioEx.getMessage()); System.exit(-1); } finally { IoUtils.closeQuietly(sessionSocket); - IoUtils.closeQuietly(blastulaPoolSocket); + IoUtils.closeQuietly(usapPoolSocket); } try { ByteArrayOutputStream buffer = - new ByteArrayOutputStream(Zygote.BLASTULA_MANAGEMENT_MESSAGE_BYTES); + new ByteArrayOutputStream(Zygote.USAP_MANAGEMENT_MESSAGE_BYTES); DataOutputStream outputStream = new DataOutputStream(buffer); - // This is written as a long so that the blastula reporting pipe and blastula pool - // event FD handlers in ZygoteServer.runSelectLoop can be unified. These two cases - // should both send/receive 8 bytes. + // This is written as a long so that the USAP reporting pipe and USAP pool event FD + // handlers in ZygoteServer.runSelectLoop can be unified. These two cases should both + // send/receive 8 bytes. outputStream.writeLong(pid); outputStream.flush(); Os.write(writePipe, buffer.toByteArray(), 0, buffer.size()); } catch (Exception ex) { - Log.e("Blastula", + Log.e("USAP", String.format("Failed to write PID (%d) to pipe (%d): %s", pid, writePipe.getInt$(), ex.getMessage())); System.exit(-1); @@ -601,7 +600,7 @@ public final class Zygote { IoUtils.closeQuietly(writePipe); } - specializeBlastula(args.mUid, args.mGid, args.mGids, + specializeAppProcess(args.mUid, args.mGid, args.mGids, args.mRuntimeFlags, rlimits, args.mMountExternal, args.mSeInfo, args.mNiceName, args.mStartChildZygote, args.mInstructionSet, args.mAppDataDir, args.mPackageName, @@ -619,34 +618,37 @@ public final class Zygote { null /* classLoader */); } - private static final String BLASTULA_ERROR_PREFIX = "Invalid command to blastula: "; + private static final String USAP_ERROR_PREFIX = "Invalid command to USAP: "; /** - * Checks a set of zygote arguments to see if they can be handled by a blastula. Throws an + * Checks a set of zygote arguments to see if they can be handled by a USAP. Throws an * exception if an invalid arugment is encountered. * @param args The arguments to test */ - private static void validateBlastulaCommand(ZygoteArguments args) { + private static void validateUsapCommand(ZygoteArguments args) { if (args.mAbiListQuery) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--query-abi-list"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--query-abi-list"); } else if (args.mPidQuery) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--get-pid"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--get-pid"); } else if (args.mPreloadDefault) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--preload-default"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--preload-default"); } else if (args.mPreloadPackage != null) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--preload-package"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--preload-package"); } else if (args.mPreloadApp != null) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--preload-app"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--preload-app"); } else if (args.mStartChildZygote) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--start-child-zygote"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--start-child-zygote"); } else if (args.mApiBlacklistExemptions != null) { throw new IllegalArgumentException( - BLASTULA_ERROR_PREFIX + "--set-api-blacklist-exemptions"); + USAP_ERROR_PREFIX + "--set-api-blacklist-exemptions"); } else if (args.mHiddenApiAccessLogSampleRate != -1) { throw new IllegalArgumentException( - BLASTULA_ERROR_PREFIX + "--hidden-api-log-sampling-rate="); + USAP_ERROR_PREFIX + "--hidden-api-log-sampling-rate="); + } else if (args.mHiddenApiAccessStatslogSampleRate != -1) { + throw new IllegalArgumentException( + USAP_ERROR_PREFIX + "--hidden-api-statslog-sampling-rate="); } else if (args.mInvokeWith != null) { - throw new IllegalArgumentException(BLASTULA_ERROR_PREFIX + "--invoke-with"); + throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--invoke-with"); } else if (args.mPermittedCapabilities != 0 || args.mEffectiveCapabilities != 0) { throw new ZygoteSecurityException("Client may not specify capabilities: " + "permitted=0x" + Long.toHexString(args.mPermittedCapabilities) @@ -655,25 +657,25 @@ public final class Zygote { } /** - * @return Raw file descriptors for the read-end of blastula reporting pipes. + * @return Raw file descriptors for the read-end of USAP reporting pipes. */ - protected static int[] getBlastulaPipeFDs() { - return nativeGetBlastulaPipeFDs(); + protected static int[] getUsapPipeFDs() { + return nativeGetUsapPipeFDs(); } - private static native int[] nativeGetBlastulaPipeFDs(); + private static native int[] nativeGetUsapPipeFDs(); /** - * Remove the blastula table entry for the provided process ID. + * Remove the USAP table entry for the provided process ID. * - * @param blastulaPID Process ID of the entry to remove + * @param usapPID Process ID of the entry to remove * @return True if the entry was removed; false if it doesn't exist */ - protected static boolean removeBlastulaTableEntry(int blastulaPID) { - return nativeRemoveBlastulaTableEntry(blastulaPID); + protected static boolean removeUsapTableEntry(int usapPID) { + return nativeRemoveUsapTableEntry(usapPID); } - private static native boolean nativeRemoveBlastulaTableEntry(int blastulaPID); + private static native boolean nativeRemoveUsapTableEntry(int usapPID); /** * uid 1000 (Process.SYSTEM_UID) may specify any uid > 1000 in normal diff --git a/core/java/com/android/internal/os/ZygoteArguments.java b/core/java/com/android/internal/os/ZygoteArguments.java index 9cb5820a32cefe25ab93d9533cdde0e186791f2a..28642d8ba80cf8e43eb9f05f95a9deace8caba5d 100644 --- a/core/java/com/android/internal/os/ZygoteArguments.java +++ b/core/java/com/android/internal/os/ZygoteArguments.java @@ -103,8 +103,8 @@ class ZygoteArguments { /** * */ - boolean mBlastulaPoolEnabled; - boolean mBlastulaPoolStatusSpecified = false; + boolean mUsapPoolEnabled; + boolean mUsapPoolStatusSpecified = false; /** * from all --rlimit=r,c,m @@ -204,6 +204,12 @@ class ZygoteArguments { */ int mHiddenApiAccessLogSampleRate = -1; + /** + * Sampling rate for logging hidden API accesses to statslog. This is sent to the + * pre-forked zygote at boot time, or when it changes, via --hidden-api-statslog-sampling-rate. + */ + int mHiddenApiAccessStatslogSampleRate = -1; + /** * Constructs instance and parses args * @@ -391,6 +397,15 @@ class ZygoteArguments { "Invalid log sampling rate: " + rateStr, nfe); } expectRuntimeArgs = false; + } else if (arg.startsWith("--hidden-api-statslog-sampling-rate=")) { + String rateStr = arg.substring(arg.indexOf('=') + 1); + try { + mHiddenApiAccessStatslogSampleRate = Integer.parseInt(rateStr); + } catch (NumberFormatException nfe) { + throw new IllegalArgumentException( + "Invalid statslog sampling rate: " + rateStr, nfe); + } + expectRuntimeArgs = false; } else if (arg.startsWith("--package-name=")) { if (mPackageName != null) { throw new IllegalArgumentException("Duplicate arg specified"); @@ -403,9 +418,9 @@ class ZygoteArguments { throw new IllegalArgumentException("Duplicate arg specified"); } mSandboxId = arg.substring(arg.indexOf('=') + 1); - } else if (arg.startsWith("--blastula-pool-enabled=")) { - mBlastulaPoolStatusSpecified = true; - mBlastulaPoolEnabled = Boolean.parseBoolean(arg.substring(arg.indexOf('=') + 1)); + } else if (arg.startsWith("--usap-pool-enabled=")) { + mUsapPoolStatusSpecified = true; + mUsapPoolEnabled = Boolean.parseBoolean(arg.substring(arg.indexOf('=') + 1)); expectRuntimeArgs = false; } else { break; diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index c7ba22df5700b55a479819139500bbc7e2c72287..87adce7c3a625cdde693712470dd11935563c1c1 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -37,6 +37,7 @@ import android.system.ErrnoException; import android.system.Os; import android.system.StructPollfd; import android.util.Log; +import android.util.StatsLog; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -158,8 +159,8 @@ class ZygoteConnection { return null; } - if (parsedArgs.mBlastulaPoolStatusSpecified) { - return handleBlastulaPoolStatusChange(zygoteServer, parsedArgs.mBlastulaPoolEnabled); + if (parsedArgs.mUsapPoolStatusSpecified) { + return handleUsapPoolStatusChange(zygoteServer, parsedArgs.mUsapPoolEnabled); } if (parsedArgs.mPreloadDefault) { @@ -192,9 +193,11 @@ class ZygoteConnection { return handleApiBlacklistExemptions(zygoteServer, parsedArgs.mApiBlacklistExemptions); } - if (parsedArgs.mHiddenApiAccessLogSampleRate != -1) { + if (parsedArgs.mHiddenApiAccessLogSampleRate != -1 + || parsedArgs.mHiddenApiAccessStatslogSampleRate != -1) { return handleHiddenApiAccessLogSampleRate(zygoteServer, - parsedArgs.mHiddenApiAccessLogSampleRate); + parsedArgs.mHiddenApiAccessLogSampleRate, + parsedArgs.mHiddenApiAccessStatslogSampleRate); } if (parsedArgs.mPermittedCapabilities != 0 || parsedArgs.mEffectiveCapabilities != 0) { @@ -328,18 +331,18 @@ class ZygoteConnection { } } - private Runnable stateChangeWithBlastulaPoolReset(ZygoteServer zygoteServer, + private Runnable stateChangeWithUsapPoolReset(ZygoteServer zygoteServer, Runnable stateChangeCode) { try { - if (zygoteServer.isBlastulaPoolEnabled()) { - Zygote.emptyBlastulaPool(); + if (zygoteServer.isUsapPoolEnabled()) { + Zygote.emptyUsapPool(); } stateChangeCode.run(); - if (zygoteServer.isBlastulaPoolEnabled()) { + if (zygoteServer.isUsapPoolEnabled()) { Runnable fpResult = - zygoteServer.fillBlastulaPool( + zygoteServer.fillUsapPool( new int[]{mSocket.getFileDescriptor().getInt$()}); if (fpResult != null) { @@ -360,24 +363,24 @@ class ZygoteConnection { * Makes the necessary changes to implement a new API blacklist exemption policy, and then * responds to the system server, letting it know that the task has been completed. * - * This necessitates a change to the internal state of the Zygote. As such, if the blastula - * pool is enabled all existing blastulas have an incorrect API blacklist exemption list. To + * This necessitates a change to the internal state of the Zygote. As such, if the USAP + * pool is enabled all existing USAPs have an incorrect API blacklist exemption list. To * properly handle this request the pool must be emptied and refilled. This process can return * a Runnable object that must be returned to ZygoteServer.runSelectLoop to be invoked. * * @param zygoteServer The server object that received the request * @param exemptions The new exemption list. - * @return A Runnable object representing a new app in any blastulas spawned from here; the + * @return A Runnable object representing a new app in any USAPs spawned from here; the * zygote process will always receive a null value from this function. */ private Runnable handleApiBlacklistExemptions(ZygoteServer zygoteServer, String[] exemptions) { - return stateChangeWithBlastulaPoolReset(zygoteServer, + return stateChangeWithUsapPoolReset(zygoteServer, () -> ZygoteInit.setApiBlacklistExemptions(exemptions)); } - private Runnable handleBlastulaPoolStatusChange(ZygoteServer zygoteServer, boolean newStatus) { + private Runnable handleUsapPoolStatusChange(ZygoteServer zygoteServer, boolean newStatus) { try { - Runnable fpResult = zygoteServer.setBlastulaPoolStatus(newStatus, mSocket); + Runnable fpResult = zygoteServer.setUsapPoolStatus(newStatus, mSocket); if (fpResult == null) { mSocketOutStream.writeInt(0); @@ -396,9 +399,11 @@ class ZygoteConnection { private final MetricsLogger mMetricsLogger = new MetricsLogger(); private static HiddenApiUsageLogger sInstance = new HiddenApiUsageLogger(); private int mHiddenApiAccessLogSampleRate = 0; + private int mHiddenApiAccessStatslogSampleRate = 0; - public static void setHiddenApiAccessLogSampleRate(int sampleRate) { + public static void setHiddenApiAccessLogSampleRates(int sampleRate, int newSampleRate) { sInstance.mHiddenApiAccessLogSampleRate = sampleRate; + sInstance.mHiddenApiAccessStatslogSampleRate = newSampleRate; } public static HiddenApiUsageLogger getInstance() { @@ -410,6 +415,9 @@ class ZygoteConnection { if (sampledValue < mHiddenApiAccessLogSampleRate) { logUsage(packageName, signature, accessMethod, accessDenied); } + if (sampledValue < mHiddenApiAccessStatslogSampleRate) { + newLogUsage(signature, accessMethod, accessDenied); + } } private void logUsage(String packageName, String signature, int accessMethod, @@ -439,26 +447,49 @@ class ZygoteConnection { } mMetricsLogger.write(logMaker); } + + private void newLogUsage(String signature, int accessMethod, boolean accessDenied) { + int accessMethodProto = StatsLog.HIDDEN_API_USED__ACCESS_METHOD__NONE; + switch(accessMethod) { + case HiddenApiUsageLogger.ACCESS_METHOD_NONE: + accessMethodProto = StatsLog.HIDDEN_API_USED__ACCESS_METHOD__NONE; + break; + case HiddenApiUsageLogger.ACCESS_METHOD_REFLECTION: + accessMethodProto = StatsLog.HIDDEN_API_USED__ACCESS_METHOD__REFLECTION; + break; + case HiddenApiUsageLogger.ACCESS_METHOD_JNI: + accessMethodProto = StatsLog.HIDDEN_API_USED__ACCESS_METHOD__JNI; + break; + case HiddenApiUsageLogger.ACCESS_METHOD_LINKING: + accessMethodProto = StatsLog.HIDDEN_API_USED__ACCESS_METHOD__LINKING; + break; + } + int uid = Process.myUid(); + StatsLog.write(StatsLog.HIDDEN_API_USED, uid, signature, + accessMethodProto, accessDenied); + } } /** * Changes the API access log sample rate for the Zygote and processes spawned from it. * - * This necessitates a change to the internal state of the Zygote. As such, if the blastula - * pool is enabled all existing blastulas have an incorrect API access log sample rate. To + * This necessitates a change to the internal state of the Zygote. As such, if the USAP + * pool is enabled all existing USAPs have an incorrect API access log sample rate. To * properly handle this request the pool must be emptied and refilled. This process can return * a Runnable object that must be returned to ZygoteServer.runSelectLoop to be invoked. * * @param zygoteServer The server object that received the request - * @param samplingRate The new sample rate + * @param samplingRate The new sample rate for regular logging + * @param statsdSamplingRate The new sample rate for statslog logging * @return A Runnable object representing a new app in any blastulas spawned from here; the * zygote process will always receive a null value from this function. */ private Runnable handleHiddenApiAccessLogSampleRate(ZygoteServer zygoteServer, - int samplingRate) { - return stateChangeWithBlastulaPoolReset(zygoteServer, () -> { - ZygoteInit.setHiddenApiAccessLogSampleRate(samplingRate); - HiddenApiUsageLogger.setHiddenApiAccessLogSampleRate(samplingRate); + int samplingRate, int statsdSamplingRate) { + return stateChangeWithUsapPoolReset(zygoteServer, () -> { + int maxSamplingRate = Math.max(samplingRate, statsdSamplingRate); + ZygoteInit.setHiddenApiAccessLogSampleRate(maxSamplingRate); + HiddenApiUsageLogger.setHiddenApiAccessLogSampleRates(samplingRate, statsdSamplingRate); ZygoteInit.setHiddenApiUsageLogger(HiddenApiUsageLogger.getInstance()); }); } diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 7cddf7588b283c75d9697ce8bb3bce43c647a0fb..5f2371961857d776eb81ebde0fdd1e9d5a5b13df 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -41,7 +41,6 @@ import android.system.OsConstants; import android.system.StructCapUserData; import android.system.StructCapUserHeader; import android.text.Hyphenator; -import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Slog; @@ -85,8 +84,6 @@ public class ZygoteInit { private static final String PROPERTY_DISABLE_OPENGL_PRELOADING = "ro.zygote.disable_gl_preload"; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; - private static final String PROPERTY_USE_APP_IMAGE_STARTUP_CACHE = - "persist.device_config.runtime_native.use_app_image_startup_cache"; private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020; private static final int LOG_BOOT_PROGRESS_PRELOAD_END = 3030; @@ -99,7 +96,7 @@ public class ZygoteInit { private static final String ABI_LIST_ARG = "--abi-list="; // TODO (chriswailes): Re-name this --zygote-socket-name= and then add a - // --blastula-socket-name parameter. + // --usap-socket-name parameter. private static final String SOCKET_NAME_ARG = "--socket-name="; /** @@ -708,13 +705,6 @@ public class ZygoteInit { parsedArgs.mRuntimeFlags |= Zygote.PROFILE_SYSTEM_SERVER; } - String use_app_image_cache = SystemProperties.get( - PROPERTY_USE_APP_IMAGE_STARTUP_CACHE, ""); - // Property defaults to true currently. - if (!TextUtils.isEmpty(use_app_image_cache) && !use_app_image_cache.equals("false")) { - parsedArgs.mRuntimeFlags |= Zygote.USE_APP_IMAGE_STARTUP_CACHE; - } - /* Request to fork the system server process */ pid = Zygote.forkSystemServer( parsedArgs.mUid, parsedArgs.mGid, diff --git a/core/java/com/android/internal/os/ZygoteServer.java b/core/java/com/android/internal/os/ZygoteServer.java index c4c98baf0e4ca5fd798da0edb7c5d1351acf863e..65953172818e19851675a3c03b26f1b3348830ef 100644 --- a/core/java/com/android/internal/os/ZygoteServer.java +++ b/core/java/com/android/internal/os/ZygoteServer.java @@ -51,39 +51,40 @@ class ZygoteServer { public static final String TAG = "ZygoteServer"; /** - * The maximim value that will be accepted from the BLASTULA_POOL_SIZE_MAX device property. - * is a mirror of BLASTULA_POOL_MAX_LIMIT found in com_android_internal_os_Zygote.cpp. + * The maximim value that will be accepted from the USAP_POOL_SIZE_MAX device property. + * is a mirror of USAP_POOL_MAX_LIMIT found in com_android_internal_os_Zygote.cpp. */ - private static final int BLASTULA_POOL_SIZE_MAX_LIMIT = 100; + private static final int USAP_POOL_SIZE_MAX_LIMIT = 100; /** - * The minimum value that will be accepted from the BLASTULA_POOL_SIZE_MIN device property. + * The minimum value that will be accepted from the USAP_POOL_SIZE_MIN device property. */ - private static final int BLASTULA_POOL_SIZE_MIN_LIMIT = 1; + private static final int USAP_POOL_SIZE_MIN_LIMIT = 1; - /** The default value used for the BLASTULA_POOL_SIZE_MAX device property */ - private static final String BLASTULA_POOL_SIZE_MAX_DEFAULT = "10"; + /** The default value used for the USAP_POOL_SIZE_MAX device property */ + private static final String USAP_POOL_SIZE_MAX_DEFAULT = "10"; - /** The default value used for the BLASTULA_POOL_SIZE_MIN device property */ - private static final String BLASTULA_POOL_SIZE_MIN_DEFAULT = "1"; + /** The default value used for the USAP_POOL_SIZE_MIN device property */ + private static final String USAP_POOL_SIZE_MIN_DEFAULT = "1"; /** - * Indicates if this Zygote server can support a blastula pool. Currently this should only be - * true for the primary and secondary Zygotes, and not the App Zygotes or the WebView Zygote. + * Indicates if this Zygote server can support a unspecialized app process pool. Currently this + * should only be true for the primary and secondary Zygotes, and not the App Zygotes or the + * WebView Zygote. * * TODO (chriswailes): Make this an explicit argument to the constructor */ - private final boolean mBlastulaPoolSupported; + private final boolean mUsapPoolSupported; /** - * If the blastula pool should be created and used to start applications. + * If the unspecialized app process pool should be created and used to start applications. * - * Setting this value to false will disable the creation, maintenance, and use of the blastula - * pool. When the blastula pool is disabled the application lifecycle will be identical to + * Setting this value to false will disable the creation, maintenance, and use of the USAP + * pool. When the USAP pool is disabled the application lifecycle will be identical to * previous versions of Android. */ - private boolean mBlastulaPoolEnabled = false; + private boolean mUsapPoolEnabled = false; /** * Listening socket that accepts new server connections. @@ -91,15 +92,15 @@ class ZygoteServer { private LocalServerSocket mZygoteSocket; /** - * The name of the blastula socket to use if the blastula pool is enabled. + * The name of the unspecialized app process pool socket to use if the USAP pool is enabled. */ - private LocalServerSocket mBlastulaPoolSocket; + private LocalServerSocket mUsapPoolSocket; /** * File descriptor used for communication between the signal handler and the ZygoteServer poll * loop. * */ - private FileDescriptor mBlastulaPoolEventFD; + private FileDescriptor mUsapPoolEventFD; /** * Whether or not mZygoteSocket's underlying FD should be closed directly. @@ -116,62 +117,61 @@ class ZygoteServer { private boolean mIsForkChild; /** - * The runtime-adjustable maximum Blastula pool size. + * The runtime-adjustable maximum USAP pool size. */ - private int mBlastulaPoolSizeMax = 0; + private int mUsapPoolSizeMax = 0; /** - * The runtime-adjustable minimum Blastula pool size. + * The runtime-adjustable minimum USAP pool size. */ - private int mBlastulaPoolSizeMin = 0; + private int mUsapPoolSizeMin = 0; /** - * The runtime-adjustable value used to determine when to re-fill the - * blastula pool. The pool will be re-filled when - * (sBlastulaPoolMax - gBlastulaPoolCount) >= sBlastulaPoolRefillThreshold. + * The runtime-adjustable value used to determine when to re-fill the USAP pool. The pool will + * be re-filled when (mUsapPoolMax - gUsapPoolCount) >= sUsapPoolRefillThreshold. */ - private int mBlastulaPoolRefillThreshold = 0; + private int mUsapPoolRefillThreshold = 0; ZygoteServer() { - mBlastulaPoolEventFD = null; + mUsapPoolEventFD = null; mZygoteSocket = null; - mBlastulaPoolSocket = null; + mUsapPoolSocket = null; - mBlastulaPoolSupported = false; + mUsapPoolSupported = false; } /** - * Initialize the Zygote server with the Zygote server socket, blastula pool server socket, - * and blastula pool event FD. + * Initialize the Zygote server with the Zygote server socket, USAP pool server socket, and USAP + * pool event FD. * * @param isPrimaryZygote If this is the primary Zygote or not. */ ZygoteServer(boolean isPrimaryZygote) { - mBlastulaPoolEventFD = Zygote.getBlastulaPoolEventFD(); + mUsapPoolEventFD = Zygote.getUsapPoolEventFD(); if (isPrimaryZygote) { mZygoteSocket = Zygote.createManagedSocketFromInitSocket(Zygote.PRIMARY_SOCKET_NAME); - mBlastulaPoolSocket = + mUsapPoolSocket = Zygote.createManagedSocketFromInitSocket( - Zygote.BLASTULA_POOL_PRIMARY_SOCKET_NAME); + Zygote.USAP_POOL_PRIMARY_SOCKET_NAME); } else { mZygoteSocket = Zygote.createManagedSocketFromInitSocket(Zygote.SECONDARY_SOCKET_NAME); - mBlastulaPoolSocket = + mUsapPoolSocket = Zygote.createManagedSocketFromInitSocket( - Zygote.BLASTULA_POOL_SECONDARY_SOCKET_NAME); + Zygote.USAP_POOL_SECONDARY_SOCKET_NAME); } - fetchBlastulaPoolPolicyProps(); + fetchUsapPoolPolicyProps(); - mBlastulaPoolSupported = true; + mUsapPoolSupported = true; } void setForkChild() { mIsForkChild = true; } - public boolean isBlastulaPoolEnabled() { - return mBlastulaPoolEnabled; + public boolean isUsapPoolEnabled() { + return mUsapPoolEnabled; } /** @@ -240,95 +240,95 @@ class ZygoteServer { return mZygoteSocket.getFileDescriptor(); } - private void fetchBlastulaPoolPolicyProps() { - if (mBlastulaPoolSupported) { - final String blastulaPoolSizeMaxPropString = + private void fetchUsapPoolPolicyProps() { + if (mUsapPoolSupported) { + final String usapPoolSizeMaxPropString = Zygote.getSystemProperty( - DeviceConfig.RuntimeNative.BLASTULA_POOL_SIZE_MAX, - BLASTULA_POOL_SIZE_MAX_DEFAULT); + DeviceConfig.RuntimeNative.USAP_POOL_SIZE_MAX, + USAP_POOL_SIZE_MAX_DEFAULT); - if (!blastulaPoolSizeMaxPropString.isEmpty()) { - mBlastulaPoolSizeMax = + if (!usapPoolSizeMaxPropString.isEmpty()) { + mUsapPoolSizeMax = Integer.min( - Integer.parseInt(blastulaPoolSizeMaxPropString), - BLASTULA_POOL_SIZE_MAX_LIMIT); + Integer.parseInt(usapPoolSizeMaxPropString), + USAP_POOL_SIZE_MAX_LIMIT); } - final String blastulaPoolSizeMinPropString = + final String usapPoolSizeMinPropString = Zygote.getSystemProperty( - DeviceConfig.RuntimeNative.BLASTULA_POOL_SIZE_MIN, - BLASTULA_POOL_SIZE_MIN_DEFAULT); + DeviceConfig.RuntimeNative.USAP_POOL_SIZE_MIN, + USAP_POOL_SIZE_MIN_DEFAULT); - if (!blastulaPoolSizeMinPropString.isEmpty()) { - mBlastulaPoolSizeMin = + if (!usapPoolSizeMinPropString.isEmpty()) { + mUsapPoolSizeMin = Integer.max( - Integer.parseInt(blastulaPoolSizeMinPropString), - BLASTULA_POOL_SIZE_MIN_LIMIT); + Integer.parseInt(usapPoolSizeMinPropString), + USAP_POOL_SIZE_MIN_LIMIT); } - final String blastulaPoolRefillThresholdPropString = + final String usapPoolRefillThresholdPropString = Zygote.getSystemProperty( - DeviceConfig.RuntimeNative.BLASTULA_POOL_REFILL_THRESHOLD, - Integer.toString(mBlastulaPoolSizeMax / 2)); + DeviceConfig.RuntimeNative.USAP_POOL_REFILL_THRESHOLD, + Integer.toString(mUsapPoolSizeMax / 2)); - if (!blastulaPoolRefillThresholdPropString.isEmpty()) { - mBlastulaPoolRefillThreshold = + if (!usapPoolRefillThresholdPropString.isEmpty()) { + mUsapPoolRefillThreshold = Integer.min( - Integer.parseInt(blastulaPoolRefillThresholdPropString), - mBlastulaPoolSizeMax); + Integer.parseInt(usapPoolRefillThresholdPropString), + mUsapPoolSizeMax); } } } private long mLastPropCheckTimestamp = 0; - private void fetchBlastulaPoolPolicyPropsWithMinInterval() { + private void fetchUsapPoolPolicyPropsWithMinInterval() { final long currentTimestamp = SystemClock.elapsedRealtime(); if (currentTimestamp - mLastPropCheckTimestamp >= Zygote.PROPERTY_CHECK_INTERVAL) { - fetchBlastulaPoolPolicyProps(); + fetchUsapPoolPolicyProps(); mLastPropCheckTimestamp = currentTimestamp; } } /** - * Checks to see if the current policy says that pool should be refilled, and spawns new - * blastulas if necessary. + * Checks to see if the current policy says that pool should be refilled, and spawns new USAPs + * if necessary. * * @param sessionSocketRawFDs Anonymous session sockets that are currently open - * @return In the Zygote process this function will always return null; in blastula processes - * this function will return a Runnable object representing the new application that is - * passed up from blastulaMain. + * @return In the Zygote process this function will always return null; in unspecialized app + * processes this function will return a Runnable object representing the new + * application that is passed up from usapMain. */ - Runnable fillBlastulaPool(int[] sessionSocketRawFDs) { - Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Zygote:FillBlastulaPool"); + Runnable fillUsapPool(int[] sessionSocketRawFDs) { + Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Zygote:FillUsapPool"); - int blastulaPoolCount = Zygote.getBlastulaPoolCount(); - int numBlastulasToSpawn = mBlastulaPoolSizeMax - blastulaPoolCount; + int usapPoolCount = Zygote.getUsapPoolCount(); + int numUsapsToSpawn = mUsapPoolSizeMax - usapPoolCount; - if (blastulaPoolCount < mBlastulaPoolSizeMin - || numBlastulasToSpawn >= mBlastulaPoolRefillThreshold) { + if (usapPoolCount < mUsapPoolSizeMin + || numUsapsToSpawn >= mUsapPoolRefillThreshold) { // Disable some VM functionality and reset some system values // before forking. ZygoteHooks.preFork(); Zygote.resetNicePriority(); - while (blastulaPoolCount++ < mBlastulaPoolSizeMax) { - Runnable caller = Zygote.forkBlastula(mBlastulaPoolSocket, sessionSocketRawFDs); + while (usapPoolCount++ < mUsapPoolSizeMax) { + Runnable caller = Zygote.forkUsap(mUsapPoolSocket, sessionSocketRawFDs); if (caller != null) { return caller; } } - // Re-enable runtime services for the Zygote. Blastula services - // are re-enabled in specializeBlastula. + // Re-enable runtime services for the Zygote. Services for unspecialized app process + // are re-enabled in specializeAppProcess. ZygoteHooks.postForkCommon(); Log.i("zygote", - "Filled the blastula pool. New blastulas: " + numBlastulasToSpawn); + "Filled the USAP pool. New USAPs: " + numUsapsToSpawn); } Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); @@ -337,23 +337,23 @@ class ZygoteServer { } /** - * Empty or fill the blastula pool as dictated by the current and new blastula pool statuses. + * Empty or fill the USAP pool as dictated by the current and new USAP pool statuses. */ - Runnable setBlastulaPoolStatus(boolean newStatus, LocalSocket sessionSocket) { - if (!mBlastulaPoolSupported) { + Runnable setUsapPoolStatus(boolean newStatus, LocalSocket sessionSocket) { + if (!mUsapPoolSupported) { Log.w(TAG, - "Attempting to enable a blastula pool for a Zygote that doesn't support it."); + "Attempting to enable a USAP pool for a Zygote that doesn't support it."); return null; - } else if (mBlastulaPoolEnabled == newStatus) { + } else if (mUsapPoolEnabled == newStatus) { return null; } - mBlastulaPoolEnabled = newStatus; + mUsapPoolEnabled = newStatus; if (newStatus) { - return fillBlastulaPool(new int[]{ sessionSocket.getFileDescriptor().getInt$() }); + return fillUsapPool(new int[]{ sessionSocket.getFileDescriptor().getInt$() }); } else { - Zygote.emptyBlastulaPool(); + Zygote.emptyUsapPool(); return null; } } @@ -371,25 +371,25 @@ class ZygoteServer { peers.add(null); while (true) { - fetchBlastulaPoolPolicyPropsWithMinInterval(); + fetchUsapPoolPolicyPropsWithMinInterval(); - int[] blastulaPipeFDs = null; + int[] usapPipeFDs = null; StructPollfd[] pollFDs = null; // Allocate enough space for the poll structs, taking into account - // the state of the blastula pool for this Zygote (could be a + // the state of the USAP pool for this Zygote (could be a // regular Zygote, a WebView Zygote, or an AppZygote). - if (mBlastulaPoolEnabled) { - blastulaPipeFDs = Zygote.getBlastulaPipeFDs(); - pollFDs = new StructPollfd[socketFDs.size() + 1 + blastulaPipeFDs.length]; + if (mUsapPoolEnabled) { + usapPipeFDs = Zygote.getUsapPipeFDs(); + pollFDs = new StructPollfd[socketFDs.size() + 1 + usapPipeFDs.length]; } else { pollFDs = new StructPollfd[socketFDs.size()]; } /* - * For reasons of correctness the blastula pool pipe and event FDs + * For reasons of correctness the USAP pool pipe and event FDs * must be processed before the session and server sockets. This - * is to ensure that the blastula pool accounting information is + * is to ensure that the USAP pool accounting information is * accurate when handling other requests like API blacklist * exemptions. */ @@ -402,17 +402,17 @@ class ZygoteServer { ++pollIndex; } - final int blastulaPoolEventFDIndex = pollIndex; + final int usapPoolEventFDIndex = pollIndex; - if (mBlastulaPoolEnabled) { + if (mUsapPoolEnabled) { pollFDs[pollIndex] = new StructPollfd(); - pollFDs[pollIndex].fd = mBlastulaPoolEventFD; + pollFDs[pollIndex].fd = mUsapPoolEventFD; pollFDs[pollIndex].events = (short) POLLIN; ++pollIndex; - for (int blastulaPipeFD : blastulaPipeFDs) { + for (int usapPipeFD : usapPipeFDs) { FileDescriptor managedFd = new FileDescriptor(); - managedFd.setInt$(blastulaPipeFD); + managedFd.setInt$(usapPipeFD); pollFDs[pollIndex] = new StructPollfd(); pollFDs[pollIndex].fd = managedFd; @@ -427,7 +427,7 @@ class ZygoteServer { throw new RuntimeException("poll failed", ex); } - boolean blastulaPoolFDRead = false; + boolean usapPoolFDRead = false; while (--pollIndex >= 0) { if ((pollFDs[pollIndex].revents & POLLIN) == 0) { @@ -441,7 +441,7 @@ class ZygoteServer { peers.add(newPeer); socketFDs.add(newPeer.getFileDescriptor()); - } else if (pollIndex < blastulaPoolEventFDIndex) { + } else if (pollIndex < usapPoolEventFDIndex) { // Session socket accepted from the Zygote server socket try { @@ -502,56 +502,56 @@ class ZygoteServer { mIsForkChild = false; } } else { - // Either the blastula pool event FD or a blastula reporting pipe. + // Either the USAP pool event FD or a USAP reporting pipe. - // If this is the event FD the payload will be the number of blastulas removed. - // If this is a reporting pipe FD the payload will be the PID of the blastula + // If this is the event FD the payload will be the number of USAPs removed. + // If this is a reporting pipe FD the payload will be the PID of the USAP // that was just specialized. long messagePayload = -1; try { - byte[] buffer = new byte[Zygote.BLASTULA_MANAGEMENT_MESSAGE_BYTES]; + byte[] buffer = new byte[Zygote.USAP_MANAGEMENT_MESSAGE_BYTES]; int readBytes = Os.read(pollFDs[pollIndex].fd, buffer, 0, buffer.length); - if (readBytes == Zygote.BLASTULA_MANAGEMENT_MESSAGE_BYTES) { + if (readBytes == Zygote.USAP_MANAGEMENT_MESSAGE_BYTES) { DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(buffer)); messagePayload = inputStream.readLong(); } else { - Log.e(TAG, "Incomplete read from blastula management FD of size " + Log.e(TAG, "Incomplete read from USAP management FD of size " + readBytes); continue; } } catch (Exception ex) { - if (pollIndex == blastulaPoolEventFDIndex) { - Log.e(TAG, "Failed to read from blastula pool event FD: " + if (pollIndex == usapPoolEventFDIndex) { + Log.e(TAG, "Failed to read from USAP pool event FD: " + ex.getMessage()); } else { - Log.e(TAG, "Failed to read from blastula reporting pipe: " + Log.e(TAG, "Failed to read from USAP reporting pipe: " + ex.getMessage()); } continue; } - if (pollIndex > blastulaPoolEventFDIndex) { - Zygote.removeBlastulaTableEntry((int) messagePayload); + if (pollIndex > usapPoolEventFDIndex) { + Zygote.removeUsapTableEntry((int) messagePayload); } - blastulaPoolFDRead = true; + usapPoolFDRead = true; } } - // Check to see if the blastula pool needs to be refilled. - if (blastulaPoolFDRead) { + // Check to see if the USAP pool needs to be refilled. + if (usapPoolFDRead) { int[] sessionSocketRawFDs = socketFDs.subList(1, socketFDs.size()) .stream() .mapToInt(fd -> fd.getInt$()) .toArray(); - final Runnable command = fillBlastulaPool(sessionSocketRawFDs); + final Runnable command = fillUsapPool(sessionSocketRawFDs); if (command != null) { return command; diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index cdaf33f0352824050469c81949d2e39f15f61bab..c4626c2093e8e76bebc24603dff8779e72e56ddd 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -1639,6 +1639,9 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind @Override public void onRootViewScrollYChanged(int rootScrollY) { mRootScrollY = rootScrollY; + if (mDecorCaptionView != null) { + mDecorCaptionView.onRootViewScrollYChanged(rootScrollY); + } updateColorViewTranslations(); } diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl index e5d5685ab3e85a02522ed18f689e0fe60cb4145a..54f31f9199cbe0b8769553f4ce2bf778997c2be7 100644 --- a/core/java/com/android/internal/policy/IKeyguardService.aidl +++ b/core/java/com/android/internal/policy/IKeyguardService.aidl @@ -88,8 +88,10 @@ oneway interface IKeyguardService { */ void onScreenTurnedOff(); + @UnsupportedAppUsage void setKeyguardEnabled(boolean enabled); void onSystemReady(); + @UnsupportedAppUsage void doKeyguardTimeout(in Bundle options); void setSwitchingUser(boolean switching); void setCurrentUser(int userId); diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index bfb50848df2689e8a051d042ed9f60d315c1bf67..343761430762258b92851a1ea82c2e0a6ef47acd 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -31,16 +31,21 @@ import com.android.internal.statusbar.NotificationVisibility; /** @hide */ interface IStatusBarService { + @UnsupportedAppUsage void expandNotificationsPanel(); + @UnsupportedAppUsage void collapsePanels(); void togglePanel(); + @UnsupportedAppUsage void disable(int what, IBinder token, String pkg); void disableForUser(int what, IBinder token, String pkg, int userId); void disable2(int what, IBinder token, String pkg); void disable2ForUser(int what, IBinder token, String pkg, int userId); int[] getDisableFlags(IBinder token, int userId); void setIcon(String slot, String iconPackage, int iconId, int iconLevel, String contentDescription); + @UnsupportedAppUsage void setIconVisibility(String slot, boolean visible); + @UnsupportedAppUsage void removeIcon(String slot); // TODO(b/117478341): support back button change when IME is showing on a external display. void setImeWindowStatus(in IBinder token, int vis, int backDisposition, @@ -87,6 +92,7 @@ interface IStatusBarService void addTile(in ComponentName tile); void remTile(in ComponentName tile); void clickTile(in ComponentName tile); + @UnsupportedAppUsage void handleSystemKey(in int key); /** diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index b04ebec77a9277508762f6b80501635223e60df4..ff5b9968a4086934e36c4edc67400ea91b663778 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -712,4 +712,30 @@ public class ArrayUtils { } return null; } + + public static String deepToString(Object value) { + if (value != null && value.getClass().isArray()) { + if (value.getClass() == boolean[].class) { + return Arrays.toString((boolean[]) value); + } else if (value.getClass() == byte[].class) { + return Arrays.toString((byte[]) value); + } else if (value.getClass() == char[].class) { + return Arrays.toString((char[]) value); + } else if (value.getClass() == double[].class) { + return Arrays.toString((double[]) value); + } else if (value.getClass() == float[].class) { + return Arrays.toString((float[]) value); + } else if (value.getClass() == int[].class) { + return Arrays.toString((int[]) value); + } else if (value.getClass() == long[].class) { + return Arrays.toString((long[]) value); + } else if (value.getClass() == short[].class) { + return Arrays.toString((short[]) value); + } else { + return Arrays.deepToString((Object[]) value); + } + } else { + return String.valueOf(value); + } + } } diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java index e90a8d5826f208bf883809803c5e349b58bca5a9..19b68e5c467fec17613ae92f27efb355d9816c56 100644 --- a/core/java/com/android/internal/widget/DecorCaptionView.java +++ b/core/java/com/android/internal/widget/DecorCaptionView.java @@ -103,6 +103,7 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, private final Rect mCloseRect = new Rect(); private final Rect mMaximizeRect = new Rect(); private View mClickTarget; + private int mRootScrollY; public DecorCaptionView(Context context) { super(context); @@ -154,10 +155,11 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, if (ev.getAction() == MotionEvent.ACTION_DOWN) { final int x = (int) ev.getX(); final int y = (int) ev.getY(); - if (mMaximizeRect.contains(x, y)) { + // Only offset y for containment tests because the actual views are already translated. + if (mMaximizeRect.contains(x, y - mRootScrollY)) { mClickTarget = mMaximize; } - if (mCloseRect.contains(x, y)) { + if (mCloseRect.contains(x, y - mRootScrollY)) { mClickTarget = mClose; } } @@ -417,4 +419,16 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } + + /** + * Called when {@link android.view.ViewRootImpl} scrolls for adjustPan. + */ + public void onRootViewScrollYChanged(int scrollY) { + // Offset the caption opposite the root scroll. This keeps the caption at the + // top of the window during adjustPan. + if (mCaption != null) { + mRootScrollY = scrollY; + mCaption.setTranslationY(scrollY); + } + } } diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl index e20bd61a99ddcfcf42f36b1582bd0de5eb00b655..1b79a510bb7a4508a47cf9aa090b1a5be2af4623 100644 --- a/core/java/com/android/internal/widget/ILockSettings.aidl +++ b/core/java/com/android/internal/widget/ILockSettings.aidl @@ -30,11 +30,17 @@ import java.util.Map; /** {@hide} */ interface ILockSettings { + @UnsupportedAppUsage void setBoolean(in String key, in boolean value, in int userId); + @UnsupportedAppUsage void setLong(in String key, in long value, in int userId); + @UnsupportedAppUsage void setString(in String key, in String value, in int userId); + @UnsupportedAppUsage boolean getBoolean(in String key, in boolean defaultValue, in int userId); + @UnsupportedAppUsage long getLong(in String key, in long defaultValue, in int userId); + @UnsupportedAppUsage String getString(in String key, in String defaultValue, in int userId); void setLockCredential(in byte[] credential, int type, in byte[] savedCredential, int requestedQuality, int userId); void resetKeyStore(int userId); @@ -43,7 +49,9 @@ interface ILockSettings { VerifyCredentialResponse verifyCredential(in byte[] credential, int type, long challenge, int userId); VerifyCredentialResponse verifyTiedProfileChallenge(in byte[] credential, int type, long challenge, int userId); boolean checkVoldPassword(int userId); + @UnsupportedAppUsage boolean havePattern(int userId); + @UnsupportedAppUsage boolean havePassword(int userId); byte[] getHashFactor(in byte[] currentCredential, int userId); void setSeparateProfileChallengeEnabled(int userId, boolean enabled, in byte[] managedUserPassword); diff --git a/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl b/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl index 7317ecf68fe9efa106072f59445876e56269b434..d6efca5d36eb79da66aff1e6a8b7a104c1b6cfa9 100644 --- a/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl +++ b/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl @@ -21,15 +21,23 @@ import android.widget.RemoteViews; /** {@hide} */ interface IRemoteViewsFactory { + @UnsupportedAppUsage void onDataSetChanged(); oneway void onDataSetChangedAsync(); oneway void onDestroy(in Intent intent); + @UnsupportedAppUsage int getCount(); + @UnsupportedAppUsage RemoteViews getViewAt(int position); + @UnsupportedAppUsage RemoteViews getLoadingView(); + @UnsupportedAppUsage int getViewTypeCount(); + @UnsupportedAppUsage long getItemId(int position); + @UnsupportedAppUsage boolean hasStableIds(); + @UnsupportedAppUsage boolean isCreated(); } diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index 3537465db682e7fcdf5a65f3d63f1778f79d3ecc..958bb18192fb5ac97d69fa3d34fdf051ea5d518a 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -206,6 +206,8 @@ public class SystemConfig { // associate with any other apps, but does not limit what apps B can associate with. final ArrayMap> mAllowedAssociations = new ArrayMap<>(); + private final ArraySet mBugreportWhitelistedPackages = new ArraySet<>(); + public static SystemConfig getInstance() { synchronized (SystemConfig.class) { if (sInstance == null) { @@ -339,6 +341,10 @@ public class SystemConfig { return mAllowedAssociations; } + public ArraySet getBugreportWhitelistedPackages() { + return mBugreportWhitelistedPackages; + } + SystemConfig() { // Read configuration from system readPermissions(Environment.buildPath( @@ -924,6 +930,15 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; + case "bugreport-whitelisted": { + String pkgname = parser.getAttributeValue(null, "package"); + if (pkgname == null) { + Slog.w(TAG, "<" + name + "> without package in " + permFile + + " at " + parser.getPositionDescription()); + } else { + mBugreportWhitelistedPackages.add(pkgname); + } + } break; default: { Slog.w(TAG, "Tag " + name + " is unknown in " + permFile + " at " + parser.getPositionDescription()); diff --git a/core/jni/android/graphics/TEST_MAPPING b/core/jni/android/graphics/TEST_MAPPING new file mode 100644 index 0000000000000000000000000000000000000000..10bd0ee906fd61296e1556f90a0d921ef9cd0abd --- /dev/null +++ b/core/jni/android/graphics/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit": [ + { + "name": "CtsGraphicsTestCases" + } + ] +} diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index af2d413990164076d5dc1597ec3796ad655d1bbb..bf56ef438a1d14203991428fa588bf939aa5fbfd 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -238,6 +238,11 @@ static jobjectArray NativeCreateIdmapsForStaticOverlaysTargetingAndroid(JNIEnv* return env->NewObjectArray(0, g_stringClass, nullptr); } + if (access("/system/bin/idmap2", X_OK) == -1) { + PLOG(WARNING) << "unable to execute idmap2"; + return nullptr; + } + std::vector argv{"/system/bin/idmap2", "scan", "--recursive", diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp index 47c6259a7d2f650bc3be111085adcf4caa64cae9..ed20c010ef6fe968acf4910ac77699f94d7f3999 100644 --- a/core/jni/android_view_InputEventReceiver.cpp +++ b/core/jni/android_view_InputEventReceiver.cpp @@ -23,10 +23,9 @@ #include #include -#include +#include #include #include -#include #include #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 aa10a2f98a7e1ce2f48d17ba08a14af83ee52118..2542286635e67d995382781e8e0858ae94ce265d 100644 --- a/core/jni/android_view_InputEventSender.cpp +++ b/core/jni/android_view_InputEventSender.cpp @@ -21,10 +21,8 @@ #include #include -#include +#include #include -#include -#include #include #include "android_os_MessageQueue.h" #include "android_view_InputChannel.h" @@ -32,6 +30,7 @@ #include "android_view_MotionEvent.h" #include +#include #include "core_jni_helpers.h" @@ -65,7 +64,8 @@ private: jobject mSenderWeakGlobal; InputPublisher mInputPublisher; sp mMessageQueue; - KeyedVector mPublishedSeqMap; + std::unordered_map mPublishedSeqMap; + uint32_t mNextPublishedSeq; const std::string getInputChannelName() { @@ -122,7 +122,7 @@ status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* even getInputChannelName().c_str(), status); return status; } - mPublishedSeqMap.add(publishedSeq, seq); + mPublishedSeqMap.emplace(publishedSeq, seq); return OK; } @@ -150,7 +150,7 @@ status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent return status; } } - mPublishedSeqMap.add(publishedSeq, seq); + mPublishedSeqMap.emplace(publishedSeq, seq); return OK; } @@ -199,35 +199,37 @@ status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) { 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; + } + + 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 (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 (!skipCallbacks) { + if (!senderObj.get()) { + senderObj.reset(jniGetReferent(env, mSenderWeakGlobal)); 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; - } + 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/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 464f24901eb17c1abcef903e7491a32a8dc21613..a9002945ff91c411e0d3e42e12e06c496b1990fd 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -58,8 +58,6 @@ namespace android { -using ui::Dataspace; - static const char* const OutOfResourcesException = "android/view/Surface$OutOfResourcesException"; @@ -129,135 +127,17 @@ jobject android_view_Surface_createFromIGraphicBufferProducer(JNIEnv* env, } int android_view_Surface_mapPublicFormatToHalFormat(PublicFormat f) { - - switch(f) { - case PublicFormat::JPEG: - case PublicFormat::DEPTH_POINT_CLOUD: - case PublicFormat::DEPTH_JPEG: - case PublicFormat::HEIC: - return HAL_PIXEL_FORMAT_BLOB; - case PublicFormat::DEPTH16: - return HAL_PIXEL_FORMAT_Y16; - case PublicFormat::RAW_SENSOR: - case PublicFormat::RAW_DEPTH: - return HAL_PIXEL_FORMAT_RAW16; - default: - // Most formats map 1:1 - return static_cast(f); - } + return mapPublicFormatToHalFormat(f); } android_dataspace android_view_Surface_mapPublicFormatToHalDataspace( PublicFormat f) { - Dataspace dataspace; - switch(f) { - case PublicFormat::JPEG: - dataspace = Dataspace::V0_JFIF; - break; - case PublicFormat::DEPTH_POINT_CLOUD: - case PublicFormat::DEPTH16: - case PublicFormat::RAW_DEPTH: - dataspace = Dataspace::DEPTH; - break; - case PublicFormat::RAW_SENSOR: - case PublicFormat::RAW_PRIVATE: - case PublicFormat::RAW10: - case PublicFormat::RAW12: - dataspace = Dataspace::ARBITRARY; - break; - case PublicFormat::YUV_420_888: - case PublicFormat::NV21: - case PublicFormat::YV12: - dataspace = Dataspace::V0_JFIF; - break; - case PublicFormat::DEPTH_JPEG: - dataspace = Dataspace::DYNAMIC_DEPTH; - break; - case PublicFormat::HEIC: - dataspace = Dataspace::HEIF; - break; - default: - // Most formats map to UNKNOWN - dataspace = Dataspace::UNKNOWN; - break; - } - return static_cast(dataspace); + return mapPublicFormatToHalDataspace(f); } PublicFormat android_view_Surface_mapHalFormatDataspaceToPublicFormat( int format, android_dataspace dataSpace) { - Dataspace ds = static_cast(dataSpace); - switch(format) { - case HAL_PIXEL_FORMAT_RGBA_8888: - case HAL_PIXEL_FORMAT_RGBX_8888: - case HAL_PIXEL_FORMAT_RGBA_FP16: - case HAL_PIXEL_FORMAT_RGBA_1010102: - case HAL_PIXEL_FORMAT_RGB_888: - case HAL_PIXEL_FORMAT_RGB_565: - case HAL_PIXEL_FORMAT_Y8: - case HAL_PIXEL_FORMAT_RAW10: - case HAL_PIXEL_FORMAT_RAW12: - case HAL_PIXEL_FORMAT_YCbCr_420_888: - case HAL_PIXEL_FORMAT_YV12: - // Enums overlap in both name and value - return static_cast(format); - case HAL_PIXEL_FORMAT_RAW16: - switch (ds) { - case Dataspace::DEPTH: - return PublicFormat::RAW_DEPTH; - default: - return PublicFormat::RAW_SENSOR; - } - case HAL_PIXEL_FORMAT_RAW_OPAQUE: - // Name differs, though value is the same - return PublicFormat::RAW_PRIVATE; - case HAL_PIXEL_FORMAT_YCbCr_422_SP: - // Name differs, though the value is the same - return PublicFormat::NV16; - case HAL_PIXEL_FORMAT_YCrCb_420_SP: - // Name differs, though the value is the same - return PublicFormat::NV21; - case HAL_PIXEL_FORMAT_YCbCr_422_I: - // Name differs, though the value is the same - return PublicFormat::YUY2; - case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: - // Name differs, though the value is the same - return PublicFormat::PRIVATE; - case HAL_PIXEL_FORMAT_Y16: - // Dataspace-dependent - switch (ds) { - case Dataspace::DEPTH: - return PublicFormat::DEPTH16; - default: - // Assume non-depth Y16 is just Y16. - return PublicFormat::Y16; - } - break; - case HAL_PIXEL_FORMAT_BLOB: - // Dataspace-dependent - switch (ds) { - case Dataspace::DEPTH: - return PublicFormat::DEPTH_POINT_CLOUD; - case Dataspace::V0_JFIF: - return PublicFormat::JPEG; - case Dataspace::HEIF: - return PublicFormat::HEIC; - default: - if (dataSpace == static_cast(HAL_DATASPACE_DYNAMIC_DEPTH)) { - return PublicFormat::DEPTH_JPEG; - } else { - // Assume otherwise-marked blobs are also JPEG - return PublicFormat::JPEG; - } - } - break; - case HAL_PIXEL_FORMAT_BGRA_8888: - // Not defined in public API - return PublicFormat::UNKNOWN; - - default: - return PublicFormat::UNKNOWN; - } + return mapHalFormatDataspaceToPublicFormat(format, dataSpace); } // ---------------------------------------------------------------------------- diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 4c25fd465301e44beb769a601e9dffb22e97a189..89d908b31aa012a4269b44198fab634abd40ea33 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -463,6 +463,13 @@ static void nativeSetColorTransform(JNIEnv* env, jclass clazz, jlong transaction transaction->setColorTransform(surfaceControl, matrix, translation); } +static void nativeSetColorSpaceAgnostic(JNIEnv* env, jclass clazz, jlong transactionObj, + jlong nativeObject, jboolean agnostic) { + auto transaction = reinterpret_cast(transactionObj); + SurfaceControl* const surfaceControl = reinterpret_cast(nativeObject); + transaction->setColorSpaceAgnostic(surfaceControl, agnostic); +} + static void nativeSetWindowCrop(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jint l, jint t, jint r, jint b) { @@ -717,6 +724,29 @@ static jboolean nativeSetAllowedDisplayConfigs(JNIEnv* env, jclass clazz, return result == NO_ERROR ? JNI_TRUE : JNI_FALSE; } +static jintArray nativeGetAllowedDisplayConfigs(JNIEnv* env, jclass clazz, jobject tokenObj) { + sp token(ibinderForJavaObject(env, tokenObj)); + if (token == nullptr) return JNI_FALSE; + + std::vector allowedConfigs; + size_t result = SurfaceComposerClient::getAllowedDisplayConfigs(token, &allowedConfigs); + if (result != NO_ERROR) { + return nullptr; + } + + jintArray allowedConfigsArray = env->NewIntArray(allowedConfigs.size()); + if (allowedConfigsArray == nullptr) { + jniThrowException(env, "java/lang/OutOfMemoryError", NULL); + return nullptr; + } + jint* allowedConfigsArrayValues = env->GetIntArrayElements(allowedConfigsArray, 0); + for (size_t i = 0; i < allowedConfigs.size(); i++) { + allowedConfigsArrayValues[i] = static_cast(allowedConfigs[i]); + } + env->ReleaseIntArrayElements(allowedConfigsArray, allowedConfigsArrayValues, 0); + return allowedConfigsArray; +} + static jint nativeGetActiveConfig(JNIEnv* env, jclass clazz, jobject tokenObj) { sp token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return -1; @@ -1183,6 +1213,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetMatrix }, {"nativeSetColorTransform", "(JJ[F[F)V", (void*)nativeSetColorTransform }, + {"nativeSetColorSpaceAgnostic", "(JJZ)V", + (void*)nativeSetColorSpaceAgnostic }, {"nativeSetFlags", "(JJII)V", (void*)nativeSetFlags }, {"nativeSetWindowCrop", "(JJIIII)V", @@ -1215,6 +1247,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetActiveConfig }, {"nativeSetAllowedDisplayConfigs", "(Landroid/os/IBinder;[I)Z", (void*)nativeSetAllowedDisplayConfigs }, + {"nativeGetAllowedDisplayConfigs", "(Landroid/os/IBinder;)[I", + (void*)nativeGetAllowedDisplayConfigs }, {"nativeGetDisplayColorModes", "(Landroid/os/IBinder;)[I", (void*)nativeGetDisplayColorModes}, {"nativeGetDisplayNativePrimaries", "(Landroid/os/IBinder;)Landroid/view/SurfaceControl$DisplayPrimaries;", diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 0d991480b55afce5dec54595019f3e2644fad508..0a1dfb77c9d9dcba99ee4f81fc1f7aa7df6665fa 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -140,32 +140,32 @@ static constexpr std::string_view ANDROID_SOCKET_PREFIX("ANDROID_SOCKET_"); static int gZygoteSocketFD = -1; /** - * The file descriptor for the Blastula pool socket opened by init. + * The file descriptor for the unspecialized app process (USAP) pool socket opened by init. */ -static int gBlastulaPoolSocketFD = -1; +static int gUsapPoolSocketFD = -1; /** - * The number of Blastulas currently in this Zygote's pool. + * The number of USAPs currently in this Zygote's pool. */ -static std::atomic_uint32_t gBlastulaPoolCount = 0; +static std::atomic_uint32_t gUsapPoolCount = 0; /** - * Event file descriptor used to communicate reaped blastulas to the + * Event file descriptor used to communicate reaped USAPs to the * ZygoteServer. */ -static int gBlastulaPoolEventFD = -1; +static int gUsapPoolEventFD = -1; /** - * The maximum value that the gBlastulaPoolSizeMax variable may take. This value - * is a mirror of ZygoteServer.BLASTULA_POOL_SIZE_MAX_LIMIT + * The maximum value that the gUSAPPoolSizeMax variable may take. This value + * is a mirror of ZygoteServer.USAP_POOL_SIZE_MAX_LIMIT */ -static constexpr int BLASTULA_POOL_SIZE_MAX_LIMIT = 100; +static constexpr int USAP_POOL_SIZE_MAX_LIMIT = 100; /** - * A helper class containing accounting information for Blastulas. + * A helper class containing accounting information for USAPs. */ -class BlastulaTableEntry { +class UsapTableEntry { public: struct EntryStorage { int32_t pid; @@ -183,7 +183,7 @@ class BlastulaTableEntry { static_assert(decltype(mStorage)::is_always_lock_free); public: - constexpr BlastulaTableEntry() : mStorage(INVALID_ENTRY_VALUE) {} + constexpr UsapTableEntry() : mStorage(INVALID_ENTRY_VALUE) {} /** * If the provided PID matches the one stored in this entry, the entry will @@ -248,7 +248,7 @@ class BlastulaTableEntry { * Sets the entry to the given values if it is currently invalid. * * @param pid The process ID for the new entry. - * @param read_pipe_fd The read end of the blastula control pipe for this + * @param read_pipe_fd The read end of the USAP control pipe for this * process. * @return True if the entry was set; false otherwise. */ @@ -265,14 +265,14 @@ class BlastulaTableEntry { }; /** - * A table containing information about the Blastulas currently in the pool. + * A table containing information about the USAPs currently in the pool. * * Multiple threads may be attempting to modify the table, either from the * signal handler or from the ZygoteServer poll loop. Atomic loads/stores in - * the BlastulaTableEntry class prevent data races during these concurrent + * the USAPTableEntry class prevent data races during these concurrent * operations. */ -static std::array gBlastulaTable; +static std::array gUsapTable; /** * The list of open zygote file descriptors. @@ -297,7 +297,7 @@ enum RuntimeFlags : uint32_t { }; // Forward declaration so we don't have to move the signal handler. -static bool RemoveBlastulaTableEntry(pid_t blastula_pid); +static bool RemoveUsapTableEntry(pid_t usap_pid); static void RuntimeAbort(JNIEnv* env, int line, const char* msg) { std::ostringstream oss; @@ -309,7 +309,7 @@ static void RuntimeAbort(JNIEnv* env, int line, const char* msg) { static void SigChldHandler(int /*signal_number*/) { pid_t pid; int status; - int64_t blastulas_removed = 0; + int64_t usaps_removed = 0; // It's necessary to save and restore the errno during this function. // Since errno is stored per thread, changing it here modifies the errno @@ -340,9 +340,9 @@ static void SigChldHandler(int /*signal_number*/) { kill(getpid(), SIGKILL); } - // Check to see if the PID is in the blastula pool and remove it if it is. - if (RemoveBlastulaTableEntry(pid)) { - ++blastulas_removed; + // Check to see if the PID is in the USAP pool and remove it if it is. + if (RemoveUsapTableEntry(pid)) { + ++usaps_removed; } } @@ -353,12 +353,12 @@ static void SigChldHandler(int /*signal_number*/) { "Zygote SIGCHLD error in waitpid: %s", strerror(errno)); } - if (blastulas_removed > 0) { - if (write(gBlastulaPoolEventFD, &blastulas_removed, sizeof(blastulas_removed)) == -1) { + if (usaps_removed > 0) { + if (write(gUsapPoolEventFD, &usaps_removed, sizeof(usaps_removed)) == -1) { // If this write fails something went terribly wrong. We will now kill // the zygote and let the system bring it back up. async_safe_format_log(ANDROID_LOG_ERROR, LOG_TAG, - "Zygote failed to write to blastula pool event FD: %s", + "Zygote failed to write to USAP pool event FD: %s", strerror(errno)); kill(getpid(), SIGKILL); } @@ -1190,12 +1190,12 @@ static void UnblockSignal(int signum, fail_fn_t fail_fn) { } } -static void ClearBlastulaTable() { - for (BlastulaTableEntry& entry : gBlastulaTable) { +static void ClearUsapTable() { + for (UsapTableEntry& entry : gUsapTable) { entry.Clear(); } - gBlastulaPoolCount = 0; + gUsapPoolCount = 0; } // Utility routine to fork a process from the zygote. @@ -1240,8 +1240,8 @@ static pid_t ForkCommon(JNIEnv* env, bool is_system_server, // Clean up any descriptors which must be closed immediately DetachDescriptors(env, fds_to_close, fail_fn); - // Invalidate the entries in the blastula table. - ClearBlastulaTable(); + // Invalidate the entries in the USAP table. + ClearUsapTable(); // Re-open all remaining open file descriptors so that they aren't shared // with the zygote across a fork. @@ -1534,47 +1534,47 @@ static jlong CalculateCapabilities(JNIEnv* env, jint uid, jint gid, jintArray gi } /** - * Adds the given information about a newly created blastula to the Zygote's - * blastula table. + * Adds the given information about a newly created unspecialized app + * processes to the Zygote's USAP table. * - * @param blastula_pid Process ID of the newly created blastula - * @param read_pipe_fd File descriptor for the read end of the blastula - * reporting pipe. Used in the ZygoteServer poll loop to track blastula + * @param usap_pid Process ID of the newly created USAP + * @param read_pipe_fd File descriptor for the read end of the USAP + * reporting pipe. Used in the ZygoteServer poll loop to track USAP * specialization. */ -static void AddBlastulaTableEntry(pid_t blastula_pid, int read_pipe_fd) { - static int sBlastulaTableInsertIndex = 0; +static void AddUsapTableEntry(pid_t usap_pid, int read_pipe_fd) { + static int sUsapTableInsertIndex = 0; - int search_index = sBlastulaTableInsertIndex; + int search_index = sUsapTableInsertIndex; do { - if (gBlastulaTable[search_index].SetIfInvalid(blastula_pid, read_pipe_fd)) { + if (gUsapTable[search_index].SetIfInvalid(usap_pid, read_pipe_fd)) { // Start our next search right after where we finished this one. - sBlastulaTableInsertIndex = (search_index + 1) % gBlastulaTable.size(); + sUsapTableInsertIndex = (search_index + 1) % gUsapTable.size(); return; } - search_index = (search_index + 1) % gBlastulaTable.size(); - } while (search_index != sBlastulaTableInsertIndex); + search_index = (search_index + 1) % gUsapTable.size(); + } while (search_index != sUsapTableInsertIndex); // Much like money in the banana stand, there should always be an entry - // in the blastula table. + // in the USAP table. __builtin_unreachable(); } /** - * Invalidates the entry in the BlastulaTable corresponding to the provided - * process ID if it is present. If an entry was removed the blastula pool + * Invalidates the entry in the USAPTable corresponding to the provided + * process ID if it is present. If an entry was removed the USAP pool * count is decremented. * - * @param blastula_pid Process ID of the blastula entry to invalidate + * @param usap_pid Process ID of the USAP entry to invalidate * @return True if an entry was invalidated; false otherwise */ -static bool RemoveBlastulaTableEntry(pid_t blastula_pid) { - for (BlastulaTableEntry& entry : gBlastulaTable) { - if (entry.ClearForPID(blastula_pid)) { - --gBlastulaPoolCount; +static bool RemoveUsapTableEntry(pid_t usap_pid) { + for (UsapTableEntry& entry : gUsapTable) { + if (entry.ClearForPID(usap_pid)) { + --gUsapPoolCount; return true; } } @@ -1583,13 +1583,13 @@ static bool RemoveBlastulaTableEntry(pid_t blastula_pid) { } /** - * @return A vector of the read pipe FDs for each of the active blastulas. + * @return A vector of the read pipe FDs for each of the active USAPs. */ -std::vector MakeBlastulaPipeReadFDVector() { +std::vector MakeUsapPipeReadFDVector() { std::vector fd_vec; - fd_vec.reserve(gBlastulaTable.size()); + fd_vec.reserve(gUsapTable.size()); - for (BlastulaTableEntry& entry : gBlastulaTable) { + for (UsapTableEntry& entry : gUsapTable) { auto entry_values = entry.GetValues(); if (entry_values.has_value()) { @@ -1633,16 +1633,16 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize( ExtractJIntArray(env, "zygote", nice_name, managed_fds_to_ignore) .value_or(std::vector()); - std::vector blastula_pipes = MakeBlastulaPipeReadFDVector(); + std::vector usap_pipes = MakeUsapPipeReadFDVector(); - fds_to_close.insert(fds_to_close.end(), blastula_pipes.begin(), blastula_pipes.end()); - fds_to_ignore.insert(fds_to_ignore.end(), blastula_pipes.begin(), blastula_pipes.end()); + fds_to_close.insert(fds_to_close.end(), usap_pipes.begin(), usap_pipes.end()); + fds_to_ignore.insert(fds_to_ignore.end(), usap_pipes.begin(), usap_pipes.end()); - fds_to_close.push_back(gBlastulaPoolSocketFD); + fds_to_close.push_back(gUsapPoolSocketFD); - if (gBlastulaPoolEventFD != -1) { - fds_to_close.push_back(gBlastulaPoolEventFD); - fds_to_ignore.push_back(gBlastulaPoolEventFD); + if (gUsapPoolEventFD != -1) { + fds_to_close.push_back(gUsapPoolEventFD); + fds_to_ignore.push_back(gUsapPoolEventFD); } pid_t pid = ForkCommon(env, false, fds_to_close, fds_to_ignore); @@ -1661,14 +1661,14 @@ static jint com_android_internal_os_Zygote_nativeForkSystemServer( JNIEnv* env, jclass, uid_t uid, gid_t gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jlong permitted_capabilities, jlong effective_capabilities) { - std::vector fds_to_close(MakeBlastulaPipeReadFDVector()), + std::vector fds_to_close(MakeUsapPipeReadFDVector()), fds_to_ignore(fds_to_close); - fds_to_close.push_back(gBlastulaPoolSocketFD); + fds_to_close.push_back(gUsapPoolSocketFD); - if (gBlastulaPoolEventFD != -1) { - fds_to_close.push_back(gBlastulaPoolEventFD); - fds_to_ignore.push_back(gBlastulaPoolEventFD); + if (gUsapPoolEventFD != -1) { + fds_to_close.push_back(gUsapPoolEventFD); + fds_to_ignore.push_back(gUsapPoolEventFD); } pid_t pid = ForkCommon(env, true, @@ -1705,49 +1705,52 @@ static jint com_android_internal_os_Zygote_nativeForkSystemServer( } /** - * A JNI function that forks a blastula from the Zygote while ensuring proper - * file descriptor hygiene. + * A JNI function that forks an unspecialized app process from the Zygote while + * ensuring proper file descriptor hygiene. * * @param env Managed runtime environment - * @param read_pipe_fd The read FD for the blastula reporting pipe. Manually closed by blastlas + * @param read_pipe_fd The read FD for the USAP reporting pipe. Manually closed by blastlas * in managed code. - * @param write_pipe_fd The write FD for the blastula reporting pipe. Manually closed by the + * @param write_pipe_fd The write FD for the USAP reporting pipe. Manually closed by the * zygote in managed code. * @param managed_session_socket_fds A list of anonymous session sockets that must be ignored by - * the FD hygiene code and automatically "closed" in the new blastula. + * the FD hygiene code and automatically "closed" in the new USAP. * @return */ -static jint com_android_internal_os_Zygote_nativeForkBlastula(JNIEnv* env, jclass, - jint read_pipe_fd, jint write_pipe_fd, jintArray managed_session_socket_fds) { - std::vector fds_to_close(MakeBlastulaPipeReadFDVector()), +static jint com_android_internal_os_Zygote_nativeForkUsap(JNIEnv* env, + jclass, + jint read_pipe_fd, + jint write_pipe_fd, + jintArray managed_session_socket_fds) { + std::vector fds_to_close(MakeUsapPipeReadFDVector()), fds_to_ignore(fds_to_close); std::vector session_socket_fds = - ExtractJIntArray(env, "blastula", nullptr, managed_session_socket_fds) + ExtractJIntArray(env, "USAP", nullptr, managed_session_socket_fds) .value_or(std::vector()); - // The Blastula Pool Event FD is created during the initialization of the - // blastula pool and should always be valid here. + // The USAP Pool Event FD is created during the initialization of the + // USAP pool and should always be valid here. fds_to_close.push_back(gZygoteSocketFD); - fds_to_close.push_back(gBlastulaPoolEventFD); + fds_to_close.push_back(gUsapPoolEventFD); fds_to_close.insert(fds_to_close.end(), session_socket_fds.begin(), session_socket_fds.end()); fds_to_ignore.push_back(gZygoteSocketFD); - fds_to_ignore.push_back(gBlastulaPoolSocketFD); - fds_to_ignore.push_back(gBlastulaPoolEventFD); + fds_to_ignore.push_back(gUsapPoolSocketFD); + fds_to_ignore.push_back(gUsapPoolEventFD); fds_to_ignore.push_back(read_pipe_fd); fds_to_ignore.push_back(write_pipe_fd); fds_to_ignore.insert(fds_to_ignore.end(), session_socket_fds.begin(), session_socket_fds.end()); - pid_t blastula_pid = ForkCommon(env, /* is_system_server= */ false, fds_to_close, fds_to_ignore); + pid_t usap_pid = ForkCommon(env, /* is_system_server= */ false, fds_to_close, fds_to_ignore); - if (blastula_pid != 0) { - ++gBlastulaPoolCount; - AddBlastulaTableEntry(blastula_pid, read_pipe_fd); + if (usap_pid != 0) { + ++gUsapPoolCount; + AddUsapTableEntry(usap_pid, read_pipe_fd); } - return blastula_pid; + return usap_pid; } static void com_android_internal_os_Zygote_nativeAllowFileAcrossFork( @@ -1812,7 +1815,8 @@ static void com_android_internal_os_Zygote_nativeInstallSeccompUidGidFilter( } /** - * Called from a blastula to specialize the process for a specific application. + * Called from an unspecialized app process to specialize the process for a + * given application. * * @param env Managed runtime environment * @param uid User ID of the new application @@ -1827,7 +1831,7 @@ static void com_android_internal_os_Zygote_nativeInstallSeccompUidGidFilter( * @param instruction_set The instruction set expected/requested by the new application * @param app_data_dir Path to the application's data directory */ -static void com_android_internal_os_Zygote_nativeSpecializeBlastula( +static void com_android_internal_os_Zygote_nativeSpecializeAppProcess( JNIEnv* env, jclass, jint uid, jint gid, jintArray gids, jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jstring nice_name, @@ -1864,77 +1868,77 @@ static void com_android_internal_os_Zygote_nativeGetSocketFDs(JNIEnv* env, jclas ALOGE("Unable to fetch Zygote socket file descriptor"); } - env_var_name = android_socket_prefix + (is_primary ? "blastula_pool" : "blastula_pool_secondary"); + env_var_name = android_socket_prefix + (is_primary ? "usap_pool_primary" : "usap_pool_secondary"); env_var_val = getenv(env_var_name.c_str()); if (env_var_val != nullptr) { - gBlastulaPoolSocketFD = atoi(env_var_val); - ALOGV("Zygote:blastulaPoolSocketFD = %d", gBlastulaPoolSocketFD); + gUsapPoolSocketFD = atoi(env_var_val); + ALOGV("Zygote:usapPoolSocketFD = %d", gUsapPoolSocketFD); } else { - ALOGE("Unable to fetch Blastula pool socket file descriptor"); + ALOGE("Unable to fetch USAP pool socket file descriptor"); } } /** * @param env Managed runtime environment - * @return A managed array of raw file descriptors for the read ends of the blastula reporting + * @return A managed array of raw file descriptors for the read ends of the USAP reporting * pipes. */ -static jintArray com_android_internal_os_Zygote_nativeGetBlastulaPipeFDs(JNIEnv* env, jclass) { - std::vector blastula_fds = MakeBlastulaPipeReadFDVector(); +static jintArray com_android_internal_os_Zygote_nativeGetUsapPipeFDs(JNIEnv* env, jclass) { + std::vector usap_fds = MakeUsapPipeReadFDVector(); - jintArray managed_blastula_fds = env->NewIntArray(blastula_fds.size()); - env->SetIntArrayRegion(managed_blastula_fds, 0, blastula_fds.size(), blastula_fds.data()); + jintArray managed_usap_fds = env->NewIntArray(usap_fds.size()); + env->SetIntArrayRegion(managed_usap_fds, 0, usap_fds.size(), usap_fds.data()); - return managed_blastula_fds; + return managed_usap_fds; } /** - * A JNI wrapper around RemoveBlastulaTableEntry. + * A JNI wrapper around RemoveUsapTableEntry. * * @param env Managed runtime environment - * @param blastula_pid Process ID of the blastula entry to invalidate + * @param usap_pid Process ID of the USAP entry to invalidate * @return True if an entry was invalidated; false otherwise. */ -static jboolean com_android_internal_os_Zygote_nativeRemoveBlastulaTableEntry(JNIEnv* env, jclass, - jint blastula_pid) { - return RemoveBlastulaTableEntry(blastula_pid); +static jboolean com_android_internal_os_Zygote_nativeRemoveUsapTableEntry(JNIEnv* env, jclass, + jint usap_pid) { + return RemoveUsapTableEntry(usap_pid); } /** - * Creates the blastula pool event FD if it doesn't exist and returns it. This is used by the - * ZygoteServer poll loop to know when to re-fill the blastula pool. + * Creates the USAP pool event FD if it doesn't exist and returns it. This is used by the + * ZygoteServer poll loop to know when to re-fill the USAP pool. * * @param env Managed runtime environment * @return A raw event file descriptor used to communicate (from the signal handler) when the - * Zygote receives a SIGCHLD for a blastula + * Zygote receives a SIGCHLD for a USAP */ -static jint com_android_internal_os_Zygote_nativeGetBlastulaPoolEventFD(JNIEnv* env, jclass) { - if (gBlastulaPoolEventFD == -1) { - if ((gBlastulaPoolEventFD = eventfd(0, 0)) == -1) { +static jint com_android_internal_os_Zygote_nativeGetUsapPoolEventFD(JNIEnv* env, jclass) { + if (gUsapPoolEventFD == -1) { + if ((gUsapPoolEventFD = eventfd(0, 0)) == -1) { ZygoteFailure(env, "zygote", nullptr, StringPrintf("Unable to create eventfd: %s", strerror(errno))); } } - return gBlastulaPoolEventFD; + return gUsapPoolEventFD; } /** * @param env Managed runtime environment - * @return The number of blastulas currently in the blastula pool + * @return The number of USAPs currently in the USAP pool */ -static jint com_android_internal_os_Zygote_nativeGetBlastulaPoolCount(JNIEnv* env, jclass) { - return gBlastulaPoolCount; +static jint com_android_internal_os_Zygote_nativeGetUsapPoolCount(JNIEnv* env, jclass) { + return gUsapPoolCount; } /** - * Kills all processes currently in the blastula pool. + * Kills all processes currently in the USAP pool and closes their read pipe + * FDs. * * @param env Managed runtime environment - * @return The number of blastulas currently in the blastula pool */ -static void com_android_internal_os_Zygote_nativeEmptyBlastulaPool(JNIEnv* env, jclass) { - for (auto& entry : gBlastulaTable) { +static void com_android_internal_os_Zygote_nativeEmptyUsapPool(JNIEnv* env, jclass) { + for (auto& entry : gUsapTable) { auto entry_storage = entry.GetValues(); if (entry_storage.has_value()) { @@ -1943,7 +1947,7 @@ static void com_android_internal_os_Zygote_nativeEmptyBlastulaPool(JNIEnv* env, // Avoid a second atomic load by invalidating instead of clearing. entry.Invalidate(); - --gBlastulaPoolCount; + --gUsapPoolCount; } } } @@ -1964,23 +1968,23 @@ static const JNINativeMethod gMethods[] = { (void *) com_android_internal_os_Zygote_nativePreApplicationInit }, { "nativeInstallSeccompUidGidFilter", "(II)V", (void *) com_android_internal_os_Zygote_nativeInstallSeccompUidGidFilter }, - { "nativeForkBlastula", "(II[I)I", - (void *) com_android_internal_os_Zygote_nativeForkBlastula }, - { "nativeSpecializeBlastula", + { "nativeForkUsap", "(II[I)I", + (void *) com_android_internal_os_Zygote_nativeForkUsap }, + { "nativeSpecializeAppProcess", "(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V", - (void *) com_android_internal_os_Zygote_nativeSpecializeBlastula }, + (void *) com_android_internal_os_Zygote_nativeSpecializeAppProcess }, { "nativeGetSocketFDs", "(Z)V", (void *) com_android_internal_os_Zygote_nativeGetSocketFDs }, - { "nativeGetBlastulaPipeFDs", "()[I", - (void *) com_android_internal_os_Zygote_nativeGetBlastulaPipeFDs }, - { "nativeRemoveBlastulaTableEntry", "(I)Z", - (void *) com_android_internal_os_Zygote_nativeRemoveBlastulaTableEntry }, - { "nativeGetBlastulaPoolEventFD", "()I", - (void *) com_android_internal_os_Zygote_nativeGetBlastulaPoolEventFD }, - { "nativeGetBlastulaPoolCount", "()I", - (void *) com_android_internal_os_Zygote_nativeGetBlastulaPoolCount }, - { "nativeEmptyBlastulaPool", "()V", - (void *) com_android_internal_os_Zygote_nativeEmptyBlastulaPool } + { "nativeGetUsapPipeFDs", "()[I", + (void *) com_android_internal_os_Zygote_nativeGetUsapPipeFDs }, + { "nativeRemoveUsapTableEntry", "(I)Z", + (void *) com_android_internal_os_Zygote_nativeRemoveUsapTableEntry }, + { "nativeGetUsapPoolEventFD", "()I", + (void *) com_android_internal_os_Zygote_nativeGetUsapPoolEventFD }, + { "nativeGetUsapPoolCount", "()I", + (void *) com_android_internal_os_Zygote_nativeGetUsapPoolCount }, + { "nativeEmptyUsapPool", "()V", + (void *) com_android_internal_os_Zygote_nativeEmptyUsapPool } }; int register_com_android_internal_os_Zygote(JNIEnv* env) { diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp index 4b37f13cbb33c4bb502e0971267350d111e65736..d8d46560876dfdfb442bd97c08fafb647b833a33 100644 --- a/core/jni/fd_utils.cpp +++ b/core/jni/fd_utils.cpp @@ -38,8 +38,8 @@ static const char* kPathWhitelist[] = { "/dev/null", "/dev/socket/zygote", "/dev/socket/zygote_secondary", - "/dev/socket/blastula_pool", - "/dev/socket/blastula_pool_secondary", + "/dev/socket/usap_pool_primary", + "/dev/socket/usap_pool_secondary", "/dev/socket/webview_zygote", "/dev/socket/heapprofd", "/sys/kernel/debug/tracing/trace_marker", @@ -215,7 +215,7 @@ FileDescriptorInfo* FileDescriptorInfo::CreateFromFd(int fd, fail_fn_t fail_fn) // S_ISDIR : Not supported. (We could if we wanted to, but it's unused). // S_ISLINK : Not supported. // S_ISBLK : Not supported. - // S_ISFIFO : Not supported. Note that the Zygote and blastulas use pipes to + // S_ISFIFO : Not supported. Note that the Zygote and USAPs use pipes to // communicate with the child processes across forks but those should have been // added to the redirection exemption list. if (!S_ISCHR(f_stat.st_mode) && !S_ISREG(f_stat.st_mode)) { diff --git a/core/jni/include/android_runtime/android_view_Surface.h b/core/jni/include/android_runtime/android_view_Surface.h index 3f7c00c9ff0166e0e6627dc9d84afb973e024536..04718cd981fffd8e92de2481c530a656169f08d6 100644 --- a/core/jni/include/android_runtime/android_view_Surface.h +++ b/core/jni/include/android_runtime/android_view_Surface.h @@ -19,6 +19,7 @@ #include #include +#include #include "jni.h" @@ -27,41 +28,6 @@ namespace android { class Surface; class IGraphicBufferProducer; -/** - * Enum mirroring the public API definitions for image and pixel formats. - * Some of these are hidden in the public API - * - * Keep up to date with android.graphics.ImageFormat and - * android.graphics.PixelFormat - */ -enum class PublicFormat { - UNKNOWN = 0x0, - RGBA_8888 = 0x1, - RGBX_8888 = 0x2, - RGB_888 = 0x3, - RGB_565 = 0x4, - NV16 = 0x10, - NV21 = 0x11, - YUY2 = 0x14, - RGBA_FP16 = 0x16, - RAW_SENSOR = 0x20, - PRIVATE = 0x22, - YUV_420_888 = 0x23, - RAW_PRIVATE = 0x24, - RAW10 = 0x25, - RAW12 = 0x26, - RGBA_1010102 = 0x2b, - JPEG = 0x100, - DEPTH_POINT_CLOUD = 0x101, - RAW_DEPTH = 0x1002, // @hide - YV12 = 0x32315659, - Y8 = 0x20203859, - Y16 = 0x20363159, // @hide - DEPTH16 = 0x44363159, - DEPTH_JPEG = 0x69656963, - HEIC = 0x48454946, -}; - /* Gets the underlying ANativeWindow for a Surface. */ extern sp android_view_Surface_getNativeWindow( JNIEnv* env, jobject surfaceObj); diff --git a/core/jni/runtime_native_boot-flags-test.sh b/core/jni/runtime_native_boot-flags-test.sh index 01f37f07e5caa564e127f2a510ec80c45fde4176..cdfeffcc7bbb19d33cf862dbf2fb8ce0189642fd 100755 --- a/core/jni/runtime_native_boot-flags-test.sh +++ b/core/jni/runtime_native_boot-flags-test.sh @@ -139,47 +139,73 @@ function find_zygote_runtime_option { adb logcat -d -s "$zygote" | grep -q -e "option\[[0-9]\+\]=$runtime_option" } -# check_zygote_gc_runtime_option CONTEXT VALUE -# -------------------------------------------- -# Check that all zygote processes are passed device configuration flag VALUE as -# GC runtime option. Use CONTEXT in logging. -function check_zygote_gc_runtime_option { +# check_zygote_runtime_option CONTEXT RUNTIME_OPTION +# -------------------------------------------------- +# Check that all zygote processes are passed RUNTIME_OPTION as runtime option. Use +# CONTEXT in logging. +function check_zygote_runtime_option { local context=$1 - local value=$2 + local runtime_option=$2 say \ - "[$context] Check that all zygote processes are passed the flag value as a GC runtime option..." - local runtime_option="-Xgc:$value" + "[$context] Check that all zygote processes are passed \`$runtime_option\` as runtime option..." for zygote in $zygotes; do - find_zygote_runtime_option "$zygote" "$runtime_option"\ + find_zygote_runtime_option "$zygote" "$runtime_option" \ || fail "Found no \`$runtime_option\` among runtime options passed to \`$zygote\`" done } -# check_no_zygote_gc_runtime_option CONTEXT VALUE -# ----------------------------------------------- -# Check that no zygote process is passed device configuration flag VALUE as GC -# runtime option. Use CONTEXT in logging. -function check_no_zygote_gc_runtime_option { +# check_no_zygote_runtime_option CONTEXT RUNTIME_OPTION +# ----------------------------------------------------- +# Check that no zygote process is passed RUNTIME_OPTION as runtime option. Use +# CONTEXT in logging. +function check_no_zygote_runtime_option { local context=$1 - local value=$2 + local runtime_option=$2 - say "[$context] Check no zygote process is passed the flag value as a GC runtime option..." - local runtime_option="-Xgc:$value" + say "[$context] Check that no zygote process is passed \`$runtime_option\` as runtime option..." for zygote in $zygotes; do - find_zygote_runtime_option "$zygote" "$runtime_option"\ + find_zygote_runtime_option "$zygote" "$runtime_option" \ && fail "Found \`$runtime_option\` among runtime options passed to \`$zygote\`" done } -# test_android_runtime_flag FLAG VALUE GC_RUNTIME_OPTION -# ------------------------------------------------------ -# Test device configuration FLAG with VALUE. Check that GC_RUNTIME_OPTION is -# passed as GC Runtime option by the zygote. +# check_android_runtime_message CONTEXT MESSAGE +# --------------------------------------------- +# Return whether AndroidRuntime generated MESSAGE in logcat. Use CONTEXT in +# logging. +function check_android_runtime_message { + local context=$1 + local message=$2 + + say "[$context] Check that AndroidRuntime generated expected message in logcat..." + adb logcat -d -s AndroidRuntime | grep -F -q "$message" \ + || fail "Found no message \"$message\" generated by AndroidRuntime" +} + +# check_no_android_runtime_message CONTEXT MESSAGE +# ------------------------------------------------ +# Return whether AndroidRuntime did not generate MESSAGE in logcat. Use CONTEXT +# in logging. +function check_no_android_runtime_message { + local context=$1 + local message=$2 + + say "[$context] Check that AndroidRuntime did not generate unexpected message in logcat..." + adb logcat -d -s AndroidRuntime | grep -F -q -v "$message" \ + || fail "Found message \"$message\" generated by AndroidRuntime" +} + +# test_android_runtime_flag FLAG VALUE CHECK_EFFECT CHECK_NO_EFFECT +# ----------------------------------------------------------------- +# Test device configuration FLAG with VALUE. CHECK_EFFECT and CHECK_NO_EFFECT +# are functions that are passed a context as sole argument and that respectively +# check the effect or the absence of effect of the flag. function test_android_runtime_flag { local flag=$1 local value=$2 - local gc_runtime_option=$3 + local check_effect=$3 + local check_no_effect=$4 # Persistent system property (set after a reboot) associated with the device # configuration flag. @@ -193,26 +219,26 @@ function test_android_runtime_flag { sleep 3 # Check that both the device configuration flag and the associated system - # property are set, but that the zygote hasn't had the flag passed to it as a - # GC runtime option (as we haven't rebooted yet). + # property are set, but that flag has not produced an effect on the system (as + # we haven't rebooted yet). local context="Flag set, before reboot" check_device_config_flag "$context" "$flag" "$value" check_system_property "$context" "$prop" "$value" - check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option" + $check_no_effect "$context" # Reboot device for the flag value to take effect. reboot_and_wait_for_device context="Flag set, after 1st reboot" check_device_config_flag "$context" "$flag" "$value" check_system_property "$context" "$prop" "$value" - check_zygote_gc_runtime_option "$context" "$gc_runtime_option" + $check_effect "$context" # Reboot device a second time and check that the state has persisted. reboot_and_wait_for_device context="Flag set, after 2nd reboot" check_device_config_flag "$context" "$flag" "$value" check_system_property "$context" "$prop" "$value" - check_zygote_gc_runtime_option "$context" "$gc_runtime_option" + $check_effect "$context" say "Unsetting device configuration flag..." adb shell device_config delete "$namespace" "$flag" >/dev/null @@ -224,9 +250,13 @@ function test_android_runtime_flag { context="Flag unset, after 3rd reboot" check_no_device_config_flag "$context" "$flag" check_no_system_property "$context" "$prop" - check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option" + $check_no_effect "$context" } + +# Pre-test actions. +# ================= + # Enumerate Zygote processes. case $(adb shell getprop ro.zygote) in (zygote32) zygotes="zygote";; @@ -235,8 +265,56 @@ case $(adb shell getprop ro.zygote) in esac # Test "enable_generational_cc" flag values. -test_android_runtime_flag enable_generational_cc false nogenerational_cc -test_android_runtime_flag enable_generational_cc true generational_cc +# ========================================== + +function check_nogenerational_cc { + check_zygote_runtime_option "$1" "-Xgc:nogenerational_cc" +} +function check_no_nogenerational_cc { + check_no_zygote_runtime_option "$1" "-Xgc:nogenerational_cc" +} + +function check_generational_cc { + check_zygote_runtime_option "$1" "-Xgc:generational_cc" +} +function check_no_generational_cc { + check_no_zygote_runtime_option "$1" "-Xgc:generational_cc" +} + +test_android_runtime_flag \ + enable_generational_cc false check_nogenerational_cc check_no_nogenerational_cc +test_android_runtime_flag \ + enable_generational_cc true check_generational_cc check_no_generational_cc + +# Test "enable_apex_image" flag values. +# ===================================== + +default_boot_image_message="Using default boot image" +function check_default_boot_image { + check_android_runtime_message "$1" "$default_boot_image_message" +} +function check_no_default_boot_image { + check_no_android_runtime_message "$1" "$default_boot_image_message" +} + +apex_boot_image_option="-Ximage:/system/framework/apex.art" +apex_boot_image_message="Using Apex boot image: '$apex_boot_image_option'" +function check_apex_boot_image { + check_zygote_runtime_option "$1" "$apex_boot_image_option" + check_android_runtime_message "$1" "$apex_boot_image_message" +} +function check_no_apex_boot_image { + check_no_zygote_runtime_option "$1" "$apex_boot_image_option" + check_no_android_runtime_message "$1" "$apex_boot_image_message" +} + +test_android_runtime_flag \ + enable_apex_image false check_default_boot_image check_no_default_boot_image +test_android_runtime_flag \ + enable_apex_image true check_apex_boot_image check_no_apex_boot_image + +# Post-test actions. +# ================== if [[ "$exit_status" -eq 0 ]]; then banner "All tests passed." diff --git a/core/proto/android/app/settings_enums.proto b/core/proto/android/app/settings_enums.proto index efbe8bacb58fcf3c63f5bd67799437cb4cd6f75c..445075da7f90c42ad4e08617ad436935f6e3d485 100644 --- a/core/proto/android/app/settings_enums.proto +++ b/core/proto/android/app/settings_enums.proto @@ -616,7 +616,7 @@ enum Action { // OS: Q ACTION_PANEL_INTERACTION = 1658; - // ACTION: Show Contextual homepage, log latency in loading cards + // ACTION: Show Contextual homepage. Log total loading latency. ACTION_CONTEXTUAL_HOME_SHOW = 1662; // ACTION: Contextual card displays @@ -649,6 +649,15 @@ enum Action { ACTION_ATCSCUC = 1680; ACTION_ATCHNUC = 1681; + + // ACTION: Individual contextual card loading time + ACTION_CONTEXTUAL_CARD_LOAD = 1684; + + //ACTION: Contextual card loading timeout + ACTION_CONTEXTUAL_CARD_LOAD_TIMEOUT = 1685; + + //ACTION: Log result for each card's eligibility check + ACTION_CONTEXTUAL_CARD_ELIGIBILITY = 1686; } /** @@ -2284,4 +2293,10 @@ enum PageId { PAGE_ATSCP = 1672; PAGE_ATHNP = 1673; + + // OPEN: Accessibility detail settings (android.settings.ACCESSIBILITY_DETAILS_SETTINGS intent) + ACCESSIBILITY_DETAILS_SETTINGS = 1682; + + // Open: Settings will show the conditional when Grayscale mode is on + SETTINGS_CONDITION_GRAYSCALE_MODE = 1683; } diff --git a/core/proto/android/hardware/biometrics/enums.proto b/core/proto/android/hardware/biometrics/enums.proto index 973e3e65cf1a34db8a2875d0841000f5f34cbb1a..f2e06383b5b13b6ebfe990838b8a8f1dc9245041 100644 --- a/core/proto/android/hardware/biometrics/enums.proto +++ b/core/proto/android/hardware/biometrics/enums.proto @@ -55,4 +55,6 @@ enum IssueEnum { // 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/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto index 6f9a5649d4acf00defd10a9c6acaaf82cdef6151..79a5dd78ffb39e3dec63a50525563fa128a8c636 100644 --- a/core/proto/android/server/activitymanagerservice.proto +++ b/core/proto/android/server/activitymanagerservice.proto @@ -132,6 +132,7 @@ message KeyguardControllerProto { optional bool keyguard_showing = 1; repeated KeyguardOccludedProto keyguard_occluded_states= 2; + optional bool aod_showing = 3; } message KeyguardOccludedProto { diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 774175dd9d79267e82f98447d59388e7e02a7019..58dbb0266c32ab440b155ecdcdd21f0c9d5928f8 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2038,12 +2038,12 @@ + android:protectionLevel="signature" /> + + + + + + + + + + + + android:hasRoundedCorners="true" + android:shareInterpolator="false" + android:zAdjustment="top"> + android:shareInterpolator="false" + android:hasRoundedCorners="true" + android:zAdjustment="top"> + + + + + + diff --git a/core/res/res/color-car/car_button_text_color.xml b/core/res/res/color-car/car_button_text_color.xml new file mode 100644 index 0000000000000000000000000000000000000000..eda54d9abbb2ea3d7a4e888132a0a4f85678e258 --- /dev/null +++ b/core/res/res/color-car/car_button_text_color.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/core/res/res/color-car/car_switch.xml b/core/res/res/color-car/car_switch.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebf3841ca9d25abf7af440c65c2503aabc28cc40 --- /dev/null +++ b/core/res/res/color-car/car_switch.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/core/res/res/drawable-car/car_button_background.xml b/core/res/res/drawable-car/car_button_background.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e2610c5047bf7554198ae28ebf62237835517be --- /dev/null +++ b/core/res/res/drawable-car/car_button_background.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/drawable-car/car_checkbox.xml b/core/res/res/drawable-car/car_checkbox.xml new file mode 100644 index 0000000000000000000000000000000000000000..651e6786c460f4baa07feea0d8a6e46f79ac6c35 --- /dev/null +++ b/core/res/res/drawable-car/car_checkbox.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/core/res/res/drawable-car/car_dialog_button_background.xml b/core/res/res/drawable-car/car_dialog_button_background.xml new file mode 100644 index 0000000000000000000000000000000000000000..dc742d57b147b121d4efe152530854a00fa445eb --- /dev/null +++ b/core/res/res/drawable-car/car_dialog_button_background.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_thumb.xml b/core/res/res/drawable-car/car_seekbar_thumb.xml new file mode 100644 index 0000000000000000000000000000000000000000..fe9c7732bdccf57ae6802203109493b62e4e58db --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_thumb.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_thumb_dark.xml b/core/res/res/drawable-car/car_seekbar_thumb_dark.xml new file mode 100644 index 0000000000000000000000000000000000000000..8ac9975816a6bd8003a906ed7ddd3e4c9d1bc64d --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_thumb_dark.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_thumb_light.xml b/core/res/res/drawable-car/car_seekbar_thumb_light.xml new file mode 100644 index 0000000000000000000000000000000000000000..b212b766b9f0948c2e42dc7229d55e7d16742fa0 --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_thumb_light.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_track.xml b/core/res/res/drawable-car/car_seekbar_track.xml new file mode 100644 index 0000000000000000000000000000000000000000..5ea7b2257fe60aa85d59aae91d4cf55660491f5a --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_track.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_track_dark.xml b/core/res/res/drawable-car/car_seekbar_track_dark.xml new file mode 100644 index 0000000000000000000000000000000000000000..19f6340521cd293cd549e45225c65767c152104d --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_track_dark.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/drawable-car/car_seekbar_track_light.xml b/core/res/res/drawable-car/car_seekbar_track_light.xml new file mode 100644 index 0000000000000000000000000000000000000000..d23ca33e04c3d8b7662db2a597c4e82b770a70cd --- /dev/null +++ b/core/res/res/drawable-car/car_seekbar_track_light.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/res/res/drawable-car/car_switch_thumb.xml b/core/res/res/drawable-car/car_switch_thumb.xml new file mode 100644 index 0000000000000000000000000000000000000000..03efc189aa9573622e8b096932aa8aa7b827a8ba --- /dev/null +++ b/core/res/res/drawable-car/car_switch_thumb.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml index 6839e39a87d6a20c60021f0c2167b55d1ed87909..08e9fada2f124cc722400dfc0586f959556cdc5f 100644 --- a/core/res/res/drawable-nodpi/stat_sys_adb.xml +++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml @@ -1,11 +1,11 @@ + + + + + + + + + + + + + + + + + diff --git a/core/res/res/layout-car/car_preference_category.xml b/core/res/res/layout-car/car_preference_category.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1f73421e1852c824b1776bedfb2b26ab2c901d1 --- /dev/null +++ b/core/res/res/layout-car/car_preference_category.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + diff --git a/core/res/res/layout-car/car_resolver_different_item_header.xml b/core/res/res/layout-car/car_resolver_different_item_header.xml new file mode 100644 index 0000000000000000000000000000000000000000..222ecc68979227cfb8288629efe27f8bc02d10f9 --- /dev/null +++ b/core/res/res/layout-car/car_resolver_different_item_header.xml @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/core/res/res/layout-car/car_resolver_list.xml b/core/res/res/layout-car/car_resolver_list.xml new file mode 100644 index 0000000000000000000000000000000000000000..15a864505d3f584b4e1a1a1d2f4319bf4a75857d --- /dev/null +++ b/core/res/res/layout-car/car_resolver_list.xml @@ -0,0 +1,112 @@ + + + + + + + + + + +