Merge "Game Driver Metrics: add GpuStatsPuller to get gpu global stats"
diff --git a/api/current.txt b/api/current.txt
index 32747e7..95297f9 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -287,6 +287,7 @@
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 @@
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<android.accessibilityservice.AccessibilityServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityServiceInfo> 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 @@
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<android.accounts.Account> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.accounts.Account> CREATOR;
field public final String name;
field public final String type;
}
@@ -3036,7 +3037,7 @@
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<android.accounts.AccountAuthenticatorResponse> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AccountAuthenticatorResponse> CREATOR;
}
public class AccountManager {
@@ -3153,7 +3154,7 @@
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<android.accounts.AuthenticatorDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AuthenticatorDescription> CREATOR;
field public final int accountPreferencesId;
field public final boolean customTokens;
field public final int iconId;
@@ -3980,7 +3981,7 @@
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<android.app.ActivityManager.MemoryInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.MemoryInfo> CREATOR;
field public long availMem;
field public boolean lowMemory;
field public long threshold;
@@ -3993,7 +3994,7 @@
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<android.app.ActivityManager.ProcessErrorStateInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.ProcessErrorStateInfo> 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 @@
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<android.app.ActivityManager.RecentTaskInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RecentTaskInfo> CREATOR;
field @Deprecated public int affiliatedTaskId;
field @Deprecated public CharSequence description;
field @Deprecated public int id;
@@ -4025,7 +4026,7 @@
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<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> 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 @@
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<android.app.ActivityManager.RunningServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningServiceInfo> 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 @@
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<android.app.ActivityManager.RunningTaskInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningTaskInfo> CREATOR;
field @Deprecated public CharSequence description;
field @Deprecated public int id;
field @Deprecated public int numRunning;
@@ -4106,7 +4107,7 @@
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<android.app.ActivityManager.TaskDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.TaskDescription> CREATOR;
}
public class ActivityOptions {
@@ -4167,7 +4168,7 @@
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<android.app.AlarmManager.AlarmClockInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AlarmManager.AlarmClockInfo> CREATOR;
}
public static interface AlarmManager.OnAlarmListener {
@@ -4250,10 +4251,9 @@
public class AppComponentFactory {
ctor public AppComponentFactory();
- method public android.content.pm.ApplicationInfo getApplicationInfo();
method @NonNull public android.app.Activity instantiateActivity(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
method @NonNull public android.app.Application instantiateApplication(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader);
+ method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader, @NonNull android.content.pm.ApplicationInfo);
method @NonNull public android.content.ContentProvider instantiateProvider(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
method @NonNull public android.content.BroadcastReceiver instantiateReceiver(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
method @NonNull public android.app.Service instantiateService(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
@@ -4372,7 +4372,7 @@
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<android.app.ApplicationErrorReport> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationErrorReport> 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
@@ -4440,7 +4440,7 @@
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<android.app.AuthenticationRequiredException> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AuthenticationRequiredException> CREATOR;
}
public final class AutomaticZenRule implements android.os.Parcelable {
@@ -4463,7 +4463,7 @@
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<android.app.AutomaticZenRule> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AutomaticZenRule> CREATOR;
}
public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
@@ -5289,7 +5289,7 @@
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<android.app.Notification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification> 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
@@ -5398,7 +5398,7 @@
method public int getSemanticAction();
method public boolean isContextual();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.Notification.Action> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.Action> 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
@@ -5480,7 +5480,7 @@
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<android.app.Notification.BubbleMetadata> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.BubbleMetadata> CREATOR;
}
public static class Notification.BubbleMetadata.Builder {
@@ -5499,74 +5499,74 @@
ctor public Notification.Builder(android.content.Context, String);
ctor @Deprecated public Notification.Builder(android.content.Context);
method @Deprecated public android.app.Notification.Builder addAction(int, CharSequence, android.app.PendingIntent);
- method public android.app.Notification.Builder addAction(android.app.Notification.Action);
- method public android.app.Notification.Builder addExtras(android.os.Bundle);
+ method @NonNull public android.app.Notification.Builder addAction(android.app.Notification.Action);
+ method @NonNull public android.app.Notification.Builder addExtras(android.os.Bundle);
method @Deprecated public android.app.Notification.Builder addPerson(String);
- method public android.app.Notification.Builder addPerson(android.app.Person);
- method public android.app.Notification build();
+ method @NonNull public android.app.Notification.Builder addPerson(android.app.Person);
+ method @NonNull public android.app.Notification build();
method public android.widget.RemoteViews createBigContentView();
method public android.widget.RemoteViews createContentView();
method public android.widget.RemoteViews createHeadsUpContentView();
- method public android.app.Notification.Builder extend(android.app.Notification.Extender);
+ method @NonNull public android.app.Notification.Builder extend(android.app.Notification.Extender);
method public android.os.Bundle getExtras();
method @Deprecated public android.app.Notification getNotification();
method public android.app.Notification.Style getStyle();
- method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
- method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
- method public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
- method public android.app.Notification.Builder setAutoCancel(boolean);
- method public android.app.Notification.Builder setBadgeIconType(int);
- method public android.app.Notification.Builder setBubbleMetadata(android.app.Notification.BubbleMetadata);
- method public android.app.Notification.Builder setCategory(String);
- method public android.app.Notification.Builder setChannelId(String);
- method public android.app.Notification.Builder setChronometerCountDown(boolean);
- method public android.app.Notification.Builder setColor(@ColorInt int);
- method public android.app.Notification.Builder setColorized(boolean);
+ method @NonNull public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
+ method @NonNull public android.app.Notification.Builder setActions(android.app.Notification.Action...);
+ method @NonNull public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
+ method @NonNull public android.app.Notification.Builder setAutoCancel(boolean);
+ method @NonNull public android.app.Notification.Builder setBadgeIconType(int);
+ method @NonNull public android.app.Notification.Builder setBubbleMetadata(android.app.Notification.BubbleMetadata);
+ method @NonNull public android.app.Notification.Builder setCategory(String);
+ method @NonNull public android.app.Notification.Builder setChannelId(String);
+ method @NonNull public android.app.Notification.Builder setChronometerCountDown(boolean);
+ method @NonNull public android.app.Notification.Builder setColor(@ColorInt int);
+ method @NonNull public android.app.Notification.Builder setColorized(boolean);
method @Deprecated public android.app.Notification.Builder setContent(android.widget.RemoteViews);
method @Deprecated public android.app.Notification.Builder setContentInfo(CharSequence);
- method public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
- method public android.app.Notification.Builder setContentText(CharSequence);
- method public android.app.Notification.Builder setContentTitle(CharSequence);
- method public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
- method public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
- method public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
+ method @NonNull public android.app.Notification.Builder setContentText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setContentTitle(CharSequence);
+ method @NonNull public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
+ method @NonNull public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
method @Deprecated public android.app.Notification.Builder setDefaults(int);
- method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
- method public android.app.Notification.Builder setExtras(android.os.Bundle);
- method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
- method public android.app.Notification.Builder setGroup(String);
- method public android.app.Notification.Builder setGroupAlertBehavior(int);
- method public android.app.Notification.Builder setGroupSummary(boolean);
- method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
- method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
+ method @NonNull public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
+ method @NonNull public android.app.Notification.Builder setExtras(android.os.Bundle);
+ method @NonNull public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+ method @NonNull public android.app.Notification.Builder setGroup(String);
+ method @NonNull public android.app.Notification.Builder setGroupAlertBehavior(int);
+ method @NonNull public android.app.Notification.Builder setGroupSummary(boolean);
+ method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
+ method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
method @Deprecated public android.app.Notification.Builder setLights(@ColorInt int, int, int);
- method public android.app.Notification.Builder setLocalOnly(boolean);
- method public android.app.Notification.Builder setNumber(int);
- method public android.app.Notification.Builder setOngoing(boolean);
- method public android.app.Notification.Builder setOnlyAlertOnce(boolean);
+ method @NonNull public android.app.Notification.Builder setLocalOnly(boolean);
+ method @NonNull public android.app.Notification.Builder setNumber(int);
+ method @NonNull public android.app.Notification.Builder setOngoing(boolean);
+ method @NonNull public android.app.Notification.Builder setOnlyAlertOnce(boolean);
method @Deprecated public android.app.Notification.Builder setPriority(int);
- method public android.app.Notification.Builder setProgress(int, int, boolean);
- method public android.app.Notification.Builder setPublicVersion(android.app.Notification);
- method public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
- method public android.app.Notification.Builder setSettingsText(CharSequence);
- method public android.app.Notification.Builder setShortcutId(String);
- method public android.app.Notification.Builder setShowWhen(boolean);
- method public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
- method public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
- method public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
- method public android.app.Notification.Builder setSortKey(String);
+ method @NonNull public android.app.Notification.Builder setProgress(int, int, boolean);
+ method @NonNull public android.app.Notification.Builder setPublicVersion(android.app.Notification);
+ method @NonNull public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
+ method @NonNull public android.app.Notification.Builder setSettingsText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setShortcutId(String);
+ method @NonNull public android.app.Notification.Builder setShowWhen(boolean);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
+ method @NonNull public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
+ method @NonNull public android.app.Notification.Builder setSortKey(String);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, int);
method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes);
- method public android.app.Notification.Builder setStyle(android.app.Notification.Style);
- method public android.app.Notification.Builder setSubText(CharSequence);
- method public android.app.Notification.Builder setTicker(CharSequence);
+ method @NonNull public android.app.Notification.Builder setStyle(android.app.Notification.Style);
+ method @NonNull public android.app.Notification.Builder setSubText(CharSequence);
+ method @NonNull public android.app.Notification.Builder setTicker(CharSequence);
method @Deprecated public android.app.Notification.Builder setTicker(CharSequence, android.widget.RemoteViews);
- method public android.app.Notification.Builder setTimeoutAfter(long);
- method public android.app.Notification.Builder setUsesChronometer(boolean);
+ method @NonNull public android.app.Notification.Builder setTimeoutAfter(long);
+ method @NonNull public android.app.Notification.Builder setUsesChronometer(boolean);
method @Deprecated public android.app.Notification.Builder setVibrate(long[]);
- method public android.app.Notification.Builder setVisibility(int);
- method public android.app.Notification.Builder setWhen(long);
+ method @NonNull public android.app.Notification.Builder setVisibility(int);
+ method @NonNull public android.app.Notification.Builder setWhen(long);
}
public static final class Notification.CarExtender implements android.app.Notification.Extender {
@@ -5762,7 +5762,7 @@
method public boolean shouldShowLights();
method public boolean shouldVibrate();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.NotificationChannel> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannel> CREATOR;
field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
}
@@ -5777,7 +5777,7 @@
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<android.app.NotificationChannelGroup> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannelGroup> CREATOR;
}
public class NotificationManager {
@@ -5855,7 +5855,7 @@
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<android.app.NotificationManager.Policy> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationManager.Policy> 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
@@ -5907,7 +5907,7 @@
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<android.app.PendingIntent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.PendingIntent> 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
@@ -5935,7 +5935,7 @@
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<android.app.Person> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.Person> CREATOR;
}
public static class Person.Builder {
@@ -5952,7 +5952,7 @@
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<android.app.PictureInPictureParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
}
public static class PictureInPictureParams.Builder {
@@ -6005,7 +6005,7 @@
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<android.app.RecoverableSecurityException> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.RecoverableSecurityException> CREATOR;
}
public final class RemoteAction implements android.os.Parcelable {
@@ -6022,7 +6022,7 @@
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<android.app.RemoteAction> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteAction> CREATOR;
}
public final class RemoteInput implements android.os.Parcelable {
@@ -6042,7 +6042,7 @@
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<android.app.RemoteInput> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteInput> 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
@@ -6164,13 +6164,14 @@
method public boolean shouldRewriteQueryFromData();
method public boolean shouldRewriteQueryFromText();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.SearchableInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.SearchableInfo> CREATOR;
}
public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
ctor public Service();
method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
method public final android.app.Application getApplication();
+ method public final int getForegroundServiceType();
method @Nullable public abstract android.os.IBinder onBind(android.content.Intent);
method public void onConfigurationChanged(android.content.res.Configuration);
method public void onCreate();
@@ -6370,7 +6371,7 @@
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<android.app.VoiceInteractor.PickOptionRequest.Option> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.PickOptionRequest.Option> CREATOR;
}
public static class VoiceInteractor.Prompt implements android.os.Parcelable {
@@ -6381,7 +6382,7 @@
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<android.app.VoiceInteractor.Prompt> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.Prompt> CREATOR;
}
public abstract static class VoiceInteractor.Request {
@@ -6404,7 +6405,7 @@
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<android.app.WallpaperColors> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
}
public final class WallpaperInfo implements android.os.Parcelable {
@@ -6427,7 +6428,7 @@
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<android.app.WallpaperInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperInfo> CREATOR;
}
public class WallpaperManager {
@@ -6498,7 +6499,7 @@
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<android.app.admin.ConnectEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ConnectEvent> CREATOR;
}
public class DelegatedAdminReceiver extends android.content.BroadcastReceiver {
@@ -6524,7 +6525,7 @@
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<android.app.admin.DeviceAdminInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DeviceAdminInfo> 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 +6975,7 @@
method public java.util.List<java.net.InetAddress> getInetAddresses();
method public int getTotalResolvedAddressCount();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.admin.DnsEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DnsEvent> CREATOR;
}
public class FreezePeriod {
@@ -6988,7 +6989,7 @@
method public long getId();
method public String getPackageName();
method public long getTimestamp();
- field public static final android.os.Parcelable.Creator<android.app.admin.NetworkEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.NetworkEvent> CREATOR;
}
public class SecurityLog {
@@ -7039,7 +7040,7 @@
method public int getTag();
method public long getTimeNanos();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.admin.SecurityLog.SecurityEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SecurityLog.SecurityEvent> CREATOR;
}
public final class SystemUpdateInfo implements android.os.Parcelable {
@@ -7047,7 +7048,7 @@
method public long getReceivedTime();
method public int getSecurityPatchState();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdateInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdateInfo> 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 +7065,7 @@
method public int getPolicyType();
method public android.app.admin.SystemUpdatePolicy setFreezePeriods(java.util.List<android.app.admin.FreezePeriod>);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy> 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 +7075,7 @@
method public int describeContents();
method public int getErrorCode();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy.ValidationFailedException> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy.ValidationFailedException> 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 +7103,7 @@
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<android.app.assist.AssistContent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistContent> CREATOR;
}
public class AssistStructure implements android.os.Parcelable {
@@ -7115,7 +7116,7 @@
method public int getWindowNodeCount();
method public boolean isHomeActivity();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.assist.AssistStructure> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistStructure> CREATOR;
}
public static class AssistStructure.ViewNode {
@@ -7321,7 +7322,7 @@
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<android.app.job.JobInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo> 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 +7366,7 @@
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<android.app.job.JobInfo.TriggerContentUri> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo.TriggerContentUri> CREATOR;
field public static final int FLAG_NOTIFY_FOR_DESCENDANTS = 1; // 0x1
}
@@ -7383,7 +7384,7 @@
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<android.app.job.JobParameters> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobParameters> CREATOR;
}
public abstract class JobScheduler {
@@ -7424,7 +7425,7 @@
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<android.app.job.JobWorkItem> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobWorkItem> CREATOR;
}
}
@@ -7460,7 +7461,7 @@
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<android.app.slice.Slice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.Slice> 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 +7525,7 @@
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<android.app.slice.SliceItem> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceItem> 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 +7585,7 @@
method public int getRevision();
method public String getType();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.slice.SliceSpec> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceSpec> CREATOR;
}
}
@@ -7601,7 +7602,7 @@
method public long getLastTimeStamp();
method public long getTotalTimeActive();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
}
public final class EventStats implements android.os.Parcelable {
@@ -7615,7 +7616,7 @@
method public long getLastTimeStamp();
method public long getTotalTime();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.usage.EventStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.EventStats> CREATOR;
}
public final class ExternalStorageStats implements android.os.Parcelable {
@@ -7626,7 +7627,7 @@
method public long getTotalBytes();
method public long getVideoBytes();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
}
public final class NetworkStats implements java.lang.AutoCloseable {
@@ -7691,7 +7692,7 @@
method public long getCacheBytes();
method public long getDataBytes();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
}
public class StorageStatsManager {
@@ -7708,7 +7709,7 @@
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<android.app.usage.UsageEvents> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageEvents> CREATOR;
}
public static final class UsageEvents.Event {
@@ -7753,7 +7754,7 @@
method public long getTotalTimeInForeground();
method public long getTotalTimeVisible();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.usage.UsageStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageStats> CREATOR;
}
public final class UsageStatsManager {
@@ -7886,7 +7887,7 @@
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<android.appwidget.AppWidgetProviderInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.appwidget.AppWidgetProviderInfo> 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 +8238,7 @@
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<android.bluetooth.BluetoothClass> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothClass> CREATOR;
}
public static class BluetoothClass.Device {
@@ -8355,7 +8356,7 @@
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<android.bluetooth.BluetoothDevice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothDevice> 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 +8465,7 @@
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<android.bluetooth.BluetoothGattCharacteristic> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattCharacteristic> 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 +8505,7 @@
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<android.bluetooth.BluetoothGattDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattDescriptor> 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 +8564,7 @@
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<android.bluetooth.BluetoothGattService> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattService> 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<android.bluetooth.BluetoothGattCharacteristic> mCharacteristics;
@@ -8627,7 +8628,7 @@
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<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
}
@Deprecated public abstract class BluetoothHealthCallback {
@@ -8700,7 +8701,7 @@
method public int getTokenBucketSize();
method public int getTokenRate();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppQosSettings> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppQosSettings> 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 +8717,7 @@
method public String getProvider();
method public byte getSubclass();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppSdpSettings> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppSdpSettings> CREATOR;
}
public final class BluetoothManager {
@@ -8797,7 +8798,7 @@
method public java.util.Map<android.os.ParcelUuid,byte[]> getServiceData();
method public java.util.List<android.os.ParcelUuid> getServiceUuids();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseData> CREATOR;
}
public static final class AdvertiseData.Builder {
@@ -8824,7 +8825,7 @@
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<android.bluetooth.le.AdvertiseSettings> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseSettings> CREATOR;
}
public static final class AdvertiseSettings.Builder {
@@ -8877,7 +8878,7 @@
method public boolean isLegacy();
method public boolean isScannable();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> 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 +8971,7 @@
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<android.bluetooth.le.ScanFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanFilter> CREATOR;
}
public static final class ScanFilter.Builder {
@@ -9018,7 +9019,7 @@
method public boolean isConnectable();
method public boolean isLegacy();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanResult> 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 +9040,7 @@
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<android.bluetooth.le.ScanSettings> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanSettings> 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 +9072,7 @@
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<android.companion.AssociationRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
}
public static final class AssociationRequest.Builder {
@@ -9084,7 +9085,7 @@
public final class BluetoothDeviceFilter implements android.companion.DeviceFilter<android.bluetooth.BluetoothDevice> {
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.companion.BluetoothDeviceFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothDeviceFilter> CREATOR;
}
public static final class BluetoothDeviceFilter.Builder {
@@ -9099,7 +9100,7 @@
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<android.companion.BluetoothLeDeviceFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothLeDeviceFilter> CREATOR;
}
public static final class BluetoothLeDeviceFilter.Builder {
@@ -9133,7 +9134,7 @@
public final class WifiDeviceFilter implements android.companion.DeviceFilter<android.net.wifi.ScanResult> {
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
}
public static final class WifiDeviceFilter.Builder {
@@ -9257,7 +9258,7 @@
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<android.content.ClipData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipData> CREATOR;
}
public static class ClipData.Item {
@@ -9290,7 +9291,7 @@
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<android.content.ClipDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipDescription> 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 +9351,7 @@
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<android.content.ComponentName> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ComponentName> CREATOR;
}
public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
@@ -9453,7 +9454,7 @@
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<android.content.ContentProviderOperation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderOperation> CREATOR;
}
public static class ContentProviderOperation.Builder {
@@ -9474,7 +9475,7 @@
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<android.content.ContentProviderResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderResult> CREATOR;
field public final Integer count;
field public final android.net.Uri uri;
}
@@ -9643,7 +9644,7 @@
method public int size();
method public java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> valueSet();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.ContentValues> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentValues> CREATOR;
field public static final String TAG = "ContentValues";
}
@@ -10337,7 +10338,7 @@
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<android.content.Intent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent> 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 +10476,7 @@
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<android.content.Intent.ShortcutIconResource> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent.ShortcutIconResource> CREATOR;
field public String packageName;
field public String resourceName;
}
@@ -10534,7 +10535,7 @@
method public final java.util.Iterator<java.lang.String> 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<android.content.IntentFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentFilter> 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 +10577,7 @@
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<android.content.IntentSender> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentSender> CREATOR;
}
public static interface IntentSender.OnFinished {
@@ -10639,7 +10640,7 @@
method public int describeContents();
method @NonNull public android.net.Uri getUri();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.LocusId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.LocusId> CREATOR;
}
public class MutableContextWrapper extends android.content.ContextWrapper {
@@ -10661,7 +10662,7 @@
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<android.content.PeriodicSync> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.PeriodicSync> CREATOR;
field public final android.accounts.Account account;
field public final String authority;
field public final android.os.Bundle extras;
@@ -10715,7 +10716,7 @@
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<android.content.RestrictionEntry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.RestrictionEntry> 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 +10829,7 @@
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<android.content.SyncAdapterType> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncAdapterType> CREATOR;
field public final String accountType;
field public final String authority;
field public final boolean isKey;
@@ -10850,7 +10851,7 @@
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<android.content.SyncRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncRequest> CREATOR;
}
public static class SyncRequest.Builder {
@@ -10880,7 +10881,7 @@
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<android.content.SyncResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncResult> CREATOR;
field public boolean databaseError;
field public long delayUntil;
field public boolean fullSyncRequested;
@@ -10898,7 +10899,7 @@
method public void clear();
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.SyncStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncStats> CREATOR;
field public long numAuthExceptions;
field public long numConflictDetectedExceptions;
field public long numDeletes;
@@ -10928,7 +10929,7 @@
method public boolean isReadPermission();
method public boolean isWritePermission();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.UriPermission> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.UriPermission> CREATOR;
field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L
}
@@ -10961,7 +10962,7 @@
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<android.content.pm.ActivityInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ActivityInfo> 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 +11054,7 @@
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<android.content.pm.ApplicationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> 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 +11129,7 @@
method @NonNull public java.util.List<java.lang.String> getPackageNames();
method public int getSequenceNumber();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
}
public class ComponentInfo extends android.content.pm.PackageItemInfo {
@@ -11154,7 +11155,7 @@
method public int describeContents();
method public String getGlEsVersion();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.ConfigurationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ConfigurationInfo> 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 +11178,7 @@
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<android.content.pm.FeatureGroupInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureGroupInfo> CREATOR;
field public android.content.pm.FeatureInfo[] features;
}
@@ -11187,7 +11188,7 @@
method public int describeContents();
method public String getGlEsVersion();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.FeatureInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureInfo> 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 +11201,7 @@
ctor public InstrumentationInfo();
ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo);
method public int describeContents();
- field public static final android.os.Parcelable.Creator<android.content.pm.InstrumentationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstrumentationInfo> CREATOR;
field public String dataDir;
field public boolean functionalTest;
field public boolean handleProfiling;
@@ -11224,7 +11225,7 @@
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<android.content.pm.LabeledIntent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LabeledIntent> CREATOR;
}
public class LauncherActivityInfo {
@@ -11277,7 +11278,7 @@
method public long getTotalUsageLimit();
method public long getUsageRemaining();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.AppUsageLimit> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.AppUsageLimit> CREATOR;
}
public abstract static class LauncherApps.Callback {
@@ -11303,7 +11304,7 @@
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<android.content.pm.LauncherApps.PinItemRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.PinItemRequest> CREATOR;
field public static final int REQUEST_TYPE_APPWIDGET = 2; // 0x2
field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
}
@@ -11328,7 +11329,7 @@
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<android.content.pm.ModuleInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ModuleInfo> CREATOR;
}
public class PackageInfo implements android.os.Parcelable {
@@ -11337,7 +11338,7 @@
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<android.content.pm.PackageInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageInfo> 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 +11802,7 @@
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<android.content.pm.PackageStats> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageStats> CREATOR;
field @Deprecated public long cacheSize;
field @Deprecated public long codeSize;
field @Deprecated public long dataSize;
@@ -11818,7 +11819,7 @@
ctor public PathPermission(android.os.Parcel);
method public String getReadPermission();
method public String getWritePermission();
- field public static final android.os.Parcelable.Creator<android.content.pm.PathPermission> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PathPermission> CREATOR;
}
public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
@@ -11826,7 +11827,7 @@
ctor public PermissionGroupInfo(android.content.pm.PermissionGroupInfo);
method public int describeContents();
method public CharSequence loadDescription(android.content.pm.PackageManager);
- field public static final android.os.Parcelable.Creator<android.content.pm.PermissionGroupInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionGroupInfo> CREATOR;
field public static final int FLAG_PERSONAL_INFO = 1; // 0x1
field public int descriptionRes;
field public int flags;
@@ -11841,7 +11842,7 @@
method public int getProtection();
method public int getProtectionFlags();
method public CharSequence loadDescription(android.content.pm.PackageManager);
- field public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> 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 +11874,7 @@
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<android.content.pm.ProviderInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ProviderInfo> CREATOR;
field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
field public String authority;
field public int flags;
@@ -11897,7 +11898,7 @@
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<android.content.pm.ResolveInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ResolveInfo> CREATOR;
field public android.content.pm.ActivityInfo activityInfo;
field public android.content.IntentFilter filter;
field public int icon;
@@ -11925,7 +11926,7 @@
method public int describeContents();
method public void dump(android.util.Printer, String);
method public int getForegroundServiceType();
- field public static final android.os.Parcelable.Creator<android.content.pm.ServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ServiceInfo> 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 +11952,7 @@
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<android.content.pm.SharedLibraryInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> 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 +11982,7 @@
method public boolean isImmutable();
method public boolean isPinned();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> 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 +12043,7 @@
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<android.content.pm.Signature> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
}
public final class SigningInfo implements android.os.Parcelable {
@@ -12054,7 +12055,7 @@
method public boolean hasMultipleSigners();
method public boolean hasPastSigningCertificates();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.SigningInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SigningInfo> CREATOR;
}
public final class VersionedPackage implements android.os.Parcelable {
@@ -12065,7 +12066,7 @@
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<android.content.pm.VersionedPackage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
}
}
@@ -12086,7 +12087,7 @@
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<android.content.res.AssetFileDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.res.AssetFileDescriptor> CREATOR;
field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL
}
@@ -12132,7 +12133,7 @@
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<android.content.res.ColorStateList> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ColorStateList> CREATOR;
}
public final class Configuration implements java.lang.Comparable<android.content.res.Configuration> android.os.Parcelable {
@@ -12167,7 +12168,7 @@
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<android.content.res.Configuration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.res.Configuration> 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 +12256,7 @@
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<android.content.res.ObbInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ObbInfo> CREATOR;
field public static final int OBB_OVERLAY = 1; // 0x1
field public String filename;
field public int flags;
@@ -12334,7 +12335,7 @@
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 +12513,7 @@
method public int getInt(int);
method public long getLong(int);
method public android.net.Uri getNotificationUri();
- method public default java.util.List<android.net.Uri> getNotificationUris();
+ method @Nullable public default java.util.List<android.net.Uri> getNotificationUris();
method public int getPosition();
method public short getShort(int);
method public String getString(int);
@@ -12598,7 +12599,7 @@
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<android.database.CursorWindow> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.database.CursorWindow> CREATOR;
}
public class CursorWrapper implements android.database.Cursor {
@@ -13071,19 +13072,19 @@
method public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String, String);
method @Deprecated public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String[], String, String);
method public int delete(@NonNull android.database.sqlite.SQLiteDatabase, @Nullable String, @Nullable String[]);
- method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+ method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
method public boolean getDistinct();
- method public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
+ method @Nullable public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
method public boolean getStrict();
- method public String getTables();
+ method @Nullable public String getTables();
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String);
method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
- method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
+ method public void setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
method public void setDistinct(boolean);
- method public void setProjectionMap(java.util.Map<java.lang.String,java.lang.String>);
+ method public void setProjectionMap(@Nullable java.util.Map<java.lang.String,java.lang.String>);
method public void setStrict(boolean);
- method public void setTables(String);
+ method public void setTables(@Nullable String);
method public int update(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues, @Nullable String, @Nullable String[]);
}
@@ -13359,7 +13360,7 @@
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<android.gesture.Gesture> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.gesture.Gesture> CREATOR;
}
public final class GestureLibraries {
@@ -13553,7 +13554,7 @@
method @CheckResult public android.graphics.Bitmap extractAlpha(android.graphics.Paint, int[]);
method public int getAllocationByteCount();
method public int getByteCount();
- method public android.graphics.Color getColor(int, int);
+ method @NonNull public android.graphics.Color getColor(int, int);
method @Nullable public android.graphics.ColorSpace getColorSpace();
method public android.graphics.Bitmap.Config getConfig();
method public int getDensity();
@@ -13591,7 +13592,7 @@
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<android.graphics.Bitmap> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Bitmap> CREATOR;
field public static final int DENSITY_NONE = 0; // 0x0
}
@@ -14236,7 +14237,7 @@
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<android.graphics.Insets> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Insets> CREATOR;
field public static final android.graphics.Insets NONE;
field public final int bottom;
field public final int left;
@@ -14740,7 +14741,7 @@
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<android.graphics.Point> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Point> CREATOR;
field public int x;
field public int y;
}
@@ -14759,7 +14760,7 @@
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<android.graphics.PointF> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.PointF> CREATOR;
field public float x;
field public float y;
}
@@ -14848,7 +14849,7 @@
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<android.graphics.Rect> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Rect> CREATOR;
field public int bottom;
field public int left;
field public int right;
@@ -14890,7 +14891,7 @@
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<android.graphics.RectF> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.RectF> CREATOR;
field public float bottom;
field public float left;
field public float right;
@@ -14930,7 +14931,7 @@
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<android.graphics.Region> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Region> CREATOR;
}
public enum Region.Op {
@@ -15272,18 +15273,18 @@
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 {
@@ -15516,7 +15517,7 @@
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<android.graphics.drawable.Icon> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.graphics.drawable.Icon> 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
@@ -16233,7 +16234,7 @@
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<android.hardware.HardwareBuffer> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.HardwareBuffer> 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 +16558,13 @@
public static class BiometricPrompt.Builder {
ctor public BiometricPrompt.Builder(android.content.Context);
- method public android.hardware.biometrics.BiometricPrompt build();
- method public android.hardware.biometrics.BiometricPrompt.Builder setAllowDeviceCredential(boolean);
- method public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
- method public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
- method public android.hardware.biometrics.BiometricPrompt.Builder setRequireConfirmation(boolean);
- method public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
- method public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt build();
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setAllowDeviceCredential(boolean);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setRequireConfirmation(boolean);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
+ method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
}
public static final class BiometricPrompt.CryptoObject {
@@ -16645,93 +16646,93 @@
method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission();
method @NonNull public java.util.Set<java.lang.String> getPhysicalCameraIds();
method @Nullable public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int);
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
- field @Deprecated public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
- field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
+ field @Deprecated @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
+ field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
}
public static final class CameraCharacteristics.Key<T> {
@@ -17037,63 +17038,63 @@
method @Nullable public Object getTag();
method public boolean isReprocess();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
- field public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
- field public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
- field public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
}
public static final class CaptureRequest.Builder {
@@ -17118,88 +17119,88 @@
method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
method public int getSequenceId();
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
- field @Deprecated public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
- field public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
- field public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
- field public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
- field public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
- field public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
- field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
+ field @Deprecated @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
+ field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
}
public static final class CaptureResult.Key<T> {
@@ -17324,7 +17325,7 @@
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<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
field public static final int SURFACE_GROUP_ID_NONE = -1; // 0xffffffff
}
@@ -17382,7 +17383,7 @@
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<android.hardware.camera2.params.SessionConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.SessionConfiguration> CREATOR;
field public static final int SESSION_HIGH_SPEED = 1; // 0x1
field public static final int SESSION_REGULAR = 0; // 0x0
}
@@ -17542,7 +17543,7 @@
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<android.hardware.usb.UsbAccessory> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbAccessory> CREATOR;
}
public class UsbConfiguration implements android.os.Parcelable {
@@ -17555,7 +17556,7 @@
method public boolean isRemoteWakeup();
method public boolean isSelfPowered();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.usb.UsbConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbConfiguration> CREATOR;
}
public final class UsbConstants {
@@ -17615,7 +17616,7 @@
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<android.hardware.usb.UsbDevice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbDevice> CREATOR;
}
public class UsbDeviceConnection {
@@ -17645,7 +17646,7 @@
method public int getMaxPacketSize();
method public int getType();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.usb.UsbEndpoint> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbEndpoint> CREATOR;
}
public class UsbInterface implements android.os.Parcelable {
@@ -17659,7 +17660,7 @@
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<android.hardware.usb.UsbInterface> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbInterface> CREATOR;
}
public class UsbManager {
@@ -22582,7 +22583,7 @@
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<android.location.Address> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.Address> CREATOR;
}
public class Criteria implements android.os.Parcelable {
@@ -22615,7 +22616,7 @@
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<android.location.Criteria> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.Criteria> 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 +22651,7 @@
method public boolean hasLeapSecond();
method public boolean hasTimeUncertaintyNanos();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssClock> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssClock> CREATOR;
}
public final class GnssMeasurement implements android.os.Parcelable {
@@ -22706,7 +22707,7 @@
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<android.location.GnssMeasurement> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurement> 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 +22736,7 @@
method @NonNull public android.location.GnssClock getClock();
method @NonNull public java.util.Collection<android.location.GnssMeasurement> getMeasurements();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssMeasurementsEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementsEvent> CREATOR;
}
public abstract static class GnssMeasurementsEvent.Callback {
@@ -22757,7 +22758,7 @@
method public int getSvid();
method public int getType();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssNavigationMessage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssNavigationMessage> 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 +22855,7 @@
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 +22868,7 @@
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 +22884,7 @@
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 +22894,7 @@
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<android.location.Location> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.Location> 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 +23026,7 @@
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<android.media.AudioAttributes> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioAttributes> 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
@@ -23169,7 +23173,7 @@
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<android.media.AudioFormat> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFormat> 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
@@ -23398,7 +23402,7 @@
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<android.media.AudioPlaybackConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioPlaybackConfiguration> CREATOR;
}
public final class AudioPresentation {
@@ -23417,14 +23421,14 @@
field public static final int MASTERING_NOT_INDICATED = 0; // 0x0
}
- public static class AudioPresentation.Builder {
+ public static final class AudioPresentation.Builder {
ctor public AudioPresentation.Builder(int);
method @NonNull public android.media.AudioPresentation build();
method @NonNull public android.media.AudioPresentation.Builder setHasAudioDescription(boolean);
method @NonNull public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean);
method @NonNull public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean);
- method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.String>);
- method @NonNull public android.media.AudioPresentation.Builder setLocale(android.icu.util.ULocale);
+ method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.CharSequence>);
+ method @NonNull public android.media.AudioPresentation.Builder setLocale(@NonNull android.icu.util.ULocale);
method @NonNull public android.media.AudioPresentation.Builder setMasteringIndication(int);
method @NonNull public android.media.AudioPresentation.Builder setProgramId(int);
}
@@ -23527,7 +23531,7 @@
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<android.media.AudioRecordingConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioRecordingConfiguration> CREATOR;
}
public interface AudioRecordingMonitor {
@@ -24721,7 +24725,7 @@
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<android.media.MediaDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaDescription> CREATOR;
field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
}
@@ -25126,7 +25130,7 @@
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<android.media.MediaItem2> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaItem2> CREATOR;
field public static final long POSITION_UNKNOWN = 576460752303423487L; // 0x7ffffffffffffffL
}
@@ -25150,7 +25154,7 @@
method public java.util.Set<java.lang.String> keySet();
method public int size();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.MediaMetadata> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaMetadata> 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";
@@ -26188,7 +26192,7 @@
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<android.media.PlaybackParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.PlaybackParams> CREATOR;
}
public final class Rating implements android.os.Parcelable {
@@ -26205,7 +26209,7 @@
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<android.media.Rating> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.Rating> 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 +26368,7 @@
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<android.media.Session2Command> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Command> 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 +26386,7 @@
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<android.media.Session2CommandGroup> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2CommandGroup> CREATOR;
}
public static final class Session2CommandGroup.Builder {
@@ -26404,7 +26408,7 @@
method public int getType();
method public int getUid();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.Session2Token> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Token> CREATOR;
field public static final int TYPE_SESSION = 0; // 0x0
field public static final int TYPE_SESSION_SERVICE = 1; // 0x1
}
@@ -26656,7 +26660,7 @@
method public float[] getTimes();
method public float[] getVolumes();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Configuration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Configuration> 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 +26687,7 @@
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<android.media.VolumeShaper.Operation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Operation> CREATOR;
field public static final android.media.VolumeShaper.Operation PLAY;
field public static final android.media.VolumeShaper.Operation REVERSE;
}
@@ -27236,7 +27240,7 @@
method public boolean isBrowsable();
method public boolean isPlayable();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.browse.MediaBrowser.MediaItem> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.browse.MediaBrowser.MediaItem> CREATOR;
field public static final int FLAG_BROWSABLE = 1; // 0x1
field public static final int FLAG_PLAYABLE = 2; // 0x2
}
@@ -27330,7 +27334,7 @@
method public int getType();
method public boolean isPrivate();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> 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 +27372,7 @@
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<android.media.midi.MidiDeviceStatus> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceStatus> CREATOR;
}
public final class MidiInputPort extends android.media.midi.MidiReceiver implements java.io.Closeable {
@@ -27491,7 +27495,7 @@
method public int getPlaybackType();
method public int getVolumeControl();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.session.MediaController.PlaybackInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaController.PlaybackInfo> CREATOR;
field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
}
@@ -27577,14 +27581,14 @@
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<android.media.session.MediaSession.QueueItem> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.QueueItem> 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<android.media.session.MediaSession.Token> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.Token> CREATOR;
}
public final class MediaSessionManager {
@@ -27646,7 +27650,7 @@
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<android.media.session.PlaybackState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> 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 +27688,7 @@
method public int getIcon();
method public CharSequence getName();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.session.PlaybackState.CustomAction> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState.CustomAction> CREATOR;
}
public static final class PlaybackState.CustomAction.Builder {
@@ -28122,7 +28126,7 @@
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<android.media.tv.TvInputInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> 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 +28295,7 @@
method public float getVideoPixelAspectRatio();
method public int getVideoWidth();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.tv.TvTrackInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvTrackInfo> 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 +28617,7 @@
method public void ignoreNetwork();
method public void reportCaptivePortalDismissed();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
}
public class ConnectivityManager {
@@ -28752,8 +28756,8 @@
}
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 +28767,7 @@
method public int getPrefixLength();
method public byte[] getRawAddress();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
}
public final class IpSecAlgorithm implements android.os.Parcelable {
@@ -28780,7 +28784,7 @@
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<android.net.IpSecAlgorithm> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
field public static final String CRYPT_AES_CBC = "cbc(aes)";
}
@@ -28837,7 +28841,7 @@
method public int getPrefixLength();
method public int getScope();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.LinkAddress> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkAddress> CREATOR;
}
public final class LinkProperties implements android.os.Parcelable {
@@ -28852,7 +28856,7 @@
method public java.util.List<android.net.RouteInfo> getRoutes();
method public boolean isPrivateDnsActive();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.LinkProperties> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkProperties> CREATOR;
}
public class LocalServerSocket implements java.io.Closeable {
@@ -28920,7 +28924,7 @@
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<android.net.MacAddress> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.MacAddress> 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 +28954,7 @@
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<android.net.Network> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.Network> CREATOR;
}
public final class NetworkCapabilities implements android.os.Parcelable {
@@ -28962,7 +28966,7 @@
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<android.net.NetworkCapabilities> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkCapabilities> 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
@@ -29010,7 +29014,7 @@
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<android.net.NetworkInfo> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkInfo> CREATOR;
}
@Deprecated public enum NetworkInfo.DetailedState {
@@ -29043,7 +29047,7 @@
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<android.net.NetworkRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkRequest> CREATOR;
}
public static class NetworkRequest.Builder {
@@ -29085,7 +29089,7 @@
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<android.net.ProxyInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.ProxyInfo> CREATOR;
}
public final class RouteInfo implements android.os.Parcelable {
@@ -29097,7 +29101,7 @@
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<android.net.RouteInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.RouteInfo> CREATOR;
}
@Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory {
@@ -29230,7 +29234,7 @@
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<android.net.Uri> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.Uri> CREATOR;
field public static final android.net.Uri EMPTY;
}
@@ -29344,25 +29348,25 @@
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[]);
}
}
@@ -29489,7 +29493,7 @@
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<android.net.nsd.NsdServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.nsd.NsdServiceInfo> CREATOR;
}
}
@@ -29909,7 +29913,7 @@
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<android.net.wifi.WifiEnterpriseConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiEnterpriseConfig> CREATOR;
}
public static final class WifiEnterpriseConfig.Eap {
@@ -29946,13 +29950,14 @@
method public String getMacAddress();
method public int getNetworkId();
method public int getRssi();
- method public int getRxLinkSpeedMbps();
+ method @IntRange(from=0xffffffff) public int getRxLinkSpeedMbps();
method public String getSSID();
method public android.net.wifi.SupplicantState getSupplicantState();
- method public int getTxLinkSpeedMbps();
+ method @IntRange(from=0xffffffff) public int getTxLinkSpeedMbps();
method public void writeToParcel(android.os.Parcel, int);
field public static final String FREQUENCY_UNITS = "MHz";
field public static final String LINK_SPEED_UNITS = "Mbps";
+ field public static final int LINK_SPEED_UNKNOWN = -1; // 0xffffffff
}
public class WifiManager {
@@ -29978,8 +29983,8 @@
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();
@@ -30086,45 +30091,45 @@
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<android.net.wifi.WifiNetworkSpecifier> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSpecifier> 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<android.net.wifi.WifiNetworkSuggestion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSuggestion> 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 {
@@ -30133,7 +30138,7 @@
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
field public String BSSID;
- field public static final android.os.Parcelable.Creator<android.net.wifi.WpsInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WpsInfo> 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
@@ -30159,7 +30164,7 @@
method public int getMaxServiceNameLength();
method public int getMaxServiceSpecificInfoLength();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
}
public class DiscoverySession implements java.lang.AutoCloseable {
@@ -30192,7 +30197,7 @@
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<android.net.wifi.aware.ParcelablePeerHandle> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.ParcelablePeerHandle> CREATOR;
}
public class PeerHandle {
@@ -30201,7 +30206,7 @@
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<android.net.wifi.aware.PublishConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
}
@@ -30225,7 +30230,7 @@
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<android.net.wifi.aware.SubscribeConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
}
@@ -30273,7 +30278,7 @@
method public int getPort();
method public int getTransportProtocol();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkInfo> CREATOR;
}
public class WifiAwareSession implements java.lang.AutoCloseable {
@@ -30301,7 +30306,7 @@
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<android.net.wifi.hotspot2.PasspointConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.PasspointConfiguration> CREATOR;
}
}
@@ -30335,7 +30340,7 @@
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<android.net.wifi.hotspot2.pps.Credential> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential> CREATOR;
}
public static final class Credential.CertificateCredential implements android.os.Parcelable {
@@ -30347,7 +30352,7 @@
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<android.net.wifi.hotspot2.pps.Credential.CertificateCredential> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.CertificateCredential> CREATOR;
}
public static final class Credential.SimCredential implements android.os.Parcelable {
@@ -30359,7 +30364,7 @@
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<android.net.wifi.hotspot2.pps.Credential.SimCredential> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.SimCredential> CREATOR;
}
public static final class Credential.UserCredential implements android.os.Parcelable {
@@ -30375,7 +30380,7 @@
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<android.net.wifi.hotspot2.pps.Credential.UserCredential> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.UserCredential> CREATOR;
}
public final class HomeSp implements android.os.Parcelable {
@@ -30389,7 +30394,7 @@
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<android.net.wifi.hotspot2.pps.HomeSp> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.HomeSp> CREATOR;
}
}
@@ -30401,7 +30406,7 @@
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<android.net.wifi.p2p.WifiP2pConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pConfig> 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
@@ -30433,7 +30438,7 @@
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<android.net.wifi.p2p.WifiP2pDevice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDevice> 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
@@ -30451,7 +30456,7 @@
method public android.net.wifi.p2p.WifiP2pDevice get(String);
method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getDeviceList();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDeviceList> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDeviceList> CREATOR;
}
public class WifiP2pGroup implements android.os.Parcelable {
@@ -30466,7 +30471,7 @@
method public String getPassphrase();
method public boolean isGroupOwner();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroup> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroup> CREATOR;
}
public class WifiP2pInfo implements android.os.Parcelable {
@@ -30474,7 +30479,7 @@
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<android.net.wifi.p2p.WifiP2pInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pInfo> CREATOR;
field public boolean groupFormed;
field public java.net.InetAddress groupOwnerAddress;
field public boolean isGroupOwner;
@@ -30632,7 +30637,7 @@
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<android.net.wifi.rtt.RangingRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR;
}
public static final class RangingRequest.Builder {
@@ -30657,7 +30662,7 @@
method public int getRssi();
method public int getStatus();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingResult> 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
@@ -30695,7 +30700,7 @@
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<android.net.wifi.rtt.ResponderLocation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderLocation> 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
@@ -30754,7 +30759,7 @@
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<android.nfc.NdefMessage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefMessage> CREATOR;
}
public final class NdefRecord implements android.os.Parcelable {
@@ -30775,7 +30780,7 @@
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<android.nfc.NdefRecord> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefRecord> 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;
@@ -30873,7 +30878,7 @@
method public byte[] getId();
method public String[] getTechList();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.nfc.Tag> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.nfc.Tag> CREATOR;
}
public class TagLostException extends java.io.IOException {
@@ -34385,7 +34390,7 @@
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<android.os.Bundle> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
field public static final android.os.Bundle EMPTY;
}
@@ -34423,7 +34428,7 @@
method public long getActive();
method public long getTotal();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.CpuUsageInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.CpuUsageInfo> CREATOR;
}
public class DeadObjectException extends android.os.RemoteException {
@@ -34531,7 +34536,7 @@
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<android.os.Debug.MemoryInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.Debug.MemoryInfo> CREATOR;
field public int dalvikPrivateDirty;
field public int dalvikPss;
field public int dalvikSharedDirty;
@@ -34572,7 +34577,7 @@
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<android.os.DropBoxManager.Entry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.DropBoxManager.Entry> CREATOR;
}
public class Environment {
@@ -34583,7 +34588,7 @@
method public static java.io.File getExternalStoragePublicDirectory(String);
method public static String getExternalStorageState();
method public static String getExternalStorageState(java.io.File);
- method public static java.io.File getRootDirectory();
+ method @NonNull public static java.io.File getRootDirectory();
method @Deprecated public static String getStorageState(java.io.File);
method public static boolean isExternalStorageEmulated();
method public static boolean isExternalStorageEmulated(java.io.File);
@@ -34769,7 +34774,7 @@
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<android.os.LocaleList> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
}
public final class Looper {
@@ -34824,7 +34829,7 @@
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<android.os.Message> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.Message> CREATOR;
field public int arg1;
field public int arg2;
field public Object obj;
@@ -34861,7 +34866,7 @@
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<android.os.Messenger> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.Messenger> CREATOR;
}
public class NetworkOnMainThreadException extends java.lang.RuntimeException {
@@ -35018,7 +35023,7 @@
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<android.os.ParcelFileDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelFileDescriptor> 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
@@ -35056,7 +35061,7 @@
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<android.os.ParcelUuid> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelUuid> CREATOR;
}
public interface Parcelable {
@@ -35083,7 +35088,7 @@
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<android.os.PatternMatcher> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.PatternMatcher> 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
@@ -35100,7 +35105,7 @@
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<android.os.PersistableBundle> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
field public static final android.os.PersistableBundle EMPTY;
}
@@ -35126,6 +35131,7 @@
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
@@ -35249,7 +35255,7 @@
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<android.os.ResultReceiver> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
}
public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
@@ -35263,7 +35269,7 @@
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<android.os.SharedMemory> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
}
public class StatFs {
@@ -35309,27 +35315,27 @@
ctor public StrictMode.ThreadPolicy.Builder();
ctor public StrictMode.ThreadPolicy.Builder(android.os.StrictMode.ThreadPolicy);
method public android.os.StrictMode.ThreadPolicy build();
- method public android.os.StrictMode.ThreadPolicy.Builder detectAll();
- method public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
- method public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
- method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
- method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
- method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
- method public android.os.StrictMode.ThreadPolicy.Builder permitAll();
- method public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
- method public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
- method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
- method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
- method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
- method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectAll();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitAll();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
}
public static final class StrictMode.VmPolicy {
@@ -35340,26 +35346,26 @@
ctor public StrictMode.VmPolicy.Builder();
ctor public StrictMode.VmPolicy.Builder(android.os.StrictMode.VmPolicy);
method public android.os.StrictMode.VmPolicy build();
- method public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
- method public android.os.StrictMode.VmPolicy.Builder detectAll();
- method public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
- method public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
- method public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
- method public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
- method public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
- method public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
- method public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
- method public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
- method public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
- method public android.os.StrictMode.VmPolicy.Builder penaltyLog();
- method public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
- method public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectAll();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyLog();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
}
public final class SystemClock {
@@ -35414,7 +35420,7 @@
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<android.os.UserHandle> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.UserHandle> CREATOR;
}
public class UserManager {
@@ -35515,11 +35521,11 @@
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 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<android.os.VibrationEffect> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect> 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
@@ -35549,7 +35555,7 @@
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<android.os.WorkSource> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource> CREATOR;
}
}
@@ -35623,7 +35629,7 @@
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<android.os.health.TimerStat> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.health.TimerStat> CREATOR;
}
public final class UidHealthStats {
@@ -35748,7 +35754,7 @@
method public boolean isPrimary();
method public boolean isRemovable();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.storage.StorageVolume> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.StorageVolume> CREATOR;
field public static final String EXTRA_STORAGE_VOLUME = "android.os.storage.extra.STORAGE_VOLUME";
}
@@ -36006,7 +36012,7 @@
@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<android.preference.Preference.BaseSavedState> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.Preference.BaseSavedState> CREATOR;
}
@Deprecated public static interface Preference.OnPreferenceChangeListener {
@@ -36066,7 +36072,7 @@
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<android.preference.PreferenceActivity.Header> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.PreferenceActivity.Header> CREATOR;
field @Deprecated public CharSequence breadCrumbShortTitle;
field @Deprecated @StringRes public int breadCrumbShortTitleRes;
field @Deprecated public CharSequence breadCrumbTitle;
@@ -36240,7 +36246,7 @@
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<android.print.PageRange> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PageRange> CREATOR;
}
public final class PrintAttributes implements android.os.Parcelable {
@@ -36253,7 +36259,7 @@
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<android.print.PrintAttributes> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintAttributes> 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
@@ -36411,7 +36417,7 @@
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<android.print.PrintDocumentInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintDocumentInfo> CREATOR;
field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff
}
@@ -36438,7 +36444,7 @@
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<android.print.PrintJobId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobId> CREATOR;
}
public final class PrintJobInfo implements android.os.Parcelable {
@@ -36455,7 +36461,7 @@
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<android.print.PrintJobInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobInfo> 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
@@ -36489,7 +36495,7 @@
method @NonNull public android.print.PrintAttributes.Margins getMinMargins();
method @NonNull public java.util.List<android.print.PrintAttributes.Resolution> getResolutions();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.print.PrinterCapabilitiesInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterCapabilitiesInfo> CREATOR;
}
public static final class PrinterCapabilitiesInfo.Builder {
@@ -36506,7 +36512,7 @@
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<android.print.PrinterId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterId> CREATOR;
}
public final class PrinterInfo implements android.os.Parcelable {
@@ -36517,7 +36523,7 @@
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<android.print.PrinterInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterInfo> 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
@@ -38264,7 +38270,7 @@
method public java.util.List<java.lang.String> getPath();
method @Nullable public String getRootId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
}
public static final class DocumentsContract.Root {
@@ -38405,14 +38411,12 @@
public final class MediaStore {
ctor public MediaStore();
- method @NonNull public static android.net.Uri createPending(@NonNull android.content.Context, @NonNull android.provider.MediaStore.PendingParams);
- method @NonNull public static java.util.Set<java.lang.String> getAllVolumeNames(android.content.Context);
- method public static android.net.Uri getDocumentUri(android.content.Context, android.net.Uri);
+ method @NonNull public static java.util.Set<java.lang.String> getAllVolumeNames(@NonNull android.content.Context);
+ method @Nullable public static android.net.Uri getDocumentUri(@NonNull android.content.Context, @NonNull android.net.Uri);
method public static android.net.Uri getMediaScannerUri();
- method public static android.net.Uri getMediaUri(android.content.Context, android.net.Uri);
+ method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri);
method public static String getVersion(android.content.Context);
method @NonNull public static String getVolumeName(@NonNull android.net.Uri);
- method @NonNull public static android.provider.MediaStore.PendingSession openPending(@NonNull android.content.Context, @NonNull android.net.Uri);
method @NonNull public static android.net.Uri setIncludePending(@NonNull android.net.Uri);
method @NonNull public static android.net.Uri setRequireOriginal(@NonNull android.net.Uri);
field public static final String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
@@ -38601,10 +38605,10 @@
}
public static final class MediaStore.Downloads implements android.provider.MediaStore.DownloadColumns {
- method public static android.net.Uri getContentUri(String);
+ method @NonNull public static android.net.Uri getContentUri(@NonNull String);
field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/download";
- field public static final android.net.Uri EXTERNAL_CONTENT_URI;
- field public static final android.net.Uri INTERNAL_CONTENT_URI;
+ field @NonNull public static final android.net.Uri EXTERNAL_CONTENT_URI;
+ field @NonNull public static final android.net.Uri INTERNAL_CONTENT_URI;
}
public static final class MediaStore.Files {
@@ -38685,6 +38689,7 @@
public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
field @Deprecated public static final String DATA = "_data";
field public static final String DATE_ADDED = "date_added";
+ field public static final String DATE_EXPIRES = "date_expires";
field public static final String DATE_MODIFIED = "date_modified";
field public static final String DISPLAY_NAME = "_display_name";
field public static final String DOCUMENT_ID = "document_id";
@@ -38701,23 +38706,6 @@
field public static final String WIDTH = "width";
}
- public static class MediaStore.PendingParams {
- ctor public MediaStore.PendingParams(@NonNull android.net.Uri, @NonNull String, @NonNull String);
- method public void setDownloadUri(@Nullable android.net.Uri);
- method public void setPrimaryDirectory(@Nullable String);
- method public void setRefererUri(@Nullable android.net.Uri);
- method public void setSecondaryDirectory(@Nullable String);
- }
-
- public static class MediaStore.PendingSession implements java.lang.AutoCloseable {
- method public void abandon();
- method public void close();
- method public void notifyProgress(@IntRange(from=0, to=100) int);
- method @NonNull public android.os.ParcelFileDescriptor open() throws java.io.FileNotFoundException;
- method @NonNull public java.io.OutputStream openOutputStream() throws java.io.FileNotFoundException;
- method @NonNull public android.net.Uri publish();
- }
-
public static final class MediaStore.Video {
ctor public MediaStore.Video();
method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
@@ -39256,7 +39244,7 @@
}
public static final class Telephony.CarrierId implements android.provider.BaseColumns {
- method public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int);
+ method @NonNull public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int);
method public static android.net.Uri getUriForSubscriptionId(int);
field public static final String CARRIER_ID = "carrier_id";
field public static final String CARRIER_NAME = "carrier_name";
@@ -41107,7 +41095,7 @@
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<android.service.autofill.BatchUpdates> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.BatchUpdates> CREATOR;
}
public static class BatchUpdates.Builder {
@@ -41120,7 +41108,7 @@
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<android.service.autofill.CharSequenceTransformation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
}
public static class CharSequenceTransformation.Builder {
@@ -41132,21 +41120,21 @@
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<android.service.autofill.CustomDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> 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<android.service.autofill.Dataset> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.Dataset> CREATOR;
}
public static final class Dataset.Builder {
@@ -41165,14 +41153,14 @@
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<android.service.autofill.DateTransformation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateTransformation> 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<android.service.autofill.DateValueSanitizer> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateValueSanitizer> CREATOR;
}
public final class FieldClassification {
@@ -41191,10 +41179,11 @@
public final class FillContext implements android.os.Parcelable {
method public int describeContents();
+ method @NonNull public android.view.autofill.AutofillId getFocusedId();
method public int getRequestId();
- method public android.app.assist.AssistStructure getStructure();
+ method @NonNull public android.app.assist.AssistStructure getStructure();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.autofill.FillContext> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillContext> CREATOR;
}
public final class FillEventHistory implements android.os.Parcelable {
@@ -41202,7 +41191,7 @@
method @Deprecated @Nullable public android.os.Bundle getClientState();
method @Nullable public java.util.List<android.service.autofill.FillEventHistory.Event> getEvents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.autofill.FillEventHistory> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillEventHistory> CREATOR;
}
public static final class FillEventHistory.Event {
@@ -41228,7 +41217,7 @@
method public int getFlags();
method public int getId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
field public static final int FLAG_COMPATIBILITY_MODE_REQUEST = 2; // 0x2
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
}
@@ -41236,7 +41225,7 @@
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<android.service.autofill.FillResponse> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillResponse> CREATOR;
field public static final int FLAG_DISABLE_ACTIVITY_ONLY = 2; // 0x2
field public static final int FLAG_TRACK_CONTEXT_COMMITED = 1; // 0x1
}
@@ -41244,23 +41233,23 @@
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<android.service.autofill.ImageTransformation> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
}
public static class ImageTransformation.Builder {
@@ -41275,7 +41264,7 @@
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<android.service.autofill.LuhnChecksumValidator> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
}
public interface OnClickAction {
@@ -41285,7 +41274,7 @@
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<android.service.autofill.RegexValidator> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
}
public interface Sanitizer {
@@ -41300,7 +41289,7 @@
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<android.service.autofill.SaveInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> 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
@@ -41334,14 +41323,14 @@
method @Nullable public java.util.List<java.lang.String> getDatasetIds();
method @NonNull public java.util.List<android.service.autofill.FillContext> getFillContexts();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> 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<android.service.autofill.TextValueSanitizer> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.TextValueSanitizer> CREATOR;
}
public interface Transformation {
@@ -41358,15 +41347,15 @@
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<android.service.autofill.UserData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.UserData> 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 {
@@ -41381,13 +41370,13 @@
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<android.service.autofill.VisibilitySetterAction> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.VisibilitySetterAction> CREATOR;
}
- public static class VisibilitySetterAction.Builder {
+ public static final class VisibilitySetterAction.Builder {
ctor public VisibilitySetterAction.Builder(@IdRes int, int);
- method public android.service.autofill.VisibilitySetterAction build();
- method public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
+ method @NonNull public android.service.autofill.VisibilitySetterAction build();
+ method @NonNull public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
}
}
@@ -41408,12 +41397,12 @@
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<android.service.carrier.CarrierIdentifier> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.CarrierIdentifier> 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 {
@@ -41477,7 +41466,7 @@
method public int describeContents();
method @NonNull public java.util.List<byte[]> getPdus();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.carrier.MessagePdu> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.MessagePdu> CREATOR;
}
}
@@ -41493,7 +41482,7 @@
method public float getScore();
method public CharSequence getTitle();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.chooser.ChooserTarget> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.chooser.ChooserTarget> CREATOR;
}
public abstract class ChooserTargetService extends android.app.Service {
@@ -41613,7 +41602,7 @@
method public android.os.Bundle getSignals();
method public android.os.UserHandle getUserHandle();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.notification.Adjustment> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Adjustment> 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";
@@ -41632,7 +41621,7 @@
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<android.service.notification.Condition> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Condition> 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";
@@ -41786,7 +41775,7 @@
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<android.service.notification.NotificationListenerService.RankingMap> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationListenerService.RankingMap> CREATOR;
}
public final class NotificationStats implements android.os.Parcelable {
@@ -41808,7 +41797,7 @@
method public void setSnoozed();
method public void setViewedSettings();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.notification.NotificationStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationStats> 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
@@ -41842,7 +41831,7 @@
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<android.service.notification.StatusBarNotification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.StatusBarNotification> CREATOR;
}
public final class ZenPolicy implements android.os.Parcelable {
@@ -41865,7 +41854,7 @@
method public int getVisualEffectPeek();
method public int getVisualEffectStatusBar();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.notification.ZenPolicy> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.ZenPolicy> 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
@@ -41918,7 +41907,7 @@
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<android.service.quicksettings.Tile> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.quicksettings.Tile> 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
@@ -42480,7 +42469,7 @@
method public int getQuality();
method public boolean isNetworkConnectionRequired();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.speech.tts.Voice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.speech.tts.Voice> 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
@@ -42517,6 +42506,7 @@
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();
@@ -43336,7 +43326,7 @@
method public int getSupportedRouteMask();
method public boolean isMuted();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> 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
@@ -43359,7 +43349,7 @@
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<android.telecom.CallIdentification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.CallIdentification> CREATOR;
}
public static class CallIdentification.Builder {
@@ -43652,7 +43642,7 @@
method public int getVideoState();
method public boolean isRequestingRtt();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
}
public abstract class ConnectionService extends android.app.Service {
@@ -43698,7 +43688,7 @@
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<android.telecom.DisconnectCause> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.DisconnectCause> 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
@@ -43717,7 +43707,7 @@
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<android.telecom.GatewayInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.GatewayInfo> CREATOR;
}
public abstract class InCallService extends android.app.Service {
@@ -43795,7 +43785,7 @@
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<android.telecom.PhoneAccount> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccount> 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";
@@ -43831,16 +43821,16 @@
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<android.telecom.PhoneAccountHandle> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountHandle> CREATOR;
}
public final class PhoneAccountSuggestion implements android.os.Parcelable {
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<android.telecom.PhoneAccountSuggestion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountSuggestion> 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
@@ -43971,7 +43961,7 @@
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<android.telecom.StatusHints> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.StatusHints> CREATOR;
}
public class TelecomManager {
@@ -44067,7 +44057,7 @@
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<android.telecom.VideoProfile> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile> 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
@@ -44088,7 +44078,7 @@
method public int getWidth();
method public boolean isZoomSupported();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telecom.VideoProfile.CameraCapabilities> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile.CameraCapabilities> CREATOR;
}
}
@@ -44205,7 +44195,7 @@
method public int getPriority();
method public int getSubId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.AvailableNetworkInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.AvailableNetworkInfo> 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
@@ -44394,7 +44384,7 @@
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<android.telephony.CellIdentity> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentity> CREATOR;
}
public final class CellIdentityCdma extends android.telephony.CellIdentity {
@@ -44404,7 +44394,7 @@
method public int getNetworkId();
method public int getSystemId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityCdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityCdma> CREATOR;
}
public final class CellIdentityGsm extends android.telephony.CellIdentity {
@@ -44419,7 +44409,7 @@
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<android.telephony.CellIdentityGsm> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityGsm> CREATOR;
}
public final class CellIdentityLte extends android.telephony.CellIdentity {
@@ -44434,7 +44424,7 @@
method public int getPci();
method public int getTac();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityLte> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityLte> CREATOR;
}
public final class CellIdentityNr extends android.telephony.CellIdentity {
@@ -44445,7 +44435,7 @@
method public int getPci();
method public int getTac();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityNr> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityNr> CREATOR;
}
public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
@@ -44457,7 +44447,7 @@
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<android.telephony.CellIdentityTdscdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityTdscdma> CREATOR;
}
public final class CellIdentityWcdma extends android.telephony.CellIdentity {
@@ -44471,7 +44461,7 @@
method public int getPsc();
method public int getUarfcn();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellIdentityWcdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityWcdma> CREATOR;
}
public abstract class CellInfo implements android.os.Parcelable {
@@ -44483,43 +44473,44 @@
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<android.telephony.CellInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfo> CREATOR;
field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff
+ field public static final long UNAVAILABLE_LONG = 9223372036854775807L; // 0x7fffffffffffffffL
}
public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable {
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<android.telephony.CellInfoCdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoCdma> 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<android.telephony.CellInfoGsm> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoGsm> 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<android.telephony.CellInfoLte> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoLte> 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<android.telephony.CellInfoNr> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoNr> 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<android.telephony.CellInfoWcdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoWcdma> CREATOR;
}
public abstract class CellLocation {
@@ -44554,7 +44545,7 @@
method public int getEvdoSnr();
method public int getLevel();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthCdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthCdma> CREATOR;
}
public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -44565,7 +44556,7 @@
method public int getLevel();
method public int getTimingAdvance();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthGsm> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthGsm> CREATOR;
}
public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -44580,7 +44571,7 @@
method public int getRssnr();
method public int getTimingAdvance();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthLte> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthLte> CREATOR;
}
public final class CellSignalStrengthNr extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -44595,7 +44586,7 @@
method public int getSsRsrq();
method public int getSsSinr();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthNr> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthNr> CREATOR;
}
public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -44604,7 +44595,7 @@
method public int getDbm();
method public int getLevel();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthWcdma> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthWcdma> CREATOR;
}
public class IccOpenLogicalChannelResponse implements android.os.Parcelable {
@@ -44613,7 +44604,7 @@
method public byte[] getSelectResponse();
method public int getStatus();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.IccOpenLogicalChannelResponse> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.IccOpenLogicalChannelResponse> 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
@@ -44686,7 +44677,7 @@
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<android.telephony.NeighboringCellInfo> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telephony.NeighboringCellInfo> CREATOR;
field @Deprecated public static final int UNKNOWN_CID = -1; // 0xffffffff
field @Deprecated public static final int UNKNOWN_RSSI = 99; // 0x63
}
@@ -44714,7 +44705,7 @@
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<android.telephony.NetworkScanRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkScanRequest> CREATOR;
field public static final int SCAN_TYPE_ONE_SHOT = 0; // 0x0
field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1
}
@@ -44822,7 +44813,7 @@
method public int[] getChannels();
method public int getRadioAccessNetwork();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.RadioAccessSpecifier> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.RadioAccessSpecifier> CREATOR;
}
public class ServiceState implements android.os.Parcelable {
@@ -44849,7 +44840,7 @@
method public void setStateOff();
method public void setStateOutOfService();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.ServiceState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ServiceState> 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
@@ -45022,7 +45013,7 @@
method public String getCountryIso();
method public int getDataRoaming();
method public CharSequence getDisplayName();
- method public String getGroupUuid();
+ method @Nullable public String getGroupUuid();
method public String getIccId();
method public int getIconTint();
method @Deprecated public int getMcc();
@@ -45036,7 +45027,7 @@
method public boolean isEmbedded();
method public boolean isOpportunistic();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR;
}
public class SubscriptionManager {
@@ -45063,7 +45054,7 @@
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);
@@ -45072,7 +45063,7 @@
method public void setSubscriptionOverrideCongested(int, boolean, long);
method public void setSubscriptionOverrideUnmetered(int, boolean, long);
method public void setSubscriptionPlans(int, @NonNull java.util.List<android.telephony.SubscriptionPlan>);
- 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";
@@ -45109,7 +45100,7 @@
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<android.telephony.SubscriptionPlan> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> 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
@@ -45181,7 +45172,7 @@
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<android.telephony.UiccCardInfo> getUiccCardsInfo();
+ method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") @NonNull public java.util.List<android.telephony.UiccCardInfo> 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();
@@ -45354,13 +45345,13 @@
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<android.telephony.UiccCardInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccCardInfo> CREATOR;
}
public abstract class VisualVoicemailService extends android.app.Service {
@@ -45384,13 +45375,13 @@
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<android.telephony.VisualVoicemailSms> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSms> 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<android.telephony.VisualVoicemailSmsFilterSettings> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSmsFilterSettings> 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;
@@ -45457,7 +45448,7 @@
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<android.telephony.data.ApnSetting> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.ApnSetting> 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
@@ -45524,7 +45515,7 @@
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<android.telephony.emergency.EmergencyNumber> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.emergency.EmergencyNumber> 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
@@ -45553,7 +45544,7 @@
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<android.telephony.euicc.DownloadableSubscription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.DownloadableSubscription> CREATOR;
}
public final class EuiccInfo implements android.os.Parcelable {
@@ -45561,7 +45552,7 @@
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<android.telephony.euicc.EuiccInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccInfo> CREATOR;
}
public class EuiccManager {
@@ -45690,7 +45681,7 @@
method public int getSubscriptionId();
method public byte[] toByteArray();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.mbms.DownloadRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.DownloadRequest> CREATOR;
}
public static class DownloadRequest.Builder {
@@ -45713,14 +45704,14 @@
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<android.telephony.mbms.FileInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileInfo> CREATOR;
}
public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
method public int describeContents();
method public java.util.List<android.telephony.mbms.FileInfo> getFiles();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.mbms.FileServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileServiceInfo> CREATOR;
}
public class GroupCall implements java.lang.AutoCloseable {
@@ -45853,7 +45844,7 @@
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<android.telephony.mbms.StreamingServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.StreamingServiceInfo> CREATOR;
}
}
@@ -47252,7 +47243,7 @@
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<android.text.style.SuggestionSpan> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.text.style.SuggestionSpan> 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
@@ -48709,7 +48700,7 @@
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<android.view.AbsSavedState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.AbsSavedState> CREATOR;
field public static final android.view.AbsSavedState EMPTY_STATE;
}
@@ -48859,7 +48850,7 @@
method public float getDesiredMinLuminance();
method public int[] getSupportedHdrTypes();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.Display.HdrCapabilities> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.HdrCapabilities> 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
@@ -48874,7 +48865,7 @@
method public int getPhysicalWidth();
method public float getRefreshRate();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
}
public final class DisplayCutout {
@@ -48895,7 +48886,7 @@
method public int describeContents();
method public void release();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
}
public class DragEvent implements android.os.Parcelable {
@@ -48914,7 +48905,7 @@
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<android.view.DragEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
}
public class FocusFinder {
@@ -49084,7 +49075,7 @@
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<android.view.InputDevice> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.InputDevice> 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
@@ -49141,7 +49132,7 @@
method public abstract long getEventTime();
method public abstract int getSource();
method public boolean isFromSource(int);
- field public static final android.os.Parcelable.Creator<android.view.InputEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.InputEvent> CREATOR;
}
public final class InputQueue {
@@ -49173,7 +49164,7 @@
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<android.view.KeyCharacterMap> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyCharacterMap> 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
@@ -49266,7 +49257,7 @@
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<android.view.KeyEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyEvent> 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
@@ -49616,7 +49607,7 @@
method public java.util.List<android.view.KeyboardShortcutInfo> getItems();
method public CharSequence getLabel();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutGroup> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutGroup> CREATOR;
}
public final class KeyboardShortcutInfo implements android.os.Parcelable {
@@ -49628,7 +49619,7 @@
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<android.view.KeyboardShortcutInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutInfo> CREATOR;
}
public abstract class LayoutInflater {
@@ -49949,7 +49940,7 @@
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<android.view.MotionEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.MotionEvent> 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
@@ -50037,7 +50028,7 @@
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<android.view.PointerIcon> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.PointerIcon> 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
@@ -50136,7 +50127,7 @@
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<android.view.Surface> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.Surface> 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
@@ -50154,7 +50145,7 @@
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<android.view.SurfaceControl> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControl> CREATOR;
}
public static class SurfaceControl.Builder {
@@ -50517,6 +50508,7 @@
method public android.animation.StateListAnimator getStateListAnimator();
method protected int getSuggestedMinimumHeight();
method protected int getSuggestedMinimumWidth();
+ method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
method public int getSystemUiVisibility();
method @android.view.ViewDebug.ExportedProperty public Object getTag();
method public Object getTag(int);
@@ -50855,6 +50847,7 @@
method public void setSelected(boolean);
method public void setSoundEffectsEnabled(boolean);
method public void setStateListAnimator(android.animation.StateListAnimator);
+ method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
method public void setSystemUiVisibility(int);
method public void setTag(Object);
method public void setTag(int, Object);
@@ -51088,7 +51081,7 @@
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<android.view.View.BaseSavedState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.View.BaseSavedState> CREATOR;
}
public static class View.DragShadowBuilder {
@@ -51683,6 +51676,7 @@
method public void addOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
method public void addOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
method public void addOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+ method public void addOnSystemGestureExclusionRectsChangedListener(java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
@@ -51697,6 +51691,7 @@
method public void removeOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
method public void removeOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
method public void removeOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+ method public void removeOnSystemGestureExclusionRectsChangedListener(java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
@@ -51937,7 +51932,7 @@
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<android.view.WindowAnimationFrameStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowAnimationFrameStats> CREATOR;
}
public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable {
@@ -51945,7 +51940,7 @@
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<android.view.WindowContentFrameStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowContentFrameStats> CREATOR;
}
public class WindowId implements android.os.Parcelable {
@@ -51954,7 +51949,7 @@
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<android.view.WindowId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowId> CREATOR;
}
public abstract static class WindowId.FocusObserver {
@@ -52035,7 +52030,7 @@
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<android.view.WindowManager.LayoutParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowManager.LayoutParams> 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
@@ -52195,7 +52190,7 @@
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<android.view.accessibility.AccessibilityEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityEvent> 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
@@ -52445,7 +52440,7 @@
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<android.view.accessibility.AccessibilityNodeInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo> 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";
@@ -52542,7 +52537,7 @@
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<android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo> CREATOR;
}
public abstract class AccessibilityNodeProvider {
@@ -52635,7 +52630,7 @@
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<android.view.accessibility.AccessibilityWindowInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityWindowInfo> 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
@@ -52968,7 +52963,7 @@
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<android.view.autofill.AutofillId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillId> CREATOR;
}
public final class AutofillManager {
@@ -53029,7 +53024,7 @@
method public boolean isText();
method public boolean isToggle();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.autofill.AutofillValue> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillValue> CREATOR;
}
}
@@ -53038,16 +53033,16 @@
public final class ContentCaptureContext implements android.os.Parcelable {
method public int describeContents();
- method public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull android.net.Uri);
+ method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull android.net.Uri);
method @Nullable public android.os.Bundle getExtras();
method @NonNull public android.content.LocusId getLocusId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureContext> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureContext> 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);
}
@@ -53063,7 +53058,7 @@
method @NonNull public final android.view.contentcapture.ContentCaptureSession createContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext);
method public final void destroy();
method @Nullable public final android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
- method public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
+ method @NonNull public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, long);
method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, long);
method public final void notifyViewAppeared(@NonNull android.view.ViewStructure);
@@ -53076,7 +53071,7 @@
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<android.view.contentcapture.ContentCaptureSessionId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureSessionId> CREATOR;
}
public final class UserDataRemovalRequest implements android.os.Parcelable {
@@ -53085,12 +53080,12 @@
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<android.view.contentcapture.UserDataRemovalRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.UserDataRemovalRequest> CREATOR;
}
public static final class UserDataRemovalRequest.Builder {
ctor public UserDataRemovalRequest.Builder();
- method public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, boolean);
+ method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, boolean);
method @NonNull public android.view.contentcapture.UserDataRemovalRequest build();
method @NonNull public android.view.contentcapture.UserDataRemovalRequest.Builder forEverything();
}
@@ -53148,7 +53143,7 @@
method public int getPosition();
method public CharSequence getText();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.CompletionInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CompletionInfo> CREATOR;
}
public final class CorrectionInfo implements android.os.Parcelable {
@@ -53158,7 +53153,7 @@
method public int getOffset();
method public CharSequence getOldText();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.CorrectionInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CorrectionInfo> CREATOR;
}
public final class CursorAnchorInfo implements android.os.Parcelable {
@@ -53177,7 +53172,7 @@
method public int getSelectionEnd();
method public int getSelectionStart();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.CursorAnchorInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CursorAnchorInfo> 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
@@ -53200,7 +53195,7 @@
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<android.view.inputmethod.EditorInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.EditorInfo> 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
@@ -53241,7 +53236,7 @@
ctor public ExtractedText();
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedText> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedText> CREATOR;
field public static final int FLAG_SELECTING = 2; // 0x2
field public static final int FLAG_SINGLE_LINE = 1; // 0x1
field public int flags;
@@ -53258,7 +53253,7 @@
ctor public ExtractedTextRequest();
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedTextRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedTextRequest> CREATOR;
field public int flags;
field public int hintMaxChars;
field public int hintMaxLines;
@@ -53274,7 +53269,7 @@
method public int getPid();
method public int getUid();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.InputBinding> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputBinding> CREATOR;
}
public interface InputConnection {
@@ -53352,7 +53347,7 @@
method public void releasePermission();
method public void requestPermission();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.InputContentInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputContentInfo> CREATOR;
}
public interface InputMethod {
@@ -53394,7 +53389,7 @@
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<android.view.inputmethod.InputMethodInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodInfo> CREATOR;
}
public final class InputMethodManager {
@@ -53483,7 +53478,7 @@
method public boolean isAuxiliary();
method public boolean overridesImplicitlyEnabledSubtype();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodSubtype> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodSubtype> CREATOR;
}
public static class InputMethodSubtype.InputMethodSubtypeBuilder {
@@ -53604,7 +53599,7 @@
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<android.view.textclassifier.ConversationAction> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationAction> 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";
@@ -53632,7 +53627,7 @@
method @NonNull public java.util.List<android.view.textclassifier.ConversationAction> getConversationActions();
method @Nullable public String getId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions> CREATOR;
}
public static final class ConversationActions.Message implements android.os.Parcelable {
@@ -53642,7 +53637,7 @@
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<android.view.textclassifier.ConversationActions.Message> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Message> CREATOR;
field public static final android.app.Person PERSON_USER_OTHERS;
field public static final android.app.Person PERSON_USER_SELF;
}
@@ -53664,7 +53659,7 @@
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<android.view.textclassifier.ConversationActions.Request> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Request> CREATOR;
field public static final String HINT_FOR_IN_APP = "in_app";
field public static final String HINT_FOR_NOTIFICATION = "notification";
}
@@ -53715,7 +53710,7 @@
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<android.view.textclassifier.SelectionEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.SelectionEvent> 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
@@ -53740,7 +53735,7 @@
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<android.view.textclassifier.TextClassification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification> CREATOR;
}
public static final class TextClassification.Builder {
@@ -53767,7 +53762,7 @@
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<android.view.textclassifier.TextClassification.Request> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification.Request> CREATOR;
}
public static final class TextClassification.Request.Builder {
@@ -53784,7 +53779,7 @@
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<android.view.textclassifier.TextClassificationContext> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationContext> CREATOR;
}
public static final class TextClassificationContext.Builder {
@@ -53807,7 +53802,7 @@
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<android.view.textclassifier.TextClassificationSessionId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationSessionId> CREATOR;
}
public interface TextClassifier {
@@ -53857,7 +53852,7 @@
method public java.util.Collection<java.lang.String> resolveEntityListModifications(@NonNull java.util.Collection<java.lang.String>);
method public boolean shouldIncludeTypesFromTextClassifier();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
}
public static final class TextClassifier.EntityConfig.Builder {
@@ -53892,7 +53887,7 @@
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<android.view.textclassifier.TextClassifierEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent> 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
@@ -53942,7 +53937,7 @@
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<android.view.textclassifier.TextLanguage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage> CREATOR;
}
public static final class TextLanguage.Builder {
@@ -53959,7 +53954,7 @@
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<android.view.textclassifier.TextLanguage.Request> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage.Request> CREATOR;
}
public static final class TextLanguage.Request.Builder {
@@ -53976,7 +53971,7 @@
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<android.view.textclassifier.TextLinks> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks> 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
@@ -54001,7 +53996,7 @@
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<android.view.textclassifier.TextLinks.Request> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.Request> CREATOR;
}
public static final class TextLinks.Request.Builder {
@@ -54021,7 +54016,7 @@
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<android.view.textclassifier.TextLinks.TextLink> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.TextLink> CREATOR;
}
public static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan {
@@ -54040,7 +54035,7 @@
method public int getSelectionEndIndex();
method public int getSelectionStartIndex();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection> CREATOR;
}
public static final class TextSelection.Builder {
@@ -54060,7 +54055,7 @@
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<android.view.textclassifier.TextSelection.Request> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection.Request> CREATOR;
}
public static final class TextSelection.Request.Builder {
@@ -54083,7 +54078,7 @@
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<android.view.textservice.SentenceSuggestionsInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SentenceSuggestionsInfo> CREATOR;
}
public final class SpellCheckerInfo implements android.os.Parcelable {
@@ -54098,7 +54093,7 @@
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<android.view.textservice.SpellCheckerInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerInfo> CREATOR;
}
public class SpellCheckerSession {
@@ -54128,7 +54123,7 @@
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<android.view.textservice.SpellCheckerSubtype> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerSubtype> CREATOR;
}
public final class SuggestionsInfo implements android.os.Parcelable {
@@ -54143,7 +54138,7 @@
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<android.view.textservice.SuggestionsInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SuggestionsInfo> 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
@@ -54160,7 +54155,7 @@
method public int getSequence();
method public String getText();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.view.textservice.TextInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.TextInfo> CREATOR;
}
public final class TextServicesManager {
@@ -54958,7 +54953,6 @@
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();
@@ -54971,6 +54965,7 @@
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();
@@ -56697,7 +56692,7 @@
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);
@@ -56717,7 +56712,7 @@
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<android.widget.RemoteViews> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.widget.RemoteViews> CREATOR;
field public static final String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS";
}
@@ -56728,9 +56723,9 @@
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 {
@@ -57500,7 +57495,7 @@
}
public static class TextView.SavedState extends android.view.View.BaseSavedState {
- field public static final android.os.Parcelable.Creator<android.widget.TextView.SavedState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.widget.TextView.SavedState> CREATOR;
}
public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
@@ -57559,7 +57554,7 @@
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);
@@ -57720,11 +57715,11 @@
@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();
}
@@ -57775,16 +57770,16 @@
method @Deprecated public void onZoom(boolean);
}
- public class ZoomControls extends android.widget.LinearLayout {
- ctor public ZoomControls(android.content.Context);
- ctor public ZoomControls(android.content.Context, android.util.AttributeSet);
- method public void hide();
- method public void setIsZoomInEnabled(boolean);
- method public void setIsZoomOutEnabled(boolean);
- method public void setOnZoomInClickListener(android.view.View.OnClickListener);
- method public void setOnZoomOutClickListener(android.view.View.OnClickListener);
- method public void setZoomSpeed(long);
- method public void show();
+ @Deprecated public class ZoomControls extends android.widget.LinearLayout {
+ ctor @Deprecated public ZoomControls(android.content.Context);
+ ctor @Deprecated public ZoomControls(android.content.Context, android.util.AttributeSet);
+ method @Deprecated public void hide();
+ method @Deprecated public void setIsZoomInEnabled(boolean);
+ method @Deprecated public void setIsZoomOutEnabled(boolean);
+ method @Deprecated public void setOnZoomInClickListener(android.view.View.OnClickListener);
+ method @Deprecated public void setOnZoomOutClickListener(android.view.View.OnClickListener);
+ method @Deprecated public void setZoomSpeed(long);
+ method @Deprecated public void show();
}
}
diff --git a/api/removed.txt b/api/removed.txt
index c4ed871..fdfaf91 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -32,7 +32,7 @@
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<android.app.PictureInPictureArgs> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
}
@@ -352,11 +352,11 @@
}
public static final class StrictMode.ThreadPolicy.Builder {
- method public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
}
public static final class StrictMode.VmPolicy.Builder {
- method public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
+ method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
}
public final class SystemClock {
@@ -508,6 +508,8 @@
}
public final class MediaStore {
+ method @Deprecated @NonNull public static android.net.Uri createPending(@NonNull android.content.Context, @NonNull android.provider.MediaStore.PendingParams);
+ method @Deprecated @NonNull public static android.provider.MediaStore.PendingSession openPending(@NonNull android.content.Context, @NonNull android.net.Uri);
method @Deprecated @NonNull public static android.net.Uri setIncludeTrashed(@NonNull android.net.Uri);
method @Deprecated public static void trash(@NonNull android.content.Context, @NonNull android.net.Uri);
method @Deprecated public static void trash(@NonNull android.content.Context, @NonNull android.net.Uri, long);
@@ -515,11 +517,27 @@
}
public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
- field @Deprecated public static final String DATE_EXPIRES = "date_expires";
field @Deprecated public static final String HASH = "_hash";
field @Deprecated public static final String IS_TRASHED = "is_trashed";
}
+ @Deprecated public static class MediaStore.PendingParams {
+ ctor public MediaStore.PendingParams(@NonNull android.net.Uri, @NonNull String, @NonNull String);
+ method public void setDownloadUri(@Nullable android.net.Uri);
+ method public void setPrimaryDirectory(@Nullable String);
+ method public void setRefererUri(@Nullable android.net.Uri);
+ method public void setSecondaryDirectory(@Nullable String);
+ }
+
+ @Deprecated public static class MediaStore.PendingSession implements java.lang.AutoCloseable {
+ method public void abandon();
+ method public void close();
+ method public void notifyProgress(@IntRange(from=0, to=100) int);
+ method @NonNull public android.os.ParcelFileDescriptor open() throws java.io.FileNotFoundException;
+ method @NonNull public java.io.OutputStream openOutputStream() throws java.io.FileNotFoundException;
+ method @NonNull public android.net.Uri publish();
+ }
+
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field @Deprecated public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
}
diff --git a/api/system-current.txt b/api/system-current.txt
index dc41898..e5cf1f8 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -384,7 +384,7 @@
method @NonNull public String getOpName();
method public long getRejectCount(int);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
}
public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
@@ -395,7 +395,7 @@
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<android.app.AppOpsManager.HistoricalOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
}
public static final class AppOpsManager.HistoricalOpsRequest {
@@ -416,7 +416,7 @@
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<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
}
public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable {
@@ -426,7 +426,7 @@
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<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
}
public static final class AppOpsManager.OpEntry implements android.os.Parcelable {
@@ -444,7 +444,7 @@
method public int getProxyUid();
method public boolean isRunning();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEntry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEntry> CREATOR;
}
public static final class AppOpsManager.PackageOps implements android.os.Parcelable {
@@ -453,7 +453,7 @@
method public String getPackageName();
method public int getUid();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
}
public class BroadcastOptions {
@@ -565,12 +565,12 @@
}
public class StatusBarManager {
- method public android.app.StatusBarManager.DisableInfo getDisableInfo();
- method public void setDisabledForSetup(boolean);
+ method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
+ method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
}
public static final class StatusBarManager.DisableInfo {
- method public boolean areNoComponentsDisabled();
+ method public boolean areAllComponentsEnabled();
method public boolean isNavigateToHomeDisabled();
method public boolean isNotificationPeekingDisabled();
method public boolean isRecentsDisabled();
@@ -588,7 +588,7 @@
method public int getRemovedFlags();
method public int getWidth();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.Vr2dDisplayProperties> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.Vr2dDisplayProperties> CREATOR;
field public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1; // 0x1
}
@@ -833,7 +833,7 @@
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<android.app.backup.BackupProgress> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.BackupProgress> CREATOR;
field public final long bytesExpected;
field public final long bytesTransferred;
}
@@ -891,7 +891,7 @@
method public int getDataType();
method public String getPackageName();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.backup.RestoreDescription> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreDescription> 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 +918,7 @@
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<android.app.backup.RestoreSet> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreSet> CREATOR;
field public String device;
field public String name;
field public long token;
@@ -939,7 +939,7 @@
method @Nullable public android.os.Bundle getExtras();
method @NonNull public java.util.List<android.app.contentsuggestions.ContentSelection> getSelections();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ClassificationsRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ClassificationsRequest> CREATOR;
}
public static final class ClassificationsRequest.Builder {
@@ -954,7 +954,7 @@
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<android.app.contentsuggestions.ContentClassification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentClassification> CREATOR;
}
public final class ContentSelection implements android.os.Parcelable {
@@ -963,7 +963,7 @@
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<android.app.contentsuggestions.ContentSelection> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentSelection> CREATOR;
}
public final class ContentSuggestionsManager {
@@ -987,7 +987,7 @@
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<android.app.contentsuggestions.SelectionsRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.SelectionsRequest> CREATOR;
}
public static final class SelectionsRequest.Builder {
@@ -1016,7 +1016,7 @@
method public int getPredictedTargetCount();
method public String getUiSurface();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
}
public static final class AppPredictionContext.Builder {
@@ -1034,7 +1034,7 @@
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<android.app.prediction.AppPredictionSessionId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionSessionId> CREATOR;
}
public final class AppPredictor {
@@ -1062,7 +1062,7 @@
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<android.app.prediction.AppTarget> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTarget> CREATOR;
}
public final class AppTargetEvent implements android.os.Parcelable {
@@ -1074,7 +1074,7 @@
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<android.app.prediction.AppTargetEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetEvent> CREATOR;
}
public static final class AppTargetEvent.Builder {
@@ -1087,7 +1087,7 @@
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<android.app.prediction.AppTargetId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetId> CREATOR;
}
}
@@ -1130,7 +1130,7 @@
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<android.app.usage.CacheQuotaHint> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.CacheQuotaHint> CREATOR;
field public static final long QUOTA_NOT_SET = -1L; // 0xffffffffffffffffL
}
@@ -1277,7 +1277,7 @@
method public int getOffset();
method public int getType();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.bluetooth.le.ResultStorageDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ResultStorageDescriptor> CREATOR;
}
public final class ScanSettings implements android.os.Parcelable {
@@ -1445,7 +1445,7 @@
method public int describeContents();
method public boolean isEnabled();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
field public final String category;
field public final String packageName;
field public final String targetPackageName;
@@ -1484,7 +1484,7 @@
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<android.content.pm.InstantAppInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppInfo> CREATOR;
}
public final class InstantAppIntentFilter implements android.os.Parcelable {
@@ -1493,7 +1493,7 @@
method public java.util.List<android.content.IntentFilter> getFilters();
method public String getSplitName();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.InstantAppIntentFilter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppIntentFilter> CREATOR;
}
public final class InstantAppResolveInfo implements android.os.Parcelable {
@@ -1511,7 +1511,7 @@
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<android.content.pm.InstantAppResolveInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo> CREATOR;
}
public static final class InstantAppResolveInfo.InstantAppDigest implements android.os.Parcelable {
@@ -1520,7 +1520,7 @@
method public byte[][] getDigestBytes();
method public int[] getDigestPrefix();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo.InstantAppDigest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo.InstantAppDigest> CREATOR;
field public static final android.content.pm.InstantAppResolveInfo.InstantAppDigest UNDEFINED;
}
@@ -1530,7 +1530,7 @@
method public String getPackageName();
method public int getStatus();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
}
public class PackageInstaller {
@@ -1728,13 +1728,13 @@
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<android.content.pm.ShortcutManager.ShareShortcutInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutManager.ShareShortcutInfo> 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<android.content.pm.SuspendDialogInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SuspendDialogInfo> CREATOR;
}
public static final class SuspendDialogInfo.Builder {
@@ -1778,7 +1778,7 @@
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<android.content.pm.permission.RuntimePermissionPresentationInfo> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.permission.RuntimePermissionPresentationInfo> CREATOR;
}
}
@@ -1791,7 +1791,7 @@
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<android.content.rollback.PackageRollbackInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.PackageRollbackInfo> CREATOR;
}
public final class RollbackInfo implements android.os.Parcelable {
@@ -1802,7 +1802,7 @@
method public int getRollbackId();
method public boolean isStaged();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.content.rollback.RollbackInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.RollbackInfo> CREATOR;
}
public final class RollbackManager {
@@ -1872,13 +1872,13 @@
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<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.AmbientBrightnessDayStats> 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<android.hardware.display.BrightnessChangeEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessChangeEvent> CREATOR;
field public final float batteryLevel;
field public final float brightness;
field public final long colorSampleDuration;
@@ -1901,17 +1901,17 @@
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
method public android.util.Pair<float[],float[]> getCurve();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> 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 +1919,7 @@
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<android.hardware.display.BrightnessCorrection> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessCorrection> CREATOR;
}
public final class ColorDisplayManager {
@@ -1969,10 +1969,10 @@
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 +2096,7 @@
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<android.hardware.hdmi.HdmiDeviceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiDeviceInfo> 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 +2116,7 @@
method public int getPort();
method public boolean isConnected();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiHotplugEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiHotplugEvent> CREATOR;
}
public final class HdmiPlaybackClient extends android.hardware.hdmi.HdmiClient {
@@ -2144,7 +2144,7 @@
method public boolean isCecSupported();
method public boolean isMhlSupported();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiPortInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiPortInfo> CREATOR;
field public static final int PORT_INPUT = 0; // 0x0
field public static final int PORT_OUTPUT = 1; // 0x1
}
@@ -2307,7 +2307,7 @@
method public int getToolchainVersion();
method public String getVendor();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubInfo> CREATOR;
}
public class ContextHubIntentEvent {
@@ -2368,7 +2368,7 @@
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<android.hardware.location.ContextHubMessage> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubMessage> CREATOR;
}
public class ContextHubTransaction<T> {
@@ -2456,7 +2456,7 @@
method public int getMonitoringType();
method public int getSourceTechnologies();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
}
public final class GeofenceHardwareRequest {
@@ -2486,7 +2486,7 @@
method public boolean isReadable();
method public boolean isWritable();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.MemoryRegion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.MemoryRegion> CREATOR;
}
@Deprecated public class NanoApp implements android.os.Parcelable {
@@ -2515,7 +2515,7 @@
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<android.hardware.location.NanoApp> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoApp> CREATOR;
}
public final class NanoAppBinary implements android.os.Parcelable {
@@ -2534,7 +2534,7 @@
method public boolean isEncrypted();
method public boolean isSigned();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppBinary> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppBinary> CREATOR;
}
@Deprecated public class NanoAppFilter implements android.os.Parcelable {
@@ -2543,7 +2543,7 @@
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<android.hardware.location.NanoAppFilter> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppFilter> 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 +2567,7 @@
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<android.hardware.location.NanoAppInstanceInfo> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppInstanceInfo> CREATOR;
}
public final class NanoAppMessage implements android.os.Parcelable {
@@ -2579,7 +2579,7 @@
method public long getNanoAppId();
method public boolean isBroadcastMessage();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
}
public final class NanoAppState implements android.os.Parcelable {
@@ -2589,7 +2589,7 @@
method public long getNanoAppVersion();
method public boolean isEnabled();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppState> CREATOR;
}
}
@@ -2602,7 +2602,7 @@
method public int getType();
method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.Announcement> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.Announcement> 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 +2637,7 @@
method @NonNull public java.util.Set<java.lang.Integer> getIdentifierTypes();
method @NonNull public java.util.Set<android.hardware.radio.ProgramSelector.Identifier> getIdentifiers();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramList.Filter> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramList.Filter> CREATOR;
}
public abstract static class ProgramList.ListCallback {
@@ -2663,7 +2663,7 @@
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<android.hardware.radio.ProgramSelector> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector> 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 +2702,7 @@
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<android.hardware.radio.ProgramSelector.Identifier> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector.Identifier> 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 +2751,7 @@
public static class RadioManager.AmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
method public boolean getStereo();
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandConfig> CREATOR;
}
public static class RadioManager.AmBandConfig.Builder {
@@ -2763,7 +2763,7 @@
public static class RadioManager.AmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor {
method public boolean isStereoSupported();
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandDescriptor> 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 +2777,7 @@
method public int getType();
method public int getUpperLimit();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandConfig> CREATOR;
}
public static class RadioManager.BandDescriptor implements android.os.Parcelable {
@@ -2790,7 +2790,7 @@
method public boolean isAmBand();
method public boolean isFmBand();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandDescriptor> CREATOR;
}
public static class RadioManager.FmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
@@ -2799,7 +2799,7 @@
method public boolean getRds();
method public boolean getStereo();
method public boolean getTa();
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandConfig> CREATOR;
}
public static class RadioManager.FmBandConfig.Builder {
@@ -2819,7 +2819,7 @@
method public boolean isRdsSupported();
method public boolean isStereoSupported();
method public boolean isTaSupported();
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandDescriptor> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandDescriptor> CREATOR;
}
public static class RadioManager.ModuleProperties implements android.os.Parcelable {
@@ -2842,7 +2842,7 @@
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<android.hardware.radio.RadioManager.ModuleProperties> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ModuleProperties> CREATOR;
}
public static class RadioManager.ProgramInfo implements android.os.Parcelable {
@@ -2864,7 +2864,7 @@
method public boolean isTrafficProgram();
method public boolean isTuned();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ProgramInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ProgramInfo> CREATOR;
}
public final class RadioMetadata implements android.os.Parcelable {
@@ -2877,7 +2877,7 @@
method public java.util.Set<java.lang.String> keySet();
method public int size();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata> 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 +2915,7 @@
method public int getTimezoneOffsetMinutes();
method public long getUtcEpochSeconds();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata.Clock> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata.Clock> CREATOR;
}
public abstract class RadioTuner {
@@ -3015,7 +3015,7 @@
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<android.hardware.usb.UsbPortStatus> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbPortStatus> 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 +3048,7 @@
method public long getToaGpsNanosecondsOfWeek();
method public double getVerticalPositionUncertaintyMeters();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssMeasurementCorrections> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementCorrections> CREATOR;
}
public static final class GnssMeasurementCorrections.Builder {
@@ -3070,7 +3070,7 @@
method public double getLatitudeDegrees();
method public double getLongitudeDegrees();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssReflectingPlane> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssReflectingPlane> CREATOR;
}
public static final class GnssReflectingPlane.Builder {
@@ -3097,7 +3097,7 @@
method public boolean hasReflectingPlane();
method public boolean hasValidSatelliteLineOfSight();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GnssSingleSatCorrection> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssSingleSatCorrection> 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 +3154,7 @@
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<android.location.GpsClock> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsClock> 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 +3266,7 @@
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<android.location.GpsMeasurement> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurement> 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 +3287,7 @@
method @NonNull public android.location.GpsClock getClock();
method @NonNull public java.util.Collection<android.location.GpsMeasurement> getMeasurements();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> 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 +3315,7 @@
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<android.location.GpsNavigationMessage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> 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 +3331,7 @@
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<android.location.GpsNavigationMessageEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessageEvent> CREATOR;
field public static int STATUS_GPS_LOCATION_DISABLED;
field public static int STATUS_NOT_SUPPORTED;
field public static int STATUS_READY;
@@ -3404,7 +3404,7 @@
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<android.location.LocationRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> 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 +3440,7 @@
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<android.media.AudioFocusInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFocusInfo> CREATOR;
}
public final class AudioFocusRequest {
@@ -3456,15 +3456,22 @@
method public void clearAudioServerStateCallback();
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioProductStrategies getAudioProductStrategies();
+ method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioVolumeGroups getAudioVolumeGroups();
+ method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
method public boolean isAudioServerRunning();
method public boolean isHdmiSystemAudioSupported();
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+ method public void registerVolumeGroupCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.VolumeGroupCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int requestAudioFocus(@NonNull android.media.AudioFocusRequest, @Nullable android.media.audiopolicy.AudioPolicy);
method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setVolumeIndexForAttributes(@NonNull android.media.AudioAttributes, int, int);
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicyAsync(@NonNull android.media.audiopolicy.AudioPolicy);
+ method public void unregisterVolumeGroupCallback(@NonNull android.media.AudioManager.VolumeGroupCallback);
field public static final int AUDIOFOCUS_FLAG_DELAY_OK = 1; // 0x1
field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4
field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2
@@ -3478,6 +3485,11 @@
method public void onAudioServerUp();
}
+ public abstract static class AudioManager.VolumeGroupCallback {
+ ctor public AudioManager.VolumeGroupCallback();
+ method public void onAudioVolumeGroupChanged(int, int);
+ }
+
public final class AudioPlaybackConfiguration implements android.os.Parcelable {
method public int getClientPid();
method public int getClientUid();
@@ -3649,10 +3661,12 @@
method @Nullable public android.media.audiopolicy.AudioProductStrategy getById(int);
method public int getLegacyStreamTypeForAudioAttributes(@NonNull android.media.AudioAttributes);
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<android.media.audiopolicy.AudioProductStrategy> iterator();
method public int size();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategies> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategies> CREATOR;
}
public final class AudioProductStrategy implements android.os.Parcelable {
@@ -3661,7 +3675,28 @@
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<android.media.audiopolicy.AudioProductStrategy> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategy> CREATOR;
+ }
+
+ public final class AudioVolumeGroup implements android.os.Parcelable {
+ method public int describeContents();
+ method public java.util.List<android.media.AudioAttributes> getAudioAttributes();
+ method public int getId();
+ method @NonNull public int[] getLegacyStreamTypes();
+ method @NonNull public String name();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioVolumeGroup> CREATOR;
+ }
+
+ public final class AudioVolumeGroups implements java.lang.Iterable<android.media.audiopolicy.AudioVolumeGroup> android.os.Parcelable {
+ ctor public AudioVolumeGroups();
+ method public int describeContents();
+ method @Nullable public android.media.audiopolicy.AudioVolumeGroup getById(int);
+ method public java.util.Iterator<android.media.audiopolicy.AudioVolumeGroup> iterator();
+ method public int size();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioVolumeGroups> CREATOR;
+ field public static final int DEFAULT_VOLUME_GROUP = -1; // 0xffffffff
}
}
@@ -3796,7 +3831,7 @@
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<android.media.tv.TvInputHardwareInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputHardwareInfo> 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
@@ -3904,7 +3939,7 @@
method public int getStreamId();
method public int getType();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
}
@@ -4101,7 +4136,7 @@
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<android.net.NetworkKey> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkKey> CREATOR;
field public static final int TYPE_WIFI = 1; // 0x1
field public final int type;
field public final android.net.WifiKey wifiKey;
@@ -4152,7 +4187,7 @@
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<android.net.RssiCurve> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.RssiCurve> CREATOR;
field public final int activeNetworkRssiBoost;
field public final int bucketWidth;
field public final byte[] rssiBuckets;
@@ -4169,7 +4204,7 @@
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<android.net.ScoredNetwork> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.ScoredNetwork> CREATOR;
field @Nullable public final android.os.Bundle attributes;
field public final boolean meteredHint;
field public final android.net.NetworkKey networkKey;
@@ -4191,7 +4226,7 @@
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<android.net.StaticIpConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR;
}
public class TrafficStats {
@@ -4215,7 +4250,7 @@
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<android.net.WifiKey> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.WifiKey> CREATOR;
field public final String bssid;
field public final String ssid;
}
@@ -4558,7 +4593,7 @@
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<android.net.wifi.RttManager.ResponderConfig> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.RttManager.ResponderConfig> CREATOR;
field @Deprecated public int centerFreq0;
field @Deprecated public int centerFreq1;
field @Deprecated public int channelWidth;
@@ -4752,7 +4787,7 @@
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<android.net.wifi.WifiNetworkConnectionStatistics> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkConnectionStatistics> CREATOR;
field public int numConnection;
field public int numUsage;
}
@@ -4879,7 +4914,7 @@
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<android.net.wifi.WifiUsabilityStatsEntry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry> 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
@@ -4934,7 +4969,7 @@
method public String getFriendlyName();
method public android.net.Uri getServerUri();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.OsuProvider> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.OsuProvider> CREATOR;
}
public abstract class ProvisioningCallback {
@@ -5004,7 +5039,7 @@
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<android.net.wifi.rtt.ResponderConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderConfig> 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
@@ -5086,7 +5121,7 @@
method public boolean getForceBackgroundCheck();
method public int getLocationMode();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.BatterySaverPolicyConfig> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.BatterySaverPolicyConfig> CREATOR;
}
public static final class BatterySaverPolicyConfig.Builder {
@@ -5175,11 +5210,11 @@
}
public class Environment {
- method public static java.io.File getOdmDirectory();
- method public static java.io.File getOemDirectory();
- method public static java.io.File getProductDirectory();
- method public static java.io.File getProductServicesDirectory();
- method public static java.io.File getVendorDirectory();
+ method @NonNull public static java.io.File getOdmDirectory();
+ method @NonNull public static java.io.File getOemDirectory();
+ method @NonNull public static java.io.File getProductDirectory();
+ method @NonNull public static java.io.File getProductServicesDirectory();
+ method @NonNull public static java.io.File getVendorDirectory();
}
public class HidlSupport {
@@ -5347,7 +5382,7 @@
method public long getPrivacyPolicy();
method public long getTimestamp();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
}
public static class IncidentManager.PendingReport {
@@ -5371,7 +5406,7 @@
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<android.os.IncidentReportArgs> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR;
}
public final class LocaleList implements android.os.Parcelable {
@@ -5425,7 +5460,7 @@
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<android.os.RemoteCallback> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.RemoteCallback> CREATOR;
}
public static interface RemoteCallback.OnResultListener {
@@ -5451,7 +5486,7 @@
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<android.os.StatsDimensionsValue> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.StatsDimensionsValue> 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
@@ -5580,7 +5615,7 @@
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<android.os.UserManager.EnforcingUser> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.UserManager.EnforcingUser> 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 {
@@ -5597,7 +5632,7 @@
method public String getAttributionTag();
method public int getAttributionUid();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.WorkSource.WorkChain> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource.WorkChain> CREATOR;
}
}
@@ -5632,7 +5667,7 @@
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<java.lang.String>, int);
method @NonNull public abstract java.util.List<android.permission.RuntimePermissionPresentationInfo> onGetAppPermissions(@NonNull String);
method @NonNull public abstract java.util.List<android.permission.RuntimePermissionUsageInfo> onGetPermissionUsages(boolean, long);
@@ -5663,7 +5698,7 @@
method public boolean isGranted();
method public boolean isStandard();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionPresentationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionPresentationInfo> CREATOR;
}
public final class RuntimePermissionUsageInfo implements android.os.Parcelable {
@@ -5672,7 +5707,7 @@
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<android.permission.RuntimePermissionUsageInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionUsageInfo> CREATOR;
}
}
@@ -5726,7 +5761,7 @@
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<android.printservice.PrintServiceInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.printservice.PrintServiceInfo> CREATOR;
}
}
@@ -5743,7 +5778,7 @@
method public CharSequence getPackageName();
method public boolean recommendsMultiVendorService();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.printservice.recommendation.RecommendationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.printservice.recommendation.RecommendationInfo> CREATOR;
}
public abstract class RecommendationService extends android.app.Service {
@@ -5791,10 +5826,16 @@
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_AUTOFILL = "autofill";
field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
field public static final String NAMESPACE_GAME_DRIVER = "game_driver";
@@ -5803,19 +5844,6 @@
field public static final String NAMESPACE_SYSTEMUI = "systemui";
}
- public static interface DeviceConfig.ActivityManager {
- field public static final String KEY_COMPACT_ACTION_1 = "compact_action_1";
- field public static final String KEY_COMPACT_ACTION_2 = "compact_action_2";
- field public static final String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate";
- field public static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
- field public static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
- field public static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
- field public static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
- field public static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
- field public static final String KEY_USE_COMPACTION = "use_compaction";
- field public static final String NAMESPACE = "activity_manager";
- }
-
public static interface DeviceConfig.ActivityManagerNativeBoot {
field public static final String NAMESPACE = "activity_manager_native_boot";
field public static final String OFFLOAD_QUEUE_ENABLED = "offload_queue_enabled";
@@ -6176,7 +6204,7 @@
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<android.security.keystore.recovery.KeyChainProtectionParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainProtectionParams> 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
@@ -6203,7 +6231,7 @@
method @NonNull public java.security.cert.CertPath getTrustedHardwareCertPath();
method @NonNull public java.util.List<android.security.keystore.recovery.WrappedApplicationKey> getWrappedApplicationKeys();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainSnapshot> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainSnapshot> CREATOR;
}
public final class KeyDerivationParams implements android.os.Parcelable {
@@ -6216,7 +6244,7 @@
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<android.security.keystore.recovery.KeyDerivationParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyDerivationParams> CREATOR;
}
public class LockScreenRequiredException extends java.security.GeneralSecurityException {
@@ -6264,7 +6292,7 @@
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<android.security.keystore.recovery.WrappedApplicationKey> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.WrappedApplicationKey> CREATOR;
}
public static class WrappedApplicationKey.Builder {
@@ -6365,9 +6393,8 @@
public static final class FillResponse.Builder {
ctor public FillResponse.Builder();
- method public android.service.autofill.augmented.FillResponse build();
- method public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
- method public android.service.autofill.augmented.FillResponse.Builder setIgnoredIds(@NonNull java.util.List<android.view.autofill.AutofillId>);
+ method @NonNull public android.service.autofill.augmented.FillResponse build();
+ method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
}
public final class FillWindow implements java.lang.AutoCloseable {
@@ -6415,11 +6442,11 @@
public final class SnapshotData implements android.os.Parcelable {
method public int describeContents();
- method public android.app.assist.AssistContent getAssistContent();
- method public android.os.Bundle getAssistData();
- method public android.app.assist.AssistStructure getAssistStructure();
+ method @Nullable public android.app.assist.AssistContent getAssistContent();
+ method @NonNull public android.os.Bundle getAssistData();
+ method @NonNull public android.app.assist.AssistStructure getAssistStructure();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
}
}
@@ -6446,7 +6473,7 @@
method public int getResolvableErrors();
method public int getResult();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.euicc.DownloadSubscriptionResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.DownloadSubscriptionResult> CREATOR;
}
public final class EuiccProfileInfo implements android.os.Parcelable {
@@ -6463,7 +6490,7 @@
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<android.service.euicc.EuiccProfileInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.EuiccProfileInfo> 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
@@ -6554,7 +6581,7 @@
method @Nullable public java.util.List<android.telephony.euicc.DownloadableSubscription> getDownloadableSubscriptions();
method public int getResult();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.euicc.GetDefaultDownloadableSubscriptionListResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDefaultDownloadableSubscriptionListResult> CREATOR;
}
public final class GetDownloadableSubscriptionMetadataResult implements android.os.Parcelable {
@@ -6563,7 +6590,7 @@
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<android.service.euicc.GetDownloadableSubscriptionMetadataResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDownloadableSubscriptionMetadataResult> CREATOR;
}
public final class GetEuiccProfileInfoListResult implements android.os.Parcelable {
@@ -6573,7 +6600,7 @@
method @Nullable public java.util.List<android.service.euicc.EuiccProfileInfo> getProfiles();
method public int getResult();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.euicc.GetEuiccProfileInfoListResult> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetEuiccProfileInfoListResult> CREATOR;
}
}
@@ -6599,7 +6626,7 @@
method public CharSequence getExplanation();
method public String getId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
}
}
@@ -6671,7 +6698,7 @@
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<android.service.resolver.ResolverTarget> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.resolver.ResolverTarget> CREATOR;
}
}
@@ -6687,7 +6714,7 @@
method public CharSequence getSummary();
method public CharSequence getTitle();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.settings.suggestions.Suggestion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.settings.suggestions.Suggestion> CREATOR;
field public static final int FLAG_HAS_BUTTON = 1; // 0x1
}
@@ -6801,7 +6828,7 @@
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<android.telecom.AudioState> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telecom.AudioState> 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
@@ -6859,7 +6886,7 @@
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<android.telecom.ParcelableCallAnalytics> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics> 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
@@ -6883,7 +6910,7 @@
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<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> 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
@@ -6923,7 +6950,7 @@
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<android.telecom.ParcelableCallAnalytics.EventTiming> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.EventTiming> 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
@@ -6964,7 +6991,7 @@
}
public final class PhoneAccountSuggestion implements android.os.Parcelable {
- ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean);
+ ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);
}
public class PhoneAccountSuggestionService extends android.app.Service {
@@ -6996,7 +7023,7 @@
method public java.util.List<android.telecom.ParcelableCallAnalytics> getCallAnalytics();
method public java.util.List<android.telecom.TelecomAnalytics.SessionTiming> getSessionTimings();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics> CREATOR;
}
public static final class TelecomAnalytics.SessionTiming implements android.os.Parcelable {
@@ -7005,7 +7032,7 @@
method public Integer getKey();
method public long getTime();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics.SessionTiming> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics.SessionTiming> 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
@@ -7070,7 +7097,7 @@
method public int getNetworkType();
method public android.telephony.PreciseCallState getPreciseCallState();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.CallAttributes> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallAttributes> CREATOR;
}
public final class CallQuality implements android.os.Parcelable {
@@ -7094,7 +7121,7 @@
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<android.telephony.CallQuality> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallQuality> CREATOR;
}
public class CarrierConfigManager {
@@ -7115,7 +7142,7 @@
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<android.telephony.CarrierRestrictionRules> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CarrierRestrictionRules> 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
}
@@ -7476,7 +7503,7 @@
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<android.telephony.DataSpecificRegistrationStates> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationStates> CREATOR;
}
public final class DisconnectCause {
@@ -7562,7 +7589,7 @@
method public int getEmcBearerSupport();
method public int getVopsSupport();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.LteVopsSupportInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LteVopsSupportInfo> 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
@@ -7596,7 +7623,7 @@
method public boolean isEmergencyEnabled();
method public boolean isRoaming();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationState> 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
@@ -7651,9 +7678,9 @@
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<android.telephony.PhoneNumberRange> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneNumberRange> CREATOR;
}
public class PhoneStateListener {
@@ -7661,7 +7688,7 @@
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onCallDisconnectCauseChanged(int, int);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
- method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseDataConnectionStateChanged(android.telephony.PreciseDataConnectionState);
+ method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
method public void onRadioPowerStateChanged(int);
method public void onSrvccStateChanged(int);
method public void onVoiceActivationStateChanged(int);
@@ -7681,7 +7708,7 @@
method public int getForegroundCallState();
method public int getRingingCallState();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.PreciseCallState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseCallState> 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
@@ -7696,12 +7723,12 @@
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<android.telephony.PreciseDataConnectionState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseDataConnectionState> CREATOR;
}
public final class PreciseDisconnectCause {
@@ -7851,17 +7878,17 @@
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @NonNull java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean);
- field public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff
field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff
- field public static final android.net.Uri VT_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_MODE_CONTENT_URI;
- field public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
- field public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
+ field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
+ field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
}
public static class SubscriptionPlan.Builder {
@@ -7886,7 +7913,7 @@
method public int getMinTime();
method public int getSampleCount();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.TelephonyHistogram> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.TelephonyHistogram> CREATOR;
field public static final int TELEPHONY_CATEGORY_RIL = 1; // 0x1
}
@@ -7899,7 +7926,7 @@
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<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);
@@ -7915,9 +7942,10 @@
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 @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain();
method @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<android.util.Pair<java.lang.Integer,java.lang.Integer>> 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();
@@ -7978,7 +8006,6 @@
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
@@ -8027,7 +8054,7 @@
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<android.telephony.UiccAccessRule> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccAccessRule> CREATOR;
}
public class UiccSlotInfo implements android.os.Parcelable {
@@ -8045,7 +8072,7 @@
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<android.telephony.UiccSlotInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccSlotInfo> CREATOR;
}
public abstract class VisualVoicemailService extends android.app.Service {
@@ -8073,7 +8100,7 @@
method public int getStatus();
method public int getSuggestedRetryTime();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
}
public final class DataProfile implements android.os.Parcelable {
@@ -8252,7 +8279,7 @@
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<android.telephony.euicc.EuiccNotification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccNotification> 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
@@ -8267,7 +8294,7 @@
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<android.telephony.euicc.EuiccRulesAuthTable> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccRulesAuthTable> CREATOR;
field public static final int POLICY_RULE_FLAG_CONSENT_REQUIRED = 1; // 0x1
}
@@ -8301,7 +8328,7 @@
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<android.telephony.ims.ImsCallForwardInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallForwardInfo> 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
@@ -8362,7 +8389,7 @@
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<android.telephony.ims.ImsCallProfile> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallProfile> 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
@@ -8434,7 +8461,7 @@
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<android.telephony.ims.ImsConferenceState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsConferenceState> 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";
@@ -8478,7 +8505,7 @@
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<android.telephony.ims.ImsExternalCallState> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsExternalCallState> CREATOR;
}
public class ImsMmTelManager {
@@ -8493,14 +8520,14 @@
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isVtSettingEnabled();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerMmTelCapabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback) throws android.telephony.ims.ImsException;
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSetting(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSetting(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSetting(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSetting(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean);
+ method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterMmTelCapabilityCallback(@NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback);
field public static final int WIFI_MODE_CELLULAR_PREFERRED = 1; // 0x1
@@ -8515,10 +8542,10 @@
public static class ImsMmTelManager.RegistrationCallback {
ctor public ImsMmTelManager.RegistrationCallback();
- method public void onDeregistered(android.telephony.ims.ImsReasonInfo);
method public void onRegistered(int);
method public void onRegistering(int);
method public void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
+ method public void onUnregistered(android.telephony.ims.ImsReasonInfo);
}
public final class ImsReasonInfo implements android.os.Parcelable {
@@ -8698,7 +8725,7 @@
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<android.telephony.ims.ImsReasonInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsReasonInfo> 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
@@ -8739,7 +8766,7 @@
method public boolean isTypeInterrogation();
method public boolean isTypeUnConditional();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsData> 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
@@ -8811,7 +8838,7 @@
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<android.telephony.ims.ImsSsInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsInfo> 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
@@ -8864,7 +8891,7 @@
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<android.telephony.ims.ImsStreamMediaProfile> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsStreamMediaProfile> 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
@@ -8884,7 +8911,7 @@
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<android.telephony.ims.ImsSuppServiceNotification> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSuppServiceNotification> CREATOR;
field public final int code;
field public final String[] history;
field public final int index;
@@ -8961,7 +8988,7 @@
method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToDisable();
method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToEnable();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.ims.feature.CapabilityChangeRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.feature.CapabilityChangeRequest> CREATOR;
}
public static class CapabilityChangeRequest.CapabilityPair {
@@ -9123,7 +9150,7 @@
method public int describeContents();
method public java.util.Set<android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair> getServiceFeatures();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.telephony.ims.stub.ImsFeatureConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.stub.ImsFeatureConfiguration> CREATOR;
}
public static class ImsFeatureConfiguration.Builder {
@@ -9236,7 +9263,7 @@
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<android.telephony.mbms.UriPathPair> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.UriPathPair> CREATOR;
}
}
@@ -9268,12 +9295,12 @@
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.lang.Integer>, java.util.List<java.lang.Integer>, android.telephony.mbms.GroupCallCallback);
+ method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);
method public void stopGroupCall(int, long);
- method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>);
+ method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
}
public class MbmsStreamingServiceBase extends android.os.Binder {
@@ -9414,7 +9441,7 @@
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<android.view.contentcapture.ContentCaptureEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> 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
@@ -9808,7 +9835,7 @@
method public default void onMovedToDisplay(int, android.content.res.Configuration);
method public void onOverScrolled(int, int, boolean, boolean);
method public default void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
- method public default void onProvideContentCaptureStructure(android.view.ViewStructure, int);
+ method public default void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
method public void onProvideVirtualStructure(android.view.ViewStructure);
method public void onScrollChanged(int, int, int, int);
method public void onSizeChanged(int, int, int, int);
@@ -9836,7 +9863,7 @@
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<android.webkit.WebViewProviderInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.webkit.WebViewProviderInfo> 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 1089761..1e9802a 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -217,7 +217,7 @@
method @NonNull public String getOpName();
method public long getRejectCount(int);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
}
public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
@@ -233,7 +233,7 @@
method public void increaseRejectCount(int, int, @NonNull String, int, long);
method public void offsetBeginAndEndTime(long);
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
}
public static final class AppOpsManager.HistoricalOpsRequest {
@@ -254,7 +254,7 @@
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<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
}
public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable {
@@ -264,13 +264,17 @@
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<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
}
public static interface AppOpsManager.OnOpActiveChangedListener {
method public void onOpActiveChanged(int, int, String, boolean);
}
+ public class DownloadManager {
+ field public static final String COLUMN_MEDIASTORE_URI = "mediastore_uri";
+ }
+
public final class NotificationChannel implements android.os.Parcelable {
method public boolean isImportanceLockedByOEM();
method public void setImportanceLockedByOEM(boolean);
@@ -392,7 +396,7 @@
method public int getPredictedTargetCount();
method public String getUiSurface();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
}
public static final class AppPredictionContext.Builder {
@@ -410,7 +414,7 @@
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<android.app.prediction.AppPredictionSessionId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionSessionId> CREATOR;
}
public final class AppPredictor {
@@ -438,7 +442,7 @@
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<android.app.prediction.AppTarget> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTarget> CREATOR;
}
public final class AppTargetEvent implements android.os.Parcelable {
@@ -450,7 +454,7 @@
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<android.app.prediction.AppTargetEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetEvent> CREATOR;
}
public static final class AppTargetEvent.Builder {
@@ -463,19 +467,29 @@
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<android.app.prediction.AppTargetId> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetId> 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<java.lang.String> getHeldRolesFromController(@NonNull String);
method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List<java.lang.String> 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<java.lang.String>);
}
public interface RoleManagerCallback {
@@ -517,7 +531,7 @@
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<android.content.AutofillOptions> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.AutofillOptions> CREATOR;
field public boolean augmentedEnabled;
field public final boolean compatModeEnabled;
field public final int loggingLevel;
@@ -528,7 +542,7 @@
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<android.content.ContentCaptureOptions> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentCaptureOptions> CREATOR;
field public final int idleFlushingFrequencyMs;
field public final int logHistorySize;
field public final int loggingLevel;
@@ -558,6 +572,10 @@
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 +755,7 @@
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<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
}
public class AmbientDisplayConfiguration {
@@ -750,7 +768,7 @@
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<android.hardware.display.BrightnessChangeEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessChangeEvent> CREATOR;
field public final float batteryLevel;
field public final float brightness;
field public final long colorSampleDuration;
@@ -773,17 +791,17 @@
method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
method public android.util.Pair<float[],float[]> getCurve();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> 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 +809,7 @@
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<android.hardware.display.BrightnessCorrection> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessCorrection> CREATOR;
}
public final class DisplayManager {
@@ -887,6 +905,7 @@
public class LocationManager {
method public String[] getBackgroundThrottlingWhitelist();
method public String[] getIgnoreSettingsWhitelist();
+ method @NonNull public java.util.List<android.location.LocationRequest> 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 +919,20 @@
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<android.location.LocationRequest> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> 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 +963,7 @@
method public int getInitialMarkMs();
method public int getResumePlaybackMarkMs();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.media.BufferingParams> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.media.BufferingParams> CREATOR;
}
public static class BufferingParams.Builder {
@@ -1155,7 +1177,7 @@
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<android.net.StaticIpConfiguration> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR;
}
public class TrafficStats {
@@ -1412,8 +1434,8 @@
public class Environment {
method public static java.io.File buildPath(java.io.File, java.lang.String...);
- method public static java.io.File getProductDirectory();
- method public static java.io.File getStorageDirectory();
+ method @NonNull public static java.io.File getProductDirectory();
+ method @NonNull public static java.io.File getStorageDirectory();
}
public final class FileUtils {
@@ -1578,7 +1600,7 @@
method public long getPrivacyPolicy();
method public long getTimestamp();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
}
public static class IncidentManager.PendingReport {
@@ -1602,7 +1624,7 @@
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<android.os.IncidentReportArgs> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR;
}
public final class MessageQueue {
@@ -1649,7 +1671,7 @@
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<android.os.RemoteCallback> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.RemoteCallback> CREATOR;
}
public static interface RemoteCallback.OnResultListener {
@@ -1662,7 +1684,7 @@
}
public static final class StrictMode.ThreadPolicy.Builder {
- method public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
+ method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
}
public static final class StrictMode.ViolationInfo implements android.os.Parcelable {
@@ -1674,7 +1696,7 @@
method public Class<? extends android.os.strictmode.Violation> getViolationClass();
method public String getViolationDetails();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.StrictMode.ViolationInfo> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.StrictMode.ViolationInfo> CREATOR;
field public String broadcastIntentAction;
field public int durationMillis;
field public int numAnimationsRunning;
@@ -1729,7 +1751,7 @@
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<android.os.VibrationEffect.OneShot> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.OneShot> CREATOR;
}
public static class VibrationEffect.Prebaked extends android.os.VibrationEffect implements android.os.Parcelable {
@@ -1742,7 +1764,7 @@
method public boolean shouldFallback();
method public void validate();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Prebaked> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Prebaked> CREATOR;
}
public static class VibrationEffect.Waveform extends android.os.VibrationEffect implements android.os.Parcelable {
@@ -1755,7 +1777,7 @@
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<android.os.VibrationEffect.Waveform> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Waveform> CREATOR;
}
public class VintfObject {
@@ -1829,7 +1851,7 @@
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<android.os.health.HealthStatsParceler> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.os.health.HealthStatsParceler> CREATOR;
}
public class HealthStatsWriter {
@@ -1921,7 +1943,12 @@
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 +2004,7 @@
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 +2128,7 @@
method public android.util.ArrayMap<java.lang.String,android.os.Bundle> getFieldClassificationArgs();
method public String[] getValues();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.autofill.CompositeUserData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CompositeUserData> CREATOR;
}
public final class CustomDescription implements android.os.Parcelable {
@@ -2203,9 +2231,8 @@
public static final class FillResponse.Builder {
ctor public FillResponse.Builder();
- method public android.service.autofill.augmented.FillResponse build();
- method public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
- method public android.service.autofill.augmented.FillResponse.Builder setIgnoredIds(@NonNull java.util.List<android.view.autofill.AutofillId>);
+ method @NonNull public android.service.autofill.augmented.FillResponse build();
+ method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
}
public final class FillWindow implements java.lang.AutoCloseable {
@@ -2243,11 +2270,11 @@
public final class SnapshotData implements android.os.Parcelable {
method public int describeContents();
- method public android.app.assist.AssistContent getAssistContent();
- method public android.os.Bundle getAssistData();
- method public android.app.assist.AssistStructure getAssistStructure();
+ method @Nullable public android.app.assist.AssistContent getAssistContent();
+ method @NonNull public android.os.Bundle getAssistData();
+ method @NonNull public android.app.assist.AssistStructure getAssistStructure();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
}
}
@@ -2270,7 +2297,7 @@
method public CharSequence getExplanation();
method public String getId();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
}
}
@@ -2294,7 +2321,7 @@
}
public final class PhoneAccountSuggestion implements android.os.Parcelable {
- ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean);
+ ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);
}
public class PhoneAccountSuggestionService extends android.app.Service {
@@ -2381,7 +2408,7 @@
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<android.telephony.mbms.UriPathPair> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.UriPathPair> CREATOR;
}
}
@@ -2413,12 +2440,12 @@
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.lang.Integer>, java.util.List<java.lang.Integer>, android.telephony.mbms.GroupCallCallback);
+ method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);
method public void stopGroupCall(int, long);
- method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>);
+ method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
}
public class MbmsStreamingServiceBase extends android.os.Binder {
@@ -2705,10 +2732,6 @@
field public static final int CALLBACK_ANIMATION = 1; // 0x1
}
- public final class Display {
- method public boolean supportsSystemDecorations();
- }
-
public class FocusFinder {
method public static void sort(android.view.View[], int, int, android.view.ViewGroup, boolean);
}
@@ -2778,6 +2801,7 @@
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 {
@@ -2868,7 +2892,7 @@
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<android.view.contentcapture.ContentCaptureEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> 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
diff --git a/cmds/hid/hid b/cmds/hid/hid
index 2359fcd..3931da1 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/idmap2/idmap2/Create.cpp b/cmds/idmap2/idmap2/Create.cpp
index 6703909..c416fa1 100644
--- a/cmds/idmap2/idmap2/Create.cpp
+++ b/cmds/idmap2/idmap2/Create.cpp
@@ -28,7 +28,6 @@
#include "idmap2/FileUtils.h"
#include "idmap2/Idmap.h"
#include "idmap2/Policies.h"
-#include "idmap2/Result.h"
#include "idmap2/SysTrace.h"
using android::ApkAssets;
@@ -38,7 +37,6 @@
using android::idmap2::PoliciesToBitmask;
using android::idmap2::PolicyBitmask;
using android::idmap2::PolicyFlags;
-using android::idmap2::Result;
using android::idmap2::utils::kIdmapFilePermissionMask;
using android::idmap2::utils::UidHasWriteAccessToPath;
@@ -77,9 +75,11 @@
}
PolicyBitmask fulfilled_policies = 0;
- if (auto result = PoliciesToBitmask(policies, out_error)) {
- fulfilled_policies |= *result;
+ auto conv_result = PoliciesToBitmask(policies);
+ if (conv_result) {
+ fulfilled_policies |= *conv_result;
} else {
+ out_error << "error: " << conv_result.GetErrorMessage() << std::endl;
return false;
}
diff --git a/cmds/idmap2/idmap2/Lookup.cpp b/cmds/idmap2/idmap2/Lookup.cpp
index 553d8ca..83a40ef 100644
--- a/cmds/idmap2/idmap2/Lookup.cpp
+++ b/cmds/idmap2/idmap2/Lookup.cpp
@@ -53,6 +53,7 @@
using android::StringPiece16;
using android::base::StringPrintf;
using android::idmap2::CommandLineOptions;
+using android::idmap2::Error;
using android::idmap2::IdmapHeader;
using android::idmap2::ResourceId;
using android::idmap2::Result;
@@ -71,17 +72,17 @@
ResourceId resid;
resid = strtol(res.c_str(), &endptr, kBaseHex);
if (*endptr == '\0') {
- return {resid};
+ return resid;
}
// next, try to parse as a package:type/name string
resid = am.GetResourceId(res, "", fallback_package);
if (is_valid_resid(resid)) {
- return {resid};
+ return resid;
}
// end of the road: res could not be parsed
- return {};
+ return Error("failed to obtain resource id for %s", res.c_str());
}
Result<std::string> WARN_UNUSED GetValue(const AssetManager2& am, ResourceId resid) {
@@ -90,7 +91,7 @@
uint32_t flags;
ApkAssetsCookie cookie = am.GetResource(resid, false, 0, &value, &config, &flags);
if (cookie == kInvalidCookie) {
- return {};
+ return Error("no resource 0x%08x in asset manager", resid);
}
std::string out;
@@ -128,31 +129,31 @@
out.append(StringPrintf("dataType=0x%02x data=0x%08x", value.dataType, value.data));
break;
}
- return {out};
+ return out;
}
Result<std::string> GetTargetPackageNameFromManifest(const std::string& apk_path) {
const auto zip = ZipFile::Open(apk_path);
if (!zip) {
- return {};
+ return Error("failed to open %s as zip", apk_path.c_str());
}
const auto entry = zip->Uncompress("AndroidManifest.xml");
if (!entry) {
- return {};
+ return Error("failed to uncompress AndroidManifest.xml in %s", apk_path.c_str());
}
const auto xml = Xml::Create(entry->buf, entry->size);
if (!xml) {
- return {};
+ return Error("failed to create XML buffer");
}
const auto tag = xml->FindTag("overlay");
if (!tag) {
- return {};
+ return Error("failed to find <overlay> tag");
}
const auto iter = tag->find("targetPackage");
if (iter == tag->end()) {
- return {};
+ return Error("failed to find targetPackage attribute");
}
- return {iter->second};
+ return iter->second;
}
} // namespace
diff --git a/cmds/idmap2/idmap2/Scan.cpp b/cmds/idmap2/idmap2/Scan.cpp
index 873779f..e5f6223 100644
--- a/cmds/idmap2/idmap2/Scan.cpp
+++ b/cmds/idmap2/idmap2/Scan.cpp
@@ -142,9 +142,9 @@
std::vector<InputOverlay> interesting_apks;
for (const std::string& path : *apk_paths) {
Result<OverlayManifestInfo> overlay_info =
- ExtractOverlayManifestInfo(path, out_error,
- /* assert_overlay */ false);
+ ExtractOverlayManifestInfo(path, /* assert_overlay */ false);
if (!overlay_info) {
+ out_error << "error: " << overlay_info.GetErrorMessage() << std::endl;
return false;
}
@@ -163,9 +163,11 @@
PolicyBitmask fulfilled_policies;
if (!override_policies.empty()) {
- if (Result<PolicyBitmask> result = PoliciesToBitmask(override_policies, out_error)) {
- fulfilled_policies = *result;
+ auto conv_result = PoliciesToBitmask(override_policies);
+ if (conv_result) {
+ fulfilled_policies = *conv_result;
} else {
+ out_error << "error: " << conv_result.GetErrorMessage() << std::endl;
return false;
}
} else {
diff --git a/cmds/idmap2/idmap2d/Idmap2Service.cpp b/cmds/idmap2/idmap2d/Idmap2Service.cpp
index 0e4bd89..fa94414 100644
--- a/cmds/idmap2/idmap2d/Idmap2Service.cpp
+++ b/cmds/idmap2/idmap2d/Idmap2Service.cpp
@@ -34,7 +34,6 @@
#include "idmap2/FileUtils.h"
#include "idmap2/Idmap.h"
#include "idmap2/Policies.h"
-#include "idmap2/Result.h"
#include "idmap2/SysTrace.h"
#include "idmap2d/Idmap2Service.h"
@@ -45,7 +44,6 @@
using android::idmap2::Idmap;
using android::idmap2::IdmapHeader;
using android::idmap2::PolicyBitmask;
-using android::idmap2::Result;
using android::idmap2::utils::kIdmapCacheDir;
using android::idmap2::utils::kIdmapFilePermissionMask;
using android::idmap2::utils::UidHasWriteAccessToPath;
diff --git a/cmds/idmap2/include/idmap2/Policies.h b/cmds/idmap2/include/idmap2/Policies.h
index eecee25..911d3f2 100644
--- a/cmds/idmap2/include/idmap2/Policies.h
+++ b/cmds/idmap2/include/idmap2/Policies.h
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-#include <ostream>
#include <string>
#include <vector>
@@ -33,8 +32,7 @@
// Parses a the string representation of a set of policies into a bitmask. The format of the string
// is the same as for the <policy> element.
-Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies,
- std::ostream& err);
+Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies);
} // namespace android::idmap2
diff --git a/cmds/idmap2/include/idmap2/ResourceUtils.h b/cmds/idmap2/include/idmap2/ResourceUtils.h
index 22827ac..1d81c48 100644
--- a/cmds/idmap2/include/idmap2/ResourceUtils.h
+++ b/cmds/idmap2/include/idmap2/ResourceUtils.h
@@ -18,10 +18,8 @@
#define IDMAP2_INCLUDE_IDMAP2_RESOURCEUTILS_H_
#include <optional>
-#include <ostream>
#include <string>
-#include "android-base/macros.h"
#include "androidfw/AssetManager2.h"
#include "idmap2/Idmap.h"
@@ -38,10 +36,9 @@
};
Result<OverlayManifestInfo> ExtractOverlayManifestInfo(const std::string& path,
- std::ostream& out_error,
bool assert_overlay = true);
-Result<std::string> WARN_UNUSED ResToTypeEntryName(const AssetManager2& am, ResourceId resid);
+Result<std::string> ResToTypeEntryName(const AssetManager2& am, ResourceId resid);
} // namespace android::idmap2::utils
diff --git a/cmds/idmap2/include/idmap2/Result.h b/cmds/idmap2/include/idmap2/Result.h
index d88dd51..41b15eb 100644
--- a/cmds/idmap2/include/idmap2/Result.h
+++ b/cmds/idmap2/include/idmap2/Result.h
@@ -17,7 +17,6 @@
#ifndef IDMAP2_INCLUDE_IDMAP2_RESULT_H_
#define IDMAP2_INCLUDE_IDMAP2_RESULT_H_
-#include <optional>
#include <string>
#include <utility>
#include <variant>
@@ -26,13 +25,6 @@
namespace android::idmap2 {
-template <typename T>
-using Result = std::optional<T>;
-
-static constexpr std::nullopt_t kResultError = std::nullopt;
-
-namespace v2 {
-
using Unit = std::monostate;
class Error {
@@ -148,8 +140,6 @@
return std::holds_alternative<T>(data_);
}
-} // namespace v2
-
} // namespace android::idmap2
#endif // IDMAP2_INCLUDE_IDMAP2_RESULT_H_
diff --git a/cmds/idmap2/libidmap2/Idmap.cpp b/cmds/idmap2/libidmap2/Idmap.cpp
index ec498ff..a1341fb 100644
--- a/cmds/idmap2/libidmap2/Idmap.cpp
+++ b/cmds/idmap2/libidmap2/Idmap.cpp
@@ -121,7 +121,9 @@
Result<uint32_t> GetCrc(const ZipFile& zip) {
const Result<uint32_t> a = zip.Crc("resources.arsc");
const Result<uint32_t> b = zip.Crc("AndroidManifest.xml");
- return a && b ? Result<uint32_t>(*a ^ *b) : kResultError;
+ return a && b
+ ? Result<uint32_t>(*a ^ *b)
+ : Error("Couldn't get CRC for \"%s\"", a ? "AndroidManifest.xml" : "resources.arsc");
}
} // namespace
@@ -355,9 +357,9 @@
return nullptr;
}
- Result<utils::OverlayManifestInfo> overlay_info =
- utils::ExtractOverlayManifestInfo(overlay_apk_path, out_error);
+ auto overlay_info = utils::ExtractOverlayManifestInfo(overlay_apk_path);
if (!overlay_info) {
+ out_error << "error: " << overlay_info.GetErrorMessage() << std::endl;
return nullptr;
}
diff --git a/cmds/idmap2/libidmap2/Policies.cpp b/cmds/idmap2/libidmap2/Policies.cpp
index 6649288..c6ba87d 100644
--- a/cmds/idmap2/libidmap2/Policies.cpp
+++ b/cmds/idmap2/libidmap2/Policies.cpp
@@ -16,7 +16,6 @@
#include <iterator>
#include <map>
-#include <sstream>
#include <string>
#include <vector>
@@ -39,16 +38,14 @@
};
} // namespace
-Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies,
- std::ostream& err) {
+Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies) {
PolicyBitmask bitmask = 0;
for (const std::string& policy : policies) {
const auto iter = kStringToFlag.find(policy);
if (iter != kStringToFlag.end()) {
bitmask |= iter->second;
} else {
- err << "error: unknown policy \"" << policy << "\"";
- return kResultError;
+ return Error("unknown policy \"%s\"", policy.c_str());
}
}
diff --git a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
index b78e942..1149c90 100644
--- a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
+++ b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
@@ -75,7 +75,7 @@
type_entry.GetEntryOffset() + i);
const ResourceId overlay_resid =
RESID(last_seen_package_id_, type_entry.GetOverlayTypeId(), entry);
- Result<std::string> name;
+ Result<std::string> name(Error(""));
if (target_package_loaded) {
name = utils::ResToTypeEntryName(target_am_, target_resid);
}
diff --git a/cmds/idmap2/libidmap2/ResourceUtils.cpp b/cmds/idmap2/libidmap2/ResourceUtils.cpp
index 7a984f3..a24836d 100644
--- a/cmds/idmap2/libidmap2/ResourceUtils.cpp
+++ b/cmds/idmap2/libidmap2/ResourceUtils.cpp
@@ -33,10 +33,10 @@
namespace android::idmap2::utils {
-Result<std::string> WARN_UNUSED ResToTypeEntryName(const AssetManager2& am, ResourceId resid) {
+Result<std::string> ResToTypeEntryName(const AssetManager2& am, ResourceId resid) {
AssetManager2::ResourceName name;
if (!am.GetResourceName(resid, &name)) {
- return {};
+ return Error("no resource 0x%08x in asset manager", resid);
}
std::string out;
if (name.type != nullptr) {
@@ -50,36 +50,31 @@
} else {
out += Utf16ToUtf8(StringPiece16(name.entry16, name.entry_len));
}
- return {out};
+ return out;
}
Result<OverlayManifestInfo> ExtractOverlayManifestInfo(const std::string& path,
- std::ostream& out_error,
bool assert_overlay) {
std::unique_ptr<const ZipFile> zip = ZipFile::Open(path);
if (!zip) {
- out_error << "error: failed to open " << path << " as a zip file" << std::endl;
- return kResultError;
+ return Error("failed to open %s as a zip file", path.c_str());
}
std::unique_ptr<const MemoryChunk> entry = zip->Uncompress("AndroidManifest.xml");
if (!entry) {
- out_error << "error: failed to uncompress AndroidManifest.xml from " << path << std::endl;
- return kResultError;
+ return Error("failed to uncompress AndroidManifest.xml from %s", path.c_str());
}
std::unique_ptr<const Xml> xml = Xml::Create(entry->buf, entry->size);
if (!xml) {
- out_error << "error: failed to parse AndroidManifest.xml from " << path << std::endl;
- return kResultError;
+ return Error("failed to parse AndroidManifest.xml from %s", path.c_str());
}
OverlayManifestInfo info{};
const auto tag = xml->FindTag("overlay");
if (!tag) {
if (assert_overlay) {
- out_error << "error: <overlay> missing from AndroidManifest.xml of " << path << std::endl;
- return kResultError;
+ return Error("<overlay> missing from AndroidManifest.xml of %s", path.c_str());
}
return info;
}
@@ -87,8 +82,7 @@
auto iter = tag->find("targetPackage");
if (iter == tag->end()) {
if (assert_overlay) {
- out_error << "error: android:targetPackage missing from <overlay> of " << path << std::endl;
- return kResultError;
+ return Error("android:targetPackage missing from <overlay> of %s", path.c_str());
}
} else {
info.target_package = iter->second;
diff --git a/cmds/idmap2/libidmap2/Result.cpp b/cmds/idmap2/libidmap2/Result.cpp
index bd4fabd..471dab2 100644
--- a/cmds/idmap2/libidmap2/Result.cpp
+++ b/cmds/idmap2/libidmap2/Result.cpp
@@ -23,7 +23,7 @@
namespace android::idmap2 {
// NOLINTNEXTLINE(cert-dcl50-cpp)
-v2::Error::Error(const char* fmt, ...) {
+Error::Error(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
base::StringAppendV(&msg_, fmt, ap);
@@ -31,7 +31,7 @@
}
// NOLINTNEXTLINE(cert-dcl50-cpp)
-v2::Error::Error(const Error& parent, const char* fmt, ...) : msg_(parent.msg_) {
+Error::Error(const Error& parent, const char* fmt, ...) : msg_(parent.msg_) {
msg_.append(" -> ");
va_list ap;
diff --git a/cmds/idmap2/libidmap2/ZipFile.cpp b/cmds/idmap2/libidmap2/ZipFile.cpp
index 15ec3f9..0f07324 100644
--- a/cmds/idmap2/libidmap2/ZipFile.cpp
+++ b/cmds/idmap2/libidmap2/ZipFile.cpp
@@ -59,7 +59,10 @@
Result<uint32_t> ZipFile::Crc(const std::string& entryPath) const {
::ZipEntry entry;
int32_t status = ::FindEntry(handle_, ::ZipString(entryPath.c_str()), &entry);
- return status == 0 ? Result<uint32_t>(entry.crc32) : kResultError;
+ if (status != 0) {
+ return Error("failed to find zip entry %s", entryPath.c_str());
+ }
+ return entry.crc32;
}
} // namespace android::idmap2
diff --git a/cmds/idmap2/tests/FileUtilsTests.cpp b/cmds/idmap2/tests/FileUtilsTests.cpp
index 2e85eb6..34a0097 100644
--- a/cmds/idmap2/tests/FileUtilsTests.cpp
+++ b/cmds/idmap2/tests/FileUtilsTests.cpp
@@ -58,21 +58,15 @@
});
ASSERT_THAT(v, NotNull());
ASSERT_EQ(v->size(), 10U);
- ASSERT_EQ(
- std::set<std::string>(v->begin(), v->end()),
- std::set<std::string>(
- {
- root + "/target/target.apk",
- root + "/target/target-no-overlayable.apk",
- root + "/overlay/overlay.apk",
- root + "/overlay/overlay-no-name.apk",
- root + "/overlay/overlay-no-name-static.apk",
- root + "/overlay/overlay-static-1.apk",
- root + "/overlay/overlay-static-2.apk",
- root + "/signature-overlay/signature-overlay.apk",
- root + "/system-overlay/system-overlay.apk",
- root + "/system-overlay-invalid/system-overlay-invalid.apk"
- }));
+ ASSERT_EQ(std::set<std::string>(v->begin(), v->end()),
+ std::set<std::string>(
+ {root + "/target/target.apk", root + "/target/target-no-overlayable.apk",
+ root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk",
+ root + "/overlay/overlay-no-name-static.apk",
+ root + "/overlay/overlay-static-1.apk", root + "/overlay/overlay-static-2.apk",
+ root + "/signature-overlay/signature-overlay.apk",
+ root + "/system-overlay/system-overlay.apk",
+ root + "/system-overlay-invalid/system-overlay-invalid.apk"}));
}
TEST(FileUtilsTests, ReadFile) {
diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp
index 53ec03b..bbfbad9 100644
--- a/cmds/idmap2/tests/IdmapTests.cpp
+++ b/cmds/idmap2/tests/IdmapTests.cpp
@@ -256,10 +256,10 @@
ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
ASSERT_EQ(types[0]->GetEntryCount(), 4U);
ASSERT_EQ(types[0]->GetEntryOffset(), 6U);
- ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/policy_public
- ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/policy_signature
- ASSERT_EQ(types[0]->GetEntry(2), 0x0001U); // string/policy_system
- ASSERT_EQ(types[0]->GetEntry(3), 0x0002U); // string/policy_system_vendor
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/policy_public
+ ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/policy_signature
+ ASSERT_EQ(types[0]->GetEntry(2), 0x0001U); // string/policy_system
+ ASSERT_EQ(types[0]->GetEntry(3), 0x0002U); // string/policy_system_vendor
}
TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySignature) {
@@ -267,7 +267,8 @@
std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
ASSERT_THAT(target_apk, NotNull());
- const std::string overlay_apk_path(GetTestDataPath() + "/signature-overlay/signature-overlay.apk");
+ const std::string overlay_apk_path(GetTestDataPath() +
+ "/signature-overlay/signature-overlay.apk");
std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
ASSERT_THAT(overlay_apk, NotNull());
@@ -294,7 +295,7 @@
ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
ASSERT_EQ(types[0]->GetEntryCount(), 1U);
ASSERT_EQ(types[0]->GetEntryOffset(), 7U);
- ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/policy_signature
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/policy_signature
}
TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySignatureNotFulfilled) {
@@ -302,7 +303,8 @@
std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
ASSERT_THAT(target_apk, NotNull());
- const std::string overlay_apk_path(GetTestDataPath() + "/signature-overlay/signature-overlay.apk");
+ const std::string overlay_apk_path(GetTestDataPath() +
+ "/signature-overlay/signature-overlay.apk");
std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
ASSERT_THAT(overlay_apk, NotNull());
@@ -323,7 +325,7 @@
ASSERT_EQ(data->GetHeader()->GetTypeCount(), 0U);
const std::vector<std::unique_ptr<const IdmapData::TypeEntry>>& types = data->GetTypeEntries();
- ASSERT_EQ(types.size(), 0U); // can't overlay, so contains nothing
+ ASSERT_EQ(types.size(), 0U); // can't overlay, so contains nothing
}
// Overlays should abide by all overlayable restrictions if enforcement of overlayable is enabled.
@@ -359,10 +361,10 @@
ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
ASSERT_EQ(types[0]->GetEntryCount(), 4U);
ASSERT_EQ(types[0]->GetEntryOffset(), 6U);
- ASSERT_EQ(types[0]->GetEntry(0), 0x0003U); // string/policy_public
- ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/policy_signature
- ASSERT_EQ(types[0]->GetEntry(2), 0x0005U); // string/policy_system
- ASSERT_EQ(types[0]->GetEntry(3), 0x0006U); // string/policy_system_vendor
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0003U); // string/policy_public
+ ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/policy_signature
+ ASSERT_EQ(types[0]->GetEntry(2), 0x0005U); // string/policy_system
+ ASSERT_EQ(types[0]->GetEntry(3), 0x0006U); // string/policy_system_vendor
}
// Overlays should ignore all overlayable restrictions if enforcement of overlayable is disabled.
diff --git a/cmds/idmap2/tests/PoliciesTests.cpp b/cmds/idmap2/tests/PoliciesTests.cpp
index ab567ad..a76da53 100644
--- a/cmds/idmap2/tests/PoliciesTests.cpp
+++ b/cmds/idmap2/tests/PoliciesTests.cpp
@@ -27,44 +27,42 @@
namespace android::idmap2 {
TEST(PoliciesTests, PoliciesToBitmasks) {
- const Result<PolicyBitmask> bitmask1 = PoliciesToBitmask({"system"}, std::cerr);
- ASSERT_NE(bitmask1, kResultError);
- ASSERT_EQ(bitmask1, PolicyFlags::POLICY_SYSTEM_PARTITION);
+ const auto bitmask1 = PoliciesToBitmask({"system"});
+ ASSERT_TRUE(bitmask1);
+ ASSERT_EQ(*bitmask1, PolicyFlags::POLICY_SYSTEM_PARTITION);
- const Result<PolicyBitmask> bitmask2 = PoliciesToBitmask({"system", "vendor"}, std::cerr);
- ASSERT_NE(bitmask2, kResultError);
- ASSERT_EQ(bitmask2, PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION);
+ const auto bitmask2 = PoliciesToBitmask({"system", "vendor"});
+ ASSERT_TRUE(bitmask2);
+ ASSERT_EQ(*bitmask2, PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION);
- const Result<PolicyBitmask> bitmask3 = PoliciesToBitmask({"vendor", "system"}, std::cerr);
- ASSERT_NE(bitmask3, kResultError);
- ASSERT_EQ(bitmask3, PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION);
+ const auto bitmask3 = PoliciesToBitmask({"vendor", "system"});
+ ASSERT_TRUE(bitmask3);
+ ASSERT_EQ(*bitmask3, PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION);
- const Result<PolicyBitmask> bitmask4 =
- PoliciesToBitmask({"public", "product", "system", "vendor"}, std::cerr);
- ASSERT_NE(bitmask4, kResultError);
- ASSERT_EQ(bitmask4, PolicyFlags::POLICY_PUBLIC | PolicyFlags::POLICY_PRODUCT_PARTITION |
- PolicyFlags::POLICY_SYSTEM_PARTITION |
- PolicyFlags::POLICY_VENDOR_PARTITION);
+ const auto bitmask4 = PoliciesToBitmask({"public", "product", "system", "vendor"});
+ ASSERT_TRUE(bitmask4);
+ ASSERT_EQ(*bitmask4, PolicyFlags::POLICY_PUBLIC | PolicyFlags::POLICY_PRODUCT_PARTITION |
+ PolicyFlags::POLICY_SYSTEM_PARTITION |
+ PolicyFlags::POLICY_VENDOR_PARTITION);
- const Result<PolicyBitmask> bitmask5 =
- PoliciesToBitmask({"system", "system", "system"}, std::cerr);
- ASSERT_NE(bitmask5, kResultError);
- ASSERT_EQ(bitmask5, PolicyFlags::POLICY_SYSTEM_PARTITION);
+ const auto bitmask5 = PoliciesToBitmask({"system", "system", "system"});
+ ASSERT_TRUE(bitmask5);
+ ASSERT_EQ(*bitmask5, PolicyFlags::POLICY_SYSTEM_PARTITION);
- const Result<PolicyBitmask> bitmask6 = PoliciesToBitmask({""}, std::cerr);
- ASSERT_EQ(bitmask6, kResultError);
+ const auto bitmask6 = PoliciesToBitmask({""});
+ ASSERT_FALSE(bitmask6);
- const Result<PolicyBitmask> bitmask7 = PoliciesToBitmask({"foo"}, std::cerr);
- ASSERT_EQ(bitmask7, kResultError);
+ const auto bitmask7 = PoliciesToBitmask({"foo"});
+ ASSERT_FALSE(bitmask7);
- const Result<PolicyBitmask> bitmask8 = PoliciesToBitmask({"system", "foo"}, std::cerr);
- ASSERT_EQ(bitmask8, kResultError);
+ const auto bitmask8 = PoliciesToBitmask({"system", "foo"});
+ ASSERT_FALSE(bitmask8);
- const Result<PolicyBitmask> bitmask9 = PoliciesToBitmask({"system", ""}, std::cerr);
- ASSERT_EQ(bitmask9, kResultError);
+ const auto bitmask9 = PoliciesToBitmask({"system", ""});
+ ASSERT_FALSE(bitmask9);
- const Result<PolicyBitmask> bitmask10 = PoliciesToBitmask({"system "}, std::cerr);
- ASSERT_EQ(bitmask10, kResultError);
+ const auto bitmask10 = PoliciesToBitmask({"system "});
+ ASSERT_FALSE(bitmask10);
}
} // namespace android::idmap2
diff --git a/cmds/idmap2/tests/ResultTests.cpp b/cmds/idmap2/tests/ResultTests.cpp
index d82f0c4..5f4daed 100644
--- a/cmds/idmap2/tests/ResultTests.cpp
+++ b/cmds/idmap2/tests/ResultTests.cpp
@@ -32,28 +32,28 @@
// Tests: Error
TEST(ResultTests, ErrorTraits) {
- ASSERT_TRUE(std::is_move_constructible<v2::Error>::value);
- ASSERT_TRUE(std::is_move_assignable<v2::Error>::value);
- ASSERT_TRUE(std::is_copy_constructible<v2::Error>::value);
- ASSERT_TRUE(std::is_copy_assignable<v2::Error>::value);
+ ASSERT_TRUE(std::is_move_constructible<Error>::value);
+ ASSERT_TRUE(std::is_move_assignable<Error>::value);
+ ASSERT_TRUE(std::is_copy_constructible<Error>::value);
+ ASSERT_TRUE(std::is_copy_assignable<Error>::value);
}
TEST(ResultTests, ErrorCtorFormat) {
- v2::Error e("%s=0x%08x", "resid", 0x7f010002);
+ Error e("%s=0x%08x", "resid", 0x7f010002);
ASSERT_EQ(e.GetMessage(), "resid=0x7f010002");
}
TEST(ResultTests, ErrorPropagateParent) {
- v2::Error e1("foo");
+ Error e1("foo");
ASSERT_EQ(e1.GetMessage(), "foo");
- v2::Error e2(e1, "bar");
+ Error e2(e1, "bar");
ASSERT_EQ(e2.GetMessage(), "foo -> bar");
- v2::Error e3(e2); // NOLINT(performance-unnecessary-copy-initialization)
+ Error e3(e2); // NOLINT(performance-unnecessary-copy-initialization)
ASSERT_EQ(e3.GetMessage(), "foo -> bar");
- v2::Error e4(e3, "%02d", 1);
+ Error e4(e3, "%02d", 1);
ASSERT_EQ(e4.GetMessage(), "foo -> bar -> 01");
}
@@ -61,13 +61,13 @@
// Result(const Result&)
TEST(ResultTests, CopyConstructor) {
- v2::Result<uint32_t> r1(42U);
+ Result<uint32_t> r1(42U);
- v2::Result<uint32_t> r2(r1);
+ Result<uint32_t> r2(r1);
ASSERT_TRUE(r2);
ASSERT_EQ(*r2, 42U);
- v2::Result<uint32_t> r3 = r2;
+ Result<uint32_t> r3 = r2;
ASSERT_TRUE(r3);
ASSERT_EQ(*r3, 42U);
}
@@ -75,23 +75,23 @@
// Result(const T&)
TEST(ResultTests, Constructor) {
uint32_t v = 42U;
- v2::Result<uint32_t> r1(v);
+ Result<uint32_t> r1(v);
ASSERT_TRUE(r1);
ASSERT_EQ(*r1, 42U);
- v2::Error e("foo");
- v2::Result<uint32_t> r2(e);
+ Error e("foo");
+ Result<uint32_t> r2(e);
ASSERT_FALSE(r2);
ASSERT_EQ(r2.GetErrorMessage(), "foo");
}
// Result(const T&&)
TEST(ResultTests, MoveConstructor) {
- v2::Result<uint32_t> r1(42U);
+ Result<uint32_t> r1(42U);
ASSERT_TRUE(r1);
ASSERT_EQ(*r1, 42U);
- v2::Result<uint32_t> r2(v2::Error("foo"));
+ Result<uint32_t> r2(Error("foo"));
ASSERT_FALSE(r2);
ASSERT_EQ(r2.GetErrorMessage(), "foo");
}
@@ -99,52 +99,52 @@
// operator=
TEST(ResultTests, CopyAssignmentOperator) {
// note: 'Result<...> r2 = r1;' calls the copy ctor
- v2::Result<uint32_t> r1(42U);
- v2::Result<uint32_t> r2(0U);
+ Result<uint32_t> r1(42U);
+ Result<uint32_t> r2(0U);
r2 = r1;
ASSERT_TRUE(r2);
ASSERT_EQ(*r2, 42U);
- v2::Result<uint32_t> r3(v2::Error("foo"));
+ Result<uint32_t> r3(Error("foo"));
r2 = r3;
ASSERT_FALSE(r2);
ASSERT_EQ(r2.GetErrorMessage(), "foo");
}
TEST(ResultTests, MoveAssignmentOperator) {
- v2::Result<uint32_t> r(0U);
- r = v2::Result<uint32_t>(42U);
+ Result<uint32_t> r(0U);
+ r = Result<uint32_t>(42U);
ASSERT_TRUE(r);
ASSERT_EQ(*r, 42U);
- r = v2::Result<uint32_t>(v2::Error("foo"));
+ r = Result<uint32_t>(Error("foo"));
ASSERT_FALSE(r);
ASSERT_EQ(r.GetErrorMessage(), "foo");
}
// operator bool()
TEST(ResultTests, BoolOperator) {
- v2::Result<uint32_t> r1(42U);
+ Result<uint32_t> r1(42U);
ASSERT_TRUE(r1);
ASSERT_EQ(*r1, 42U);
- v2::Result<uint32_t> r2(v2::Error("foo"));
+ Result<uint32_t> r2(Error("foo"));
ASSERT_FALSE(r2);
ASSERT_EQ(r2.GetErrorMessage(), "foo");
}
// operator*
TEST(ResultTests, IndirectionOperator) {
- const v2::Result<uint32_t> r1(42U);
+ const Result<uint32_t> r1(42U);
ASSERT_TRUE(r1);
ASSERT_EQ(*r1, 42U);
- const v2::Result<Container> r2(Container{42U});
+ const Result<Container> r2(Container{42U});
ASSERT_TRUE(r2);
const Container& c = *r2;
ASSERT_EQ(c.value, 42U);
- v2::Result<Container> r3(Container{42U});
+ Result<Container> r3(Container{42U});
ASSERT_TRUE(r3);
ASSERT_EQ((*r3).value, 42U);
(*r3).value = 0U;
@@ -153,11 +153,11 @@
// operator->
TEST(ResultTests, DereferenceOperator) {
- const v2::Result<Container> r1(Container{42U});
+ const Result<Container> r1(Container{42U});
ASSERT_TRUE(r1);
ASSERT_EQ(r1->value, 42U);
- v2::Result<Container> r2(Container{42U});
+ Result<Container> r2(Container{42U});
ASSERT_TRUE(r2);
ASSERT_EQ(r2->value, 42U);
r2->value = 0U;
@@ -167,14 +167,14 @@
// Tests: intended use of Result<T>
TEST(ResultTests, ResultTraits) {
- ASSERT_TRUE(std::is_move_constructible<v2::Result<uint32_t>>::value);
- ASSERT_TRUE(std::is_move_assignable<v2::Result<uint32_t>>::value);
- ASSERT_TRUE(std::is_copy_constructible<v2::Result<uint32_t>>::value);
- ASSERT_TRUE(std::is_copy_assignable<v2::Result<uint32_t>>::value);
+ ASSERT_TRUE(std::is_move_constructible<Result<uint32_t>>::value);
+ ASSERT_TRUE(std::is_move_assignable<Result<uint32_t>>::value);
+ ASSERT_TRUE(std::is_copy_constructible<Result<uint32_t>>::value);
+ ASSERT_TRUE(std::is_copy_assignable<Result<uint32_t>>::value);
}
TEST(ResultTests, UnitTypeResult) {
- v2::Result<v2::Unit> r(v2::Unit{});
+ Result<Unit> r(Unit{});
ASSERT_TRUE(r);
}
@@ -220,16 +220,16 @@
ASSERT_FALSE(std::is_copy_assignable<RefCountContainer>::value);
RefCountData rc{0, 0, 0, 0};
- { v2::Result<RefCountContainer> r(RefCountContainer{rc}); }
+ { Result<RefCountContainer> r(RefCountContainer{rc}); }
ASSERT_EQ(rc.ctor, 1);
ASSERT_EQ(rc.copy_ctor, 1);
ASSERT_EQ(rc.move, 0);
ASSERT_EQ(rc.dtor, 2);
}
-v2::Result<Container> CreateContainer(bool succeed) {
+Result<Container> CreateContainer(bool succeed) {
if (!succeed) {
- return v2::Error("foo");
+ return Error("foo");
}
return Container{42U};
}
@@ -245,10 +245,10 @@
ASSERT_EQ(r2.GetError().GetMessage(), "foo");
}
-v2::Result<Container> FailToCreateContainer() {
+Result<Container> FailToCreateContainer() {
auto container = CreateContainer(false);
if (!container) {
- return v2::Error(container.GetError(), "bar");
+ return Error(container.GetError(), "bar");
}
return container;
}
@@ -264,9 +264,9 @@
DISALLOW_COPY_AND_ASSIGN(NoCopyContainer);
};
-v2::Result<std::unique_ptr<NoCopyContainer>> CreateNoCopyContainer(bool succeed) {
+Result<std::unique_ptr<NoCopyContainer>> CreateNoCopyContainer(bool succeed) {
if (!succeed) {
- return v2::Error("foo");
+ return Error("foo");
}
std::unique_ptr<NoCopyContainer> p(new NoCopyContainer{0U});
p->value = 42U;
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java
index be5a5bf..4a6f87f 100644
--- a/cmds/sm/src/com/android/commands/sm/Sm.java
+++ b/cmds/sm/src/com/android/commands/sm/Sm.java
@@ -103,6 +103,8 @@
runSetVirtualDisk();
} else if ("set-isolated-storage".equals(op)) {
runIsolatedStorage();
+ } else if ("set-legacy-greylist".equals(op)) {
+ runLegacyGreylist();
} else {
throw new IllegalArgumentException();
}
@@ -282,7 +284,7 @@
StorageManager.DEBUG_VIRTUAL_DISK);
}
- public void runIsolatedStorage() {
+ public void runIsolatedStorage() throws RemoteException {
final int value;
final int mask = StorageManager.DEBUG_ISOLATED_STORAGE_FORCE_ON
| StorageManager.DEBUG_ISOLATED_STORAGE_FORCE_OFF;
@@ -301,16 +303,13 @@
default:
return;
}
+ mSm.setDebugFlags(value, mask);
+ }
- // Toggling isolated-storage state will result in a device reboot. So to avoid this command
- // from erroring out (DeadSystemException), call setDebugFlags() in a separate thread.
- new Thread(() -> {
- try {
- mSm.setDebugFlags(value, mask);
- } catch (RemoteException e) {
- Log.e(TAG, "Encountered an error!", e);
- }
- }).start();
+ public void runLegacyGreylist() throws RemoteException {
+ final boolean legacyGreylist = Boolean.parseBoolean(nextArg());
+ mSm.setDebugFlags(legacyGreylist ? StorageManager.DEBUG_LEGACY_GREYLIST : 0,
+ StorageManager.DEBUG_LEGACY_GREYLIST);
}
public void runIdleMaint() throws RemoteException {
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 69fbf1f..9ac888b 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -1229,70 +1229,81 @@
hardware::Return<void> 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<void> 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<void> 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<void> StatsService::reportChargeCycles(const ChargeCycles& chargeCycles) {
- LogEvent event(getWallClockSec() * NS_PER_SEC, getElapsedRealtimeNs(), chargeCycles);
- mProcessor->OnLogEvent(&event);
+ std::vector<int32_t> 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<void> 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<void> 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<void> 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<void> 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<void> 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 86ebe66..a983b27 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -149,7 +149,7 @@
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;
@@ -1568,6 +1568,7 @@
ROLLBACK_INITIATE = 1;
ROLLBACK_SUCCESS = 2;
ROLLBACK_FAILURE = 3;
+ ROLLBACK_ROOT_TRIGGERED = 4;
}
optional RollbackType rollback_type = 1;
@@ -5530,8 +5531,9 @@
optional com.android.server.job.ConstraintEnum constraint = 3;
enum State {
- UNSATISFIED = 0;
- SATISFIED = 1;
+ UNKNOWN = 0;
+ UNSATISFIED = 1;
+ SATISFIED = 2;
}
optional State state = 4;
}
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index dec36b5..0430e4e 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -21,6 +21,7 @@
#include "statslog.h"
#include <binder/IPCThreadState.h>
+#include <private/android_filesystem_config.h>
namespace android {
namespace os {
@@ -202,140 +203,11 @@
}
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)));
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index 111a619..2fde8b4 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -108,33 +108,6 @@
const std::vector<uint8_t>& 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);
explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,
diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h
index 99cb5d4..046f996 100644
--- a/cmds/statsd/src/metrics/MetricProducer.h
+++ b/cmds/statsd/src/metrics/MetricProducer.h
@@ -69,7 +69,7 @@
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 @@
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 9de62a2..27ee570 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
@@ -394,7 +394,7 @@
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/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt
index e25f463..e6ba40d 100644
--- a/config/hiddenapi-greylist.txt
+++ b/config/hiddenapi-greylist.txt
@@ -437,7 +437,6 @@
Landroid/content/res/ConfigurationBoundResourceCache;-><init>()V
Landroid/content/res/DrawableCache;-><init>()V
Landroid/content/UndoManager;-><init>()V
-Landroid/database/BulkCursorProxy;->mRemote:Landroid/os/IBinder;
Landroid/database/IContentObserver$Stub;-><init>()V
Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver;
Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V
@@ -446,16 +445,13 @@
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;-><init>(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;-><init>(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;-><init>()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;-><init>(Landroid/os/IBinder;)V
Landroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager;
@@ -465,60 +461,33 @@
Landroid/location/ICountryListener$Stub;-><init>()V
Landroid/location/IGeocodeProvider$Stub;-><init>()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;-><init>()V
-Landroid/location/IGeofenceProvider;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V
Landroid/location/ILocationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/location/ILocationListener$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/location/ILocationListener$Stub;-><init>()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;-><init>(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;-><init>()V
-Landroid/location/INetInitiatedListener;->sendNiResponse(II)Z
Landroid/location/LocationManager$ListenerTransport;-><init>(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;-><init>(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;-><init>()V
Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/media/IAudioService$Stub;-><init>()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;-><init>()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;-><init>()V
Landroid/media/MediaScanner$MyMediaScannerClient;-><init>(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;-><init>()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;-><init>()V
Landroid/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties;
@@ -530,41 +499,13 @@
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;-><init>()V
Landroid/net/INetworkPolicyListener$Stub;-><init>()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;-><init>(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;-><init>()V
Landroid/net/LinkProperties$ProvisioningChange;->values()[Landroid/net/LinkProperties$ProvisioningChange;
Landroid/net/MobileLinkQualityInfo;-><init>()V
@@ -575,22 +516,12 @@
Landroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(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;-><init>(Landroid/os/IBinder;)V
Landroid/net/wifi/IWifiScanner$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/net/wifi/IWifiScanner$Stub;-><init>()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;-><init>(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 +1291,7 @@
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;-><init>(ILandroid/os/Parcel;)V
Landroid/security/keymaster/KeymasterBlobArgument;-><init>(I[B)V
Landroid/security/keymaster/KeymasterBlobArgument;->blob:[B
@@ -1391,29 +1320,12 @@
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;-><init>()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;-><init>()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;-><init>()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;-><init>()V
@@ -1424,10 +1336,6 @@
Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V
Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()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 +1361,6 @@
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;-><init>()V
Landroid/util/XmlPullAttributes;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
Landroid/util/XmlPullAttributes;->mParser:Lorg/xmlpull/v1/XmlPullParser;
@@ -1470,17 +1375,8 @@
Landroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;-><init>()V
Landroid/view/IDockedStackListener$Stub;-><init>()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;-><init>()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;-><init>()V
-Landroid/view/IRemoteAnimationRunner;->onAnimationCancelled()V
-Landroid/view/IRemoteAnimationRunner;->onAnimationStart([Landroid/view/RemoteAnimationTarget;Landroid/view/IRemoteAnimationFinishedCallback;)V
Landroid/view/IRotationWatcher$Stub;-><init>()V
Landroid/view/IWindow$Stub;-><init>()V
Landroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow;
@@ -1492,44 +1388,7 @@
Landroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationWatcher;I)I
Landroid/view/IWindowManager$Stub;-><init>()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;-><init>()V
Landroid/view/View$CheckForLongPress;-><init>(Landroid/view/View;)V
Landroid/view/View$ListenerInfo;-><init>()V
@@ -1538,9 +1397,6 @@
Landroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(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;-><init>(Landroid/widget/DigitalClock;)V
Landroid/widget/QuickContactBadge$QueryHandler;-><init>(Landroid/widget/QuickContactBadge;Landroid/content/ContentResolver;)V
Landroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V
@@ -1550,7 +1406,6 @@
Lcom/android/ims/ImsCall;->reject(I)V
Lcom/android/ims/ImsCall;->terminate(I)V
Lcom/android/ims/ImsConfigListener$Stub;-><init>()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 +1415,17 @@
Lcom/android/ims/ImsUtInterface;->queryCallForward(ILjava/lang/String;Landroid/os/Message;)V
Lcom/android/ims/internal/IImsCallSession$Stub;-><init>()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;-><init>()V
Lcom/android/ims/internal/IImsEcbm$Stub;-><init>()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;-><init>()V
Lcom/android/ims/internal/IImsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsService;
Lcom/android/ims/internal/IImsUt$Stub;-><init>()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;-><init>()V
-Lcom/android/ims/internal/IImsVideoCallProvider;->setCallback(Lcom/android/ims/internal/IImsVideoCallCallback;)V
Lcom/android/ims/internal/ImsVideoCallProviderWrapper;-><init>(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;-><init>()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;-><init>()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;-><init>()V
-Lcom/android/ims/internal/uce/uceservice/IUceListener;->setStatus(I)V
Lcom/android/ims/internal/uce/uceservice/IUceService$Stub;-><init>()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;-><init>()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 +1456,12 @@
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;-><init>(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;-><init>(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 +1489,6 @@
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;-><init>()V
Lcom/android/internal/content/PackageMonitor;-><init>()V
Lcom/android/internal/database/SortCursor;-><init>([Landroid/database/Cursor;Ljava/lang/String;)V
@@ -1751,16 +1505,11 @@
Lcom/android/internal/location/GpsNetInitiatedHandler;->mIsHexInput:Z
Lcom/android/internal/location/ILocationProvider$Stub;-><init>()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;-><init>()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;-><init>()V
Lcom/android/internal/net/LegacyVpnInfo;-><init>()V
Lcom/android/internal/net/VpnConfig;-><init>()V
@@ -1772,7 +1521,6 @@
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 +1546,6 @@
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;-><init>(Landroid/content/Context;)V
Lcom/android/internal/policy/PhoneFallbackEventHandler;->mContext:Landroid/content/Context;
@@ -2253,14 +1999,7 @@
Lcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar;
Lcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()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 +2626,6 @@
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
@@ -3093,8 +2831,6 @@
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;-><init>()V
Lcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms;
Lcom/android/internal/telephony/ISub$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -3108,38 +2844,9 @@
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;-><init>(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;
@@ -3934,23 +3641,7 @@
Lcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V
Lcom/android/internal/widget/EditableInputConnection;-><init>(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;-><init>(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;
@@ -4482,9 +4173,6 @@
Lgov/nist/javax/sip/address/SipUri;->setUserParam(Ljava/lang/String;)V
Lgov/nist/javax/sip/parser/URLParser;-><init>(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 e86fa89..cf24b8e 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -1225,7 +1225,7 @@
/**
* @see Parcelable.Creator
*/
- public static final Parcelable.Creator<AccessibilityServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityServiceInfo> CREATOR =
new Parcelable.Creator<AccessibilityServiceInfo>() {
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 56f4ae2..a3e7ad5 100644
--- a/core/java/android/accessibilityservice/GestureDescription.java
+++ b/core/java/android/accessibilityservice/GestureDescription.java
@@ -455,7 +455,7 @@
dest.writeFloat(mY);
}
- public static final Parcelable.Creator<TouchPoint> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<TouchPoint> CREATOR
= new Parcelable.Creator<TouchPoint>() {
public TouchPoint createFromParcel(Parcel in) {
return new TouchPoint(in);
@@ -509,7 +509,7 @@
dest.writeParcelableArray(touchPoints, flags);
}
- public static final Parcelable.Creator<GestureStep> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<GestureStep> CREATOR
= new Parcelable.Creator<GestureStep>() {
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 d3b2238..2637764 100644
--- a/core/java/android/accounts/Account.java
+++ b/core/java/android/accounts/Account.java
@@ -124,7 +124,7 @@
dest.writeString(accessId);
}
- public static final Creator<Account> CREATOR = new Creator<Account>() {
+ public static final @android.annotation.NonNull Creator<Account> CREATOR = new Creator<Account>() {
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 bcc9f90..bb2e327 100644
--- a/core/java/android/accounts/AccountAuthenticatorResponse.java
+++ b/core/java/android/accounts/AccountAuthenticatorResponse.java
@@ -87,7 +87,7 @@
dest.writeStrongBinder(mAccountAuthenticatorResponse.asBinder());
}
- public static final Creator<AccountAuthenticatorResponse> CREATOR =
+ public static final @android.annotation.NonNull Creator<AccountAuthenticatorResponse> CREATOR =
new Creator<AccountAuthenticatorResponse>() {
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 11c6e60..369a7c3 100644
--- a/core/java/android/accounts/AccountManagerResponse.java
+++ b/core/java/android/accounts/AccountManagerResponse.java
@@ -66,7 +66,7 @@
}
/** @hide */
- public static final Creator<AccountManagerResponse> CREATOR =
+ public static final @android.annotation.NonNull Creator<AccountManagerResponse> CREATOR =
new Creator<AccountManagerResponse>() {
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 2360cec..5556394 100644
--- a/core/java/android/accounts/AuthenticatorDescription.java
+++ b/core/java/android/accounts/AuthenticatorDescription.java
@@ -134,7 +134,7 @@
}
/** Used to create the object from a parcel. */
- public static final Creator<AuthenticatorDescription> CREATOR =
+ public static final @android.annotation.NonNull Creator<AuthenticatorDescription> CREATOR =
new Creator<AuthenticatorDescription>() {
/** @inheritDoc */
public AuthenticatorDescription createFromParcel(Parcel source) {
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index ee7288f..c067f9d 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -1345,7 +1345,7 @@
mIconFilename = source.readInt() > 0 ? source.readString() : null;
}
- public static final Creator<TaskDescription> CREATOR
+ public static final @android.annotation.NonNull Creator<TaskDescription> CREATOR
= new Creator<TaskDescription>() {
public TaskDescription createFromParcel(Parcel source) {
return new TaskDescription(source);
@@ -1431,7 +1431,7 @@
super.writeToParcel(dest, flags);
}
- public static final Creator<RecentTaskInfo> CREATOR
+ public static final @android.annotation.NonNull Creator<RecentTaskInfo> CREATOR
= new Creator<RecentTaskInfo>() {
public RecentTaskInfo createFromParcel(Parcel source) {
return new RecentTaskInfo(source);
@@ -1601,7 +1601,7 @@
super.writeToParcel(dest, flags);
}
- public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() {
+ public static final @android.annotation.NonNull Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() {
public RunningTaskInfo createFromParcel(Parcel source) {
return new RunningTaskInfo(source);
}
@@ -1936,7 +1936,7 @@
+ " mIsTranslucent=" + mIsTranslucent;
}
- public static final Creator<TaskSnapshot> CREATOR = new Creator<TaskSnapshot>() {
+ public static final @android.annotation.NonNull Creator<TaskSnapshot> CREATOR = new Creator<TaskSnapshot>() {
public TaskSnapshot createFromParcel(Parcel source) {
return new TaskSnapshot(source);
}
@@ -2177,7 +2177,7 @@
clientLabel = source.readInt();
}
- public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() {
+ public static final @android.annotation.NonNull Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() {
public RunningServiceInfo createFromParcel(Parcel source) {
return new RunningServiceInfo(source);
}
@@ -2309,7 +2309,7 @@
foregroundAppThreshold = source.readLong();
}
- public static final Creator<MemoryInfo> CREATOR
+ public static final @android.annotation.NonNull Creator<MemoryInfo> CREATOR
= new Creator<MemoryInfo>() {
public MemoryInfo createFromParcel(Parcel source) {
return new MemoryInfo(source);
@@ -2440,7 +2440,7 @@
configuration.readFromParcel(source);
}
- public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() {
+ public static final @android.annotation.NonNull Creator<StackInfo> CREATOR = new Creator<StackInfo>() {
@Override
public StackInfo createFromParcel(Parcel source) {
return new StackInfo(source);
@@ -2646,7 +2646,7 @@
stackTrace = source.readString();
}
- public static final Creator<ProcessErrorStateInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ProcessErrorStateInfo> CREATOR =
new Creator<ProcessErrorStateInfo>() {
public ProcessErrorStateInfo createFromParcel(Parcel source) {
return new ProcessErrorStateInfo(source);
@@ -3110,7 +3110,7 @@
lastActivityTime = source.readLong();
}
- public static final Creator<RunningAppProcessInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RunningAppProcessInfo> CREATOR =
new Creator<RunningAppProcessInfo>() {
public RunningAppProcessInfo createFromParcel(Parcel source) {
return new RunningAppProcessInfo(source);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 92302c5..b654258 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -182,6 +182,7 @@
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.net.InetAddress;
+import java.nio.file.Files;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -6954,6 +6955,25 @@
fd.setInt$(cr.openFileDescriptor(uri,
FileUtils.translateModePosixToString(mode)).detachFd());
return fd;
+ } catch (SecurityException e) {
+ throw new ErrnoException(e.getMessage(), OsConstants.EACCES);
+ } catch (FileNotFoundException e) {
+ throw new ErrnoException(e.getMessage(), OsConstants.ENOENT);
+ }
+ }
+
+ 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);
}
@@ -6993,6 +7013,42 @@
return super.stat(path);
}
}
+
+ @Override
+ public void unlink(String path) throws ErrnoException {
+ if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
+ deleteDeprecatedDataPath(path);
+ } else {
+ super.unlink(path);
+ }
+ }
+
+ @Override
+ public void remove(String path) throws ErrnoException {
+ if (path != null && path.startsWith(DEPRECATE_DATA_PREFIX)) {
+ deleteDeprecatedDataPath(path);
+ } else {
+ super.remove(path);
+ }
+ }
+
+ @Override
+ public void rename(String oldPath, String newPath) throws ErrnoException {
+ try {
+ super.rename(oldPath, newPath);
+ } catch (ErrnoException e) {
+ if (e.errno == OsConstants.EXDEV) {
+ Log.v(TAG, "Recovering failed rename " + oldPath + " to " + newPath);
+ try {
+ Files.move(new File(oldPath).toPath(), new File(newPath).toPath());
+ } catch (IOException e2) {
+ throw e;
+ }
+ } else {
+ throw e;
+ }
+ }
+ }
}
public static void main(String[] args) {
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 2f0f14aa..3a34b79 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -1135,7 +1135,7 @@
dest.writeParcelable(mShowIntent, flags);
}
- public static final Creator<AlarmClockInfo> CREATOR = new Creator<AlarmClockInfo>() {
+ public static final @android.annotation.NonNull Creator<AlarmClockInfo> CREATOR = new Creator<AlarmClockInfo>() {
@Override
public AlarmClockInfo createFromParcel(Parcel in) {
return new AlarmClockInfo(in);
diff --git a/core/java/android/app/AppComponentFactory.java b/core/java/android/app/AppComponentFactory.java
index ae63291..2cec7f0 100644
--- a/core/java/android/app/AppComponentFactory.java
+++ b/core/java/android/app/AppComponentFactory.java
@@ -27,6 +27,7 @@
*
* @see #instantiateApplication
* @see #instantiateActivity
+ * @see #instantiateClassLoader
* @see #instantiateService
* @see #instantiateReceiver
* @see #instantiateProvider
@@ -39,8 +40,10 @@
* a custom class loader hierarchy.
*
* @param cl The default classloader instantiated by platform.
+ * @param aInfo Information about the application being loaded.
*/
- public @NonNull ClassLoader instantiateClassLoader(@NonNull ClassLoader cl) {
+ public @NonNull ClassLoader instantiateClassLoader(@NonNull ClassLoader cl,
+ @NonNull ApplicationInfo aInfo) {
return cl;
}
@@ -133,19 +136,6 @@
return (ContentProvider) cl.loadClass(className).newInstance();
}
- private ApplicationInfo mApplicationInfo = null;
-
- void setApplicationInfo(ApplicationInfo info) {
- mApplicationInfo = info;
- }
-
- /**
- * Returns the ApplicationInfo associated with this package.
- */
- public ApplicationInfo getApplicationInfo() {
- return mApplicationInfo;
- }
-
/**
* @hide
*/
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 040ad06..2e82e620 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1984,7 +1984,7 @@
}
}
- public static final Creator<PackageOps> CREATOR = new Creator<PackageOps>() {
+ public static final @android.annotation.NonNull Creator<PackageOps> CREATOR = new Creator<PackageOps>() {
@Override public PackageOps createFromParcel(Parcel source) {
return new PackageOps(source);
}
@@ -2192,7 +2192,7 @@
mProxyPackageName = source.readString();
}
- public static final Creator<OpEntry> CREATOR = new Creator<OpEntry>() {
+ public static final @android.annotation.NonNull Creator<OpEntry> CREATOR = new Creator<OpEntry>() {
@Override public OpEntry createFromParcel(Parcel source) {
return new OpEntry(source);
}
@@ -2725,7 +2725,7 @@
+ mBeginTimeMillis + " to:" + mEndTimeMillis + "]";
}
- public static final Creator<HistoricalOps> CREATOR = new Creator<HistoricalOps>() {
+ public static final @android.annotation.NonNull Creator<HistoricalOps> CREATOR = new Creator<HistoricalOps>() {
@Override
public @NonNull HistoricalOps createFromParcel(@NonNull Parcel parcel) {
return new HistoricalOps(parcel);
@@ -2935,7 +2935,7 @@
}
- public static final Creator<HistoricalUidOps> CREATOR = new Creator<HistoricalUidOps>() {
+ public static final @android.annotation.NonNull Creator<HistoricalUidOps> CREATOR = new Creator<HistoricalUidOps>() {
@Override
public @NonNull HistoricalUidOps createFromParcel(@NonNull Parcel parcel) {
return new HistoricalUidOps(parcel);
@@ -3167,7 +3167,7 @@
return op;
}
- public static final Creator<HistoricalPackageOps> CREATOR =
+ public static final @android.annotation.NonNull Creator<HistoricalPackageOps> CREATOR =
new Creator<HistoricalPackageOps>() {
@Override
public @NonNull HistoricalPackageOps createFromParcel(@NonNull Parcel parcel) {
@@ -3589,7 +3589,7 @@
}
}
- public static final Creator<HistoricalOp> CREATOR = new Creator<HistoricalOp>() {
+ public static final @android.annotation.NonNull Creator<HistoricalOp> CREATOR = new Creator<HistoricalOp>() {
@Override
public @NonNull HistoricalOp createFromParcel(@NonNull Parcel source) {
return new HistoricalOp(source);
diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java
index 8874554..a0b3dc0 100644
--- a/core/java/android/app/ApplicationErrorReport.java
+++ b/core/java/android/app/ApplicationErrorReport.java
@@ -492,7 +492,7 @@
return 0;
}
- public static final Parcelable.Creator<ParcelableCrashInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableCrashInfo> CREATOR =
new Parcelable.Creator<ParcelableCrashInfo>() {
@Override
public ParcelableCrashInfo createFromParcel(Parcel in) {
@@ -666,7 +666,7 @@
}
}
- public static final Parcelable.Creator<ApplicationErrorReport> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ApplicationErrorReport> CREATOR
= new Parcelable.Creator<ApplicationErrorReport>() {
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 04e5e0a..0d87336 100644
--- a/core/java/android/app/AuthenticationRequiredException.java
+++ b/core/java/android/app/AuthenticationRequiredException.java
@@ -81,7 +81,7 @@
mUserAction.writeToParcel(dest, flags);
}
- public static final Creator<AuthenticationRequiredException> CREATOR =
+ public static final @android.annotation.NonNull Creator<AuthenticationRequiredException> CREATOR =
new Creator<AuthenticationRequiredException>() {
@Override
public AuthenticationRequiredException createFromParcel(Parcel source) {
diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java
index fe23e21..4a826d1 100644
--- a/core/java/android/app/AutomaticZenRule.java
+++ b/core/java/android/app/AutomaticZenRule.java
@@ -304,7 +304,7 @@
configurationActivity, mZenPolicy, mModified, creationTime);
}
- public static final Parcelable.Creator<AutomaticZenRule> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AutomaticZenRule> CREATOR
= new Parcelable.Creator<AutomaticZenRule>() {
@Override
public AutomaticZenRule createFromParcel(Parcel source) {
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index 46e6def..351e737 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -155,7 +155,7 @@
dest.writeInt(mReorderingAllowed ? 1 : 0);
}
- public static final Parcelable.Creator<BackStackState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<BackStackState> CREATOR
= new Parcelable.Creator<BackStackState>() {
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 2a13c71..004dca1a 100644
--- a/core/java/android/app/ContentProviderHolder.java
+++ b/core/java/android/app/ContentProviderHolder.java
@@ -61,7 +61,7 @@
dest.writeInt(noReleaseNeeded ? 1 : 0);
}
- public static final Parcelable.Creator<ContentProviderHolder> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentProviderHolder> CREATOR
= new Parcelable.Creator<ContentProviderHolder>() {
@Override
public ContentProviderHolder createFromParcel(Parcel source) {
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index fde1d29e..e20c490 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -21,6 +21,7 @@
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.ContentUris;
@@ -163,6 +164,10 @@
*/
public static final String COLUMN_MEDIAPROVIDER_URI = Downloads.Impl.COLUMN_MEDIAPROVIDER_URI;
+ /** @hide */
+ @TestApi
+ public static final String COLUMN_MEDIASTORE_URI = Downloads.Impl.COLUMN_MEDIASTORE_URI;
+
/**
* @hide
*/
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 5e7921b..68daf44 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -623,7 +623,7 @@
dest.writeInt(mNextFragmentIndex);
}
- public static final Parcelable.Creator<FragmentManagerState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<FragmentManagerState> CREATOR
= new Parcelable.Creator<FragmentManagerState>() {
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 a61da3bb..a66f069 100644
--- a/core/java/android/app/FragmentState.java
+++ b/core/java/android/app/FragmentState.java
@@ -122,7 +122,7 @@
dest.writeBundle(mSavedFragmentState);
}
- public static final Parcelable.Creator<FragmentState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FragmentState> CREATOR =
new Parcelable.Creator<FragmentState>() {
@Override
public FragmentState createFromParcel(Parcel in) {
diff --git a/core/java/android/app/GrantedUriPermission.java b/core/java/android/app/GrantedUriPermission.java
index 9e84fe1..48d5b8c 100644
--- a/core/java/android/app/GrantedUriPermission.java
+++ b/core/java/android/app/GrantedUriPermission.java
@@ -54,7 +54,7 @@
out.writeString(packageName);
}
- public static final Parcelable.Creator<GrantedUriPermission> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GrantedUriPermission> CREATOR =
new Parcelable.Creator<GrantedUriPermission>() {
@Override
public GrantedUriPermission createFromParcel(Parcel in) {
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 780dd63..5cbb599 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -204,6 +204,7 @@
void setProcessImportant(in IBinder token, int pid, boolean isForeground, String reason);
void setServiceForeground(in ComponentName className, in IBinder token,
int id, in Notification notification, int flags, int foregroundServiceType);
+ int getForegroundServiceType(in ComponentName className, in IBinder token);
boolean moveActivityTaskToBack(in IBinder token, boolean nonRoot);
void getMemoryInfo(out ActivityManager.MemoryInfo outInfo);
List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState();
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index b01cd0e..b16188f 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -129,6 +129,7 @@
oneway void activityIdle(in IBinder token, in Configuration config,
in boolean stopProfiling);
void activityResumed(in IBinder token);
+ void activityTopResumedStateLost();
void activityPaused(in IBinder token);
void activityStopped(in IBinder token, in Bundle state,
in PersistableBundle persistentState, in CharSequence description);
diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl
index 8615f00..8c85ad1 100644
--- a/core/java/android/app/ITaskStackListener.aidl
+++ b/core/java/android/app/ITaskStackListener.aidl
@@ -81,6 +81,16 @@
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.
*
* @param taskId id of the task.
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index dda5569..4f94209 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -52,6 +52,7 @@
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.view.Window;
+import android.view.WindowManagerGlobal;
import com.android.internal.content.ReferrerIntent;
@@ -1102,8 +1103,11 @@
if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) == 0) {
event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
}
- InputManager.getInstance().injectInputEvent(event,
- InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+ try {
+ WindowManagerGlobal.getWindowManagerService().injectInputAfterTransactionsApplied(event,
+ InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+ } catch (RemoteException e) {
+ }
}
/**
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 5c4c005..5d186a2 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -232,7 +232,8 @@
mResources = Resources.getSystem();
mDefaultClassLoader = ClassLoader.getSystemClassLoader();
mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader);
- mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader);
+ mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader,
+ new ApplicationInfo(mApplicationInfo));
}
/**
@@ -243,19 +244,15 @@
mApplicationInfo = info;
mDefaultClassLoader = classLoader;
mAppComponentFactory = createAppFactory(info, mDefaultClassLoader);
- mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader);
+ mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader,
+ new ApplicationInfo(mApplicationInfo));
}
private AppComponentFactory createAppFactory(ApplicationInfo appInfo, ClassLoader cl) {
if (appInfo.appComponentFactory != null && cl != null) {
try {
- AppComponentFactory factory = (AppComponentFactory) cl.loadClass(
- appInfo.appComponentFactory).newInstance();
- // Pass a copy of ApplicationInfo to the factory. Copying protects the framework
- // from apps which would override the factory and change ApplicationInfo contents.
- // ApplicationInfo is used to set up the default class loader.
- factory.setApplicationInfo(new ApplicationInfo(appInfo));
- return factory;
+ return (AppComponentFactory)
+ cl.loadClass(appInfo.appComponentFactory).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
Slog.e(TAG, "Unable to instantiate appComponentFactory", e);
}
@@ -729,8 +726,8 @@
mDefaultClassLoader = ClassLoader.getSystemClassLoader();
}
mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader);
- mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader);
-
+ mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader,
+ new ApplicationInfo(mApplicationInfo));
return;
}
@@ -821,7 +818,8 @@
}
if (mClassLoader == null) {
- mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader);
+ mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader,
+ new ApplicationInfo(mApplicationInfo));
}
return;
@@ -935,8 +933,10 @@
// Call AppComponentFactory to select/create the main class loader of this app.
// Since this may call code in the app, mDefaultClassLoader must be fully set up
// before invoking the factory.
+ // Invoke with a copy of ApplicationInfo to protect against the app changing it.
if (mClassLoader == null) {
- mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader);
+ mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader,
+ new ApplicationInfo(mApplicationInfo));
}
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2e7093d..e0cf561 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -1802,7 +1802,7 @@
out.writeInt(mIsContextual ? 1 : 0);
}
- public static final Parcelable.Creator<Action> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Action> CREATOR =
new Parcelable.Creator<Action>() {
public Action createFromParcel(Parcel in) {
return new Action(in);
@@ -2731,7 +2731,7 @@
/**
* Parcelable.Creator that instantiates Notification objects
*/
- public static final Parcelable.Creator<Notification> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Notification> CREATOR
= new Parcelable.Creator<Notification>()
{
public Notification createFromParcel(Parcel parcel)
@@ -3471,6 +3471,7 @@
* @param shortcutId the {@link ShortcutInfo#getId() id} of the shortcut this notification
* supersedes
*/
+ @NonNull
public Builder setShortcutId(String shortcutId) {
mN.mShortcutId = shortcutId;
return this;
@@ -3484,6 +3485,7 @@
*
* Note: This value might be ignored, for launchers that don't support badge icons.
*/
+ @NonNull
public Builder setBadgeIconType(int icon) {
mN.mBadgeIcon = icon;
return this;
@@ -3499,6 +3501,7 @@
*
* <p> The default value is {@link #GROUP_ALERT_ALL}.</p>
*/
+ @NonNull
public Builder setGroupAlertBehavior(@GroupAlertBehavior int groupAlertBehavior) {
mN.mGroupAlertBehavior = groupAlertBehavior;
return this;
@@ -3515,6 +3518,7 @@
* outside of the notification shade on unlocked devices. When a user interacts with the
* collapsed state, the bubble intent will be invoked and displayed.</b>
*/
+ @NonNull
public Builder setBubbleMetadata(BubbleMetadata data) {
mN.mBubbleMetadata = data;
return this;
@@ -3530,6 +3534,7 @@
/**
* Specifies the channel the notification should be delivered on.
*/
+ @NonNull
public Builder setChannelId(String channelId) {
mN.mChannelId = channelId;
return this;
@@ -3546,6 +3551,7 @@
* Specifies a duration in milliseconds after which this notification should be canceled,
* if it is not already canceled.
*/
+ @NonNull
public Builder setTimeoutAfter(long durationMs) {
mN.mTimeout = durationMs;
return this;
@@ -3560,6 +3566,7 @@
*
* @see Notification#when
*/
+ @NonNull
public Builder setWhen(long when) {
mN.when = when;
return this;
@@ -3571,6 +3578,7 @@
* For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this defaults to
* {@code false}. For earlier apps, the default is {@code true}.
*/
+ @NonNull
public Builder setShowWhen(boolean show) {
mN.extras.putBoolean(EXTRA_SHOW_WHEN, show);
return this;
@@ -3591,6 +3599,7 @@
* @see Notification#when
* @see #setChronometerCountDown(boolean)
*/
+ @NonNull
public Builder setUsesChronometer(boolean b) {
mN.extras.putBoolean(EXTRA_SHOW_CHRONOMETER, b);
return this;
@@ -3604,6 +3613,7 @@
*
* @see #setUsesChronometer(boolean)
*/
+ @NonNull
public Builder setChronometerCountDown(boolean countDown) {
mN.extras.putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN, countDown);
return this;
@@ -3623,6 +3633,7 @@
* A resource ID in the application's package of the drawable to use.
* @see Notification#icon
*/
+ @NonNull
public Builder setSmallIcon(@DrawableRes int icon) {
return setSmallIcon(icon != 0
? Icon.createWithResource(mContext, icon)
@@ -3640,6 +3651,7 @@
* @see Notification#icon
* @see Notification#iconLevel
*/
+ @NonNull
public Builder setSmallIcon(@DrawableRes int icon, int level) {
mN.iconLevel = level;
return setSmallIcon(icon);
@@ -3653,6 +3665,7 @@
* @param icon An Icon object to use.
* @see Notification#icon
*/
+ @NonNull
public Builder setSmallIcon(Icon icon) {
mN.setSmallIcon(icon);
if (icon != null && icon.getType() == Icon.TYPE_RESOURCE) {
@@ -3664,6 +3677,7 @@
/**
* Set the first line of text in the platform notification template.
*/
+ @NonNull
public Builder setContentTitle(CharSequence title) {
mN.extras.putCharSequence(EXTRA_TITLE, safeCharSequence(title));
return this;
@@ -3672,6 +3686,7 @@
/**
* Set the second line of text in the platform notification template.
*/
+ @NonNull
public Builder setContentText(CharSequence text) {
mN.extras.putCharSequence(EXTRA_TEXT, safeCharSequence(text));
return this;
@@ -3695,6 +3710,7 @@
* same time on those versions; they occupy the same place.
* </p>
*/
+ @NonNull
public Builder setSubText(CharSequence text) {
mN.extras.putCharSequence(EXTRA_SUB_TEXT, safeCharSequence(text));
return this;
@@ -3713,6 +3729,7 @@
* @param text
* @return
*/
+ @NonNull
public Builder setSettingsText(CharSequence text) {
mN.mSettingsText = safeCharSequence(text);
return this;
@@ -3732,6 +3749,7 @@
* <p>Note: The reply text will only be shown on notifications that have least one action
* with a {@code RemoteInput}.</p>
*/
+ @NonNull
public Builder setRemoteInputHistory(CharSequence[] text) {
if (text == null) {
mN.extras.putCharSequenceArray(EXTRA_REMOTE_INPUT_HISTORY, null);
@@ -3750,6 +3768,7 @@
* Sets whether remote history entries view should have a spinner.
* @hide
*/
+ @NonNull
public Builder setShowRemoteInputSpinner(boolean showSpinner) {
mN.extras.putBoolean(EXTRA_SHOW_REMOTE_INPUT_SPINNER, showSpinner);
return this;
@@ -3759,6 +3778,7 @@
* Sets whether smart reply buttons should be hidden.
* @hide
*/
+ @NonNull
public Builder setHideSmartReplies(boolean hideSmartReplies) {
mN.extras.putBoolean(EXTRA_HIDE_SMART_REPLIES, hideSmartReplies);
return this;
@@ -3768,6 +3788,7 @@
* Sets the number of items this notification represents. May be displayed as a badge count
* for Launchers that support badging.
*/
+ @NonNull
public Builder setNumber(int number) {
mN.number = number;
return this;
@@ -3794,6 +3815,7 @@
*
* The platform template will represent this using a {@link ProgressBar}.
*/
+ @NonNull
public Builder setProgress(int max, int progress, boolean indeterminate) {
mN.extras.putInt(EXTRA_PROGRESS, progress);
mN.extras.putInt(EXTRA_PROGRESS_MAX, max);
@@ -3817,6 +3839,7 @@
* This will override the layout that would otherwise be constructed by this Builder
* object.
*/
+ @NonNull
public Builder setCustomContentView(RemoteViews contentView) {
mN.contentView = contentView;
return this;
@@ -3828,6 +3851,7 @@
* This will override the expanded layout that would otherwise be constructed by this
* Builder object.
*/
+ @NonNull
public Builder setCustomBigContentView(RemoteViews contentView) {
mN.bigContentView = contentView;
return this;
@@ -3839,6 +3863,7 @@
* This will override the heads-up layout that would otherwise be constructed by this
* Builder object.
*/
+ @NonNull
public Builder setCustomHeadsUpContentView(RemoteViews contentView) {
mN.headsUpContentView = contentView;
return this;
@@ -3855,6 +3880,7 @@
*
* @see Notification#contentIntent Notification.contentIntent
*/
+ @NonNull
public Builder setContentIntent(PendingIntent intent) {
mN.contentIntent = intent;
return this;
@@ -3865,6 +3891,7 @@
*
* @see Notification#deleteIntent
*/
+ @NonNull
public Builder setDeleteIntent(PendingIntent intent) {
mN.deleteIntent = intent;
return this;
@@ -3893,6 +3920,7 @@
*
* @see Notification#fullScreenIntent
*/
+ @NonNull
public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) {
mN.fullScreenIntent = intent;
setFlag(FLAG_HIGH_PRIORITY, highPriority);
@@ -3904,6 +3932,7 @@
*
* @see Notification#tickerText
*/
+ @NonNull
public Builder setTicker(CharSequence tickerText) {
mN.tickerText = safeCharSequence(tickerText);
return this;
@@ -3927,6 +3956,7 @@
* in place of the {@link #setSmallIcon(Icon) small icon} (which will be placed in a small
* badge atop the large icon).
*/
+ @NonNull
public Builder setLargeIcon(Bitmap b) {
return setLargeIcon(b != null ? Icon.createWithBitmap(b) : null);
}
@@ -3938,6 +3968,7 @@
* in place of the {@link #setSmallIcon(Icon) small icon} (which will be placed in a small
* badge atop the large icon).
*/
+ @NonNull
public Builder setLargeIcon(Icon icon) {
mN.mLargeIcon = icon;
mN.extras.putParcelable(EXTRA_LARGE_ICON, icon);
@@ -4045,6 +4076,7 @@
* @see Notification#FLAG_ONGOING_EVENT
*/
+ @NonNull
public Builder setOngoing(boolean ongoing) {
setFlag(FLAG_ONGOING_EVENT, ongoing);
return this;
@@ -4065,6 +4097,7 @@
* @see #setColor(int)
* @see MediaStyle#setMediaSession(MediaSession.Token)
*/
+ @NonNull
public Builder setColorized(boolean colorize) {
mN.extras.putBoolean(EXTRA_COLORIZED, colorize);
return this;
@@ -4076,6 +4109,7 @@
*
* @see Notification#FLAG_ONLY_ALERT_ONCE
*/
+ @NonNull
public Builder setOnlyAlertOnce(boolean onlyAlertOnce) {
setFlag(FLAG_ONLY_ALERT_ONCE, onlyAlertOnce);
return this;
@@ -4086,6 +4120,7 @@
*
* @see Notification#FLAG_AUTO_CANCEL
*/
+ @NonNull
public Builder setAutoCancel(boolean autoCancel) {
setFlag(FLAG_AUTO_CANCEL, autoCancel);
return this;
@@ -4097,6 +4132,7 @@
* <p>Some notifications can be bridged to other devices for remote display.
* This hint can be set to recommend this notification not be bridged.
*/
+ @NonNull
public Builder setLocalOnly(boolean localOnly) {
setFlag(FLAG_LOCAL_ONLY, localOnly);
return this;
@@ -4138,6 +4174,7 @@
*
* @see Notification#category
*/
+ @NonNull
public Builder setCategory(String category) {
mN.category = category;
return this;
@@ -4195,6 +4232,7 @@
* @param person the person to add.
* @see Notification#EXTRA_PEOPLE_LIST
*/
+ @NonNull
public Builder addPerson(Person person) {
mPersonList.add(person);
return this;
@@ -4211,6 +4249,7 @@
* @param groupKey The group key of the group.
* @return this object for method chaining
*/
+ @NonNull
public Builder setGroup(String groupKey) {
mN.mGroupKey = groupKey;
return this;
@@ -4224,6 +4263,7 @@
* @param isGroupSummary Whether this notification should be a group summary.
* @return this object for method chaining
*/
+ @NonNull
public Builder setGroupSummary(boolean isGroupSummary) {
setFlag(FLAG_GROUP_SUMMARY, isGroupSummary);
return this;
@@ -4241,6 +4281,7 @@
*
* @see String#compareTo(String)
*/
+ @NonNull
public Builder setSortKey(String sortKey) {
mN.mSortKey = sortKey;
return this;
@@ -4253,6 +4294,7 @@
*
* @see Notification#extras
*/
+ @NonNull
public Builder addExtras(Bundle extras) {
if (extras != null) {
mUserExtras.putAll(extras);
@@ -4272,6 +4314,7 @@
*
* @see Notification#extras
*/
+ @NonNull
public Builder setExtras(Bundle extras) {
if (extras != null) {
mUserExtras = extras;
@@ -4339,6 +4382,7 @@
*
* @param action The action to add.
*/
+ @NonNull
public Builder addAction(Action action) {
if (action != null) {
mActions.add(action);
@@ -4353,6 +4397,7 @@
* @param actions
* @return
*/
+ @NonNull
public Builder setActions(Action... actions) {
mActions.clear();
for (int i = 0; i < actions.length; i++) {
@@ -4368,6 +4413,7 @@
*
* @param style Object responsible for modifying the notification style.
*/
+ @NonNull
public Builder setStyle(Style style) {
if (mStyle != style) {
mStyle = style;
@@ -4393,6 +4439,7 @@
*
* @return The same Builder.
*/
+ @NonNull
public Builder setVisibility(@Visibility int visibility) {
mN.visibility = visibility;
return this;
@@ -4404,6 +4451,7 @@
* @param n A replacement notification, presumably with some or all info redacted.
* @return The same Builder.
*/
+ @NonNull
public Builder setPublicVersion(Notification n) {
if (n != null) {
mN.publicVersion = new Notification();
@@ -4418,6 +4466,7 @@
* Apply an extender to this notification builder. Extenders may be used to add
* metadata or change options on this builder.
*/
+ @NonNull
public Builder extend(Extender extender) {
extender.extend(this);
return this;
@@ -4426,6 +4475,7 @@
/**
* @hide
*/
+ @NonNull
public Builder setFlag(int mask, boolean value) {
if (value) {
mN.flags |= mask;
@@ -4442,6 +4492,7 @@
*
* @return The same Builder.
*/
+ @NonNull
public Builder setColor(@ColorInt int argb) {
mN.color = argb;
sanitizeColor();
@@ -5674,6 +5725,7 @@
* Apply the unstyled operations and return a new {@link Notification} object.
* @hide
*/
+ @NonNull
public Notification buildUnstyled() {
if (mActions.size() > 0) {
mN.actions = new Action[mActions.size()];
@@ -5694,6 +5746,7 @@
* @param context The context for your application / activity.
* @param n The notification to create a Builder from.
*/
+ @NonNull
public static Notification.Builder recoverBuilder(Context context, Notification n) {
// Re-create notification context so we can access app resources.
ApplicationInfo applicationInfo = n.extras.getParcelable(
@@ -5718,6 +5771,7 @@
* Determines whether the platform can generate contextual actions for a notification.
* By default this is true.
*/
+ @NonNull
public Builder setAllowSystemGeneratedContextualActions(boolean allowed) {
mN.mAllowSystemGeneratedContextualActions = allowed;
return this;
@@ -5735,6 +5789,7 @@
* Combine all of the options that have been set and return a new {@link Notification}
* object.
*/
+ @NonNull
public Notification build() {
// first, add any extras from the calling code
if (mUserExtras != null) {
@@ -5793,7 +5848,8 @@
*
* @hide
*/
- public Notification buildInto(Notification n) {
+ @NonNull
+ public Notification buildInto(@NonNull Notification n) {
build().cloneInto(n, true);
return n;
}
@@ -8511,7 +8567,7 @@
return (mFlags & FLAG_SUPPRESS_INITIAL_NOTIFICATION) != 0;
}
- public static final Parcelable.Creator<BubbleMetadata> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BubbleMetadata> CREATOR =
new Parcelable.Creator<BubbleMetadata>() {
@Override
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index cfe27c7..5cdf85a 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -942,7 +942,7 @@
return sb.toString();
}
- public static final Creator<NotificationChannel> CREATOR = new Creator<NotificationChannel>() {
+ public static final @android.annotation.NonNull Creator<NotificationChannel> CREATOR = new Creator<NotificationChannel>() {
@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 34cd9f0..a8ee414 100644
--- a/core/java/android/app/NotificationChannelGroup.java
+++ b/core/java/android/app/NotificationChannelGroup.java
@@ -272,7 +272,7 @@
return record;
}
- public static final Creator<NotificationChannelGroup> CREATOR =
+ public static final @android.annotation.NonNull Creator<NotificationChannelGroup> CREATOR =
new Creator<NotificationChannelGroup>() {
@Override
public NotificationChannelGroup createFromParcel(Parcel in) {
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 8207e0a..e252f78 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -1842,7 +1842,7 @@
}
}
- public static final Parcelable.Creator<Policy> CREATOR = new Parcelable.Creator<Policy>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Policy> CREATOR = new Parcelable.Creator<Policy>() {
@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 55014eb..6f7a060 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -1208,7 +1208,7 @@
}
- public static final Parcelable.Creator<PendingIntent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PendingIntent> CREATOR
= new Parcelable.Creator<PendingIntent>() {
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 0abc998..14a5589 100644
--- a/core/java/android/app/Person.java
+++ b/core/java/android/app/Person.java
@@ -278,7 +278,7 @@
}
}
- public static final Creator<Person> CREATOR = new Creator<Person>() {
+ public static final @android.annotation.NonNull Creator<Person> CREATOR = new Creator<Person>() {
@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 adcc495..3ee5173 100644
--- a/core/java/android/app/PictureInPictureArgs.java
+++ b/core/java/android/app/PictureInPictureArgs.java
@@ -346,7 +346,7 @@
}
}
- public static final Creator<PictureInPictureArgs> CREATOR =
+ public static final @android.annotation.NonNull Creator<PictureInPictureArgs> CREATOR =
new Creator<PictureInPictureArgs>() {
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 edaae75..bfd966c5 100644
--- a/core/java/android/app/PictureInPictureParams.java
+++ b/core/java/android/app/PictureInPictureParams.java
@@ -275,7 +275,7 @@
}
}
- public static final Creator<PictureInPictureParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<PictureInPictureParams> CREATOR =
new Creator<PictureInPictureParams>() {
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 5fea8ef..d1cae94 100644
--- a/core/java/android/app/ProcessMemoryHighWaterMark.java
+++ b/core/java/android/app/ProcessMemoryHighWaterMark.java
@@ -40,7 +40,7 @@
rssHighWaterMarkInBytes = in.readLong();
}
- public static final Creator<ProcessMemoryHighWaterMark> CREATOR =
+ public static final @android.annotation.NonNull Creator<ProcessMemoryHighWaterMark> CREATOR =
new Creator<ProcessMemoryHighWaterMark>() {
@Override
public ProcessMemoryHighWaterMark createFromParcel(Parcel in) {
diff --git a/core/java/android/app/ProcessMemoryState.java b/core/java/android/app/ProcessMemoryState.java
index 95d5d19..e28d79c 100644
--- a/core/java/android/app/ProcessMemoryState.java
+++ b/core/java/android/app/ProcessMemoryState.java
@@ -60,7 +60,7 @@
startTimeNanos = in.readLong();
}
- public static final Creator<ProcessMemoryState> CREATOR = new Creator<ProcessMemoryState>() {
+ public static final @android.annotation.NonNull Creator<ProcessMemoryState> CREATOR = new Creator<ProcessMemoryState>() {
@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 6fbe9c6..25589f8 100644
--- a/core/java/android/app/ProfilerInfo.java
+++ b/core/java/android/app/ProfilerInfo.java
@@ -148,7 +148,7 @@
proto.end(token);
}
- public static final Parcelable.Creator<ProfilerInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ProfilerInfo> CREATOR =
new Parcelable.Creator<ProfilerInfo>() {
@Override
public ProfilerInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/app/RecoverableSecurityException.java b/core/java/android/app/RecoverableSecurityException.java
index 7cc3dab..21fb2a6 100644
--- a/core/java/android/app/RecoverableSecurityException.java
+++ b/core/java/android/app/RecoverableSecurityException.java
@@ -190,7 +190,7 @@
mUserAction.writeToParcel(dest, flags);
}
- public static final Creator<RecoverableSecurityException> CREATOR =
+ public static final @android.annotation.NonNull Creator<RecoverableSecurityException> CREATOR =
new Creator<RecoverableSecurityException>() {
@Override
public RecoverableSecurityException createFromParcel(Parcel source) {
diff --git a/core/java/android/app/RemoteAction.java b/core/java/android/app/RemoteAction.java
index c174665..1b13772 100644
--- a/core/java/android/app/RemoteAction.java
+++ b/core/java/android/app/RemoteAction.java
@@ -152,7 +152,7 @@
pw.println();
}
- public static final Parcelable.Creator<RemoteAction> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RemoteAction> CREATOR =
new Parcelable.Creator<RemoteAction>() {
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 392921e..36c524b 100644
--- a/core/java/android/app/RemoteInput.java
+++ b/core/java/android/app/RemoteInput.java
@@ -561,7 +561,7 @@
out.writeArraySet(mAllowedDataTypes);
}
- public static final Creator<RemoteInput> CREATOR = new Creator<RemoteInput>() {
+ public static final @android.annotation.NonNull Creator<RemoteInput> CREATOR = new Creator<RemoteInput>() {
@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 d916c94..9ee0f31 100644
--- a/core/java/android/app/ResultInfo.java
+++ b/core/java/android/app/ResultInfo.java
@@ -67,7 +67,7 @@
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public static final Parcelable.Creator<ResultInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ResultInfo> CREATOR
= new Parcelable.Creator<ResultInfo>() {
public ResultInfo createFromParcel(Parcel in) {
return new ResultInfo(in);
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 4a45150..8493fb2 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -47,8 +47,10 @@
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AutoCompleteTextView;
+import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ListPopupWindow;
import android.widget.SearchView;
import android.widget.TextView;
@@ -370,7 +372,10 @@
updateSearchAppIcon();
updateSearchBadge();
if (isLandscapeMode(getContext())) {
- mSearchAutoComplete.ensureImeVisible(true);
+ mSearchAutoComplete.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
+ if (mSearchAutoComplete.isDropDownAlwaysVisible() || enoughToFilter()) {
+ mSearchAutoComplete.showDropDown();
+ }
}
}
}
@@ -381,6 +386,15 @@
== Configuration.ORIENTATION_LANDSCAPE;
}
+ private boolean enoughToFilter() {
+ Filterable filterableAdapter = (Filterable) mSearchAutoComplete.getAdapter();
+ if (filterableAdapter == null || filterableAdapter.getFilter() == null) {
+ return false;
+ }
+
+ return mSearchAutoComplete.enoughToFilter();
+ }
+
/**
* Update the UI according to the info in the current value of {@link #mSearchable}.
*/
diff --git a/core/java/android/app/SearchableInfo.java b/core/java/android/app/SearchableInfo.java
index ae6d32a..a01cec7 100644
--- a/core/java/android/app/SearchableInfo.java
+++ b/core/java/android/app/SearchableInfo.java
@@ -800,7 +800,7 @@
/**
* Support for parcelable and aidl operations.
*/
- public static final Parcelable.Creator<SearchableInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SearchableInfo> CREATOR
= new Parcelable.Creator<SearchableInfo>() {
public SearchableInfo createFromParcel(Parcel in) {
return new SearchableInfo(in);
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index f116e13..1f91b3f 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
+import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo.ForegroundServiceType;
import android.content.res.Configuration;
import android.os.Build;
@@ -733,7 +734,7 @@
* {@link android.R.attr#foregroundServiceType} flags.
* @throws IllegalArgumentException if param foregroundServiceType is not subset of manifest
* attribute {@link android.R.attr#foregroundServiceType}.
- * @see {@link android.content.pm.ServiceInfo} for the set of FOREGROUND_SERVICE_TYPE flags.
+ * @see android.content.pm.ServiceInfo#FOREGROUND_SERVICE_TYPE_MANIFEST
*/
public final void startForeground(int id, @NonNull Notification notification,
@ForegroundServiceType int foregroundServiceType) {
@@ -775,6 +776,30 @@
}
/**
+ * If the service has become a foreground service by calling
+ * {@link #startForeground(int, Notification)}
+ * or {@link #startForeground(int, Notification, int)}, {@link #getForegroundServiceType()}
+ * returns the current foreground service type.
+ *
+ * <p>If there is no foregroundServiceType specified
+ * in manifest, {@link ServiceInfo#FOREGROUND_SERVICE_TYPE_NONE} is returned. </p>
+ *
+ * <p>If the service is not a foreground service,
+ * {@link ServiceInfo#FOREGROUND_SERVICE_TYPE_NONE} is returned.</p>
+ *
+ * @return current foreground service type flags.
+ */
+ public final @ForegroundServiceType int getForegroundServiceType() {
+ int ret = ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE;
+ try {
+ ret = mActivityManager.getForegroundServiceType(
+ new ComponentName(this, mClassName), mToken);
+ } catch (RemoteException ex) {
+ }
+ return ret;
+ }
+
+ /**
* Print the Service's state into the given stream. This gets invoked if
* you run "adb shell dumpsys activity service <yourservicename>"
* (note that for this command to work, the service must be running, and
diff --git a/core/java/android/app/ServiceStartArgs.java b/core/java/android/app/ServiceStartArgs.java
index f030cba..0b000af5 100644
--- a/core/java/android/app/ServiceStartArgs.java
+++ b/core/java/android/app/ServiceStartArgs.java
@@ -58,7 +58,7 @@
}
}
- public static final Parcelable.Creator<ServiceStartArgs> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ServiceStartArgs> CREATOR
= new Parcelable.Creator<ServiceStartArgs>() {
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 077652c..9ff363d 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -17,7 +17,9 @@
package android.app;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage;
@@ -364,6 +366,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.STATUS_BAR)
public void setDisabledForSetup(boolean disabled) {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
@@ -387,6 +390,8 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.STATUS_BAR)
+ @NonNull
public DisableInfo getDisableInfo() {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
@@ -518,7 +523,7 @@
* @hide
*/
@SystemApi
- public boolean areNoComponentsDisabled() {
+ public boolean areAllComponentsEnabled() {
return !mStatusBarExpansion && !mNavigateHome && !mNotificationPeeking && !mRecents
&& !mSearch;
}
diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java
index fcc76ac..47ad6d7 100644
--- a/core/java/android/app/TaskStackListener.java
+++ b/core/java/android/app/TaskStackListener.java
@@ -85,6 +85,12 @@
}
@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 823c427..36ba78b 100644
--- a/core/java/android/app/VoiceInteractor.java
+++ b/core/java/android/app/VoiceInteractor.java
@@ -500,7 +500,7 @@
dest.writeBundle(mExtras);
}
- public static final Parcelable.Creator<Option> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Option> CREATOR
= new Parcelable.Creator<Option>() {
public Option createFromParcel(Parcel in) {
return new Option(in);
@@ -869,7 +869,7 @@
dest.writeCharSequence(mVisualPrompt);
}
- public static final Creator<Prompt> CREATOR
+ public static final @android.annotation.NonNull Creator<Prompt> CREATOR
= new Creator<Prompt>() {
public Prompt createFromParcel(Parcel in) {
return new Prompt(in);
diff --git a/core/java/android/app/Vr2dDisplayProperties.java b/core/java/android/app/Vr2dDisplayProperties.java
index 1752131..bcb8592 100644
--- a/core/java/android/app/Vr2dDisplayProperties.java
+++ b/core/java/android/app/Vr2dDisplayProperties.java
@@ -112,7 +112,7 @@
dest.writeInt(mRemovedFlags);
}
- public static final Parcelable.Creator<Vr2dDisplayProperties> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Vr2dDisplayProperties> CREATOR
= new Parcelable.Creator<Vr2dDisplayProperties>() {
@Override
public Vr2dDisplayProperties createFromParcel(Parcel source) {
diff --git a/core/java/android/app/WaitResult.java b/core/java/android/app/WaitResult.java
index ad9f680..d65be9b 100644
--- a/core/java/android/app/WaitResult.java
+++ b/core/java/android/app/WaitResult.java
@@ -86,7 +86,7 @@
dest.writeInt(launchState);
}
- public static final Parcelable.Creator<WaitResult> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<WaitResult> CREATOR
= new Parcelable.Creator<WaitResult>() {
@Override
public WaitResult createFromParcel(Parcel source) {
diff --git a/core/java/android/app/WallpaperColors.java b/core/java/android/app/WallpaperColors.java
index 38a98d3c8..6765d0b 100644
--- a/core/java/android/app/WallpaperColors.java
+++ b/core/java/android/app/WallpaperColors.java
@@ -260,7 +260,7 @@
mColorHints = colorHints;
}
- public static final Creator<WallpaperColors> CREATOR = new Creator<WallpaperColors>() {
+ public static final @android.annotation.NonNull Creator<WallpaperColors> CREATOR = new Creator<WallpaperColors>() {
@Override
public WallpaperColors createFromParcel(Parcel in) {
return new WallpaperColors(in);
diff --git a/core/java/android/app/WallpaperInfo.java b/core/java/android/app/WallpaperInfo.java
index 28c79aa..c2be4b0 100644
--- a/core/java/android/app/WallpaperInfo.java
+++ b/core/java/android/app/WallpaperInfo.java
@@ -423,7 +423,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<WallpaperInfo> CREATOR = new Parcelable.Creator<WallpaperInfo>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<WallpaperInfo> CREATOR = new Parcelable.Creator<WallpaperInfo>() {
public WallpaperInfo createFromParcel(Parcel source) {
return new WallpaperInfo(source);
}
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index e0a15a5..affc8b9 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -239,7 +239,7 @@
}
/** @hide */
- public static final Creator<WindowConfiguration> CREATOR = new Creator<WindowConfiguration>() {
+ public static final @android.annotation.NonNull Creator<WindowConfiguration> CREATOR = new Creator<WindowConfiguration>() {
@Override
public WindowConfiguration createFromParcel(Parcel in) {
return new WindowConfiguration(in);
diff --git a/core/java/android/app/admin/ConnectEvent.java b/core/java/android/app/admin/ConnectEvent.java
index d511c57..dc32384 100644
--- a/core/java/android/app/admin/ConnectEvent.java
+++ b/core/java/android/app/admin/ConnectEvent.java
@@ -72,7 +72,7 @@
mPackageName);
}
- public static final Parcelable.Creator<ConnectEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ConnectEvent> CREATOR
= new Parcelable.Creator<ConnectEvent>() {
@Override
public ConnectEvent createFromParcel(Parcel in) {
diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java
index 121161e..00903c4 100644
--- a/core/java/android/app/admin/DeviceAdminInfo.java
+++ b/core/java/android/app/admin/DeviceAdminInfo.java
@@ -525,7 +525,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<DeviceAdminInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DeviceAdminInfo> CREATOR =
new Parcelable.Creator<DeviceAdminInfo>() {
public DeviceAdminInfo createFromParcel(Parcel source) {
return new DeviceAdminInfo(source);
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index a32e01f..d593ad1 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -59,7 +59,6 @@
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
-import android.os.ParcelableException;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteCallback;
@@ -1453,7 +1452,7 @@
* Constant for {@link #getPasswordComplexity()}: password satisfies one of the following:
* <ul>
* <li>PIN with <b>no</b> repeating (4444) or ordered (1234, 4321, 2468) sequences, length at
- * least 4
+ * least 8
* <li>alphabetic, length at least 6
* <li>alphanumeric, length at least 6
* </ul>
diff --git a/core/java/android/app/admin/DnsEvent.java b/core/java/android/app/admin/DnsEvent.java
index a2d704b..aade934 100644
--- a/core/java/android/app/admin/DnsEvent.java
+++ b/core/java/android/app/admin/DnsEvent.java
@@ -101,7 +101,7 @@
mIpAddressesCount, mTimestamp, mPackageName);
}
- public static final Parcelable.Creator<DnsEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<DnsEvent> CREATOR
= new Parcelable.Creator<DnsEvent>() {
@Override
public DnsEvent createFromParcel(Parcel in) {
diff --git a/core/java/android/app/admin/NetworkEvent.java b/core/java/android/app/admin/NetworkEvent.java
index 947e4fe..c00ec83 100644
--- a/core/java/android/app/admin/NetworkEvent.java
+++ b/core/java/android/app/admin/NetworkEvent.java
@@ -85,7 +85,7 @@
return 0;
}
- public static final Parcelable.Creator<NetworkEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NetworkEvent> CREATOR
= new Parcelable.Creator<NetworkEvent>() {
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 a6bf501..d71d355 100644
--- a/core/java/android/app/admin/PasswordMetrics.java
+++ b/core/java/android/app/admin/PasswordMetrics.java
@@ -210,7 +210,7 @@
dest.writeInt(nonLetter);
}
- public static final Parcelable.Creator<PasswordMetrics> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PasswordMetrics> CREATOR
= new Parcelable.Creator<PasswordMetrics>() {
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 170c802..6386573 100644
--- a/core/java/android/app/admin/SecurityLog.java
+++ b/core/java/android/app/admin/SecurityLog.java
@@ -602,7 +602,7 @@
dest.writeByteArray(mEvent.getBytes());
}
- public static final Parcelable.Creator<SecurityEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SecurityEvent> CREATOR =
new Parcelable.Creator<SecurityEvent>() {
@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 b0376b5..4019290 100644
--- a/core/java/android/app/admin/SystemUpdateInfo.java
+++ b/core/java/android/app/admin/SystemUpdateInfo.java
@@ -111,7 +111,7 @@
return mSecurityPatchState;
}
- public static final Creator<SystemUpdateInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<SystemUpdateInfo> CREATOR =
new Creator<SystemUpdateInfo>() {
@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 dd72845..2ba2c04 100644
--- a/core/java/android/app/admin/SystemUpdatePolicy.java
+++ b/core/java/android/app/admin/SystemUpdatePolicy.java
@@ -280,7 +280,7 @@
dest.writeString(getMessage());
}
- public static final Parcelable.Creator<ValidationFailedException> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ValidationFailedException> CREATOR =
new Parcelable.Creator<ValidationFailedException>() {
@Override
public ValidationFailedException createFromParcel(Parcel source) {
@@ -710,7 +710,7 @@
}
}
- public static final Parcelable.Creator<SystemUpdatePolicy> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SystemUpdatePolicy> CREATOR =
new Parcelable.Creator<SystemUpdatePolicy>() {
@Override
diff --git a/core/java/android/app/assist/AssistContent.java b/core/java/android/app/assist/AssistContent.java
index ff7e181..db6ae4f 100644
--- a/core/java/android/app/assist/AssistContent.java
+++ b/core/java/android/app/assist/AssistContent.java
@@ -216,7 +216,7 @@
writeToParcelInternal(dest, flags);
}
- public static final Parcelable.Creator<AssistContent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AssistContent> CREATOR
= new Parcelable.Creator<AssistContent>() {
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 2b1e7cd..ed3a296 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -2074,7 +2074,7 @@
}
@SuppressWarnings("hiding")
- public static final Creator<HtmlInfoNode> CREATOR = new Creator<HtmlInfoNode>() {
+ public static final @android.annotation.NonNull Creator<HtmlInfoNode> CREATOR = new Creator<HtmlInfoNode>() {
@Override
public HtmlInfoNode createFromParcel(Parcel parcel) {
// Always go through the builder to ensure the data ingested by
@@ -2430,7 +2430,7 @@
}
}
- public static final Parcelable.Creator<AssistStructure> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AssistStructure> CREATOR
= new Parcelable.Creator<AssistStructure>() {
@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 32e6212..56f69fb 100644
--- a/core/java/android/app/backup/BackupProgress.java
+++ b/core/java/android/app/backup/BackupProgress.java
@@ -52,7 +52,7 @@
out.writeLong(bytesTransferred);
}
- public static final Creator<BackupProgress> CREATOR = new Creator<BackupProgress>() {
+ public static final @android.annotation.NonNull Creator<BackupProgress> CREATOR = new Creator<BackupProgress>() {
public BackupProgress createFromParcel(Parcel in) {
return new BackupProgress(in);
}
diff --git a/core/java/android/app/backup/RestoreDescription.java b/core/java/android/app/backup/RestoreDescription.java
index 0250326..7854394 100644
--- a/core/java/android/app/backup/RestoreDescription.java
+++ b/core/java/android/app/backup/RestoreDescription.java
@@ -89,7 +89,7 @@
out.writeInt(mDataType);
}
- public static final Parcelable.Creator<RestoreDescription> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<RestoreDescription> CREATOR
= new Parcelable.Creator<RestoreDescription>() {
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 4a6316c..6759346 100644
--- a/core/java/android/app/backup/RestoreSet.java
+++ b/core/java/android/app/backup/RestoreSet.java
@@ -69,7 +69,7 @@
out.writeLong(token);
}
- public static final Parcelable.Creator<RestoreSet> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<RestoreSet> CREATOR
= new Parcelable.Creator<RestoreSet>() {
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 9bb39e5..1b50015 100644
--- a/core/java/android/app/contentsuggestions/ClassificationsRequest.java
+++ b/core/java/android/app/contentsuggestions/ClassificationsRequest.java
@@ -71,7 +71,7 @@
dest.writeBundle(mExtras);
}
- public static final Creator<ClassificationsRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<ClassificationsRequest> CREATOR =
new Creator<ClassificationsRequest>() {
@Override
public ClassificationsRequest createFromParcel(Parcel source) {
diff --git a/core/java/android/app/contentsuggestions/ContentClassification.java b/core/java/android/app/contentsuggestions/ContentClassification.java
index 2a00b40..2317e4a 100644
--- a/core/java/android/app/contentsuggestions/ContentClassification.java
+++ b/core/java/android/app/contentsuggestions/ContentClassification.java
@@ -71,7 +71,7 @@
dest.writeBundle(mExtras);
}
- public static final Creator<ContentClassification> CREATOR =
+ public static final @android.annotation.NonNull Creator<ContentClassification> CREATOR =
new Creator<ContentClassification>() {
@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 16b4f3f..4c83f59 100644
--- a/core/java/android/app/contentsuggestions/ContentSelection.java
+++ b/core/java/android/app/contentsuggestions/ContentSelection.java
@@ -71,7 +71,7 @@
dest.writeBundle(mExtras);
}
- public static final Creator<ContentSelection> CREATOR =
+ public static final @android.annotation.NonNull Creator<ContentSelection> CREATOR =
new Creator<ContentSelection>() {
@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 e3c8bc5..257f98d 100644
--- a/core/java/android/app/contentsuggestions/SelectionsRequest.java
+++ b/core/java/android/app/contentsuggestions/SelectionsRequest.java
@@ -81,7 +81,7 @@
dest.writeBundle(mExtras);
}
- public static final Creator<SelectionsRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<SelectionsRequest> CREATOR =
new Creator<SelectionsRequest>() {
@Override
public SelectionsRequest createFromParcel(Parcel source) {
diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java
index e7fe161..907d1f7 100644
--- a/core/java/android/app/job/JobInfo.java
+++ b/core/java/android/app/job/JobInfo.java
@@ -870,7 +870,7 @@
out.writeInt(this.flags);
}
- public static final Creator<JobInfo> CREATOR = new Creator<JobInfo>() {
+ public static final @android.annotation.NonNull Creator<JobInfo> CREATOR = new Creator<JobInfo>() {
@Override
public JobInfo createFromParcel(Parcel in) {
return new JobInfo(in);
@@ -963,7 +963,7 @@
out.writeInt(mFlags);
}
- public static final Creator<TriggerContentUri> CREATOR = new Creator<TriggerContentUri>() {
+ public static final @android.annotation.NonNull Creator<TriggerContentUri> CREATOR = new Creator<TriggerContentUri>() {
@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 3cc56ae..dadfe3d 100644
--- a/core/java/android/app/job/JobParameters.java
+++ b/core/java/android/app/job/JobParameters.java
@@ -344,7 +344,7 @@
dest.writeString(debugStopReason);
}
- public static final Creator<JobParameters> CREATOR = new Creator<JobParameters>() {
+ public static final @android.annotation.NonNull Creator<JobParameters> CREATOR = new Creator<JobParameters>() {
@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 ceeaab7..2c58908 100644
--- a/core/java/android/app/job/JobSnapshot.java
+++ b/core/java/android/app/job/JobSnapshot.java
@@ -105,7 +105,7 @@
out.writeBoolean(mIsRunnable);
}
- public static final Creator<JobSnapshot> CREATOR = new Creator<JobSnapshot>() {
+ public static final @android.annotation.NonNull Creator<JobSnapshot> CREATOR = new Creator<JobSnapshot>() {
@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 f804681..a055ab4 100644
--- a/core/java/android/app/job/JobWorkItem.java
+++ b/core/java/android/app/job/JobWorkItem.java
@@ -214,7 +214,7 @@
out.writeInt(mWorkId);
}
- public static final Parcelable.Creator<JobWorkItem> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<JobWorkItem> CREATOR
= new Parcelable.Creator<JobWorkItem>() {
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 2fbe6e36..2da4671 100644
--- a/core/java/android/app/prediction/AppPredictionContext.java
+++ b/core/java/android/app/prediction/AppPredictionContext.java
@@ -101,7 +101,7 @@
/**
* @see Parcelable.Creator
*/
- public static final Parcelable.Creator<AppPredictionContext> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AppPredictionContext> CREATOR =
new Parcelable.Creator<AppPredictionContext>() {
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 1e76c24..1c5d8b4 100644
--- a/core/java/android/app/prediction/AppPredictionSessionId.java
+++ b/core/java/android/app/prediction/AppPredictionSessionId.java
@@ -75,7 +75,7 @@
/**
* @see Parcelable.Creator
*/
- public static final Parcelable.Creator<AppPredictionSessionId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AppPredictionSessionId> CREATOR =
new Parcelable.Creator<AppPredictionSessionId>() {
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 b924cec..752c92b 100644
--- a/core/java/android/app/prediction/AppTarget.java
+++ b/core/java/android/app/prediction/AppTarget.java
@@ -183,7 +183,7 @@
/**
* @see Parcelable.Creator
*/
- public static final Parcelable.Creator<AppTarget> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AppTarget> CREATOR =
new Parcelable.Creator<AppTarget>() {
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 37e41de..01452df 100644
--- a/core/java/android/app/prediction/AppTargetEvent.java
+++ b/core/java/android/app/prediction/AppTargetEvent.java
@@ -122,7 +122,7 @@
/**
* @see Creator
*/
- public static final Creator<AppTargetEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<AppTargetEvent> CREATOR =
new Creator<AppTargetEvent>() {
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 639ba78..aa2ec1f 100644
--- a/core/java/android/app/prediction/AppTargetId.java
+++ b/core/java/android/app/prediction/AppTargetId.java
@@ -83,7 +83,7 @@
/**
* @see Creator
*/
- public static final Creator<AppTargetId> CREATOR =
+ public static final @android.annotation.NonNull Creator<AppTargetId> CREATOR =
new Creator<AppTargetId>() {
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 5958deb..d6f7679 100644
--- a/core/java/android/app/role/OnRoleHoldersChangedListener.java
+++ b/core/java/android/app/role/OnRoleHoldersChangedListener.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.annotation.TestApi;
import android.os.UserHandle;
/**
@@ -26,6 +27,7 @@
* @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 7ec21f6..c665cb23 100644
--- a/core/java/android/app/role/RoleManager.java
+++ b/core/java/android/app/role/RoleManager.java
@@ -467,6 +467,7 @@
*/
@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 +513,7 @@
*/
@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 +555,7 @@
*/
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
+ @TestApi
public void setRoleNamesFromController(@NonNull List<String> roleNames) {
Preconditions.checkNotNull(roleNames, "roleNames cannot be null");
try {
@@ -583,6 +586,7 @@
*/
@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 +619,7 @@
*/
@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 +639,10 @@
*
* @hide
*/
+ @NonNull
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
- @NonNull
+ @TestApi
public List<String> 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 8ee9e53..0d4e16b 100644
--- a/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java
+++ b/core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java
@@ -86,7 +86,7 @@
mConfiguration = in.readTypedObject(Configuration.CREATOR);
}
- public static final Creator<ActivityConfigurationChangeItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<ActivityConfigurationChangeItem> CREATOR =
new Creator<ActivityConfigurationChangeItem>() {
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 d8a7463..9844de7 100644
--- a/core/java/android/app/servertransaction/ActivityRelaunchItem.java
+++ b/core/java/android/app/servertransaction/ActivityRelaunchItem.java
@@ -130,7 +130,7 @@
mPreserveWindow = in.readBoolean();
}
- public static final Creator<ActivityRelaunchItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<ActivityRelaunchItem> CREATOR =
new Creator<ActivityRelaunchItem>() {
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 bab17dc..52ec3e6 100644
--- a/core/java/android/app/servertransaction/ActivityResultItem.java
+++ b/core/java/android/app/servertransaction/ActivityResultItem.java
@@ -88,7 +88,7 @@
mResultInfoList = in.createTypedArrayList(ResultInfo.CREATOR);
}
- public static final Parcelable.Creator<ActivityResultItem> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ActivityResultItem> CREATOR =
new Parcelable.Creator<ActivityResultItem>() {
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 f1d87ac..b08e5973 100644
--- a/core/java/android/app/servertransaction/ClientTransaction.java
+++ b/core/java/android/app/servertransaction/ClientTransaction.java
@@ -204,7 +204,7 @@
}
}
- public static final Creator<ClientTransaction> CREATOR =
+ public static final @android.annotation.NonNull Creator<ClientTransaction> CREATOR =
new Creator<ClientTransaction>() {
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 4ab7251..0f244d0 100644
--- a/core/java/android/app/servertransaction/ConfigurationChangeItem.java
+++ b/core/java/android/app/servertransaction/ConfigurationChangeItem.java
@@ -78,7 +78,7 @@
mConfiguration = in.readTypedObject(Configuration.CREATOR);
}
- public static final Creator<ConfigurationChangeItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<ConfigurationChangeItem> CREATOR =
new Creator<ConfigurationChangeItem>() {
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 5941486..3ee7614 100644
--- a/core/java/android/app/servertransaction/DestroyActivityItem.java
+++ b/core/java/android/app/servertransaction/DestroyActivityItem.java
@@ -92,7 +92,7 @@
mConfigChanges = in.readInt();
}
- public static final Creator<DestroyActivityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<DestroyActivityItem> CREATOR =
new Creator<DestroyActivityItem>() {
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 ed793bf..db22f8d 100644
--- a/core/java/android/app/servertransaction/LaunchActivityItem.java
+++ b/core/java/android/app/servertransaction/LaunchActivityItem.java
@@ -148,7 +148,7 @@
in.readTypedObject(ProfilerInfo.CREATOR));
}
- public static final Creator<LaunchActivityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<LaunchActivityItem> CREATOR =
new Creator<LaunchActivityItem>() {
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 b3dddfb3..f6d3dbd 100644
--- a/core/java/android/app/servertransaction/MoveToDisplayItem.java
+++ b/core/java/android/app/servertransaction/MoveToDisplayItem.java
@@ -83,7 +83,7 @@
mConfiguration = in.readTypedObject(Configuration.CREATOR);
}
- public static final Creator<MoveToDisplayItem> CREATOR = new Creator<MoveToDisplayItem>() {
+ public static final @android.annotation.NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<MoveToDisplayItem>() {
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 c3022d6..b150717 100644
--- a/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java
+++ b/core/java/android/app/servertransaction/MultiWindowModeChangeItem.java
@@ -81,7 +81,7 @@
mOverrideConfig = in.readTypedObject(Configuration.CREATOR);
}
- public static final Creator<MultiWindowModeChangeItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<MultiWindowModeChangeItem> CREATOR =
new Creator<MultiWindowModeChangeItem>() {
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 4f28cd2..4c7f56d 100644
--- a/core/java/android/app/servertransaction/NewIntentItem.java
+++ b/core/java/android/app/servertransaction/NewIntentItem.java
@@ -92,7 +92,7 @@
mIntents = in.createTypedArrayList(ReferrerIntent.CREATOR);
}
- public static final Parcelable.Creator<NewIntentItem> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NewIntentItem> CREATOR =
new Parcelable.Creator<NewIntentItem>() {
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 cae93b3..f65c843 100644
--- a/core/java/android/app/servertransaction/PauseActivityItem.java
+++ b/core/java/android/app/servertransaction/PauseActivityItem.java
@@ -130,7 +130,7 @@
mDontReport = in.readBoolean();
}
- public static final Creator<PauseActivityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<PauseActivityItem> CREATOR =
new Creator<PauseActivityItem>() {
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 b999cd7..1955897 100644
--- a/core/java/android/app/servertransaction/PipModeChangeItem.java
+++ b/core/java/android/app/servertransaction/PipModeChangeItem.java
@@ -79,7 +79,7 @@
mOverrideConfig = in.readTypedObject(Configuration.CREATOR);
}
- public static final Creator<PipModeChangeItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<PipModeChangeItem> CREATOR =
new Creator<PipModeChangeItem>() {
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 a5b6f7c..905076b 100644
--- a/core/java/android/app/servertransaction/ResumeActivityItem.java
+++ b/core/java/android/app/servertransaction/ResumeActivityItem.java
@@ -128,7 +128,7 @@
mIsForward = in.readBoolean();
}
- public static final Creator<ResumeActivityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<ResumeActivityItem> CREATOR =
new Creator<ResumeActivityItem>() {
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 87db206..63efa6f 100644
--- a/core/java/android/app/servertransaction/StopActivityItem.java
+++ b/core/java/android/app/servertransaction/StopActivityItem.java
@@ -95,7 +95,7 @@
mConfigChanges = in.readInt();
}
- public static final Creator<StopActivityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<StopActivityItem> CREATOR =
new Creator<StopActivityItem>() {
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 4064a02..c7e4c36 100644
--- a/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java
+++ b/core/java/android/app/servertransaction/TopResumedActivityChangeItem.java
@@ -17,9 +17,11 @@
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
+import android.app.ActivityTaskManager;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
import android.os.Parcel;
+import android.os.RemoteException;
import android.os.Trace;
/**
@@ -38,6 +40,26 @@
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
+ @Override
+ public void postExecute(ClientTransactionHandler client, IBinder token,
+ PendingTransactionActions pendingActions) {
+ if (mOnTop) {
+ return;
+ }
+
+ // The loss of top resumed state can always be reported immediately in postExecute
+ // because only three cases are possible:
+ // 1. Activity is in RESUMED state now and it just handled the callback in #execute().
+ // 2. Activity wasn't RESUMED yet, which means that it didn't receive the top state yet.
+ // 3. Activity is PAUSED or in other lifecycle state after PAUSED. In this case top resumed
+ // state loss was already called right before pausing.
+ try {
+ ActivityTaskManager.getService().activityTopResumedStateLost();
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
// ObjectPoolItem implementation
@@ -75,7 +97,7 @@
mOnTop = in.readBoolean();
}
- public static final Creator<TopResumedActivityChangeItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<TopResumedActivityChangeItem> CREATOR =
new Creator<TopResumedActivityChangeItem>() {
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 d9956b1..115d1ec 100644
--- a/core/java/android/app/servertransaction/WindowVisibilityItem.java
+++ b/core/java/android/app/servertransaction/WindowVisibilityItem.java
@@ -34,7 +34,8 @@
@Override
public void execute(ClientTransactionHandler client, IBinder token,
PendingTransactionActions pendingActions) {
- Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityShowWindow");
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ mShowWindow ? "activityShowWindow" : "activityHideWindow");
client.handleWindowVisibility(token, mShowWindow);
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
@@ -75,7 +76,7 @@
mShowWindow = in.readBoolean();
}
- public static final Creator<WindowVisibilityItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<WindowVisibilityItem> CREATOR =
new Creator<WindowVisibilityItem>() {
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 d1aec04..a7319f6 100644
--- a/core/java/android/app/slice/Slice.java
+++ b/core/java/android/app/slice/Slice.java
@@ -543,7 +543,7 @@
}
}
- public static final Creator<Slice> CREATOR = new Creator<Slice>() {
+ public static final @android.annotation.NonNull Creator<Slice> CREATOR = new Creator<Slice>() {
@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 c058a14..ed32a1b 100644
--- a/core/java/android/app/slice/SliceItem.java
+++ b/core/java/android/app/slice/SliceItem.java
@@ -378,7 +378,7 @@
throw new RuntimeException("Unsupported type " + type);
}
- public static final Creator<SliceItem> CREATOR = new Creator<SliceItem>() {
+ public static final @android.annotation.NonNull Creator<SliceItem> CREATOR = new Creator<SliceItem>() {
@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 b3790e2..b1080e0 100644
--- a/core/java/android/app/slice/SliceSpec.java
+++ b/core/java/android/app/slice/SliceSpec.java
@@ -108,7 +108,7 @@
return String.format("SliceSpec{%s,%d}", mType, mRevision);
}
- public static final Creator<SliceSpec> CREATOR = new Creator<SliceSpec>() {
+ public static final @android.annotation.NonNull Creator<SliceSpec> CREATOR = new Creator<SliceSpec>() {
@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 7ba03cc..da21794 100644
--- a/core/java/android/app/timedetector/TimeSignal.java
+++ b/core/java/android/app/timedetector/TimeSignal.java
@@ -33,7 +33,7 @@
*/
public final class TimeSignal implements Parcelable {
- public static final Parcelable.Creator<TimeSignal> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TimeSignal> CREATOR =
new Parcelable.Creator<TimeSignal>() {
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 be732e4..04e3142 100644
--- a/core/java/android/app/timezone/DistroFormatVersion.java
+++ b/core/java/android/app/timezone/DistroFormatVersion.java
@@ -45,7 +45,7 @@
mMinorVersion = Utils.validateVersion("minor", minorVersion);
}
- public static final Creator<DistroFormatVersion> CREATOR = new Creator<DistroFormatVersion>() {
+ public static final @android.annotation.NonNull Creator<DistroFormatVersion> CREATOR = new Creator<DistroFormatVersion>() {
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 a680594..3fae161 100644
--- a/core/java/android/app/timezone/DistroRulesVersion.java
+++ b/core/java/android/app/timezone/DistroRulesVersion.java
@@ -46,7 +46,7 @@
mRevision = validateVersion("revision", revision);
}
- public static final Creator<DistroRulesVersion> CREATOR = new Creator<DistroRulesVersion>() {
+ public static final @android.annotation.NonNull Creator<DistroRulesVersion> CREATOR = new Creator<DistroRulesVersion>() {
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 38dd1eb..d35967d 100644
--- a/core/java/android/app/timezone/RulesState.java
+++ b/core/java/android/app/timezone/RulesState.java
@@ -182,7 +182,7 @@
return mBaseRulesVersion.compareTo(distroRulesVersion.getRulesVersion()) > 0;
}
- public static final Parcelable.Creator<RulesState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RulesState> CREATOR =
new Parcelable.Creator<RulesState>() {
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 51fe0e2..ebdbf83 100644
--- a/core/java/android/app/usage/AppStandbyInfo.java
+++ b/core/java/android/app/usage/AppStandbyInfo.java
@@ -50,7 +50,7 @@
dest.writeInt(mStandbyBucket);
}
- public static final Creator<AppStandbyInfo> CREATOR = new Creator<AppStandbyInfo>() {
+ public static final @android.annotation.NonNull Creator<AppStandbyInfo> CREATOR = new Creator<AppStandbyInfo>() {
@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 1d5c2b0..b92d538 100644
--- a/core/java/android/app/usage/CacheQuotaHint.java
+++ b/core/java/android/app/usage/CacheQuotaHint.java
@@ -140,7 +140,7 @@
}
}
- public static final Parcelable.Creator<CacheQuotaHint> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CacheQuotaHint> CREATOR =
new Creator<CacheQuotaHint>() {
@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 87a737d..da3b769 100644
--- a/core/java/android/app/usage/ConfigurationStats.java
+++ b/core/java/android/app/usage/ConfigurationStats.java
@@ -146,7 +146,7 @@
dest.writeInt(mActivationCount);
}
- public static final Creator<ConfigurationStats> CREATOR = new Creator<ConfigurationStats>() {
+ public static final @android.annotation.NonNull Creator<ConfigurationStats> CREATOR = new Creator<ConfigurationStats>() {
@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 ea95a05..7ada092 100644
--- a/core/java/android/app/usage/EventStats.java
+++ b/core/java/android/app/usage/EventStats.java
@@ -160,7 +160,7 @@
dest.writeInt(mCount);
}
- public static final Creator<EventStats> CREATOR = new Creator<EventStats>() {
+ public static final @android.annotation.NonNull Creator<EventStats> CREATOR = new Creator<EventStats>() {
@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 f00e5c2..3a51207 100644
--- a/core/java/android/app/usage/ExternalStorageStats.java
+++ b/core/java/android/app/usage/ExternalStorageStats.java
@@ -131,7 +131,7 @@
dest.writeLong(obbBytes);
}
- public static final Creator<ExternalStorageStats> CREATOR = new Creator<ExternalStorageStats>() {
+ public static final @android.annotation.NonNull Creator<ExternalStorageStats> CREATOR = new Creator<ExternalStorageStats>() {
@Override
public ExternalStorageStats createFromParcel(Parcel in) {
return new ExternalStorageStats(in);
diff --git a/core/java/android/app/usage/StorageStats.java b/core/java/android/app/usage/StorageStats.java
index 3a27751..a2ff159 100644
--- a/core/java/android/app/usage/StorageStats.java
+++ b/core/java/android/app/usage/StorageStats.java
@@ -106,7 +106,7 @@
dest.writeLong(cacheBytes);
}
- public static final Creator<StorageStats> CREATOR = new Creator<StorageStats>() {
+ public static final @android.annotation.NonNull Creator<StorageStats> CREATOR = new Creator<StorageStats>() {
@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 fafea34..0d0e466 100644
--- a/core/java/android/app/usage/UsageEvents.java
+++ b/core/java/android/app/usage/UsageEvents.java
@@ -880,7 +880,7 @@
dest.writeBlob(data.marshall());
}
- public static final Creator<UsageEvents> CREATOR = new Creator<UsageEvents>() {
+ public static final @android.annotation.NonNull Creator<UsageEvents> CREATOR = new Creator<UsageEvents>() {
@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 97efa01..2c021cc 100644
--- a/core/java/android/app/usage/UsageStats.java
+++ b/core/java/android/app/usage/UsageStats.java
@@ -636,7 +636,7 @@
return bundle;
}
- public static final Creator<UsageStats> CREATOR = new Creator<UsageStats>() {
+ public static final @android.annotation.NonNull Creator<UsageStats> CREATOR = new Creator<UsageStats>() {
@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 9c6bd92..d34e6d3 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -195,6 +195,8 @@
/** @hide */
public static final int REASON_SUB_USAGE_EXEMPTED_SYNC_START = 0x000D;
/** @hide */
+ public static final int REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED = 0x000E;
+ /** @hide */
public static final int REASON_SUB_PREDICTED_RESTORED = 0x0001;
@@ -972,6 +974,9 @@
case REASON_SUB_USAGE_EXEMPTED_SYNC_START:
sb.append("-es");
break;
+ case REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED:
+ sb.append("-uss");
+ break;
}
break;
}
diff --git a/core/java/android/app/usage/UsageStatsManagerInternal.java b/core/java/android/app/usage/UsageStatsManagerInternal.java
index 43ce521..bbec6b3 100644
--- a/core/java/android/app/usage/UsageStatsManagerInternal.java
+++ b/core/java/android/app/usage/UsageStatsManagerInternal.java
@@ -257,12 +257,14 @@
int numDeferredJobs, long timeSinceLastJobRun);
/**
- * Report a sync is scheduled by a foreground app.
+ * Report a sync that was scheduled.
*
* @param packageName name of the package that owns the sync adapter.
* @param userId which user the app is associated with
+ * @param exempted is sync app standby exempted
*/
- public abstract void reportExemptedSyncScheduled(String packageName, @UserIdInt int userId);
+ public abstract void reportSyncScheduled(String packageName, @UserIdInt int userId,
+ boolean exempted);
/**
* Report a sync that was scheduled by a foreground app is about to be executed.
diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java
index d148afb..2faa900 100644
--- a/core/java/android/appwidget/AppWidgetProviderInfo.java
+++ b/core/java/android/appwidget/AppWidgetProviderInfo.java
@@ -446,7 +446,7 @@
/**
* Parcelable.Creator that instantiates AppWidgetProviderInfo objects
*/
- public static final Parcelable.Creator<AppWidgetProviderInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AppWidgetProviderInfo> CREATOR
= new Parcelable.Creator<AppWidgetProviderInfo>()
{
public AppWidgetProviderInfo createFromParcel(Parcel parcel)
diff --git a/core/java/android/appwidget/PendingHostUpdate.java b/core/java/android/appwidget/PendingHostUpdate.java
index 5780319..e1bf159 100644
--- a/core/java/android/appwidget/PendingHostUpdate.java
+++ b/core/java/android/appwidget/PendingHostUpdate.java
@@ -112,7 +112,7 @@
/**
* Parcelable.Creator that instantiates PendingHostUpdate objects
*/
- public static final Parcelable.Creator<PendingHostUpdate> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PendingHostUpdate> CREATOR
= new Parcelable.Creator<PendingHostUpdate>() {
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 43b79db..df065bf 100644
--- a/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java
+++ b/core/java/android/bluetooth/BluetoothActivityEnergyInfo.java
@@ -76,7 +76,7 @@
+ " }";
}
- public static final Parcelable.Creator<BluetoothActivityEnergyInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothActivityEnergyInfo> CREATOR =
new Parcelable.Creator<BluetoothActivityEnergyInfo>() {
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 a441056..9591a70 100644
--- a/core/java/android/bluetooth/BluetoothAudioConfig.java
+++ b/core/java/android/bluetooth/BluetoothAudioConfig.java
@@ -64,7 +64,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothAudioConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothAudioConfig> CREATOR =
new Parcelable.Creator<BluetoothAudioConfig>() {
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 3d3d80e..30aea1a 100644
--- a/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java
+++ b/core/java/android/bluetooth/BluetoothAvrcpPlayerSettings.java
@@ -118,7 +118,7 @@
}
}
- public static final Parcelable.Creator<BluetoothAvrcpPlayerSettings> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothAvrcpPlayerSettings> CREATOR =
new Parcelable.Creator<BluetoothAvrcpPlayerSettings>() {
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 1edbacb..260e2fb 100755
--- a/core/java/android/bluetooth/BluetoothClass.java
+++ b/core/java/android/bluetooth/BluetoothClass.java
@@ -94,7 +94,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothClass> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothClass> CREATOR =
new Parcelable.Creator<BluetoothClass>() {
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 c9d0ef2..591c418 100644
--- a/core/java/android/bluetooth/BluetoothCodecConfig.java
+++ b/core/java/android/bluetooth/BluetoothCodecConfig.java
@@ -247,7 +247,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothCodecConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecConfig> CREATOR =
new Parcelable.Creator<BluetoothCodecConfig>() {
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 2cb7b2d..8eae2b4 100644
--- a/core/java/android/bluetooth/BluetoothCodecStatus.java
+++ b/core/java/android/bluetooth/BluetoothCodecStatus.java
@@ -108,7 +108,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothCodecStatus> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothCodecStatus> CREATOR =
new Parcelable.Creator<BluetoothCodecStatus>() {
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 4d8dc35..f718415 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -959,7 +959,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothDevice> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothDevice> CREATOR =
new Parcelable.Creator<BluetoothDevice>() {
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 6d46b3a..edacf3e 100644
--- a/core/java/android/bluetooth/BluetoothGattCharacteristic.java
+++ b/core/java/android/bluetooth/BluetoothGattCharacteristic.java
@@ -302,7 +302,7 @@
out.writeTypedList(mDescriptors);
}
- public static final Parcelable.Creator<BluetoothGattCharacteristic> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothGattCharacteristic> CREATOR =
new Parcelable.Creator<BluetoothGattCharacteristic>() {
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 3ffbb9e..0783cd2 100644
--- a/core/java/android/bluetooth/BluetoothGattDescriptor.java
+++ b/core/java/android/bluetooth/BluetoothGattDescriptor.java
@@ -177,7 +177,7 @@
out.writeInt(mPermissions);
}
- public static final Parcelable.Creator<BluetoothGattDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothGattDescriptor> CREATOR =
new Parcelable.Creator<BluetoothGattDescriptor>() {
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 bccf20e..5580619 100644
--- a/core/java/android/bluetooth/BluetoothGattIncludedService.java
+++ b/core/java/android/bluetooth/BluetoothGattIncludedService.java
@@ -64,7 +64,7 @@
out.writeInt(mServiceType);
}
- public static final Parcelable.Creator<BluetoothGattIncludedService> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothGattIncludedService> CREATOR =
new Parcelable.Creator<BluetoothGattIncludedService>() {
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 8e740ee..c20faf9 100644
--- a/core/java/android/bluetooth/BluetoothGattService.java
+++ b/core/java/android/bluetooth/BluetoothGattService.java
@@ -165,7 +165,7 @@
out.writeTypedList(includedServices);
}
- public static final Parcelable.Creator<BluetoothGattService> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothGattService> CREATOR =
new Parcelable.Creator<BluetoothGattService>() {
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 e02a2f4..7165dd5 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
@@ -280,7 +280,7 @@
/**
* {@link Parcelable.Creator} interface implementation.
*/
- public static final Parcelable.Creator<BluetoothHeadsetClientCall> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothHeadsetClientCall> CREATOR =
new Parcelable.Creator<BluetoothHeadsetClientCall>() {
@Override
public BluetoothHeadsetClientCall createFromParcel(Parcel in) {
diff --git a/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java b/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java
index 9788bbf..88e06e5 100644
--- a/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java
+++ b/core/java/android/bluetooth/BluetoothHealthAppConfiguration.java
@@ -90,7 +90,7 @@
* {@link BluetoothDevice#createL2capChannel(int)}
*/
@Deprecated
- public static final Parcelable.Creator<BluetoothHealthAppConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothHealthAppConfiguration> CREATOR =
new Parcelable.Creator<BluetoothHealthAppConfiguration>() {
@Override
public BluetoothHealthAppConfiguration createFromParcel(Parcel in) {
diff --git a/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java b/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java
index a485b89..b21ebe5 100644
--- a/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java
+++ b/core/java/android/bluetooth/BluetoothHidDeviceAppQosSettings.java
@@ -98,7 +98,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothHidDeviceAppQosSettings> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothHidDeviceAppQosSettings> CREATOR =
new Parcelable.Creator<BluetoothHidDeviceAppQosSettings>() {
@Override
diff --git a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java
index 2f0b44f..4e1a2aa 100644
--- a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java
+++ b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java
@@ -92,7 +92,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothHidDeviceAppSdpSettings> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothHidDeviceAppSdpSettings> CREATOR =
new Parcelable.Creator<BluetoothHidDeviceAppSdpSettings>() {
@Override
diff --git a/core/java/android/bluetooth/BluetoothMasInstance.java b/core/java/android/bluetooth/BluetoothMasInstance.java
index 7a31328..b64d049 100644
--- a/core/java/android/bluetooth/BluetoothMasInstance.java
+++ b/core/java/android/bluetooth/BluetoothMasInstance.java
@@ -57,7 +57,7 @@
return 0;
}
- public static final Parcelable.Creator<BluetoothMasInstance> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BluetoothMasInstance> CREATOR =
new Parcelable.Creator<BluetoothMasInstance>() {
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 d632572..0d0c6ab 100644
--- a/core/java/android/bluetooth/OobData.java
+++ b/core/java/android/bluetooth/OobData.java
@@ -98,7 +98,7 @@
out.writeByteArray(mLeSecureConnectionsRandom);
}
- public static final Parcelable.Creator<OobData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<OobData> CREATOR =
new Parcelable.Creator<OobData>() {
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 cef362b..2ee786a 100644
--- a/core/java/android/bluetooth/UidTraffic.java
+++ b/core/java/android/bluetooth/UidTraffic.java
@@ -95,7 +95,7 @@
+ mTxBytes + '}';
}
- public static final Creator<UidTraffic> CREATOR = new Creator<UidTraffic>() {
+ public static final @android.annotation.NonNull Creator<UidTraffic> CREATOR = new Creator<UidTraffic>() {
@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 b65c31d1d..5fd8258 100644
--- a/core/java/android/bluetooth/le/AdvertiseData.java
+++ b/core/java/android/bluetooth/le/AdvertiseData.java
@@ -159,7 +159,7 @@
dest.writeByte((byte) (getIncludeDeviceName() ? 1 : 0));
}
- public static final Parcelable.Creator<AdvertiseData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AdvertiseData> CREATOR =
new Creator<AdvertiseData>() {
@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 35e232c7..7129d76 100644
--- a/core/java/android/bluetooth/le/AdvertiseSettings.java
+++ b/core/java/android/bluetooth/le/AdvertiseSettings.java
@@ -139,7 +139,7 @@
dest.writeInt(mAdvertiseTimeoutMillis);
}
- public static final Parcelable.Creator<AdvertiseSettings> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AdvertiseSettings> CREATOR =
new Creator<AdvertiseSettings>() {
@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 0c0291eb..e39b198 100644
--- a/core/java/android/bluetooth/le/AdvertisingSetParameters.java
+++ b/core/java/android/bluetooth/le/AdvertisingSetParameters.java
@@ -227,7 +227,7 @@
dest.writeInt(mTxPowerLevel);
}
- public static final Parcelable.Creator<AdvertisingSetParameters> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AdvertisingSetParameters> CREATOR =
new Creator<AdvertisingSetParameters>() {
@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 73a2e74..7a8c2c6 100644
--- a/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java
+++ b/core/java/android/bluetooth/le/PeriodicAdvertisingReport.java
@@ -171,7 +171,7 @@
+ ", data=" + Objects.toString(mData) + ", timestampNanos=" + mTimestampNanos + '}';
}
- public static final Parcelable.Creator<PeriodicAdvertisingReport> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PeriodicAdvertisingReport> CREATOR =
new Creator<PeriodicAdvertisingReport>() {
@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 63bdf69..796c815 100644
--- a/core/java/android/bluetooth/le/ResultStorageDescriptor.java
+++ b/core/java/android/bluetooth/le/ResultStorageDescriptor.java
@@ -78,7 +78,7 @@
mLength = in.readInt();
}
- public static final Parcelable.Creator<ResultStorageDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ResultStorageDescriptor> CREATOR =
new Creator<ResultStorageDescriptor>() {
@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 c5d435b..78140cf 100644
--- a/core/java/android/bluetooth/le/ScanFilter.java
+++ b/core/java/android/bluetooth/le/ScanFilter.java
@@ -161,7 +161,7 @@
/**
* A {@link android.os.Parcelable.Creator} to create {@link ScanFilter} from parcel.
*/
- public static final Creator<ScanFilter> CREATOR =
+ public static final @android.annotation.NonNull Creator<ScanFilter> CREATOR =
new Creator<ScanFilter>() {
@Override
diff --git a/core/java/android/bluetooth/le/ScanResult.java b/core/java/android/bluetooth/le/ScanResult.java
index f87a47f..855d345 100644
--- a/core/java/android/bluetooth/le/ScanResult.java
+++ b/core/java/android/bluetooth/le/ScanResult.java
@@ -338,7 +338,7 @@
+ ", periodicAdvertisingInterval=" + mPeriodicAdvertisingInterval + '}';
}
- public static final Parcelable.Creator<ScanResult> CREATOR = new Creator<ScanResult>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<ScanResult> CREATOR = new Creator<ScanResult>() {
@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 8fdcba8..504118e 100644
--- a/core/java/android/bluetooth/le/ScanSettings.java
+++ b/core/java/android/bluetooth/le/ScanSettings.java
@@ -242,7 +242,7 @@
return 0;
}
- public static final Parcelable.Creator<ScanSettings> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ScanSettings> CREATOR =
new Creator<ScanSettings>() {
@Override
public ScanSettings[] newArray(int size) {
diff --git a/core/java/android/companion/AssociationRequest.java b/core/java/android/companion/AssociationRequest.java
index db54f08..e4114c6 100644
--- a/core/java/android/companion/AssociationRequest.java
+++ b/core/java/android/companion/AssociationRequest.java
@@ -105,7 +105,7 @@
return 0;
}
- public static final Creator<AssociationRequest> CREATOR = new Creator<AssociationRequest>() {
+ public static final @android.annotation.NonNull Creator<AssociationRequest> CREATOR = new Creator<AssociationRequest>() {
@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 7507e17..fe0123c 100644
--- a/core/java/android/companion/BluetoothDeviceFilter.java
+++ b/core/java/android/companion/BluetoothDeviceFilter.java
@@ -146,7 +146,7 @@
return 0;
}
- public static final Creator<BluetoothDeviceFilter> CREATOR
+ public static final @android.annotation.NonNull Creator<BluetoothDeviceFilter> CREATOR
= new Creator<BluetoothDeviceFilter>() {
@Override
public BluetoothDeviceFilter createFromParcel(Parcel in) {
diff --git a/core/java/android/companion/BluetoothDeviceFilterUtils.java b/core/java/android/companion/BluetoothDeviceFilterUtils.java
index bd507a6..75e726b 100644
--- a/core/java/android/companion/BluetoothDeviceFilterUtils.java
+++ b/core/java/android/companion/BluetoothDeviceFilterUtils.java
@@ -30,6 +30,7 @@
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 @@
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 1de931e..37c9cb6 100644
--- a/core/java/android/companion/BluetoothLeDeviceFilter.java
+++ b/core/java/android/companion/BluetoothLeDeviceFilter.java
@@ -247,7 +247,7 @@
'}';
}
- public static final Creator<BluetoothLeDeviceFilter> CREATOR
+ public static final @android.annotation.NonNull Creator<BluetoothLeDeviceFilter> CREATOR
= new Creator<BluetoothLeDeviceFilter>() {
@Override
public BluetoothLeDeviceFilter createFromParcel(Parcel in) {
diff --git a/core/java/android/companion/WifiDeviceFilter.java b/core/java/android/companion/WifiDeviceFilter.java
index b6e704c..62098d5 100644
--- a/core/java/android/companion/WifiDeviceFilter.java
+++ b/core/java/android/companion/WifiDeviceFilter.java
@@ -98,7 +98,7 @@
return 0;
}
- public static final Creator<WifiDeviceFilter> CREATOR
+ public static final @android.annotation.NonNull Creator<WifiDeviceFilter> CREATOR
= new Creator<WifiDeviceFilter>() {
@Override
public WifiDeviceFilter createFromParcel(Parcel in) {
diff --git a/core/java/android/content/AutofillOptions.java b/core/java/android/content/AutofillOptions.java
index fd7e52a..0d25f4d 100644
--- a/core/java/android/content/AutofillOptions.java
+++ b/core/java/android/content/AutofillOptions.java
@@ -110,7 +110,7 @@
parcel.writeBoolean(augmentedEnabled);
}
- public static final Parcelable.Creator<AutofillOptions> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AutofillOptions> CREATOR =
new Parcelable.Creator<AutofillOptions>() {
@Override
diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java
index 8777b67..88e2c22 100644
--- a/core/java/android/content/ClipData.java
+++ b/core/java/android/content/ClipData.java
@@ -1176,7 +1176,7 @@
}
}
- public static final Parcelable.Creator<ClipData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ClipData> CREATOR =
new Parcelable.Creator<ClipData>() {
@Override
diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java
index 19295fc..29acd5d 100644
--- a/core/java/android/content/ClipDescription.java
+++ b/core/java/android/content/ClipDescription.java
@@ -380,7 +380,7 @@
mTimeStamp = in.readLong();
}
- public static final Parcelable.Creator<ClipDescription> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ClipDescription> CREATOR =
new Parcelable.Creator<ClipDescription>() {
public ClipDescription createFromParcel(Parcel source) {
diff --git a/core/java/android/content/ComponentName.java b/core/java/android/content/ComponentName.java
index e6ffe8b4..a5460e9 100644
--- a/core/java/android/content/ComponentName.java
+++ b/core/java/android/content/ComponentName.java
@@ -376,7 +376,7 @@
return pkg != null ? new ComponentName(pkg, in) : null;
}
- public static final Parcelable.Creator<ComponentName> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ComponentName> CREATOR
= new Parcelable.Creator<ComponentName>() {
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 2fe9f14..6be0bea 100644
--- a/core/java/android/content/ContentCaptureOptions.java
+++ b/core/java/android/content/ContentCaptureOptions.java
@@ -149,7 +149,7 @@
parcel.writeArraySet(whitelistedComponents);
}
- public static final Parcelable.Creator<ContentCaptureOptions> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentCaptureOptions> CREATOR =
new Parcelable.Creator<ContentCaptureOptions>() {
@Override
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index e06322df..ddfe755 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -209,9 +209,10 @@
* @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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
}
return results;
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
} finally {
setCallingPackage(original);
Trace.traceEnd(TRACE_TAG_DATABASE);
@@ -384,7 +397,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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/ContentProviderOperation.java b/core/java/android/content/ContentProviderOperation.java
index 6a3fa6b2..a41b5d3 100644
--- a/core/java/android/content/ContentProviderOperation.java
+++ b/core/java/android/content/ContentProviderOperation.java
@@ -460,7 +460,7 @@
return 0;
}
- public static final Creator<ContentProviderOperation> CREATOR =
+ public static final @android.annotation.NonNull Creator<ContentProviderOperation> CREATOR =
new Creator<ContentProviderOperation>() {
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 4196f27..d90173c 100644
--- a/core/java/android/content/ContentProviderResult.java
+++ b/core/java/android/content/ContentProviderResult.java
@@ -71,7 +71,7 @@
return 0;
}
- public static final Creator<ContentProviderResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<ContentProviderResult> CREATOR =
new Creator<ContentProviderResult>() {
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 06d0f66..eafeed2 100644
--- a/core/java/android/content/ContentValues.java
+++ b/core/java/android/content/ContentValues.java
@@ -497,7 +497,7 @@
return mMap.keySet();
}
- public static final Parcelable.Creator<ContentValues> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentValues> CREATOR =
new Parcelable.Creator<ContentValues>() {
@Override
public ContentValues createFromParcel(Parcel in) {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index b67349f..d3b8e29 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -27,6 +27,7 @@
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 @@
/**
* Used to read a ShortcutIconResource from a Parcel.
*/
- public static final Parcelable.Creator<ShortcutIconResource> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ShortcutIconResource> CREATOR =
new Parcelable.Creator<ShortcutIconResource>() {
public ShortcutIconResource createFromParcel(Parcel source) {
@@ -1902,6 +1903,7 @@
* @hide
*/
@SystemApi
+ @TestApi
public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME";
/**
@@ -10344,7 +10346,7 @@
out.writeBundle(mExtras);
}
- public static final Parcelable.Creator<Intent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Intent> CREATOR
= new Parcelable.Creator<Intent>() {
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 36d8a37..9d52363 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -1896,7 +1896,7 @@
}
}
- public static final Parcelable.Creator<IntentFilter> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IntentFilter> CREATOR
= new Parcelable.Creator<IntentFilter>() {
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 bfd1a43..ec0bac4 100644
--- a/core/java/android/content/IntentSender.java
+++ b/core/java/android/content/IntentSender.java
@@ -316,7 +316,7 @@
out.writeStrongBinder(mTarget.asBinder());
}
- public static final Parcelable.Creator<IntentSender> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IntentSender> CREATOR
= new Parcelable.Creator<IntentSender>() {
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 9548f9c..2142cf3 100644
--- a/core/java/android/content/LocusId.java
+++ b/core/java/android/content/LocusId.java
@@ -98,15 +98,17 @@
dest.writeParcelable(mUri, flags);
}
- public static final Parcelable.Creator<LocusId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<LocusId> CREATOR =
new Parcelable.Creator<LocusId>() {
+ @NonNull
@Override
public LocusId createFromParcel(Parcel source) {
final Uri uri = source.readParcelable(null);
return new LocusId(uri);
}
+ @NonNull
@Override
public LocusId[] newArray(int size) {
return new LocusId[size];
diff --git a/core/java/android/content/LoggingContentInterface.java b/core/java/android/content/LoggingContentInterface.java
new file mode 100644
index 0000000..26d01b9
--- /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<ContentProviderOperation> 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 0441ccc..a075148 100644
--- a/core/java/android/content/PeriodicSync.java
+++ b/core/java/android/content/PeriodicSync.java
@@ -104,7 +104,7 @@
dest.writeLong(flexTime);
}
- public static final Creator<PeriodicSync> CREATOR = new Creator<PeriodicSync>() {
+ public static final @android.annotation.NonNull Creator<PeriodicSync> CREATOR = new Creator<PeriodicSync>() {
@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 0473475..010992c 100644
--- a/core/java/android/content/RestrictionEntry.java
+++ b/core/java/android/content/RestrictionEntry.java
@@ -531,7 +531,7 @@
dest.writeParcelableArray(mRestrictions, 0);
}
- public static final Creator<RestrictionEntry> CREATOR = new Creator<RestrictionEntry>() {
+ public static final @android.annotation.NonNull Creator<RestrictionEntry> CREATOR = new Creator<RestrictionEntry>() {
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 6cd4841..8c8fe5a 100644
--- a/core/java/android/content/SyncAdapterType.java
+++ b/core/java/android/content/SyncAdapterType.java
@@ -241,7 +241,7 @@
source.readString());
}
- public static final Creator<SyncAdapterType> CREATOR = new Creator<SyncAdapterType>() {
+ public static final @android.annotation.NonNull Creator<SyncAdapterType> CREATOR = new Creator<SyncAdapterType>() {
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 403cbcb..d3f2eed 100644
--- a/core/java/android/content/SyncInfo.java
+++ b/core/java/android/content/SyncInfo.java
@@ -106,7 +106,7 @@
/** @hide */
@UnsupportedAppUsage
- public static final Creator<SyncInfo> CREATOR = new Creator<SyncInfo>() {
+ public static final @android.annotation.NonNull Creator<SyncInfo> CREATOR = new Creator<SyncInfo>() {
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 c18b282..5f1f180 100644
--- a/core/java/android/content/SyncRequest.java
+++ b/core/java/android/content/SyncRequest.java
@@ -122,7 +122,7 @@
return mSyncRunTimeSecs;
}
- public static final Creator<SyncRequest> CREATOR = new Creator<SyncRequest>() {
+ public static final @android.annotation.NonNull Creator<SyncRequest> CREATOR = new Creator<SyncRequest>() {
@Override
public SyncRequest createFromParcel(Parcel in) {
diff --git a/core/java/android/content/SyncResult.java b/core/java/android/content/SyncResult.java
index f67d7f5..8280f8e 100644
--- a/core/java/android/content/SyncResult.java
+++ b/core/java/android/content/SyncResult.java
@@ -235,7 +235,7 @@
stats.clear();
}
- public static final Creator<SyncResult> CREATOR = new Creator<SyncResult>() {
+ public static final @android.annotation.NonNull Creator<SyncResult> CREATOR = new Creator<SyncResult>() {
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 b7f2a85..03b2250e 100644
--- a/core/java/android/content/SyncStats.java
+++ b/core/java/android/content/SyncStats.java
@@ -166,7 +166,7 @@
dest.writeLong(numSkippedEntries);
}
- public static final Creator<SyncStats> CREATOR = new Creator<SyncStats>() {
+ public static final @android.annotation.NonNull Creator<SyncStats> CREATOR = new Creator<SyncStats>() {
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 a9065ca..3f64515 100644
--- a/core/java/android/content/SyncStatusInfo.java
+++ b/core/java/android/content/SyncStatusInfo.java
@@ -401,7 +401,7 @@
}
@UnsupportedAppUsage
- public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() {
+ public static final @android.annotation.NonNull Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() {
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 df9200d..d3a9cb8 100644
--- a/core/java/android/content/UriPermission.java
+++ b/core/java/android/content/UriPermission.java
@@ -103,7 +103,7 @@
dest.writeLong(mPersistedTime);
}
- public static final Creator<UriPermission> CREATOR = new Creator<UriPermission>() {
+ public static final @android.annotation.NonNull Creator<UriPermission> CREATOR = new Creator<UriPermission>() {
@Override
public UriPermission createFromParcel(Parcel source) {
return new UriPermission(source);
diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java
index 1989f06..999d986 100644
--- a/core/java/android/content/om/OverlayInfo.java
+++ b/core/java/android/content/om/OverlayInfo.java
@@ -264,7 +264,7 @@
dest.writeBoolean(isStatic);
}
- public static final Parcelable.Creator<OverlayInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<OverlayInfo> CREATOR =
new Parcelable.Creator<OverlayInfo>() {
@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 7cc4391..415c242 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -1314,7 +1314,7 @@
}
}
- public static final Parcelable.Creator<ActivityInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ActivityInfo> CREATOR
= new Parcelable.Creator<ActivityInfo>() {
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 6c6fcb2..4f09d5a 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -662,6 +662,14 @@
*/
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,
@@ -688,7 +696,8 @@
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 {}
@@ -1342,6 +1351,8 @@
}
pw.println(prefix + "HiddenApiEnforcementPolicy=" + getHiddenApiEnforcementPolicy());
pw.println(prefix + "usesNonSdkApi=" + usesNonSdkApi());
+ pw.println(prefix + "allowsPlaybackCapture="
+ + (isAudioPlaybackCaptureAllowed() ? "true" : "false"));
}
super.dumpBack(pw, prefix);
}
@@ -1625,7 +1636,7 @@
dest.writeString(zygotePreloadName);
}
- public static final Parcelable.Creator<ApplicationInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR
= new Parcelable.Creator<ApplicationInfo>() {
public ApplicationInfo createFromParcel(Parcel source) {
return new ApplicationInfo(source);
@@ -1790,6 +1801,17 @@
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 a3e5d6d..4178309 100644
--- a/core/java/android/content/pm/BaseParceledListSlice.java
+++ b/core/java/android/content/pm/BaseParceledListSlice.java
@@ -128,8 +128,8 @@
private static void verifySameType(final Class<?> expected, final Class<?> actual) {
if (!actual.equals(expected)) {
throw new IllegalArgumentException("Can't unparcel type "
- + actual.getName() + " in list of type "
- + expected.getName());
+ + (actual == null ? null : actual.getName()) + " in list of type "
+ + (expected == null ? null : expected.getName()));
}
}
diff --git a/core/java/android/content/pm/ChangedPackages.java b/core/java/android/content/pm/ChangedPackages.java
index b78c71d..950a29a 100644
--- a/core/java/android/content/pm/ChangedPackages.java
+++ b/core/java/android/content/pm/ChangedPackages.java
@@ -71,7 +71,7 @@
return mPackageNames;
}
- public static final Parcelable.Creator<ChangedPackages> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ChangedPackages> CREATOR =
new Parcelable.Creator<ChangedPackages>() {
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 8edd436..20494e9 100644
--- a/core/java/android/content/pm/ConfigurationInfo.java
+++ b/core/java/android/content/pm/ConfigurationInfo.java
@@ -113,7 +113,7 @@
dest.writeInt(reqGlEsVersion);
}
- public static final Creator<ConfigurationInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ConfigurationInfo> CREATOR =
new Creator<ConfigurationInfo>() {
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 79a6eea..38c8f74 100644
--- a/core/java/android/content/pm/FeatureGroupInfo.java
+++ b/core/java/android/content/pm/FeatureGroupInfo.java
@@ -49,7 +49,7 @@
dest.writeTypedArray(features, flags);
}
- public static final Creator<FeatureGroupInfo> CREATOR = new Creator<FeatureGroupInfo>() {
+ public static final @android.annotation.NonNull Creator<FeatureGroupInfo> CREATOR = new Creator<FeatureGroupInfo>() {
@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 ff9fd8e..dc576e8 100644
--- a/core/java/android/content/pm/FeatureInfo.java
+++ b/core/java/android/content/pm/FeatureInfo.java
@@ -126,7 +126,7 @@
proto.end(token);
}
- public static final Creator<FeatureInfo> CREATOR = new Creator<FeatureInfo>() {
+ public static final @android.annotation.NonNull Creator<FeatureInfo> CREATOR = new Creator<FeatureInfo>() {
@Override
public FeatureInfo createFromParcel(Parcel source) {
return new FeatureInfo(source);
diff --git a/core/java/android/content/pm/InstantAppInfo.java b/core/java/android/content/pm/InstantAppInfo.java
index cb04fc3..24d6a07 100644
--- a/core/java/android/content/pm/InstantAppInfo.java
+++ b/core/java/android/content/pm/InstantAppInfo.java
@@ -136,7 +136,7 @@
parcel.writeParcelable(mApplicationInfo, flags);
}
- public static final Creator<InstantAppInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<InstantAppInfo> CREATOR =
new Creator<InstantAppInfo>() {
@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 257ab967..7c63406 100644
--- a/core/java/android/content/pm/InstantAppIntentFilter.java
+++ b/core/java/android/content/pm/InstantAppIntentFilter.java
@@ -68,7 +68,7 @@
out.writeList(mFilters);
}
- public static final Parcelable.Creator<InstantAppIntentFilter> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InstantAppIntentFilter> CREATOR
= new Parcelable.Creator<InstantAppIntentFilter>() {
@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 8184361..4c963a6 100644
--- a/core/java/android/content/pm/InstantAppResolveInfo.java
+++ b/core/java/android/content/pm/InstantAppResolveInfo.java
@@ -208,7 +208,7 @@
out.writeLong(mVersionCode);
}
- public static final Parcelable.Creator<InstantAppResolveInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InstantAppResolveInfo> CREATOR
= new Parcelable.Creator<InstantAppResolveInfo>() {
public InstantAppResolveInfo createFromParcel(Parcel in) {
return new InstantAppResolveInfo(in);
@@ -383,7 +383,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<InstantAppDigest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<InstantAppDigest> CREATOR =
new Parcelable.Creator<InstantAppDigest>() {
@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 fb2e4a04..574a1ee 100644
--- a/core/java/android/content/pm/InstrumentationInfo.java
+++ b/core/java/android/content/pm/InstrumentationInfo.java
@@ -176,7 +176,7 @@
dest.writeInt((functionalTest == false) ? 0 : 1);
}
- public static final Parcelable.Creator<InstrumentationInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InstrumentationInfo> CREATOR
= new Parcelable.Creator<InstrumentationInfo>() {
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 068973b..67bda2c 100644
--- a/core/java/android/content/pm/IntentFilterVerificationInfo.java
+++ b/core/java/android/content/pm/IntentFilterVerificationInfo.java
@@ -246,7 +246,7 @@
dest.writeStringList(new ArrayList<>(mDomains));
}
- public static final Creator<IntentFilterVerificationInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<IntentFilterVerificationInfo> CREATOR =
new Creator<IntentFilterVerificationInfo>() {
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 643db7e..5c1d35e 100644
--- a/core/java/android/content/pm/KeySet.java
+++ b/core/java/android/content/pm/KeySet.java
@@ -63,7 +63,7 @@
* Implement Parcelable
* @hide
*/
- public static final Parcelable.Creator<KeySet> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeySet> CREATOR
= new Parcelable.Creator<KeySet>() {
/**
diff --git a/core/java/android/content/pm/LabeledIntent.java b/core/java/android/content/pm/LabeledIntent.java
index 68b0046..ae41252 100644
--- a/core/java/android/content/pm/LabeledIntent.java
+++ b/core/java/android/content/pm/LabeledIntent.java
@@ -180,7 +180,7 @@
mIcon = in.readInt();
}
- public static final Creator<LabeledIntent> CREATOR
+ public static final @android.annotation.NonNull Creator<LabeledIntent> CREATOR
= new Creator<LabeledIntent>() {
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 bf556ba..38ea43e 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -1725,7 +1725,7 @@
dest.writeStrongBinder(mInner.asBinder());
}
- public static final Creator<PinItemRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<PinItemRequest> CREATOR =
new Creator<PinItemRequest>() {
public PinItemRequest createFromParcel(Parcel source) {
return new PinItemRequest(source);
@@ -1785,7 +1785,7 @@
mUsageRemaining = source.readLong();
}
- public static final Creator<AppUsageLimit> CREATOR = new Creator<AppUsageLimit>() {
+ public static final @android.annotation.NonNull Creator<AppUsageLimit> CREATOR = new Creator<AppUsageLimit>() {
@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 044e87d..d930c92 100644
--- a/core/java/android/content/pm/ModuleInfo.java
+++ b/core/java/android/content/pm/ModuleInfo.java
@@ -134,7 +134,7 @@
mHidden = source.readBoolean();
}
- public static final Parcelable.Creator<ModuleInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ModuleInfo> CREATOR =
new Parcelable.Creator<ModuleInfo>() {
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 27a5b39..725d601 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -489,7 +489,7 @@
dest.writeBoolean(isApex);
}
- public static final Parcelable.Creator<PackageInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PackageInfo> CREATOR
= new Parcelable.Creator<PackageInfo>() {
@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 b878a95..f5442ec 100644
--- a/core/java/android/content/pm/PackageInfoLite.java
+++ b/core/java/android/content/pm/PackageInfoLite.java
@@ -118,7 +118,7 @@
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public static final Parcelable.Creator<PackageInfoLite> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PackageInfoLite> CREATOR
= new Parcelable.Creator<PackageInfoLite>() {
public PackageInfoLite createFromParcel(Parcel source) {
return new PackageInfoLite(source);
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 270e387..2c1842c 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -160,6 +160,14 @@
* @return whether the default browser was successfully set.
*/
boolean setDefaultBrowser(@Nullable String packageName, @UserIdInt int userId);
+
+ /**
+ * Set the package name of the default browser asynchronously.
+ *
+ * @param packageName package name of the default browser, or {@code null} to remove
+ * @param userId the user id
+ */
+ void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId);
}
/**
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 4db7d0a..a006f23 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -3756,6 +3756,12 @@
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 +6408,7 @@
this.pastSigningCertificates = in.createTypedArray(Signature.CREATOR);
}
- public static final Creator<SigningDetails> CREATOR = new Creator<SigningDetails>() {
+ public static final @android.annotation.NonNull Creator<SigningDetails> CREATOR = new Creator<SigningDetails>() {
@Override
public SigningDetails createFromParcel(Parcel source) {
if (source.readBoolean()) {
@@ -8438,6 +8444,21 @@
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 +8473,7 @@
// 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 d3e86a3..b0fecfa 100644
--- a/core/java/android/content/pm/PackageStats.java
+++ b/core/java/android/content/pm/PackageStats.java
@@ -79,7 +79,7 @@
/** Size of the package's OBBs placed on external media. */
public long externalObbSize;
- public static final Parcelable.Creator<PackageStats> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PackageStats> CREATOR
= new Parcelable.Creator<PackageStats>() {
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 7e49d7d..11c9a7d 100644
--- a/core/java/android/content/pm/PathPermission.java
+++ b/core/java/android/content/pm/PathPermission.java
@@ -55,7 +55,7 @@
mWritePermission = src.readString();
}
- public static final Parcelable.Creator<PathPermission> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PathPermission> CREATOR
= new Parcelable.Creator<PathPermission>() {
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 f21612a..3a87eca 100644
--- a/core/java/android/content/pm/PermissionGroupInfo.java
+++ b/core/java/android/content/pm/PermissionGroupInfo.java
@@ -166,7 +166,7 @@
dest.writeInt(priority);
}
- public static final Creator<PermissionGroupInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<PermissionGroupInfo> CREATOR =
new Creator<PermissionGroupInfo>() {
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 e245234..b093867 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -551,7 +551,7 @@
return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APPOP) != 0;
}
- public static final Creator<PermissionInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<PermissionInfo> CREATOR =
new Creator<PermissionInfo>() {
@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 f06a628..07d42dc 100644
--- a/core/java/android/content/pm/ProviderInfo.java
+++ b/core/java/android/content/pm/ProviderInfo.java
@@ -158,7 +158,7 @@
out.writeInt(isSyncable ? 1 : 0);
}
- public static final Parcelable.Creator<ProviderInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ProviderInfo> CREATOR
= new Parcelable.Creator<ProviderInfo>() {
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 894de94..1734182 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -445,7 +445,7 @@
dest.writeInt(isInstantAppAvailable ? 1 : 0);
}
- public static final Creator<ResolveInfo> CREATOR
+ public static final @android.annotation.NonNull Creator<ResolveInfo> CREATOR
= new Creator<ResolveInfo>() {
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 4a2f800..cd40c95 100644
--- a/core/java/android/content/pm/ServiceInfo.java
+++ b/core/java/android/content/pm/ServiceInfo.java
@@ -217,7 +217,7 @@
dest.writeInt(mForegroundServiceType);
}
- public static final Creator<ServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ServiceInfo> CREATOR =
new Creator<ServiceInfo>() {
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 35609c9..13c49a0 100644
--- a/core/java/android/content/pm/SharedLibraryInfo.java
+++ b/core/java/android/content/pm/SharedLibraryInfo.java
@@ -342,7 +342,7 @@
}
}
- public static final Parcelable.Creator<SharedLibraryInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SharedLibraryInfo> CREATOR =
new Parcelable.Creator<SharedLibraryInfo>() {
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 e674b8b..d5273db 100644
--- a/core/java/android/content/pm/ShortcutInfo.java
+++ b/core/java/android/content/pm/ShortcutInfo.java
@@ -2050,7 +2050,7 @@
dest.writeParcelableArray(mPersons, flags);
}
- public static final Creator<ShortcutInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ShortcutInfo> CREATOR =
new Creator<ShortcutInfo>() {
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 bd327b0..2287243 100644
--- a/core/java/android/content/pm/ShortcutManager.java
+++ b/core/java/android/content/pm/ShortcutManager.java
@@ -624,7 +624,7 @@
dest.writeParcelable(mTargetComponent, flags);
}
- public static final Parcelable.Creator<ShareShortcutInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ShareShortcutInfo> CREATOR =
new Parcelable.Creator<ShareShortcutInfo>() {
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 349bb69..25a4dca 100644
--- a/core/java/android/content/pm/Signature.java
+++ b/core/java/android/content/pm/Signature.java
@@ -262,7 +262,7 @@
dest.writeByteArray(mSignature);
}
- public static final Parcelable.Creator<Signature> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Signature> CREATOR
= new Parcelable.Creator<Signature>() {
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 ef87403..d14be9c 100644
--- a/core/java/android/content/pm/SigningInfo.java
+++ b/core/java/android/content/pm/SigningInfo.java
@@ -124,7 +124,7 @@
mSigningDetails.writeToParcel(dest, parcelableFlags);
}
- public static final Parcelable.Creator<SigningInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SigningInfo> CREATOR =
new Parcelable.Creator<SigningInfo>() {
@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 53b52f5..db8f8c2 100644
--- a/core/java/android/content/pm/SuspendDialogInfo.java
+++ b/core/java/android/content/pm/SuspendDialogInfo.java
@@ -261,7 +261,7 @@
mNeutralButtonTextResId = b.mNeutralButtonTextResId;
}
- public static final Creator<SuspendDialogInfo> CREATOR = new Creator<SuspendDialogInfo>() {
+ public static final @android.annotation.NonNull Creator<SuspendDialogInfo> CREATOR = new Creator<SuspendDialogInfo>() {
@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 b75ed35..2b1b32e 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -289,7 +289,7 @@
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<UserInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<UserInfo> CREATOR
= new Parcelable.Creator<UserInfo>() {
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 f90d295..f072167 100644
--- a/core/java/android/content/pm/VerificationParams.java
+++ b/core/java/android/content/pm/VerificationParams.java
@@ -198,7 +198,7 @@
mInstallerUid = source.readInt();
}
- public static final Parcelable.Creator<VerificationParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VerificationParams> CREATOR =
new Parcelable.Creator<VerificationParams>() {
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 90be6f31..f29aaec 100644
--- a/core/java/android/content/pm/VerifierDeviceIdentity.java
+++ b/core/java/android/content/pm/VerifierDeviceIdentity.java
@@ -230,7 +230,7 @@
dest.writeLong(mIdentity);
}
- public static final Parcelable.Creator<VerifierDeviceIdentity> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VerifierDeviceIdentity> CREATOR
= new Parcelable.Creator<VerifierDeviceIdentity>() {
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 b4e72e6..224ca62 100644
--- a/core/java/android/content/pm/VerifierInfo.java
+++ b/core/java/android/content/pm/VerifierInfo.java
@@ -72,7 +72,7 @@
dest.writeSerializable(publicKey);
}
- public static final Parcelable.Creator<VerifierInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VerifierInfo> CREATOR
= new Parcelable.Creator<VerifierInfo>() {
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 3953466..3e22eb2 100644
--- a/core/java/android/content/pm/VersionedPackage.java
+++ b/core/java/android/content/pm/VersionedPackage.java
@@ -106,7 +106,7 @@
parcel.writeLong(mVersionCode);
}
- public static final Creator<VersionedPackage> CREATOR = new Creator<VersionedPackage>() {
+ public static final @android.annotation.NonNull Creator<VersionedPackage> CREATOR = new Creator<VersionedPackage>() {
@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 9fa863c..97312c44 100644
--- a/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java
+++ b/core/java/android/content/pm/permission/RuntimePermissionPresentationInfo.java
@@ -101,7 +101,7 @@
parcel.writeInt(mFlags);
}
- public static final Creator<RuntimePermissionPresentationInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RuntimePermissionPresentationInfo> CREATOR =
new Creator<RuntimePermissionPresentationInfo>() {
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 b6cbf08..2ba5579 100644
--- a/core/java/android/content/res/AssetFileDescriptor.java
+++ b/core/java/android/content/res/AssetFileDescriptor.java
@@ -370,7 +370,7 @@
}
}
- public static final Parcelable.Creator<AssetFileDescriptor> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AssetFileDescriptor> CREATOR
= new Parcelable.Creator<AssetFileDescriptor>() {
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 16b9726..b5b097b 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -727,7 +727,7 @@
dest.writeIntArray(mColors);
}
- public static final Parcelable.Creator<ColorStateList> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ColorStateList> CREATOR =
new Parcelable.Creator<ColorStateList>() {
@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 7d101b8..a99a0b5 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -613,7 +613,7 @@
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public static final Parcelable.Creator<CompatibilityInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<CompatibilityInfo> CREATOR
= new Parcelable.Creator<CompatibilityInfo>() {
@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 8a92017..8b02cae 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -1829,7 +1829,7 @@
seq = source.readInt();
}
- public static final Parcelable.Creator<Configuration> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Configuration> CREATOR
= new Parcelable.Creator<Configuration>() {
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 1d10b4f..8af27ca 100644
--- a/core/java/android/content/res/ObbInfo.java
+++ b/core/java/android/content/res/ObbInfo.java
@@ -88,7 +88,7 @@
dest.writeByteArray(salt);
}
- public static final Parcelable.Creator<ObbInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ObbInfo> CREATOR
= new Parcelable.Creator<ObbInfo>() {
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 a2ae994..c855d45 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -1782,10 +1782,16 @@
* @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 da064c9..565cd33 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -1507,6 +1507,7 @@
* @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 7e5532c..03810f5 100644
--- a/core/java/android/content/rollback/PackageRollbackInfo.java
+++ b/core/java/android/content/rollback/PackageRollbackInfo.java
@@ -208,7 +208,7 @@
out.writeBoolean(mIsApex);
}
- public static final Parcelable.Creator<PackageRollbackInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PackageRollbackInfo> CREATOR =
new Parcelable.Creator<PackageRollbackInfo>() {
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 0cde6ba..29b99e0 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 @@
private final List<VersionedPackage> mCausePackages;
private final boolean mIsStaged;
- private final int mCommittedSessionId;
-
- /** @hide */
- public RollbackInfo(int rollbackId, List<PackageRollbackInfo> packages, boolean isStaged) {
- this(rollbackId, packages, isStaged, Collections.emptyList(),
- PackageInstaller.SessionInfo.INVALID_ID);
- }
+ private int mCommittedSessionId;
/** @hide */
public RollbackInfo(int rollbackId, List<PackageRollbackInfo> packages, boolean isStaged,
@@ -101,6 +93,14 @@
}
/**
+ * 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.
* This is only applicable for rollbacks that have been committed.
@@ -123,7 +123,7 @@
out.writeInt(mCommittedSessionId);
}
- public static final Parcelable.Creator<RollbackInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RollbackInfo> CREATOR =
new Parcelable.Creator<RollbackInfo>() {
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 2788f82..c043491 100644
--- a/core/java/android/content/rollback/RollbackManager.java
+++ b/core/java/android/content/rollback/RollbackManager.java
@@ -187,7 +187,8 @@
/**
* 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 c1e5e63..80a0319 100644
--- a/core/java/android/database/BulkCursorDescriptor.java
+++ b/core/java/android/database/BulkCursorDescriptor.java
@@ -26,7 +26,7 @@
* {@hide}
*/
public final class BulkCursorDescriptor implements Parcelable {
- public static final Parcelable.Creator<BulkCursorDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BulkCursorDescriptor> CREATOR =
new Parcelable.Creator<BulkCursorDescriptor>() {
@Override
public BulkCursorDescriptor createFromParcel(Parcel in) {
diff --git a/core/java/android/database/BulkCursorNative.java b/core/java/android/database/BulkCursorNative.java
index d3c11e7..77a13cf 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 @@
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 1379138..2afb755 100644
--- a/core/java/android/database/Cursor.java
+++ b/core/java/android/database/Cursor.java
@@ -17,6 +17,7 @@
package android.database;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.ContentResolver;
import android.net.Uri;
import android.os.Bundle;
@@ -473,7 +474,7 @@
* ContentResolver.registerContentObserver} to find out about changes to this Cursor's
* data. May be null if no notification URI has been set.
*/
- default List<Uri> getNotificationUris() {
+ default @Nullable List<Uri> getNotificationUris() {
final Uri notifyUri = getNotificationUri();
return notifyUri == null ? null : Arrays.asList(notifyUri);
}
diff --git a/core/java/android/database/CursorWindow.java b/core/java/android/database/CursorWindow.java
index d9443d9..44bd883 100644
--- a/core/java/android/database/CursorWindow.java
+++ b/core/java/android/database/CursorWindow.java
@@ -709,7 +709,7 @@
}
}
- public static final Parcelable.Creator<CursorWindow> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<CursorWindow> CREATOR
= new Parcelable.Creator<CursorWindow>() {
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 dffbd89..caf3e93 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -2655,26 +2655,24 @@
* Sets the maximum number of milliseconds that SQLite connection is allowed to be idle
* before it is closed and removed from the pool.
*
- * <p>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.
+ * <p><b>DO NOT USE</b> this method.
+ * This feature has negative side effects that are very hard to foresee.
+ * <p>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.
+ * <b>However</b> the side effect is it <b>will reset all of SQLite's per-connection
+ * states</b>, which are typically modified with a {@code PRAGMA} statement, and
+ * these states <b>will not be restored</b> 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 8163c4d..62cec0e 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -267,8 +267,8 @@
* <p>This method should be called from the constructor of the subclass,
* before opening the database
*
- * <p>DO NOT USE this method unless you fully understand the implication
- * of what it does.
+ * <p><b>DO NOT USE</b> 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 @@
*
* @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 03e8507..a73a719 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -89,7 +89,7 @@
*
* @return the list of tables being queried
*/
- public String getTables() {
+ public @Nullable String getTables() {
return mTables;
}
@@ -101,7 +101,7 @@
*
* @param inTables the list of tables to query on
*/
- public void setTables(String inTables) {
+ public void setTables(@Nullable String inTables) {
mTables = inTables;
}
@@ -170,7 +170,7 @@
*
* @param columnMap maps from the user column names to the database column names
*/
- public void setProjectionMap(Map<String, String> columnMap) {
+ public void setProjectionMap(@Nullable Map<String, String> columnMap) {
mProjectionMap = columnMap;
}
@@ -178,7 +178,7 @@
* Gets the projection map for the query, as last configured by
* {@link #setProjectionMap(Map)}.
*/
- public Map<String, String> getProjectionMap() {
+ public @Nullable Map<String, String> getProjectionMap() {
return mProjectionMap;
}
@@ -189,7 +189,7 @@
*
* @hide
*/
- public void setProjectionGreylist(List<Pattern> projectionGreylist) {
+ public void setProjectionGreylist(@Nullable List<Pattern> projectionGreylist) {
mProjectionGreylist = projectionGreylist;
}
@@ -199,7 +199,7 @@
*
* @hide
*/
- public List<Pattern> getProjectionGreylist() {
+ public @Nullable List<Pattern> getProjectionGreylist() {
return mProjectionGreylist;
}
@@ -210,7 +210,7 @@
*
* @param factory the factory to use.
*/
- public void setCursorFactory(SQLiteDatabase.CursorFactory factory) {
+ public void setCursorFactory(@Nullable SQLiteDatabase.CursorFactory factory) {
mFactory = factory;
}
@@ -218,7 +218,7 @@
* Sets the cursor factory to be used for the query, as last configured by
* {@link #setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory)}.
*/
- public SQLiteDatabase.CursorFactory getCursorFactory() {
+ public @Nullable SQLiteDatabase.CursorFactory getCursorFactory() {
return mFactory;
}
diff --git a/core/java/android/gesture/Gesture.java b/core/java/android/gesture/Gesture.java
index c6a2a87..08920c1 100644
--- a/core/java/android/gesture/Gesture.java
+++ b/core/java/android/gesture/Gesture.java
@@ -280,7 +280,7 @@
return gesture;
}
- public static final Parcelable.Creator<Gesture> CREATOR = new Parcelable.Creator<Gesture>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Gesture> CREATOR = new Parcelable.Creator<Gesture>() {
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 53da0ce..072be50 100644
--- a/core/java/android/hardware/CameraInfo.java
+++ b/core/java/android/hardware/CameraInfo.java
@@ -45,7 +45,7 @@
info.orientation = in.readInt();
}
- public static final Parcelable.Creator<CameraInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CameraInfo> CREATOR =
new Parcelable.Creator<CameraInfo>() {
@Override
public CameraInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/CameraStatus.java b/core/java/android/hardware/CameraStatus.java
index bc97e38..08b5b77 100644
--- a/core/java/android/hardware/CameraStatus.java
+++ b/core/java/android/hardware/CameraStatus.java
@@ -47,7 +47,7 @@
status = in.readInt();
}
- public static final Parcelable.Creator<CameraStatus> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CameraStatus> CREATOR =
new Parcelable.Creator<CameraStatus>() {
@Override
public CameraStatus createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/HardwareBuffer.java b/core/java/android/hardware/HardwareBuffer.java
index 87cffc9..c569e05 100644
--- a/core/java/android/hardware/HardwareBuffer.java
+++ b/core/java/android/hardware/HardwareBuffer.java
@@ -376,7 +376,7 @@
nWriteHardwareBufferToParcel(mNativeObject, dest);
}
- public static final Parcelable.Creator<HardwareBuffer> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<HardwareBuffer> CREATOR =
new Parcelable.Creator<HardwareBuffer>() {
public HardwareBuffer createFromParcel(Parcel in) {
long nativeObject = nReadHardwareBufferFromParcel(in);
diff --git a/core/java/android/hardware/biometrics/BiometricPrompt.java b/core/java/android/hardware/biometrics/BiometricPrompt.java
index baf972b..c64e48f 100644
--- a/core/java/android/hardware/biometrics/BiometricPrompt.java
+++ b/core/java/android/hardware/biometrics/BiometricPrompt.java
@@ -139,7 +139,7 @@
* @param title
* @return
*/
- public Builder setTitle(@NonNull CharSequence title) {
+ @NonNull public Builder setTitle(@NonNull CharSequence title) {
mBundle.putCharSequence(KEY_TITLE, title);
return this;
}
@@ -150,7 +150,7 @@
* @hide
*/
@RequiresPermission(USE_BIOMETRIC_INTERNAL)
- public Builder setUseDefaultTitle() {
+ @NonNull public Builder setUseDefaultTitle() {
mBundle.putBoolean(KEY_USE_DEFAULT_TITLE, true);
return this;
}
@@ -160,7 +160,7 @@
* @param subtitle
* @return
*/
- public Builder setSubtitle(@NonNull CharSequence subtitle) {
+ @NonNull public Builder setSubtitle(@NonNull CharSequence subtitle) {
mBundle.putCharSequence(KEY_SUBTITLE, subtitle);
return this;
}
@@ -170,7 +170,7 @@
* @param description
* @return
*/
- public Builder setDescription(@NonNull CharSequence description) {
+ @NonNull public Builder setDescription(@NonNull CharSequence description) {
mBundle.putCharSequence(KEY_DESCRIPTION, description);
return this;
}
@@ -182,7 +182,7 @@
* @return
* @hide
*/
- public Builder setPositiveButton(@NonNull CharSequence text,
+ @NonNull public Builder setPositiveButton(@NonNull CharSequence text,
@NonNull @CallbackExecutor Executor executor,
@NonNull DialogInterface.OnClickListener listener) {
if (TextUtils.isEmpty(text)) {
@@ -210,7 +210,7 @@
* @param text
* @return
*/
- public Builder setNegativeButton(@NonNull CharSequence text,
+ @NonNull public Builder setNegativeButton(@NonNull CharSequence text,
@NonNull @CallbackExecutor Executor executor,
@NonNull DialogInterface.OnClickListener listener) {
if (TextUtils.isEmpty(text)) {
@@ -245,7 +245,7 @@
*
* @param requireConfirmation
*/
- public Builder setRequireConfirmation(boolean requireConfirmation) {
+ @NonNull public Builder setRequireConfirmation(boolean requireConfirmation) {
mBundle.putBoolean(KEY_REQUIRE_CONFIRMATION, requireConfirmation);
return this;
}
@@ -255,7 +255,8 @@
* option to authenticate with their device PIN, pattern, or password. Developers should
* first check {@link KeyguardManager#isDeviceSecure()} before enabling this. If the device
* is not secure, {@link BiometricPrompt#BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL} will be
- * returned in {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)}}
+ * returned in {@link AuthenticationCallback#onAuthenticationError(int, CharSequence)}}.
+ * Defaults to false.
*
* Note that {@link #setNegativeButton(CharSequence, Executor,
* DialogInterface.OnClickListener)} should not be set if this is set to true.
@@ -264,7 +265,7 @@
* credentials (PIN, pattern, or password).
* @return
*/
- public Builder setAllowDeviceCredential(boolean enable) {
+ @NonNull public Builder setAllowDeviceCredential(boolean enable) {
mBundle.putBoolean(KEY_ALLOW_DEVICE_CREDENTIAL, enable);
return this;
}
@@ -274,7 +275,7 @@
* @return a {@link BiometricPrompt}
* @throws IllegalArgumentException if any of the required fields are not set.
*/
- public BiometricPrompt build() {
+ @NonNull public BiometricPrompt build() {
final CharSequence title = mBundle.getCharSequence(KEY_TITLE);
final CharSequence negative = mBundle.getCharSequence(KEY_NEGATIVE_TEXT);
final boolean useDefaultTitle = mBundle.getBoolean(KEY_USE_DEFAULT_TITLE);
@@ -616,8 +617,15 @@
mExecutor = executor;
mAuthenticationCallback = callback;
final long sessionId = crypto != null ? crypto.getOpId() : 0;
- mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver,
- mContext.getOpPackageName(), mBundle);
+ if (BiometricManager.hasBiometrics(mContext)) {
+ mService.authenticate(mToken, sessionId, userId, mBiometricServiceReceiver,
+ mContext.getOpPackageName(), mBundle);
+ } else {
+ mExecutor.execute(() -> {
+ callback.onAuthenticationError(BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT,
+ mContext.getString(R.string.biometric_error_hw_unavailable));
+ });
+ }
} catch (RemoteException e) {
Log.e(TAG, "Remote exception while authenticating", e);
mExecutor.execute(() -> {
diff --git a/core/java/android/hardware/biometrics/BiometricSourceType.java b/core/java/android/hardware/biometrics/BiometricSourceType.java
index 4a08cf2..f35958f 100644
--- a/core/java/android/hardware/biometrics/BiometricSourceType.java
+++ b/core/java/android/hardware/biometrics/BiometricSourceType.java
@@ -37,7 +37,7 @@
dest.writeString(name());
}
- public static final Creator<BiometricSourceType> CREATOR = new Creator<BiometricSourceType>() {
+ public static final @android.annotation.NonNull Creator<BiometricSourceType> CREATOR = new Creator<BiometricSourceType>() {
@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 0e4ff78..f7b7ef2 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -682,6 +682,7 @@
* @see CaptureRequest#COLOR_CORRECTION_ABERRATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES =
new Key<int[]>("android.colorCorrection.availableAberrationModes", int[].class);
@@ -700,6 +701,7 @@
* @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES =
new Key<int[]>("android.control.aeAvailableAntibandingModes", int[].class);
@@ -725,6 +727,7 @@
* @see CaptureRequest#CONTROL_AE_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AE_AVAILABLE_MODES =
new Key<int[]>("android.control.aeAvailableModes", int[].class);
@@ -764,6 +767,7 @@
* @see CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES =
new Key<android.util.Range<Integer>[]>("android.control.aeAvailableTargetFpsRanges", new TypeReference<android.util.Range<Integer>[]>() {{ }});
@@ -784,6 +788,7 @@
* @see CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_COMPENSATION_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeCompensationRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -801,6 +806,7 @@
* @see CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
*/
@PublicKey
+ @NonNull
public static final Key<Rational> CONTROL_AE_COMPENSATION_STEP =
new Key<Rational>("android.control.aeCompensationStep", Rational.class);
@@ -825,6 +831,7 @@
* @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AF_AVAILABLE_MODES =
new Key<int[]>("android.control.afAvailableModes", int[].class);
@@ -848,6 +855,7 @@
* @see CaptureRequest#CONTROL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_EFFECTS =
new Key<int[]>("android.control.availableEffects", int[].class);
@@ -871,6 +879,7 @@
* @see CameraCharacteristics#STATISTICS_INFO_MAX_FACE_COUNT
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_SCENE_MODES =
new Key<int[]>("android.control.availableSceneModes", int[].class);
@@ -885,6 +894,7 @@
* @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES =
new Key<int[]>("android.control.availableVideoStabilizationModes", int[].class);
@@ -909,6 +919,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AWB_AVAILABLE_MODES =
new Key<int[]>("android.control.awbAvailableModes", int[].class);
@@ -945,6 +956,7 @@
* @see CaptureRequest#CONTROL_AE_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AE =
new Key<Integer>("android.control.maxRegionsAe", int.class);
@@ -961,6 +973,7 @@
* @see CaptureRequest#CONTROL_AWB_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AWB =
new Key<Integer>("android.control.maxRegionsAwb", int.class);
@@ -977,6 +990,7 @@
* @see CaptureRequest#CONTROL_AF_REGIONS
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> CONTROL_MAX_REGIONS_AF =
new Key<Integer>("android.control.maxRegionsAf", int.class);
@@ -1025,7 +1039,7 @@
* normal capture session, or it will cause request error.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>For each configuration, the fps_max >= 120fps.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1046,6 +1060,7 @@
* @see CaptureRequest#CONTROL_AE_LOCK
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK_AVAILABLE =
new Key<Boolean>("android.control.aeLockAvailable", boolean.class);
@@ -1058,6 +1073,7 @@
* @see CaptureRequest#CONTROL_AWB_LOCK
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK_AVAILABLE =
new Key<Boolean>("android.control.awbLockAvailable", boolean.class);
@@ -1074,6 +1090,7 @@
* @see CaptureRequest#CONTROL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> CONTROL_AVAILABLE_MODES =
new Key<int[]>("android.control.availableModes", int[].class);
@@ -1088,12 +1105,13 @@
* present, and if a device does not support post RAW sensitivity boost, it will
* list <code>(100, 100)</code> in this key.</p>
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE =
new Key<android.util.Range<Integer>>("android.control.postRawSensitivityBoostRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -1105,7 +1123,7 @@
* list FAST.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#EDGE_MODE android.edge.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1114,6 +1132,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<int[]> EDGE_AVAILABLE_EDGE_MODES =
new Key<int[]>("android.edge.availableEdgeModes", int[].class);
@@ -1126,6 +1145,7 @@
* This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> FLASH_INFO_AVAILABLE =
new Key<Boolean>("android.flash.info.available", boolean.class);
@@ -1135,11 +1155,12 @@
* <p>FULL mode camera devices will always support FAST.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#HOT_PIXEL_MODE android.hotPixel.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#HOT_PIXEL_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES =
new Key<int[]>("android.hotPixel.availableHotPixelModes", int[].class);
@@ -1167,6 +1188,7 @@
* @see CaptureRequest#JPEG_THUMBNAIL_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES =
new Key<android.util.Size[]>("android.jpeg.availableThumbnailSizes", android.util.Size[].class);
@@ -1178,7 +1200,7 @@
* <p>If the camera device supports a variable aperture, the aperture values
* in this list will be sorted in ascending order.</p>
* <p><b>Units</b>: The aperture f-number</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1187,6 +1209,7 @@
* @see CaptureRequest#LENS_APERTURE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_APERTURES =
new Key<float[]>("android.lens.info.availableApertures", float[].class);
@@ -1199,7 +1222,7 @@
* <p><b>Units</b>: Exposure value (EV)</p>
* <p><b>Range of valid values:</b><br></p>
* <p>Values are >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1208,6 +1231,7 @@
* @see CaptureRequest#LENS_FILTER_DENSITY
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES =
new Key<float[]>("android.lens.info.availableFilterDensities", float[].class);
@@ -1226,6 +1250,7 @@
* @see CaptureRequest#LENS_FOCAL_LENGTH
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS =
new Key<float[]>("android.lens.info.availableFocalLengths", float[].class);
@@ -1236,7 +1261,7 @@
* contain only OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE android.lens.opticalStabilizationMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1245,6 +1270,7 @@
* @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION =
new Key<int[]>("android.lens.info.availableOpticalStabilization", int[].class);
@@ -1256,7 +1282,7 @@
* <p><b>Range of valid values:</b><br>
* If lens is fixed focus, >= 0. If lens has focuser unit, the value is
* within <code>(0.0f, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}]</code></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1267,6 +1293,7 @@
* @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_INFO_HYPERFOCAL_DISTANCE =
new Key<Float>("android.lens.info.hyperfocalDistance", float.class);
@@ -1278,7 +1305,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1288,6 +1315,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE =
new Key<Float>("android.lens.info.minimumFocusDistance", float.class);
@@ -1297,7 +1325,7 @@
* must be smaller than 64x64.</p>
* <p><b>Range of valid values:</b><br>
* Both values >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1329,7 +1357,7 @@
* <li>{@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE APPROXIMATE}</li>
* <li>{@link #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED CALIBRATED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1344,6 +1372,7 @@
* @see #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION =
new Key<Integer>("android.lens.info.focusDistanceCalibration", int.class);
@@ -1362,6 +1391,7 @@
* @see #LENS_FACING_EXTERNAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_FACING =
new Key<Integer>("android.lens.facing", int.class);
@@ -1396,10 +1426,11 @@
* <code>p'</code> is in the camera-oriented coordinate system.</p>
* <p><b>Units</b>:
* Quaternion coefficients</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_ROTATION =
new Key<float[]>("android.lens.poseRotation", float[].class);
@@ -1432,7 +1463,7 @@
* the center of the primary gyroscope on the device. The axis definitions are the same as
* with PRIMARY_CAMERA.</p>
* <p><b>Units</b>: Meters</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -1441,6 +1472,7 @@
* @see CameraCharacteristics#LENS_POSE_ROTATION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_TRANSLATION =
new Key<float[]>("android.lens.poseTranslation", float[].class);
@@ -1504,7 +1536,7 @@
* Pixels in the
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* coordinate system.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -1514,6 +1546,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INTRINSIC_CALIBRATION =
new Key<float[]>("android.lens.intrinsicCalibration", float[].class);
@@ -1548,7 +1581,7 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
@@ -1561,6 +1594,7 @@
*/
@Deprecated
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_RADIAL_DISTORTION =
new Key<float[]>("android.lens.radialDistortion", float[].class);
@@ -1573,7 +1607,7 @@
* <li>{@link #LENS_POSE_REFERENCE_PRIMARY_CAMERA PRIMARY_CAMERA}</li>
* <li>{@link #LENS_POSE_REFERENCE_GYROSCOPE GYROSCOPE}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_POSE_TRANSLATION
@@ -1581,6 +1615,7 @@
* @see #LENS_POSE_REFERENCE_GYROSCOPE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_POSE_REFERENCE =
new Key<Integer>("android.lens.poseReference", int.class);
@@ -1615,13 +1650,14 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
* @see CameraCharacteristics#LENS_RADIAL_DISTORTION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_DISTORTION =
new Key<float[]>("android.lens.distortion", float[].class);
@@ -1634,7 +1670,7 @@
* <p>Legacy-capability camera devices will only support FAST mode.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1643,6 +1679,7 @@
* @see CaptureRequest#NOISE_REDUCTION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES =
new Key<int[]>("android.noiseReduction.availableNoiseReductionModes", int[].class);
@@ -1655,7 +1692,7 @@
* future versions of camera service. This quirk will stop
* working at that point; DO NOT USE without careful
* consideration of future support.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer; replaced by better partials mechanism</p>
@@ -1728,6 +1765,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_RAW =
new Key<Integer>("android.request.maxNumOutputRaw", int.class);
@@ -1764,6 +1802,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_PROC =
new Key<Integer>("android.request.maxNumOutputProc", int.class);
@@ -1790,6 +1829,7 @@
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING =
new Key<Integer>("android.request.maxNumOutputProcStalling", int.class);
@@ -1809,7 +1849,7 @@
* should be JPEG.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>0 or 1.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1817,6 +1857,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REQUEST_MAX_NUM_INPUT_STREAMS =
new Key<Integer>("android.request.maxNumInputStreams", int.class);
@@ -1841,6 +1882,7 @@
* @see CaptureResult#REQUEST_PIPELINE_DEPTH
*/
@PublicKey
+ @NonNull
public static final Key<Byte> REQUEST_PIPELINE_MAX_DEPTH =
new Key<Byte>("android.request.pipelineMaxDepth", byte.class);
@@ -1861,9 +1903,10 @@
* partial results.</p>
* <p><b>Range of valid values:</b><br>
* >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REQUEST_PARTIAL_RESULT_COUNT =
new Key<Integer>("android.request.partialResultCount", int.class);
@@ -1923,6 +1966,7 @@
* @see #REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
*/
@PublicKey
+ @NonNull
public static final Key<int[]> REQUEST_AVAILABLE_CAPABILITIES =
new Key<int[]>("android.request.availableCapabilities", int[].class);
@@ -2036,7 +2080,7 @@
* {@link CaptureRequest.Builder#getPhysicalCameraKey }. Capture requests that contain
* individual physical device requests must be built via
* {@link android.hardware.camera2.CameraDevice#createCaptureRequest(int, Set)}.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2067,7 +2111,7 @@
* camera device for output streams.</p>
* <p>All camera devices will support JPEG and YUV_420_888 formats.</p>
* <p>When set to YUV_420_888, application can access the YUV420 data directly.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2089,7 +2133,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* TODO: Remove property.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2105,7 +2149,7 @@
* sensor maximum resolution (defined by {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}).</p>
* <p><b>Range of valid values:</b><br>
* TODO: Remove property.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @deprecated
@@ -2135,6 +2179,7 @@
* @see CaptureRequest#SCALER_CROP_REGION
*/
@PublicKey
+ @NonNull
public static final Key<Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM =
new Key<Float>("android.scaler.availableMaxDigitalZoom", float.class);
@@ -2148,7 +2193,7 @@
* <p>When multiple streams are configured, the minimum frame duration will
* be >= max(individual stream min durations).</p>
* <p><b>Units</b>: Nanoseconds</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2172,7 +2217,7 @@
* can provide.</p>
* <p>Please reference the documentation for the image data destination to
* check if it limits the maximum size for image data.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -2257,7 +2302,7 @@
* </tr>
* </tbody>
* </table>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
* @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
@@ -2551,6 +2596,7 @@
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP =
new Key<android.hardware.camera2.params.StreamConfigurationMap>("android.scaler.streamConfigurationMap", android.hardware.camera2.params.StreamConfigurationMap.class);
@@ -2579,6 +2625,7 @@
* @see #SCALER_CROPPING_TYPE_FREEFORM
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SCALER_CROPPING_TYPE =
new Key<Integer>("android.scaler.croppingType", int.class);
@@ -2591,7 +2638,7 @@
* power and performance efficient for specific use cases. For more information about
* retrieving the suggestions see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.RecommendedStreamConfiguration[]> SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS =
@@ -2607,7 +2654,7 @@
* If set, the information will be available in the ZERO_SHUTTER_LAG recommended stream
* configuration see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.ReprocessFormatsMap> SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP =
@@ -2634,7 +2681,7 @@
* physical camera not independently exposed in
* {@link android.hardware.camera2.CameraManager#getCameraIdList } or is not backward
* compatible.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2642,6 +2689,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS =
new Key<android.hardware.camera2.params.MandatoryStreamCombination[]>("android.scaler.mandatoryStreamCombinations", android.hardware.camera2.params.MandatoryStreamCombination[].class);
@@ -2681,6 +2729,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE =
new Key<android.graphics.Rect>("android.sensor.info.activeArraySize", android.graphics.Rect.class);
@@ -2691,7 +2740,7 @@
* as defined in ISO 12232:2006.</p>
* <p><b>Range of valid values:</b><br>
* Min <= 100, Max >= 800</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2700,6 +2749,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> SENSOR_INFO_SENSITIVITY_RANGE =
new Key<android.util.Range<Integer>>("android.sensor.info.sensitivityRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -2718,7 +2768,7 @@
* <li>{@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO MONO}</li>
* <li>{@link #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR NIR}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2733,6 +2783,7 @@
* @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT =
new Key<Integer>("android.sensor.info.colorFilterArrangement", int.class);
@@ -2744,7 +2795,7 @@
* The minimum exposure time will be less than 100 us. For FULL
* capability devices ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL),
* the maximum exposure time will be greater than 100ms.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2753,6 +2804,7 @@
* @see CaptureRequest#SENSOR_EXPOSURE_TIME
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE =
new Key<android.util.Range<Long>>("android.sensor.info.exposureTimeRange", new TypeReference<android.util.Range<Long>>() {{ }});
@@ -2768,7 +2820,7 @@
* <p><b>Range of valid values:</b><br>
* For FULL capability devices
* ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL), at least 100ms.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2777,6 +2829,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_INFO_MAX_FRAME_DURATION =
new Key<Long>("android.sensor.info.maxFrameDuration", long.class);
@@ -2791,6 +2844,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE =
new Key<android.util.SizeF>("android.sensor.info.physicalSize", android.util.SizeF.class);
@@ -2816,6 +2870,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE =
new Key<android.util.Size>("android.sensor.info.pixelArraySize", android.util.Size.class);
@@ -2837,13 +2892,14 @@
* by the camera device, which provides more accurate white level values.</p>
* <p><b>Range of valid values:</b><br>
* > 255 (8-bit output)</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_WHITE_LEVEL =
new Key<Integer>("android.sensor.info.whiteLevel", int.class);
@@ -2863,6 +2919,7 @@
* @see #SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_INFO_TIMESTAMP_SOURCE =
new Key<Integer>("android.sensor.info.timestampSource", int.class);
@@ -2875,11 +2932,12 @@
* See {@link CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_RAW android.request.maxNumOutputRaw} for a list of RAW image formats.</p>
* <p>This key will be <code>null</code> for all devices do not report this information.
* Devices with RAW capability will always report this information in this key.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_RAW
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> SENSOR_INFO_LENS_SHADING_APPLIED =
new Key<Boolean>("android.sensor.info.lensShadingApplied", boolean.class);
@@ -2945,6 +3003,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE =
new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class);
@@ -2986,7 +3045,7 @@
* <li>{@link #SENSOR_REFERENCE_ILLUMINANT1_D50 D50}</li>
* <li>{@link #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN ISO_STUDIO_TUNGSTEN}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1
@@ -3014,6 +3073,7 @@
* @see #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_REFERENCE_ILLUMINANT1 =
new Key<Integer>("android.sensor.referenceIlluminant1", int.class);
@@ -3030,7 +3090,7 @@
* the camera device has RAW capability.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2
@@ -3039,6 +3099,7 @@
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<Byte> SENSOR_REFERENCE_ILLUMINANT2 =
new Key<Byte>("android.sensor.referenceIlluminant2", byte.class);
@@ -3055,12 +3116,13 @@
* ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}).</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.calibrationTransform1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3080,12 +3142,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.calibrationTransform2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3106,12 +3169,13 @@
* (i.e. no chromatic adaptation will be applied by this transform).</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.colorTransform1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3134,12 +3198,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.colorTransform2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3158,12 +3223,13 @@
* CIE XYZ colorspace.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.forwardMatrix1", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3184,12 +3250,13 @@
* illuminant is present.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2 =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.sensor.forwardMatrix2", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -3215,7 +3282,7 @@
* <p>For a MONOCHROME camera device, all of the 2x2 channels must have the same values.</p>
* <p><b>Range of valid values:</b><br>
* >= 0 for each.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
@@ -3224,6 +3291,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN =
new Key<android.hardware.camera2.params.BlackLevelPattern>("android.sensor.blackLevelPattern", android.hardware.camera2.params.BlackLevelPattern.class);
@@ -3234,7 +3302,7 @@
* equal to this, all applied gain must be analog. For
* values above this, the gain applied can be a mix of analog and
* digital.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3243,6 +3311,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_MAX_ANALOG_SENSITIVITY =
new Key<Integer>("android.sensor.maxAnalogSensitivity", int.class);
@@ -3258,6 +3327,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_ORIENTATION =
new Key<Integer>("android.sensor.orientation", int.class);
@@ -3267,11 +3337,12 @@
* <p>Defaults to OFF, and always includes OFF if defined.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES =
new Key<int[]>("android.sensor.availableTestPatternModes", int[].class);
@@ -3291,13 +3362,14 @@
* black level of each captured raw images.</p>
* <p>When this key is reported, the {@link CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL android.sensor.dynamicBlackLevel} and
* {@link CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL android.sensor.dynamicWhiteLevel} will also be reported.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CaptureResult#SENSOR_DYNAMIC_BLACK_LEVEL
* @see CaptureResult#SENSOR_DYNAMIC_WHITE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS =
new Key<android.graphics.Rect[]>("android.sensor.opticalBlackRegions", android.graphics.Rect[].class);
@@ -3314,6 +3386,7 @@
* @see CaptureRequest#SHADING_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SHADING_AVAILABLE_MODES =
new Key<int[]>("android.shading.availableModes", int[].class);
@@ -3328,6 +3401,7 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES =
new Key<int[]>("android.statistics.info.availableFaceDetectModes", int[].class);
@@ -3341,6 +3415,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_INFO_MAX_FACE_COUNT =
new Key<Integer>("android.statistics.info.maxFaceCount", int.class);
@@ -3352,11 +3427,12 @@
* <p>ON is always supported on devices with the RAW capability.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE android.statistics.hotPixelMapMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES =
new Key<boolean[]>("android.statistics.info.availableHotPixelMapModes", boolean[].class);
@@ -3369,11 +3445,12 @@
* LEGACY mode devices will always only support OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES =
new Key<int[]>("android.statistics.info.availableLensShadingMapModes", int[].class);
@@ -3384,11 +3461,12 @@
* contain only OFF.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#STATISTICS_OIS_DATA_MODE android.statistics.oisDataMode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#STATISTICS_OIS_DATA_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES =
new Key<int[]>("android.statistics.info.availableOisDataModes", int[].class);
@@ -3401,7 +3479,7 @@
* <p>The output curves in the result metadata may have a different number
* of points than the input curves, and will represent the actual
* hardware curves used as closely as possible when linearly interpolated.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3410,6 +3488,7 @@
* @see CaptureRequest#TONEMAP_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MAX_CURVE_POINTS =
new Key<Integer>("android.tonemap.maxCurvePoints", int.class);
@@ -3425,7 +3504,7 @@
* <p>This includes all FULL level devices.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3434,6 +3513,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES =
new Key<int[]>("android.tonemap.availableToneMapModes", int[].class);
@@ -3443,7 +3523,7 @@
* <ul>
* <li>{@link #LED_AVAILABLE_LEDS_TRANSMIT TRANSMIT}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @see #LED_AVAILABLE_LEDS_TRANSMIT
* @hide
*/
@@ -3534,6 +3614,7 @@
* @see #INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> INFO_SUPPORTED_HARDWARE_LEVEL =
new Key<Integer>("android.info.supportedHardwareLevel", int.class);
@@ -3543,9 +3624,10 @@
* <p>This can be used in {@link android.media.ExifInterface#TAG_IMAGE_DESCRIPTION TAG_IMAGE_DESCRIPTION}
* in jpeg EXIF. This key may be absent if no version information is available on the
* device.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<String> INFO_VERSION =
new Key<String>("android.info.version", String.class);
@@ -3572,6 +3654,7 @@
* @see #SYNC_MAX_LATENCY_UNKNOWN
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SYNC_MAX_LATENCY =
new Key<Integer>("android.sync.maxLatency", int.class);
@@ -3598,7 +3681,7 @@
* <p><b>Units</b>: Number of frames.</p>
* <p><b>Range of valid values:</b><br>
* <= 4</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3607,6 +3690,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Integer> REPROCESS_MAX_CAPTURE_STALL =
new Key<Integer>("android.reprocess.maxCaptureStall", int.class);
@@ -3625,7 +3709,7 @@
* the format in this list as <code>(HAL_PIXEL_FORMAT_BLOB,
* android.depth.maxDepthSamples, 1, OUTPUT)</code> in addition to
* the entries for HAL_PIXEL_FORMAT_Y16.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3650,7 +3734,7 @@
* android.scaler.availableStallDurations for more details about
* calculating the max frame rate.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3674,7 +3758,7 @@
* <p>All depth output stream formats may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3697,7 +3781,7 @@
* need to emit a specific pattern or wavelength of light to
* measure depth values, which causes the color image to be
* corrupted during depth measurement.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3705,6 +3789,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> DEPTH_DEPTH_IS_EXCLUSIVE =
new Key<Boolean>("android.depth.depthIsExclusive", boolean.class);
@@ -3717,7 +3802,7 @@
* power and performance efficient for specific use cases. For more information about
* retrieving the suggestions see
* {@link android.hardware.camera2.CameraCharacteristics#getRecommendedStreamConfigurationMap }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.RecommendedStreamConfiguration[]> DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS =
@@ -3736,7 +3821,7 @@
* the same aspect ratio can have dynamic depth dataspace
* stream configuration. {@link CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE android.depth.depthIsExclusive} also
* needs to be set to FALSE.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#DEPTH_DEPTH_IS_EXCLUSIVE
* @hide
@@ -3755,7 +3840,7 @@
* <p>The minimum frame duration of a stream (of a particular format, size)
* is the same regardless of whether the stream is input or output.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS =
@@ -3770,7 +3855,7 @@
* <p>All dynamic depth output streams may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS =
@@ -3785,7 +3870,7 @@
* value of this tag will be ['2', '\0', '3', '\0'].</p>
* <p>The number of physical camera IDs must be no less than 2.</p>
* <p><b>Units</b>: UTF-8 null-terminated string</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3811,7 +3896,7 @@
* <li>{@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE APPROXIMATE}</li>
* <li>{@link #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED CALIBRATED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3821,6 +3906,7 @@
* @see #LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE =
new Key<Integer>("android.logicalMultiCamera.sensorSyncType", int.class);
@@ -3831,11 +3917,12 @@
* All devices that support this API will list both FAST and HIGH_QUALITY.</p>
* <p><b>Range of valid values:</b><br>
* Any value listed in {@link CaptureRequest#DISTORTION_CORRECTION_MODE android.distortionCorrection.mode}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES =
new Key<int[]>("android.distortionCorrection.availableModes", int[].class);
@@ -3849,7 +3936,7 @@
* image format as required by the device's hardware level and capabilities.</p>
* <p>All the static, control, and dynamic metadata tags related to JPEG apply to HEIC formats.
* Configuring JPEG and HEIC streams at the same time is not supported.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3872,7 +3959,7 @@
* android.scaler.availableStallDurations for more details about
* calculating the max frame rate.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3896,7 +3983,7 @@
* <p>All HEIC output stream formats may have a nonzero stall
* duration.</p>
* <p><b>Units</b>: (format, width, height, ns) x n</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3913,4 +4000,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 5250701..da1bfe4 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -493,7 +493,7 @@
return HashCodeHelpers.hashCodeGeneric(mPhysicalCameraSettings, mSurfaceSet, mUserTag);
}
- public static final Parcelable.Creator<CaptureRequest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CaptureRequest> CREATOR =
new Parcelable.Creator<CaptureRequest>() {
@Override
public CaptureRequest createFromParcel(Parcel in) {
@@ -978,7 +978,7 @@
* <li>{@link #COLOR_CORRECTION_MODE_FAST FAST}</li>
* <li>{@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -992,6 +992,7 @@
* @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_MODE =
new Key<Integer>("android.colorCorrection.mode", int.class);
@@ -1010,7 +1011,7 @@
* <p>The valid range of each matrix element varies on different devices, but
* values within [-1.5, 3.0] are guaranteed not to be clipped.</p>
* <p><b>Units</b>: Unitless scale factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1019,6 +1020,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -1037,7 +1039,7 @@
* device allows gains below 1.0, this is usually not recommended because
* this can create color artifacts.</p>
* <p><b>Units</b>: Unitless gain factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1046,6 +1048,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS =
new Key<android.hardware.camera2.params.RggbChannelVector>("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class);
@@ -1078,6 +1081,7 @@
* @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_ABERRATION_MODE =
new Key<Integer>("android.colorCorrection.aberrationMode", int.class);
@@ -1134,6 +1138,7 @@
* @see #CONTROL_AE_ANTIBANDING_MODE_AUTO
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_ANTIBANDING_MODE =
new Key<Integer>("android.control.aeAntibandingMode", int.class);
@@ -1167,6 +1172,7 @@
* @see CaptureResult#CONTROL_AE_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION =
new Key<Integer>("android.control.aeExposureCompensation", int.class);
@@ -1217,6 +1223,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK =
new Key<Boolean>("android.control.aeLock", boolean.class);
@@ -1269,6 +1276,7 @@
* @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_MODE =
new Key<Integer>("android.control.aeMode", int.class);
@@ -1320,7 +1328,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1329,6 +1337,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1349,6 +1358,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_TARGET_FPS_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeTargetFpsRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -1407,7 +1417,7 @@
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}</li>
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1422,6 +1432,7 @@
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_PRECAPTURE_TRIGGER =
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
@@ -1463,6 +1474,7 @@
* @see #CONTROL_AF_MODE_EDOF
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_MODE =
new Key<Integer>("android.control.afMode", int.class);
@@ -1515,7 +1527,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1524,6 +1536,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1561,6 +1574,7 @@
* @see #CONTROL_AF_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_TRIGGER =
new Key<Integer>("android.control.afTrigger", int.class);
@@ -1591,6 +1605,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
@@ -1651,6 +1666,7 @@
* @see #CONTROL_AWB_MODE_SHADE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_MODE =
new Key<Integer>("android.control.awbMode", int.class);
@@ -1703,7 +1719,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1712,6 +1728,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1754,6 +1771,7 @@
* @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_CAPTURE_INTENT =
new Key<Integer>("android.control.captureIntent", int.class);
@@ -1793,6 +1811,7 @@
* @see #CONTROL_EFFECT_MODE_AQUA
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_EFFECT_MODE =
new Key<Integer>("android.control.effectMode", int.class);
@@ -1833,6 +1852,7 @@
* @see #CONTROL_MODE_OFF_KEEP_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_MODE =
new Key<Integer>("android.control.mode", int.class);
@@ -1900,6 +1920,7 @@
* @see #CONTROL_SCENE_MODE_HDR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_SCENE_MODE =
new Key<Integer>("android.control.sceneMode", int.class);
@@ -1943,6 +1964,7 @@
* @see #CONTROL_VIDEO_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_VIDEO_STABILIZATION_MODE =
new Key<Integer>("android.control.videoStabilizationMode", int.class);
@@ -1969,7 +1991,7 @@
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_MODE
@@ -1978,6 +2000,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
@@ -2005,12 +2028,13 @@
* <p>For applications targeting SDK versions older than O, the value of enableZsl in all
* capture templates is always <code>false</code> if present.</p>
* <p>For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
* @see CaptureResult#SENSOR_TIMESTAMP
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_ENABLE_ZSL =
new Key<Boolean>("android.control.enableZsl", boolean.class);
@@ -2045,7 +2069,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2059,6 +2083,7 @@
* @see #EDGE_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> EDGE_MODE =
new Key<Integer>("android.edge.mode", int.class);
@@ -2094,6 +2119,7 @@
* @see #FLASH_MODE_TORCH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_MODE =
new Key<Integer>("android.flash.mode", int.class);
@@ -2110,7 +2136,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
* @see #HOT_PIXEL_MODE_OFF
@@ -2118,6 +2144,7 @@
* @see #HOT_PIXEL_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> HOT_PIXEL_MODE =
new Key<Integer>("android.hotPixel.mode", int.class);
@@ -2130,6 +2157,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.location.Location> JPEG_GPS_LOCATION =
new Key<android.location.Location>("android.jpeg.gpsLocation", android.location.Location.class);
@@ -2211,6 +2239,7 @@
* @see CameraCharacteristics#SENSOR_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<Integer> JPEG_ORIENTATION =
new Key<Integer>("android.jpeg.orientation", int.class);
@@ -2224,6 +2253,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
@@ -2236,6 +2266,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
@@ -2275,6 +2306,7 @@
* @see CaptureRequest#JPEG_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> JPEG_THUMBNAIL_SIZE =
new Key<android.util.Size>("android.jpeg.thumbnailSize", android.util.Size.class);
@@ -2298,7 +2330,7 @@
* <p><b>Units</b>: The f-number (f/N)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2312,6 +2344,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_APERTURE =
new Key<Float>("android.lens.aperture", float.class);
@@ -2332,7 +2365,7 @@
* <p><b>Units</b>: Exposure Value (EV)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2342,6 +2375,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FILTER_DENSITY =
new Key<Float>("android.lens.filterDensity", float.class);
@@ -2367,6 +2401,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCAL_LENGTH =
new Key<Float>("android.lens.focalLength", float.class);
@@ -2387,7 +2422,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2399,6 +2434,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCUS_DISTANCE =
new Key<Float>("android.lens.focusDistance", float.class);
@@ -2429,7 +2465,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2441,6 +2477,7 @@
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_OPTICAL_STABILIZATION_MODE =
new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
@@ -2481,7 +2518,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2496,6 +2533,7 @@
* @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> NOISE_REDUCTION_MODE =
new Key<Integer>("android.noiseReduction.mode", int.class);
@@ -2506,7 +2544,7 @@
* <p><b>Units</b>: arbitrary integer assigned by application</p>
* <p><b>Range of valid values:</b><br>
* Any int</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Integer> REQUEST_ID =
@@ -2570,6 +2608,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -2584,7 +2623,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2595,6 +2634,7 @@
* @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_EXPOSURE_TIME =
new Key<Long>("android.sensor.exposureTime", long.class);
@@ -2665,7 +2705,7 @@
* <p><b>Range of valid values:</b><br>
* See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }.
* The duration is capped to <code>max(duration, exposureTime + overhead)</code>.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2676,6 +2716,7 @@
* @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_FRAME_DURATION =
new Key<Long>("android.sensor.frameDuration", long.class);
@@ -2696,7 +2737,7 @@
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2708,6 +2749,7 @@
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
@@ -2720,11 +2762,12 @@
* output.</p>
* <p>For example, a sensor with RAW10 Bayer output would use the
* 10 most significant bits from each color channel.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_TEST_PATTERN_DATA =
new Key<int[]>("android.sensor.testPatternData", int[].class);
@@ -2749,7 +2792,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES
* @see #SENSOR_TEST_PATTERN_MODE_OFF
@@ -2760,6 +2803,7 @@
* @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
new Key<Integer>("android.sensor.testPatternMode", int.class);
@@ -2797,7 +2841,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2813,6 +2857,7 @@
* @see #SHADING_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SHADING_MODE =
new Key<Integer>("android.shading.mode", int.class);
@@ -2838,6 +2883,7 @@
* @see #STATISTICS_FACE_DETECT_MODE_FULL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_FACE_DETECT_MODE =
new Key<Integer>("android.statistics.faceDetectMode", int.class);
@@ -2847,12 +2893,13 @@
* If set to <code>false</code>, no hot pixel map will be returned.</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
@@ -2870,7 +2917,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2881,6 +2928,7 @@
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_LENS_SHADING_MAP_MODE =
new Key<Integer>("android.statistics.lensShadingMapMode", int.class);
@@ -2900,13 +2948,14 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES
* @see #STATISTICS_OIS_DATA_MODE_OFF
* @see #STATISTICS_OIS_DATA_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_OIS_DATA_MODE =
new Key<Integer>("android.statistics.oisDataMode", int.class);
@@ -2915,7 +2964,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2932,7 +2981,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2993,7 +3042,7 @@
* <p><b>Range of valid values:</b><br>
* 0-1 on both input and output coordinates, normalized
* as a floating-point value such that 0 == black and 1 == white.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3054,7 +3103,7 @@
* (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ]
* </code></pre>
* <p><img alt="sRGB tonemapping curve" src="/reference/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3064,6 +3113,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE =
new Key<android.hardware.camera2.params.TonemapCurve>("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class);
@@ -3098,7 +3148,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3114,6 +3164,7 @@
* @see #TONEMAP_MODE_PRESET_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MODE =
new Key<Integer>("android.tonemap.mode", int.class);
@@ -3130,11 +3181,12 @@
* value will be returned in capture result.</p>
* <p>The valid range of gamma value varies on different devices, but values
* within [1.0, 5.0] are guaranteed not to be clipped.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Float> TONEMAP_GAMMA =
new Key<Float>("android.tonemap.gamma", float.class);
@@ -3153,13 +3205,14 @@
* <li>{@link #TONEMAP_PRESET_CURVE_SRGB SRGB}</li>
* <li>{@link #TONEMAP_PRESET_CURVE_REC709 REC709}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
* @see #TONEMAP_PRESET_CURVE_SRGB
* @see #TONEMAP_PRESET_CURVE_REC709
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_PRESET_CURVE =
new Key<Integer>("android.tonemap.presetCurve", int.class);
@@ -3174,7 +3227,7 @@
* data is stored locally on the device.</p>
* <p>The LED <em>may</em> be off if a trusted application is using the data that
* doesn't violate the above rules.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Boolean> LED_TRANSMIT =
@@ -3218,7 +3271,7 @@
* possible, only overriding the lock to OFF when changes to
* other request parameters require a black level recalculation
* or reset.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3226,6 +3279,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> BLACK_LEVEL_LOCK =
new Key<Boolean>("android.blackLevel.lock", boolean.class);
@@ -3265,7 +3319,7 @@
* <p><b>Units</b>: Relative exposure time increase factor.</p>
* <p><b>Range of valid values:</b><br>
* >= 1.0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3276,6 +3330,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR =
new Key<Float>("android.reprocess.effectiveExposureFactor", float.class);
@@ -3322,7 +3377,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_REGIONS
* @see CaptureRequest#CONTROL_AF_REGIONS
@@ -3338,6 +3393,7 @@
* @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> DISTORTION_CORRECTION_MODE =
new Key<Integer>("android.distortionCorrection.mode", int.class);
@@ -3347,4 +3403,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 13ad092..53d4dd3 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -437,7 +437,7 @@
* <li>{@link #COLOR_CORRECTION_MODE_FAST FAST}</li>
* <li>{@link #COLOR_CORRECTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -451,6 +451,7 @@
* @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_MODE =
new Key<Integer>("android.colorCorrection.mode", int.class);
@@ -469,7 +470,7 @@
* <p>The valid range of each matrix element varies on different devices, but
* values within [-1.5, 3.0] are guaranteed not to be clipped.</p>
* <p><b>Units</b>: Unitless scale factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -478,6 +479,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM =
new Key<android.hardware.camera2.params.ColorSpaceTransform>("android.colorCorrection.transform", android.hardware.camera2.params.ColorSpaceTransform.class);
@@ -496,7 +498,7 @@
* device allows gains below 1.0, this is usually not recommended because
* this can create color artifacts.</p>
* <p><b>Units</b>: Unitless gain factors</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -505,6 +507,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS =
new Key<android.hardware.camera2.params.RggbChannelVector>("android.colorCorrection.gains", android.hardware.camera2.params.RggbChannelVector.class);
@@ -537,6 +540,7 @@
* @see #COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> COLOR_CORRECTION_ABERRATION_MODE =
new Key<Integer>("android.colorCorrection.aberrationMode", int.class);
@@ -593,6 +597,7 @@
* @see #CONTROL_AE_ANTIBANDING_MODE_AUTO
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_ANTIBANDING_MODE =
new Key<Integer>("android.control.aeAntibandingMode", int.class);
@@ -626,6 +631,7 @@
* @see CaptureResult#CONTROL_AE_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION =
new Key<Integer>("android.control.aeExposureCompensation", int.class);
@@ -676,6 +682,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AE_LOCK =
new Key<Boolean>("android.control.aeLock", boolean.class);
@@ -728,6 +735,7 @@
* @see #CONTROL_AE_MODE_ON_EXTERNAL_FLASH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_MODE =
new Key<Integer>("android.control.aeMode", int.class);
@@ -779,7 +787,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AE
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -788,6 +796,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.aeRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -808,6 +817,7 @@
* @see CaptureRequest#SENSOR_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Range<Integer>> CONTROL_AE_TARGET_FPS_RANGE =
new Key<android.util.Range<Integer>>("android.control.aeTargetFpsRange", new TypeReference<android.util.Range<Integer>>() {{ }});
@@ -866,7 +876,7 @@
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_START START}</li>
* <li>{@link #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL CANCEL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -881,6 +891,7 @@
* @see #CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_PRECAPTURE_TRIGGER =
new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
@@ -1108,7 +1119,7 @@
* <li>{@link #CONTROL_AE_STATE_FLASH_REQUIRED FLASH_REQUIRED}</li>
* <li>{@link #CONTROL_AE_STATE_PRECAPTURE PRECAPTURE}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -1129,6 +1140,7 @@
* @see #CONTROL_AE_STATE_PRECAPTURE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AE_STATE =
new Key<Integer>("android.control.aeState", int.class);
@@ -1170,6 +1182,7 @@
* @see #CONTROL_AF_MODE_EDOF
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_MODE =
new Key<Integer>("android.control.afMode", int.class);
@@ -1222,7 +1235,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AF
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1231,6 +1244,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.afRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1268,6 +1282,7 @@
* @see #CONTROL_AF_TRIGGER_CANCEL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_TRIGGER =
new Key<Integer>("android.control.afTrigger", int.class);
@@ -1677,6 +1692,7 @@
* @see #CONTROL_AF_STATE_PASSIVE_UNFOCUSED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_STATE =
new Key<Integer>("android.control.afState", int.class);
@@ -1707,6 +1723,7 @@
* @see CaptureRequest#CONTROL_AWB_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_AWB_LOCK =
new Key<Boolean>("android.control.awbLock", boolean.class);
@@ -1767,6 +1784,7 @@
* @see #CONTROL_AWB_MODE_SHADE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_MODE =
new Key<Integer>("android.control.awbMode", int.class);
@@ -1819,7 +1837,7 @@
* Coordinates must be between <code>[(0,0), (width, height))</code> of
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* depending on distortion correction capability and mode</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
@@ -1828,6 +1846,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS =
new Key<android.hardware.camera2.params.MeteringRectangle[]>("android.control.awbRegions", android.hardware.camera2.params.MeteringRectangle[].class);
@@ -1870,6 +1889,7 @@
* @see #CONTROL_CAPTURE_INTENT_MOTION_TRACKING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_CAPTURE_INTENT =
new Key<Integer>("android.control.captureIntent", int.class);
@@ -1997,7 +2017,7 @@
* <li>{@link #CONTROL_AWB_STATE_CONVERGED CONVERGED}</li>
* <li>{@link #CONTROL_AWB_STATE_LOCKED LOCKED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2013,6 +2033,7 @@
* @see #CONTROL_AWB_STATE_LOCKED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AWB_STATE =
new Key<Integer>("android.control.awbState", int.class);
@@ -2052,6 +2073,7 @@
* @see #CONTROL_EFFECT_MODE_AQUA
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_EFFECT_MODE =
new Key<Integer>("android.control.effectMode", int.class);
@@ -2092,6 +2114,7 @@
* @see #CONTROL_MODE_OFF_KEEP_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_MODE =
new Key<Integer>("android.control.mode", int.class);
@@ -2159,6 +2182,7 @@
* @see #CONTROL_SCENE_MODE_HDR
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_SCENE_MODE =
new Key<Integer>("android.control.sceneMode", int.class);
@@ -2202,6 +2226,7 @@
* @see #CONTROL_VIDEO_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_VIDEO_STABILIZATION_MODE =
new Key<Integer>("android.control.videoStabilizationMode", int.class);
@@ -2228,7 +2253,7 @@
* <p><b>Units</b>: ISO arithmetic units, the same as {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE android.control.postRawSensitivityBoostRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_MODE
* @see CaptureRequest#CONTROL_MODE
@@ -2237,6 +2262,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST =
new Key<Integer>("android.control.postRawSensitivityBoost", int.class);
@@ -2264,12 +2290,13 @@
* <p>For applications targeting SDK versions older than O, the value of enableZsl in all
* capture templates is always <code>false</code> if present.</p>
* <p>For application-operated ZSL, use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_CAPTURE_INTENT
* @see CaptureResult#SENSOR_TIMESTAMP
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> CONTROL_ENABLE_ZSL =
new Key<Boolean>("android.control.enableZsl", boolean.class);
@@ -2287,11 +2314,12 @@
* <li>{@link #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED NOT_DETECTED}</li>
* <li>{@link #CONTROL_AF_SCENE_CHANGE_DETECTED DETECTED}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @see #CONTROL_AF_SCENE_CHANGE_NOT_DETECTED
* @see #CONTROL_AF_SCENE_CHANGE_DETECTED
*/
@PublicKey
+ @NonNull
public static final Key<Integer> CONTROL_AF_SCENE_CHANGE =
new Key<Integer>("android.control.afSceneChange", int.class);
@@ -2326,7 +2354,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2340,6 +2368,7 @@
* @see #EDGE_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> EDGE_MODE =
new Key<Integer>("android.edge.mode", int.class);
@@ -2375,6 +2404,7 @@
* @see #FLASH_MODE_TORCH
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_MODE =
new Key<Integer>("android.flash.mode", int.class);
@@ -2402,7 +2432,7 @@
* <li>{@link #FLASH_STATE_FIRED FIRED}</li>
* <li>{@link #FLASH_STATE_PARTIAL PARTIAL}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2418,6 +2448,7 @@
* @see #FLASH_STATE_PARTIAL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> FLASH_STATE =
new Key<Integer>("android.flash.state", int.class);
@@ -2434,7 +2465,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
* @see #HOT_PIXEL_MODE_OFF
@@ -2442,6 +2473,7 @@
* @see #HOT_PIXEL_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> HOT_PIXEL_MODE =
new Key<Integer>("android.hotPixel.mode", int.class);
@@ -2454,6 +2486,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.location.Location> JPEG_GPS_LOCATION =
new Key<android.location.Location>("android.jpeg.gpsLocation", android.location.Location.class);
@@ -2535,6 +2568,7 @@
* @see CameraCharacteristics#SENSOR_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<Integer> JPEG_ORIENTATION =
new Key<Integer>("android.jpeg.orientation", int.class);
@@ -2548,6 +2582,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_QUALITY =
new Key<Byte>("android.jpeg.quality", byte.class);
@@ -2560,6 +2595,7 @@
* <p>This key is available on all devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
@@ -2599,6 +2635,7 @@
* @see CaptureRequest#JPEG_ORIENTATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Size> JPEG_THUMBNAIL_SIZE =
new Key<android.util.Size>("android.jpeg.thumbnailSize", android.util.Size.class);
@@ -2622,7 +2659,7 @@
* <p><b>Units</b>: The f-number (f/N)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2636,6 +2673,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_APERTURE =
new Key<Float>("android.lens.aperture", float.class);
@@ -2656,7 +2694,7 @@
* <p><b>Units</b>: Exposure Value (EV)</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2666,6 +2704,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FILTER_DENSITY =
new Key<Float>("android.lens.filterDensity", float.class);
@@ -2691,6 +2730,7 @@
* @see CaptureResult#LENS_STATE
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCAL_LENGTH =
new Key<Float>("android.lens.focalLength", float.class);
@@ -2701,7 +2741,7 @@
* <p><b>Units</b>: See {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2710,6 +2750,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<Float> LENS_FOCUS_DISTANCE =
new Key<Float>("android.lens.focusDistance", float.class);
@@ -2722,7 +2763,7 @@
* far); see {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} for details.</p>
* <p><b>Range of valid values:</b><br>
* >=0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2731,6 +2772,7 @@
* @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Pair<Float,Float>> LENS_FOCUS_RANGE =
new Key<android.util.Pair<Float,Float>>("android.lens.focusRange", new TypeReference<android.util.Pair<Float,Float>>() {{ }});
@@ -2761,7 +2803,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2773,6 +2815,7 @@
* @see #LENS_OPTICAL_STABILIZATION_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_OPTICAL_STABILIZATION_MODE =
new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
@@ -2802,7 +2845,7 @@
* <li>{@link #LENS_STATE_STATIONARY STATIONARY}</li>
* <li>{@link #LENS_STATE_MOVING MOVING}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -2820,6 +2863,7 @@
* @see #LENS_STATE_MOVING
*/
@PublicKey
+ @NonNull
public static final Key<Integer> LENS_STATE =
new Key<Integer>("android.lens.state", int.class);
@@ -2854,10 +2898,11 @@
* <code>p'</code> is in the camera-oriented coordinate system.</p>
* <p><b>Units</b>:
* Quaternion coefficients</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_ROTATION =
new Key<float[]>("android.lens.poseRotation", float[].class);
@@ -2890,7 +2935,7 @@
* the center of the primary gyroscope on the device. The axis definitions are the same as
* with PRIMARY_CAMERA.</p>
* <p><b>Units</b>: Meters</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -2899,6 +2944,7 @@
* @see CameraCharacteristics#LENS_POSE_ROTATION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_POSE_TRANSLATION =
new Key<float[]>("android.lens.poseTranslation", float[].class);
@@ -2962,7 +3008,7 @@
* Pixels in the
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}
* coordinate system.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_DISTORTION
@@ -2972,6 +3018,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_INTRINSIC_CALIBRATION =
new Key<float[]>("android.lens.intrinsicCalibration", float[].class);
@@ -3006,7 +3053,7 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
@@ -3019,6 +3066,7 @@
*/
@Deprecated
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_RADIAL_DISTORTION =
new Key<float[]>("android.lens.radialDistortion", float[].class);
@@ -3053,13 +3101,14 @@
* <p>The distortion model used is the Brown-Conrady model.</p>
* <p><b>Units</b>:
* Unitless coefficients.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
*
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
* @see CameraCharacteristics#LENS_RADIAL_DISTORTION
*/
@PublicKey
+ @NonNull
public static final Key<float[]> LENS_DISTORTION =
new Key<float[]>("android.lens.distortion", float[].class);
@@ -3100,7 +3149,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3115,6 +3164,7 @@
* @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
*/
@PublicKey
+ @NonNull
public static final Key<Integer> NOISE_REDUCTION_MODE =
new Key<Integer>("android.noiseReduction.mode", int.class);
@@ -3134,7 +3184,7 @@
* only be used by the camera device if quirks.usePartialResult is set to 1.</p>
* <p><b>Range of valid values:</b><br>
* Optional. Default value is FINAL.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -3152,7 +3202,7 @@
* <p><b>Units</b>: count of frames</p>
* <p><b>Range of valid values:</b><br>
* > 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Not used in HALv3 or newer</p>
@@ -3169,7 +3219,7 @@
* <p><b>Units</b>: arbitrary integer assigned by application</p>
* <p><b>Range of valid values:</b><br>
* Any int</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Integer> REQUEST_ID =
@@ -3190,6 +3240,7 @@
* @see CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH
*/
@PublicKey
+ @NonNull
public static final Key<Byte> REQUEST_PIPELINE_DEPTH =
new Key<Byte>("android.request.pipelineDepth", byte.class);
@@ -3251,6 +3302,7 @@
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
@@ -3265,7 +3317,7 @@
* <p><b>Units</b>: Nanoseconds</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3276,6 +3328,7 @@
* @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_EXPOSURE_TIME =
new Key<Long>("android.sensor.exposureTime", long.class);
@@ -3346,7 +3399,7 @@
* <p><b>Range of valid values:</b><br>
* See {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}, {@link android.hardware.camera2.params.StreamConfigurationMap }.
* The duration is capped to <code>max(duration, exposureTime + overhead)</code>.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3357,6 +3410,7 @@
* @see CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_FRAME_DURATION =
new Key<Long>("android.sensor.frameDuration", long.class);
@@ -3377,7 +3431,7 @@
* <p><b>Units</b>: ISO arithmetic units</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3389,6 +3443,7 @@
* @see CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_SENSITIVITY =
new Key<Integer>("android.sensor.sensitivity", int.class);
@@ -3419,6 +3474,7 @@
* @see CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_TIMESTAMP =
new Key<Long>("android.sensor.timestamp", long.class);
@@ -3433,9 +3489,10 @@
* <p>The order of the values is R, G, B; where R is in the lowest index.</p>
* <p>Starting from Android Q, this key will not be present for a MONOCHROME camera, even if
* the camera device has RAW capability.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Rational[]> SENSOR_NEUTRAL_COLOR_POINT =
new Key<Rational[]>("android.sensor.neutralColorPoint", Rational[].class);
@@ -3460,11 +3517,12 @@
* Adobe DNG specification for the NoiseProfile tag.</p>
* <p>For a MONOCHROME camera, there is only one color channel. So the noise model coefficients
* will only contain one S and one O.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
*/
@PublicKey
+ @NonNull
public static final Key<android.util.Pair<Double,Double>[]> SENSOR_NOISE_PROFILE =
new Key<android.util.Pair<Double,Double>[]>("android.sensor.noiseProfile", new TypeReference<android.util.Pair<Double,Double>[]>() {{ }});
@@ -3504,9 +3562,10 @@
* the camera device has RAW capability.</p>
* <p><b>Range of valid values:</b><br></p>
* <p>>= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<Float> SENSOR_GREEN_SPLIT =
new Key<Float>("android.sensor.greenSplit", float.class);
@@ -3519,11 +3578,12 @@
* output.</p>
* <p>For example, a sensor with RAW10 Bayer output would use the
* 10 most significant bits from each color channel.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
*/
@PublicKey
+ @NonNull
public static final Key<int[]> SENSOR_TEST_PATTERN_DATA =
new Key<int[]>("android.sensor.testPatternData", int[].class);
@@ -3548,7 +3608,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES android.sensor.availableTestPatternModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_AVAILABLE_TEST_PATTERN_MODES
* @see #SENSOR_TEST_PATTERN_MODE_OFF
@@ -3559,6 +3619,7 @@
* @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
new Key<Integer>("android.sensor.testPatternMode", int.class);
@@ -3575,7 +3636,7 @@
* <p><b>Range of valid values:</b><br>
* >= 0 and <
* {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputMinFrameDuration }.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3584,6 +3645,7 @@
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<Long> SENSOR_ROLLING_SHUTTER_SKEW =
new Key<Long>("android.sensor.rollingShutterSkew", long.class);
@@ -3617,7 +3679,7 @@
* camera device advertises this key via {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureResultKeys }.</p>
* <p><b>Range of valid values:</b><br>
* >= 0 for each.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
@@ -3625,6 +3687,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL =
new Key<float[]>("android.sensor.dynamicBlackLevel", float[].class);
@@ -3640,7 +3703,7 @@
* {@link android.hardware.camera2.CameraCharacteristics#getAvailableCaptureRequestKeys }.</p>
* <p><b>Range of valid values:</b><br>
* >= 0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
* @see CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
@@ -3648,6 +3711,7 @@
* @see CaptureRequest#SENSOR_SENSITIVITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SENSOR_DYNAMIC_WHITE_LEVEL =
new Key<Integer>("android.sensor.dynamicWhiteLevel", int.class);
@@ -3685,7 +3749,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#SHADING_AVAILABLE_MODES android.shading.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3701,6 +3765,7 @@
* @see #SHADING_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> SHADING_MODE =
new Key<Integer>("android.shading.mode", int.class);
@@ -3726,6 +3791,7 @@
* @see #STATISTICS_FACE_DETECT_MODE_FULL
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_FACE_DETECT_MODE =
new Key<Integer>("android.statistics.faceDetectMode", int.class);
@@ -3818,6 +3884,7 @@
* @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES =
new Key<android.hardware.camera2.params.Face[]>("android.statistics.faces", android.hardware.camera2.params.Face[].class);
@@ -3886,7 +3953,7 @@
* </code></pre>
* <p><b>Range of valid values:</b><br>
* Each gain factor is >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -3896,6 +3963,7 @@
* @see CameraCharacteristics#SENSOR_INFO_LENS_SHADING_APPLIED
*/
@PublicKey
+ @NonNull
public static final Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP =
new Key<android.hardware.camera2.params.LensShadingMap>("android.statistics.lensShadingCorrectionMap", android.hardware.camera2.params.LensShadingMap.class);
@@ -3976,7 +4044,7 @@
* formats.</p>
* <p><b>Range of valid values:</b><br>
* Each gain factor is >= 1</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4001,7 +4069,7 @@
* see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.</p>
* <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#COLOR_CORRECTION_GAINS
* @deprecated
@@ -4029,7 +4097,7 @@
* capture settings and color transforms are set by the application.</p>
* <p>This value should always be calculated by the auto-white balance (AWB) block,
* regardless of the android.control.* current values.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @deprecated
* <p>Never fully implemented or specified; do not use</p>
@@ -4061,7 +4129,7 @@
* <li>{@link #STATISTICS_SCENE_FLICKER_50HZ 50HZ}</li>
* <li>{@link #STATISTICS_SCENE_FLICKER_60HZ 60HZ}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4075,6 +4143,7 @@
* @see #STATISTICS_SCENE_FLICKER_60HZ
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_SCENE_FLICKER =
new Key<Integer>("android.statistics.sceneFlicker", int.class);
@@ -4084,12 +4153,13 @@
* If set to <code>false</code>, no hot pixel map will be returned.</p>
* <p><b>Range of valid values:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
@@ -4105,12 +4175,13 @@
* <p>n <= number of pixels on the sensor.
* The <code>(x, y)</code> coordinates must be bounded by
* {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
*/
@PublicKey
+ @NonNull
public static final Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP =
new Key<android.graphics.Point[]>("android.statistics.hotPixelMap", android.graphics.Point[].class);
@@ -4128,7 +4199,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES android.statistics.info.availableLensShadingMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4139,6 +4210,7 @@
* @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_LENS_SHADING_MAP_MODE =
new Key<Integer>("android.statistics.lensShadingMapMode", int.class);
@@ -4158,13 +4230,14 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES android.statistics.info.availableOisDataModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES
* @see #STATISTICS_OIS_DATA_MODE_OFF
* @see #STATISTICS_OIS_DATA_MODE_ON
*/
@PublicKey
+ @NonNull
public static final Key<Integer> STATISTICS_OIS_DATA_MODE =
new Key<Integer>("android.statistics.oisDataMode", int.class);
@@ -4173,7 +4246,7 @@
* <p>The array contains the timestamps of OIS samples. The timestamps are in the same
* timebase as and comparable to {@link CaptureResult#SENSOR_TIMESTAMP android.sensor.timestamp}.</p>
* <p><b>Units</b>: nanoseconds</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureResult#SENSOR_TIMESTAMP
* @hide
@@ -4194,7 +4267,7 @@
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
* <p><b>Units</b>: Pixels in active array.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<float[]> STATISTICS_OIS_X_SHIFTS =
@@ -4213,7 +4286,7 @@
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
* <p><b>Units</b>: Pixels in active array.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<float[]> STATISTICS_OIS_Y_SHIFTS =
@@ -4235,9 +4308,10 @@
* supporting devices). They are always reported in pre-correction active array coordinates,
* since the scaling of OIS shifts would depend on the specific spot on the sensor the shift
* is needed.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES =
new Key<android.hardware.camera2.params.OisSample[]>("android.statistics.oisSamples", android.hardware.camera2.params.OisSample[].class);
@@ -4247,7 +4321,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4264,7 +4338,7 @@
* channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
* CONTRAST_CURVE.</p>
* <p>See android.tonemap.curveRed for more details.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4325,7 +4399,7 @@
* <p><b>Range of valid values:</b><br>
* 0-1 on both input and output coordinates, normalized
* as a floating-point value such that 0 == black and 1 == white.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4386,7 +4460,7 @@
* (0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ]
* </code></pre>
* <p><img alt="sRGB tonemapping curve" src="/reference/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4396,6 +4470,7 @@
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
@SyntheticKey
public static final Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE =
new Key<android.hardware.camera2.params.TonemapCurve>("android.tonemap.curve", android.hardware.camera2.params.TonemapCurve.class);
@@ -4430,7 +4505,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4446,6 +4521,7 @@
* @see #TONEMAP_MODE_PRESET_CURVE
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_MODE =
new Key<Integer>("android.tonemap.mode", int.class);
@@ -4462,11 +4538,12 @@
* value will be returned in capture result.</p>
* <p>The valid range of gamma value varies on different devices, but values
* within [1.0, 5.0] are guaranteed not to be clipped.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
*/
@PublicKey
+ @NonNull
public static final Key<Float> TONEMAP_GAMMA =
new Key<Float>("android.tonemap.gamma", float.class);
@@ -4485,13 +4562,14 @@
* <li>{@link #TONEMAP_PRESET_CURVE_SRGB SRGB}</li>
* <li>{@link #TONEMAP_PRESET_CURVE_REC709 REC709}</li>
* </ul></p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#TONEMAP_MODE
* @see #TONEMAP_PRESET_CURVE_SRGB
* @see #TONEMAP_PRESET_CURVE_REC709
*/
@PublicKey
+ @NonNull
public static final Key<Integer> TONEMAP_PRESET_CURVE =
new Key<Integer>("android.tonemap.presetCurve", int.class);
@@ -4506,7 +4584,7 @@
* data is stored locally on the device.</p>
* <p>The LED <em>may</em> be off if a trusted application is using the data that
* doesn't violate the above rules.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* @hide
*/
public static final Key<Boolean> LED_TRANSMIT =
@@ -4519,7 +4597,7 @@
* ON if {@link CaptureRequest#BLACK_LEVEL_LOCK android.blackLevel.lock} was ON in the capture request, unless
* a change in other capture settings forced the camera device to
* perform a black level reset.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Full capability</b> -
* Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4528,6 +4606,7 @@
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
*/
@PublicKey
+ @NonNull
public static final Key<Boolean> BLACK_LEVEL_LOCK =
new Key<Boolean>("android.blackLevel.lock", boolean.class);
@@ -4637,7 +4716,7 @@
* <p><b>Units</b>: Relative exposure time increase factor.</p>
* <p><b>Range of valid values:</b><br>
* >= 1.0</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
* <p><b>Limited capability</b> -
* Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
* {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
@@ -4648,6 +4727,7 @@
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
@PublicKey
+ @NonNull
public static final Key<Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR =
new Key<Float>("android.reprocess.effectiveExposureFactor", float.class);
@@ -4655,16 +4735,21 @@
* <p>String containing the ID of the underlying active physical camera.</p>
* <p>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.</p>
+ * physical camera.</p>
* <p>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.</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p>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.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*/
@PublicKey
+ @NonNull
public static final Key<String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID =
new Key<String>("android.logicalMultiCamera.activePhysicalId", String.class);
@@ -4711,7 +4796,7 @@
* </ul></p>
* <p><b>Available values for this device:</b><br>
* {@link CameraCharacteristics#DISTORTION_CORRECTION_AVAILABLE_MODES android.distortionCorrection.availableModes}</p>
- * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+ * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
*
* @see CaptureRequest#CONTROL_AE_REGIONS
* @see CaptureRequest#CONTROL_AF_REGIONS
@@ -4727,6 +4812,7 @@
* @see #DISTORTION_CORRECTION_MODE_HIGH_QUALITY
*/
@PublicKey
+ @NonNull
public static final Key<Integer> DISTORTION_CORRECTION_MODE =
new Key<Integer>("android.distortionCorrection.mode", int.class);
@@ -4736,4 +4822,7 @@
+
+
+
}
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index 65026b6..1cdf235 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -350,7 +350,7 @@
return newObject;
}
- public static final Parcelable.Creator<CameraMetadataNative> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CameraMetadataNative> CREATOR =
new Parcelable.Creator<CameraMetadataNative>() {
@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 40535e2..edc3d91 100644
--- a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java
+++ b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java
@@ -30,7 +30,7 @@
private int partialResultCount;
private int errorStreamId;
- public static final Parcelable.Creator<CaptureResultExtras> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CaptureResultExtras> CREATOR =
new Parcelable.Creator<CaptureResultExtras>() {
@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 30eaf13..09619d0 100644
--- a/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java
+++ b/core/java/android/hardware/camera2/impl/PhysicalCaptureResultInfo.java
@@ -27,7 +27,7 @@
private String cameraId;
private CameraMetadataNative cameraMetadata;
- public static final Parcelable.Creator<PhysicalCaptureResultInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PhysicalCaptureResultInfo> CREATOR =
new Parcelable.Creator<PhysicalCaptureResultInfo>() {
@Override
public PhysicalCaptureResultInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/camera2/params/OutputConfiguration.java b/core/java/android/hardware/camera2/params/OutputConfiguration.java
index cb33659..d7db1f5 100644
--- a/core/java/android/hardware/camera2/params/OutputConfiguration.java
+++ b/core/java/android/hardware/camera2/params/OutputConfiguration.java
@@ -626,7 +626,7 @@
return mSurfaceGroupId;
}
- public static final Parcelable.Creator<OutputConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<OutputConfiguration> CREATOR =
new Parcelable.Creator<OutputConfiguration>() {
@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 3ea58ad..555ff9a 100644
--- a/core/java/android/hardware/camera2/params/SessionConfiguration.java
+++ b/core/java/android/hardware/camera2/params/SessionConfiguration.java
@@ -134,7 +134,7 @@
mOutputConfigurations = outConfigs;
}
- public static final Parcelable.Creator<SessionConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SessionConfiguration> CREATOR =
new Parcelable.Creator<SessionConfiguration> () {
@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 ea424e5..4845ec3 100644
--- a/core/java/android/hardware/camera2/params/VendorTagDescriptor.java
+++ b/core/java/android/hardware/camera2/params/VendorTagDescriptor.java
@@ -32,7 +32,7 @@
private VendorTagDescriptor(Parcel source) {
}
- public static final Parcelable.Creator<VendorTagDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VendorTagDescriptor> CREATOR =
new Parcelable.Creator<VendorTagDescriptor>() {
@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 1f92f6d..450b70b 100644
--- a/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java
+++ b/core/java/android/hardware/camera2/params/VendorTagDescriptorCache.java
@@ -32,7 +32,7 @@
private VendorTagDescriptorCache(Parcel source) {
}
- public static final Parcelable.Creator<VendorTagDescriptorCache> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VendorTagDescriptorCache> CREATOR =
new Parcelable.Creator<VendorTagDescriptorCache>() {
@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 c89b339..d36736e 100644
--- a/core/java/android/hardware/camera2/utils/LongParcelable.java
+++ b/core/java/android/hardware/camera2/utils/LongParcelable.java
@@ -32,7 +32,7 @@
this.number = number;
}
- public static final Parcelable.Creator<LongParcelable> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<LongParcelable> CREATOR =
new Parcelable.Creator<LongParcelable>() {
@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 d1692b5..9df09c4 100644
--- a/core/java/android/hardware/camera2/utils/SubmitInfo.java
+++ b/core/java/android/hardware/camera2/utils/SubmitInfo.java
@@ -43,7 +43,7 @@
mLastFrameNumber = lastFrameNumber;
}
- public static final Parcelable.Creator<SubmitInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SubmitInfo> CREATOR =
new Parcelable.Creator<SubmitInfo>() {
@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 1aa2557..b25ef8d 100644
--- a/core/java/android/hardware/display/AmbientBrightnessDayStats.java
+++ b/core/java/android/hardware/display/AmbientBrightnessDayStats.java
@@ -121,7 +121,7 @@
mStats = source.createFloatArray();
}
- public static final Creator<AmbientBrightnessDayStats> CREATOR =
+ public static final @android.annotation.NonNull Creator<AmbientBrightnessDayStats> CREATOR =
new Creator<AmbientBrightnessDayStats>() {
@Override
diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java
index c6186bb..7fa1cfb 100644
--- a/core/java/android/hardware/display/BrightnessChangeEvent.java
+++ b/core/java/android/hardware/display/BrightnessChangeEvent.java
@@ -153,7 +153,7 @@
colorSampleDuration = source.readLong();
}
- public static final Creator<BrightnessChangeEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<BrightnessChangeEvent> CREATOR =
new Creator<BrightnessChangeEvent>() {
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 ed8a97c..5b63dcf 100644
--- a/core/java/android/hardware/display/BrightnessConfiguration.java
+++ b/core/java/android/hardware/display/BrightnessConfiguration.java
@@ -198,7 +198,7 @@
&& Objects.equals(mDescription, other.mDescription);
}
- public static final Creator<BrightnessConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Creator<BrightnessConfiguration> CREATOR =
new Creator<BrightnessConfiguration>() {
public BrightnessConfiguration createFromParcel(Parcel in) {
float[] lux = in.createFloatArray();
@@ -444,6 +444,7 @@
* {@link #getMaxCorrectionsByPackageName}).
*
*/
+ @NonNull
public Builder addCorrectionByPackageName(@NonNull String packageName,
@NonNull BrightnessCorrection correction) {
Objects.requireNonNull(packageName, "packageName must not be null");
@@ -472,6 +473,7 @@
* {@link #getMaxCorrectionsByCategory}).
*
*/
+ @NonNull
public Builder addCorrectionByCategory(@ApplicationInfo.Category int category,
@NonNull BrightnessCorrection correction) {
Objects.requireNonNull(correction, "correction must not be null");
@@ -488,6 +490,7 @@
* @param description brief text describing the curve pushed. It maybe truncated
* and will not be displayed in the UI
*/
+ @NonNull
public Builder setDescription(@Nullable String description) {
mDescription = description;
return this;
@@ -496,6 +499,7 @@
/**
* Builds the {@link BrightnessConfiguration}.
*/
+ @NonNull
public BrightnessConfiguration build() {
if (mCurveLux == null || mCurveNits == null) {
throw new IllegalStateException("A curve must be set!");
diff --git a/core/java/android/hardware/display/BrightnessCorrection.java b/core/java/android/hardware/display/BrightnessCorrection.java
index ee8d846..b029acc 100644
--- a/core/java/android/hardware/display/BrightnessCorrection.java
+++ b/core/java/android/hardware/display/BrightnessCorrection.java
@@ -120,7 +120,7 @@
return mImplementation.hashCode();
}
- public static final Creator<BrightnessCorrection> CREATOR =
+ public static final @android.annotation.NonNull Creator<BrightnessCorrection> CREATOR =
new Creator<BrightnessCorrection>() {
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 41f66f5..0010515 100644
--- a/core/java/android/hardware/display/Curve.java
+++ b/core/java/android/hardware/display/Curve.java
@@ -37,7 +37,7 @@
return mY;
}
- public static final Creator<Curve> CREATOR = new Creator<Curve>() {
+ public static final @android.annotation.NonNull Creator<Curve> CREATOR = new Creator<Curve>() {
public Curve createFromParcel(Parcel in) {
float[] x = in.createFloatArray();
float[] y = in.createFloatArray();
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index 5ea8bd6..edd2051 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -30,6 +30,7 @@
/** @hide */
interface IDisplayManager {
+ @UnsupportedAppUsage
DisplayInfo getDisplayInfo(int displayId);
int[] getDisplayIds();
diff --git a/core/java/android/hardware/display/Time.java b/core/java/android/hardware/display/Time.java
index b943ac6..87e5b38 100644
--- a/core/java/android/hardware/display/Time.java
+++ b/core/java/android/hardware/display/Time.java
@@ -62,7 +62,7 @@
return LocalTime.of(mHour, mMinute, mSecond, mNano);
}
- public static final Parcelable.Creator<Time> CREATOR = new Parcelable.Creator<Time>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Time> CREATOR = new Parcelable.Creator<Time>() {
@Override
public Time createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/display/WifiDisplay.java b/core/java/android/hardware/display/WifiDisplay.java
index 12486e8..55e6051 100644
--- a/core/java/android/hardware/display/WifiDisplay.java
+++ b/core/java/android/hardware/display/WifiDisplay.java
@@ -40,7 +40,7 @@
public static final WifiDisplay[] EMPTY_ARRAY = new WifiDisplay[0];
- public static final Creator<WifiDisplay> CREATOR = new Creator<WifiDisplay>() {
+ public static final @android.annotation.NonNull Creator<WifiDisplay> CREATOR = new Creator<WifiDisplay>() {
public WifiDisplay createFromParcel(Parcel in) {
String deviceAddress = in.readString();
String deviceName = in.readString();
diff --git a/core/java/android/hardware/display/WifiDisplaySessionInfo.java b/core/java/android/hardware/display/WifiDisplaySessionInfo.java
index 33d2725..9fb85f9 100644
--- a/core/java/android/hardware/display/WifiDisplaySessionInfo.java
+++ b/core/java/android/hardware/display/WifiDisplaySessionInfo.java
@@ -36,7 +36,7 @@
private final String mPassphrase;
private final String mIP;
- public static final Creator<WifiDisplaySessionInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiDisplaySessionInfo> CREATOR =
new Creator<WifiDisplaySessionInfo>() {
@Override
public WifiDisplaySessionInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/display/WifiDisplayStatus.java b/core/java/android/hardware/display/WifiDisplayStatus.java
index c267834..1973e51 100644
--- a/core/java/android/hardware/display/WifiDisplayStatus.java
+++ b/core/java/android/hardware/display/WifiDisplayStatus.java
@@ -69,7 +69,7 @@
@UnsupportedAppUsage
public static final int DISPLAY_STATE_CONNECTED = 2;
- public static final Creator<WifiDisplayStatus> CREATOR = new Creator<WifiDisplayStatus>() {
+ public static final @android.annotation.NonNull Creator<WifiDisplayStatus> CREATOR = new Creator<WifiDisplayStatus>() {
public WifiDisplayStatus createFromParcel(Parcel in) {
int featureState = in.readInt();
int scanState = in.readInt();
diff --git a/core/java/android/hardware/face/Face.java b/core/java/android/hardware/face/Face.java
index d6724d7..b90fafe 100644
--- a/core/java/android/hardware/face/Face.java
+++ b/core/java/android/hardware/face/Face.java
@@ -54,7 +54,7 @@
out.writeLong(getDeviceId());
}
- public static final Parcelable.Creator<Face> CREATOR = new Parcelable.Creator<Face>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Face> CREATOR = new Parcelable.Creator<Face>() {
public Face createFromParcel(Parcel in) {
return new Face(in);
}
diff --git a/core/java/android/hardware/fingerprint/Fingerprint.java b/core/java/android/hardware/fingerprint/Fingerprint.java
index bbd3d05..57e52d9 100644
--- a/core/java/android/hardware/fingerprint/Fingerprint.java
+++ b/core/java/android/hardware/fingerprint/Fingerprint.java
@@ -55,7 +55,7 @@
out.writeInt(mGroupId);
}
- public static final Parcelable.Creator<Fingerprint> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Fingerprint> CREATOR
= new Parcelable.Creator<Fingerprint>() {
public Fingerprint createFromParcel(Parcel in) {
return new Fingerprint(in);
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index 56020b2..aff385d 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -19,6 +19,7 @@
import static com.android.internal.os.RoSystemProperties.PROPERTY_HDMI_IS_DEVICE_HDMI_CEC_SWITCH;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresFeature;
import android.annotation.RequiresPermission;
@@ -456,7 +457,7 @@
* @hide
*/
@SystemApi
- public void powerOffRemoteDevice(HdmiDeviceInfo deviceInfo) {
+ public void powerOffRemoteDevice(@NonNull HdmiDeviceInfo deviceInfo) {
Preconditions.checkNotNull(deviceInfo);
try {
mService.powerOffRemoteDevice(
@@ -495,7 +496,7 @@
* @hide
*/
@SystemApi
- public void requestRemoteDeviceToBecomeActiveSource(HdmiDeviceInfo deviceInfo) {
+ public void requestRemoteDeviceToBecomeActiveSource(@NonNull HdmiDeviceInfo deviceInfo) {
Preconditions.checkNotNull(deviceInfo);
try {
mService.askRemoteDeviceToBecomeActiveSource(deviceInfo.getPhysicalAddress());
@@ -566,7 +567,7 @@
* @hide
*/
@SystemApi
- public boolean isRemoteDeviceConnected(HdmiDeviceInfo targetDevice) {
+ public boolean isRemoteDeviceConnected(@NonNull HdmiDeviceInfo targetDevice) {
Preconditions.checkNotNull(targetDevice);
mPhysicalAddress = getPhysicalAddress();
if (mPhysicalAddress == INVALID_PHYSICAL_ADDRESS) {
diff --git a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
index 48ea9a6..1362116 100644
--- a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
@@ -116,7 +116,7 @@
/**
* A helper class to deserialize {@link HdmiDeviceInfo} for a parcel.
*/
- public static final Parcelable.Creator<HdmiDeviceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<HdmiDeviceInfo> CREATOR =
new Parcelable.Creator<HdmiDeviceInfo>() {
@Override
public HdmiDeviceInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
index 9476742..07cbdcc 100644
--- a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
+++ b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java
@@ -83,7 +83,7 @@
dest.writeByte((byte) (mConnected ? 1 : 0));
}
- public static final Parcelable.Creator<HdmiHotplugEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<HdmiHotplugEvent> CREATOR
= new Parcelable.Creator<HdmiHotplugEvent>() {
/**
* Rebuilds a {@link HdmiHotplugEvent} previously stored with
diff --git a/core/java/android/hardware/hdmi/HdmiPortInfo.java b/core/java/android/hardware/hdmi/HdmiPortInfo.java
index 1f0f45a..f17cfba 100644
--- a/core/java/android/hardware/hdmi/HdmiPortInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiPortInfo.java
@@ -126,7 +126,7 @@
/**
* A helper class to deserialize {@link HdmiPortInfo} for a parcel.
*/
- public static final Parcelable.Creator<HdmiPortInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<HdmiPortInfo> CREATOR =
new Parcelable.Creator<HdmiPortInfo>() {
@Override
public HdmiPortInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index 64448fd..2923bbf 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -45,6 +45,7 @@
// Injects an input event into the system. To inject into windows owned by other
// applications, the caller must have the INJECT_EVENTS permission.
+ @UnsupportedAppUsage
boolean injectInputEvent(in InputEvent ev, int mode);
// Calibrate input device position
diff --git a/core/java/android/hardware/input/InputDeviceIdentifier.java b/core/java/android/hardware/input/InputDeviceIdentifier.java
index 801da88..26f2393 100644
--- a/core/java/android/hardware/input/InputDeviceIdentifier.java
+++ b/core/java/android/hardware/input/InputDeviceIdentifier.java
@@ -83,7 +83,7 @@
return Objects.hash(mDescriptor, mVendorId, mProductId);
}
- public static final Parcelable.Creator<InputDeviceIdentifier> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<InputDeviceIdentifier> CREATOR =
new Parcelable.Creator<InputDeviceIdentifier>() {
@Override
diff --git a/core/java/android/hardware/input/KeyboardLayout.java b/core/java/android/hardware/input/KeyboardLayout.java
index d395578..5bdbae3 100644
--- a/core/java/android/hardware/input/KeyboardLayout.java
+++ b/core/java/android/hardware/input/KeyboardLayout.java
@@ -39,7 +39,7 @@
private final int mVendorId;
private final int mProductId;
- public static final Parcelable.Creator<KeyboardLayout> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyboardLayout> CREATOR =
new Parcelable.Creator<KeyboardLayout>() {
public KeyboardLayout createFromParcel(Parcel source) {
return new KeyboardLayout(source);
diff --git a/core/java/android/hardware/input/TouchCalibration.java b/core/java/android/hardware/input/TouchCalibration.java
index 025fad0..7a6eba2 100644
--- a/core/java/android/hardware/input/TouchCalibration.java
+++ b/core/java/android/hardware/input/TouchCalibration.java
@@ -28,7 +28,7 @@
public static final TouchCalibration IDENTITY = new TouchCalibration();
- public static final Parcelable.Creator<TouchCalibration> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<TouchCalibration> CREATOR
= new Parcelable.Creator<TouchCalibration>() {
public TouchCalibration createFromParcel(Parcel in) {
return new TouchCalibration(in);
diff --git a/core/java/android/hardware/location/ActivityChangedEvent.java b/core/java/android/hardware/location/ActivityChangedEvent.java
index 16cfe6e..d538f57 100644
--- a/core/java/android/hardware/location/ActivityChangedEvent.java
+++ b/core/java/android/hardware/location/ActivityChangedEvent.java
@@ -46,7 +46,7 @@
return mActivityRecognitionEvents;
}
- public static final Creator<ActivityChangedEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<ActivityChangedEvent> CREATOR =
new Creator<ActivityChangedEvent>() {
@Override
public ActivityChangedEvent createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/location/ActivityRecognitionEvent.java b/core/java/android/hardware/location/ActivityRecognitionEvent.java
index 190030a..08ce86f 100644
--- a/core/java/android/hardware/location/ActivityRecognitionEvent.java
+++ b/core/java/android/hardware/location/ActivityRecognitionEvent.java
@@ -47,7 +47,7 @@
return mTimestampNs;
}
- public static final Creator<ActivityRecognitionEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<ActivityRecognitionEvent> CREATOR =
new Creator<ActivityRecognitionEvent>() {
@Override
public ActivityRecognitionEvent createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/location/ContextHubInfo.java b/core/java/android/hardware/location/ContextHubInfo.java
index 51daa92..b5da381 100644
--- a/core/java/android/hardware/location/ContextHubInfo.java
+++ b/core/java/android/hardware/location/ContextHubInfo.java
@@ -345,7 +345,7 @@
out.writeTypedArray(mMemoryRegions, flags);
}
- public static final Parcelable.Creator<ContextHubInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ContextHubInfo> CREATOR
= new Parcelable.Creator<ContextHubInfo>() {
public ContextHubInfo createFromParcel(Parcel in) {
return new ContextHubInfo(in);
diff --git a/core/java/android/hardware/location/ContextHubMessage.java b/core/java/android/hardware/location/ContextHubMessage.java
index e1c69d7..bf10048 100644
--- a/core/java/android/hardware/location/ContextHubMessage.java
+++ b/core/java/android/hardware/location/ContextHubMessage.java
@@ -125,7 +125,7 @@
out.writeByteArray(mData);
}
- public static final Parcelable.Creator<ContextHubMessage> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ContextHubMessage> CREATOR
= new Parcelable.Creator<ContextHubMessage>() {
public ContextHubMessage createFromParcel(Parcel in) {
return new ContextHubMessage(in);
diff --git a/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java b/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
index 7079237..fbbf687 100644
--- a/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
+++ b/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
@@ -72,7 +72,7 @@
return mLocation;
}
- public static final Creator<GeofenceHardwareMonitorEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<GeofenceHardwareMonitorEvent> CREATOR =
new Creator<GeofenceHardwareMonitorEvent>() {
@Override
public GeofenceHardwareMonitorEvent createFromParcel(Parcel source) {
diff --git a/core/java/android/hardware/location/GeofenceHardwareRequestParcelable.java b/core/java/android/hardware/location/GeofenceHardwareRequestParcelable.java
index d3311f5..df13ade 100644
--- a/core/java/android/hardware/location/GeofenceHardwareRequestParcelable.java
+++ b/core/java/android/hardware/location/GeofenceHardwareRequestParcelable.java
@@ -134,7 +134,7 @@
/**
* Method definitions to support Parcelable operations.
*/
- public static final Parcelable.Creator<GeofenceHardwareRequestParcelable> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GeofenceHardwareRequestParcelable> CREATOR =
new Parcelable.Creator<GeofenceHardwareRequestParcelable>() {
@Override
public GeofenceHardwareRequestParcelable createFromParcel(Parcel parcel) {
diff --git a/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl b/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl
index 3fe645c..2dfaf60 100644
--- a/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl
+++ b/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl
@@ -32,5 +32,6 @@
* @param isSupported whether the platform has hardware support for the feature
* @param instance the available instance to provide access to the feature
*/
+ @UnsupportedAppUsage
void onAvailabilityChanged(in boolean isSupported, in IActivityRecognitionHardware instance);
}
diff --git a/core/java/android/hardware/location/MemoryRegion.java b/core/java/android/hardware/location/MemoryRegion.java
index 3d9e859..ecd369a 100644
--- a/core/java/android/hardware/location/MemoryRegion.java
+++ b/core/java/android/hardware/location/MemoryRegion.java
@@ -147,7 +147,7 @@
mIsExecutable = source.readInt() != 0;
}
- public static final Parcelable.Creator<MemoryRegion> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<MemoryRegion> CREATOR
= new Parcelable.Creator<MemoryRegion>() {
public MemoryRegion createFromParcel(Parcel in) {
return new MemoryRegion(in);
diff --git a/core/java/android/hardware/location/NanoApp.java b/core/java/android/hardware/location/NanoApp.java
index 62e7182..3fbb069 100644
--- a/core/java/android/hardware/location/NanoApp.java
+++ b/core/java/android/hardware/location/NanoApp.java
@@ -359,7 +359,7 @@
out.writeByteArray(mAppBinary);
}
- public static final Parcelable.Creator<NanoApp> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NanoApp> CREATOR
= new Parcelable.Creator<NanoApp>() {
public NanoApp createFromParcel(Parcel in) {
return new NanoApp(in);
diff --git a/core/java/android/hardware/location/NanoAppBinary.java b/core/java/android/hardware/location/NanoAppBinary.java
index ba01ca2..b311a92 100644
--- a/core/java/android/hardware/location/NanoAppBinary.java
+++ b/core/java/android/hardware/location/NanoAppBinary.java
@@ -237,7 +237,7 @@
out.writeByteArray(mNanoAppBinary);
}
- public static final Creator<NanoAppBinary> CREATOR =
+ public static final @android.annotation.NonNull Creator<NanoAppBinary> CREATOR =
new Creator<NanoAppBinary>() {
@Override
public NanoAppBinary createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/location/NanoAppFilter.java b/core/java/android/hardware/location/NanoAppFilter.java
index 562065e..0700dd1 100644
--- a/core/java/android/hardware/location/NanoAppFilter.java
+++ b/core/java/android/hardware/location/NanoAppFilter.java
@@ -139,7 +139,7 @@
+ ", vendorMask: " + mAppIdVendorMask;
}
- public static final Parcelable.Creator<NanoAppFilter> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NanoAppFilter> CREATOR
= new Parcelable.Creator<NanoAppFilter>() {
public NanoAppFilter createFromParcel(Parcel in) {
return new NanoAppFilter(in);
diff --git a/core/java/android/hardware/location/NanoAppInstanceInfo.java b/core/java/android/hardware/location/NanoAppInstanceInfo.java
index 2db6a79..a6c754d 100644
--- a/core/java/android/hardware/location/NanoAppInstanceInfo.java
+++ b/core/java/android/hardware/location/NanoAppInstanceInfo.java
@@ -208,7 +208,7 @@
out.writeIntArray(mOutputEvents);
}
- public static final Parcelable.Creator<NanoAppInstanceInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NanoAppInstanceInfo> CREATOR
= new Parcelable.Creator<NanoAppInstanceInfo>() {
public NanoAppInstanceInfo createFromParcel(Parcel in) {
return new NanoAppInstanceInfo(in);
diff --git a/core/java/android/hardware/location/NanoAppMessage.java b/core/java/android/hardware/location/NanoAppMessage.java
index 9f90d59..d5e3529 100644
--- a/core/java/android/hardware/location/NanoAppMessage.java
+++ b/core/java/android/hardware/location/NanoAppMessage.java
@@ -134,7 +134,7 @@
out.writeByteArray(mMessageBody);
}
- public static final Creator<NanoAppMessage> CREATOR =
+ public static final @android.annotation.NonNull Creator<NanoAppMessage> CREATOR =
new Creator<NanoAppMessage>() {
@Override
public NanoAppMessage createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/location/NanoAppState.java b/core/java/android/hardware/location/NanoAppState.java
index d05277d..8de7ecd 100644
--- a/core/java/android/hardware/location/NanoAppState.java
+++ b/core/java/android/hardware/location/NanoAppState.java
@@ -75,7 +75,7 @@
out.writeInt(mIsEnabled ? 1 : 0);
}
- public static final Creator<NanoAppState> CREATOR =
+ public static final @android.annotation.NonNull Creator<NanoAppState> CREATOR =
new Creator<NanoAppState>() {
@Override
public NanoAppState createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/radio/Announcement.java b/core/java/android/hardware/radio/Announcement.java
index 166fe60..8febed3 100644
--- a/core/java/android/hardware/radio/Announcement.java
+++ b/core/java/android/hardware/radio/Announcement.java
@@ -108,7 +108,7 @@
return 0;
}
- public static final Parcelable.Creator<Announcement> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Announcement> CREATOR =
new Parcelable.Creator<Announcement>() {
public Announcement createFromParcel(Parcel in) {
return new Announcement(in);
diff --git a/core/java/android/hardware/radio/ProgramList.java b/core/java/android/hardware/radio/ProgramList.java
index e6f523c..69f9273 100644
--- a/core/java/android/hardware/radio/ProgramList.java
+++ b/core/java/android/hardware/radio/ProgramList.java
@@ -304,7 +304,7 @@
return 0;
}
- public static final Parcelable.Creator<Filter> CREATOR = new Parcelable.Creator<Filter>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Filter> CREATOR = new Parcelable.Creator<Filter>() {
public Filter createFromParcel(Parcel in) {
return new Filter(in);
}
@@ -409,7 +409,7 @@
return 0;
}
- public static final Parcelable.Creator<Chunk> CREATOR = new Parcelable.Creator<Chunk>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Chunk> CREATOR = new Parcelable.Creator<Chunk>() {
public Chunk createFromParcel(Parcel in) {
return new Chunk(in);
}
diff --git a/core/java/android/hardware/radio/ProgramSelector.java b/core/java/android/hardware/radio/ProgramSelector.java
index 90d407c..277a186 100644
--- a/core/java/android/hardware/radio/ProgramSelector.java
+++ b/core/java/android/hardware/radio/ProgramSelector.java
@@ -534,7 +534,7 @@
return 0;
}
- public static final Parcelable.Creator<ProgramSelector> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ProgramSelector> CREATOR =
new Parcelable.Creator<ProgramSelector>() {
public ProgramSelector createFromParcel(Parcel in) {
return new ProgramSelector(in);
@@ -632,7 +632,7 @@
return 0;
}
- public static final Parcelable.Creator<Identifier> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Identifier> CREATOR =
new Parcelable.Creator<Identifier>() {
public Identifier createFromParcel(Parcel in) {
return new Identifier(in);
diff --git a/core/java/android/hardware/radio/RadioManager.java b/core/java/android/hardware/radio/RadioManager.java
index 8263bb8..92653d18 100644
--- a/core/java/android/hardware/radio/RadioManager.java
+++ b/core/java/android/hardware/radio/RadioManager.java
@@ -448,7 +448,7 @@
mVendorInfo = Utils.readStringMap(in);
}
- public static final Parcelable.Creator<ModuleProperties> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ModuleProperties> CREATOR
= new Parcelable.Creator<ModuleProperties>() {
public ModuleProperties createFromParcel(Parcel in) {
return new ModuleProperties(in);
@@ -625,7 +625,7 @@
return type;
}
- public static final Parcelable.Creator<BandDescriptor> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<BandDescriptor> CREATOR
= new Parcelable.Creator<BandDescriptor>() {
public BandDescriptor createFromParcel(Parcel in) {
int type = lookupTypeFromParcel(in);
@@ -762,7 +762,7 @@
mEa = in.readByte() == 1;
}
- public static final Parcelable.Creator<FmBandDescriptor> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<FmBandDescriptor> CREATOR
= new Parcelable.Creator<FmBandDescriptor>() {
public FmBandDescriptor createFromParcel(Parcel in) {
return new FmBandDescriptor(in);
@@ -855,7 +855,7 @@
mStereo = in.readByte() == 1;
}
- public static final Parcelable.Creator<AmBandDescriptor> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AmBandDescriptor> CREATOR
= new Parcelable.Creator<AmBandDescriptor>() {
public AmBandDescriptor createFromParcel(Parcel in) {
return new AmBandDescriptor(in);
@@ -966,7 +966,7 @@
}
- public static final Parcelable.Creator<BandConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<BandConfig> CREATOR
= new Parcelable.Creator<BandConfig>() {
public BandConfig createFromParcel(Parcel in) {
int type = BandDescriptor.lookupTypeFromParcel(in);
@@ -1099,7 +1099,7 @@
mEa = in.readByte() == 1;
}
- public static final Parcelable.Creator<FmBandConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<FmBandConfig> CREATOR
= new Parcelable.Creator<FmBandConfig>() {
public FmBandConfig createFromParcel(Parcel in) {
return new FmBandConfig(in);
@@ -1295,7 +1295,7 @@
mStereo = in.readByte() == 1;
}
- public static final Parcelable.Creator<AmBandConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AmBandConfig> CREATOR
= new Parcelable.Creator<AmBandConfig>() {
public AmBandConfig createFromParcel(Parcel in) {
return new AmBandConfig(in);
@@ -1628,7 +1628,7 @@
mVendorInfo = Utils.readStringMap(in);
}
- public static final Parcelable.Creator<ProgramInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ProgramInfo> CREATOR
= new Parcelable.Creator<ProgramInfo>() {
public ProgramInfo createFromParcel(Parcel in) {
return new ProgramInfo(in);
diff --git a/core/java/android/hardware/radio/RadioMetadata.java b/core/java/android/hardware/radio/RadioMetadata.java
index baa7a50..1cbb171 100644
--- a/core/java/android/hardware/radio/RadioMetadata.java
+++ b/core/java/android/hardware/radio/RadioMetadata.java
@@ -225,7 +225,7 @@
out.writeInt(mTimezoneOffsetMinutes);
}
- public static final Parcelable.Creator<Clock> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Clock> CREATOR
= new Parcelable.Creator<Clock>() {
public Clock createFromParcel(Parcel in) {
return new Clock(in);
@@ -426,7 +426,7 @@
return NATIVE_KEY_MAPPING.get(nativeKey, null);
}
- public static final Parcelable.Creator<RadioMetadata> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RadioMetadata> CREATOR =
new Parcelable.Creator<RadioMetadata>() {
@Override
public RadioMetadata createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index dc4f0b7..cf3395a 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -140,7 +140,7 @@
this.returnsTriggerInEvent = returnsTriggerInEvent;
}
- public static final Parcelable.Creator<ModuleProperties> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ModuleProperties> CREATOR
= new Parcelable.Creator<ModuleProperties>() {
public ModuleProperties createFromParcel(Parcel in) {
return ModuleProperties.fromParcel(in);
@@ -326,7 +326,7 @@
this.users = users;
}
- public static final Parcelable.Creator<Keyphrase> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Keyphrase> CREATOR
= new Parcelable.Creator<Keyphrase>() {
public Keyphrase createFromParcel(Parcel in) {
return Keyphrase.fromParcel(in);
@@ -436,7 +436,7 @@
this.keyphrases = keyphrases;
}
- public static final Parcelable.Creator<KeyphraseSoundModel> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyphraseSoundModel> CREATOR
= new Parcelable.Creator<KeyphraseSoundModel>() {
public KeyphraseSoundModel createFromParcel(Parcel in) {
return KeyphraseSoundModel.fromParcel(in);
@@ -516,7 +516,7 @@
****************************************************************************/
public static class GenericSoundModel extends SoundModel implements Parcelable {
- public static final Parcelable.Creator<GenericSoundModel> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<GenericSoundModel> CREATOR
= new Parcelable.Creator<GenericSoundModel>() {
public GenericSoundModel createFromParcel(Parcel in) {
return GenericSoundModel.fromParcel(in);
@@ -746,7 +746,7 @@
}
/** @hide */
- public static final Parcelable.Creator<RecognitionEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<RecognitionEvent> CREATOR
= new Parcelable.Creator<RecognitionEvent>() {
public RecognitionEvent createFromParcel(Parcel in) {
return RecognitionEvent.fromParcel(in);
@@ -920,7 +920,7 @@
this.data = data;
}
- public static final Parcelable.Creator<RecognitionConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<RecognitionConfig> CREATOR
= new Parcelable.Creator<RecognitionConfig>() {
public RecognitionConfig createFromParcel(Parcel in) {
return RecognitionConfig.fromParcel(in);
@@ -983,7 +983,7 @@
this.confidenceLevel = confidenceLevel;
}
- public static final Parcelable.Creator<ConfidenceLevel> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ConfidenceLevel> CREATOR
= new Parcelable.Creator<ConfidenceLevel>() {
public ConfidenceLevel createFromParcel(Parcel in) {
return ConfidenceLevel.fromParcel(in);
@@ -1077,7 +1077,7 @@
this.confidenceLevels = confidenceLevels;
}
- public static final Parcelable.Creator<KeyphraseRecognitionExtra> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyphraseRecognitionExtra> CREATOR
= new Parcelable.Creator<KeyphraseRecognitionExtra>() {
public KeyphraseRecognitionExtra createFromParcel(Parcel in) {
return KeyphraseRecognitionExtra.fromParcel(in);
@@ -1169,7 +1169,7 @@
this.keyphraseExtras = keyphraseExtras;
}
- public static final Parcelable.Creator<KeyphraseRecognitionEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyphraseRecognitionEvent> CREATOR
= new Parcelable.Creator<KeyphraseRecognitionEvent>() {
public KeyphraseRecognitionEvent createFromParcel(Parcel in) {
return KeyphraseRecognitionEvent.fromParcelForKeyphrase(in);
@@ -1290,7 +1290,7 @@
data);
}
- public static final Parcelable.Creator<GenericRecognitionEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<GenericRecognitionEvent> CREATOR
= new Parcelable.Creator<GenericRecognitionEvent>() {
public GenericRecognitionEvent createFromParcel(Parcel in) {
return GenericRecognitionEvent.fromParcelForGeneric(in);
@@ -1357,7 +1357,7 @@
this.data = data;
}
- public static final Parcelable.Creator<SoundModelEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SoundModelEvent> CREATOR
= new Parcelable.Creator<SoundModelEvent>() {
public SoundModelEvent createFromParcel(Parcel in) {
return SoundModelEvent.fromParcel(in);
diff --git a/core/java/android/hardware/usb/ParcelableUsbPort.java b/core/java/android/hardware/usb/ParcelableUsbPort.java
index 30388af..19655ed 100644
--- a/core/java/android/hardware/usb/ParcelableUsbPort.java
+++ b/core/java/android/hardware/usb/ParcelableUsbPort.java
@@ -89,7 +89,7 @@
dest.writeBoolean(mSupportsEnableContaminantPresenceDetection);
}
- public static final Creator<ParcelableUsbPort> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelableUsbPort> CREATOR =
new Creator<ParcelableUsbPort>() {
@Override
public ParcelableUsbPort createFromParcel(Parcel in) {
diff --git a/core/java/android/hardware/usb/UsbAccessory.java b/core/java/android/hardware/usb/UsbAccessory.java
index b418d43..a76e4ad 100644
--- a/core/java/android/hardware/usb/UsbAccessory.java
+++ b/core/java/android/hardware/usb/UsbAccessory.java
@@ -215,7 +215,7 @@
", mSerialNumberReader=" + mSerialNumberReader + "]";
}
- public static final Parcelable.Creator<UsbAccessory> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbAccessory> CREATOR =
new Parcelable.Creator<UsbAccessory>() {
public UsbAccessory createFromParcel(Parcel in) {
String manufacturer = in.readString();
diff --git a/core/java/android/hardware/usb/UsbConfiguration.java b/core/java/android/hardware/usb/UsbConfiguration.java
index 6ce4201..66269cb 100644
--- a/core/java/android/hardware/usb/UsbConfiguration.java
+++ b/core/java/android/hardware/usb/UsbConfiguration.java
@@ -165,7 +165,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<UsbConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbConfiguration> CREATOR =
new Parcelable.Creator<UsbConfiguration>() {
public UsbConfiguration createFromParcel(Parcel in) {
int id = in.readInt();
diff --git a/core/java/android/hardware/usb/UsbDevice.java b/core/java/android/hardware/usb/UsbDevice.java
index b08212c..08c9eea 100644
--- a/core/java/android/hardware/usb/UsbDevice.java
+++ b/core/java/android/hardware/usb/UsbDevice.java
@@ -300,7 +300,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<UsbDevice> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbDevice> CREATOR =
new Parcelable.Creator<UsbDevice>() {
public UsbDevice createFromParcel(Parcel in) {
String name = in.readString();
diff --git a/core/java/android/hardware/usb/UsbEndpoint.java b/core/java/android/hardware/usb/UsbEndpoint.java
index c346700..82117e7 100644
--- a/core/java/android/hardware/usb/UsbEndpoint.java
+++ b/core/java/android/hardware/usb/UsbEndpoint.java
@@ -133,7 +133,7 @@
",mMaxPacketSize=" + mMaxPacketSize + ",mInterval=" + mInterval +"]";
}
- public static final Parcelable.Creator<UsbEndpoint> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbEndpoint> CREATOR =
new Parcelable.Creator<UsbEndpoint>() {
public UsbEndpoint createFromParcel(Parcel in) {
int address = in.readInt();
diff --git a/core/java/android/hardware/usb/UsbInterface.java b/core/java/android/hardware/usb/UsbInterface.java
index 4b5278c..5cb55a2 100644
--- a/core/java/android/hardware/usb/UsbInterface.java
+++ b/core/java/android/hardware/usb/UsbInterface.java
@@ -162,7 +162,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<UsbInterface> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbInterface> CREATOR =
new Parcelable.Creator<UsbInterface>() {
public UsbInterface createFromParcel(Parcel in) {
int id = in.readInt();
diff --git a/core/java/android/hardware/usb/UsbPortStatus.java b/core/java/android/hardware/usb/UsbPortStatus.java
index 426dba8..5e9a410 100644
--- a/core/java/android/hardware/usb/UsbPortStatus.java
+++ b/core/java/android/hardware/usb/UsbPortStatus.java
@@ -352,7 +352,7 @@
dest.writeInt(mContaminantDetectionStatus);
}
- public static final Parcelable.Creator<UsbPortStatus> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UsbPortStatus> CREATOR =
new Parcelable.Creator<UsbPortStatus>() {
@Override
public UsbPortStatus createFromParcel(Parcel in) {
diff --git a/core/java/android/net/CaptivePortal.java b/core/java/android/net/CaptivePortal.java
index 3ab35e1..f208724 100644
--- a/core/java/android/net/CaptivePortal.java
+++ b/core/java/android/net/CaptivePortal.java
@@ -61,7 +61,7 @@
out.writeStrongBinder(mBinder);
}
- public static final Parcelable.Creator<CaptivePortal> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<CaptivePortal> CREATOR
= new Parcelable.Creator<CaptivePortal>() {
@Override
public CaptivePortal createFromParcel(Parcel in) {
diff --git a/core/java/android/net/ConnectionInfo.java b/core/java/android/net/ConnectionInfo.java
index 58d0e05..4514a84 100644
--- a/core/java/android/net/ConnectionInfo.java
+++ b/core/java/android/net/ConnectionInfo.java
@@ -54,7 +54,7 @@
out.writeInt(remote.getPort());
}
- public static final Creator<ConnectionInfo> CREATOR = new Creator<ConnectionInfo>() {
+ public static final @android.annotation.NonNull Creator<ConnectionInfo> CREATOR = new Creator<ConnectionInfo>() {
public ConnectionInfo createFromParcel(Parcel in) {
int protocol = in.readInt();
InetAddress localAddress;
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index c1bce5e..1312f18 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -3684,7 +3684,8 @@
/**
* Registers to receive notifications about all networks which satisfy the given
* {@link NetworkRequest}. The callbacks will continue to be called until
- * either the application exits or link #unregisterNetworkCallback(NetworkCallback)} is called.
+ * either the application exits or {@link #unregisterNetworkCallback(NetworkCallback)} is
+ * called.
*
* @param request {@link NetworkRequest} describing this request.
* @param networkCallback The {@link NetworkCallback} that the system will call as suitable
@@ -3700,7 +3701,8 @@
/**
* Registers to receive notifications about all networks which satisfy the given
* {@link NetworkRequest}. The callbacks will continue to be called until
- * either the application exits or link #unregisterNetworkCallback(NetworkCallback)} is called.
+ * either the application exits or {@link #unregisterNetworkCallback(NetworkCallback)} is
+ * called.
*
* @param request {@link NetworkRequest} describing this request.
* @param networkCallback The {@link NetworkCallback} that the system will call as suitable
@@ -4291,6 +4293,8 @@
* @return {@code uid} if the connection is found and the app has permission to observe it
* (e.g., if it is associated with the calling VPN app's tunnel) or
* {@link android.os.Process#INVALID_UID} if the connection is not found.
+ * Throws {@link SecurityException} if the caller is not the active VPN for the current user.
+ * Throws {@link IllegalArgumentException} if an unsupported protocol is requested.
*/
public int getConnectionOwnerUid(int protocol, @NonNull InetSocketAddress local,
@NonNull InetSocketAddress remote) {
diff --git a/core/java/android/net/ConnectivityMetricsEvent.java b/core/java/android/net/ConnectivityMetricsEvent.java
index 394ac42..522add1 100644
--- a/core/java/android/net/ConnectivityMetricsEvent.java
+++ b/core/java/android/net/ConnectivityMetricsEvent.java
@@ -51,7 +51,7 @@
}
/** Implement the Parcelable interface */
- public static final Parcelable.Creator<ConnectivityMetricsEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ConnectivityMetricsEvent> CREATOR
= new Parcelable.Creator<ConnectivityMetricsEvent> (){
public ConnectivityMetricsEvent createFromParcel(Parcel source) {
return new ConnectivityMetricsEvent(source);
diff --git a/core/java/android/net/DataUsageRequest.java b/core/java/android/net/DataUsageRequest.java
index ac9a5a3..0ac8f7e7 100644
--- a/core/java/android/net/DataUsageRequest.java
+++ b/core/java/android/net/DataUsageRequest.java
@@ -69,7 +69,7 @@
dest.writeLong(thresholdInBytes);
}
- public static final Creator<DataUsageRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<DataUsageRequest> CREATOR =
new Creator<DataUsageRequest>() {
@Override
public DataUsageRequest createFromParcel(Parcel in) {
diff --git a/core/java/android/net/DhcpInfo.java b/core/java/android/net/DhcpInfo.java
index 788d7d9..98bab44 100644
--- a/core/java/android/net/DhcpInfo.java
+++ b/core/java/android/net/DhcpInfo.java
@@ -84,7 +84,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<DhcpInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<DhcpInfo> CREATOR =
new Creator<DhcpInfo>() {
public DhcpInfo createFromParcel(Parcel in) {
DhcpInfo info = new DhcpInfo();
diff --git a/core/java/android/net/DhcpResults.java b/core/java/android/net/DhcpResults.java
index 6f9e65f..1a3a6f8 100644
--- a/core/java/android/net/DhcpResults.java
+++ b/core/java/android/net/DhcpResults.java
@@ -164,7 +164,7 @@
/**
* Implement the Parcelable interface
*/
- public static final Creator<DhcpResults> CREATOR =
+ public static final @android.annotation.NonNull Creator<DhcpResults> CREATOR =
new Creator<DhcpResults>() {
public DhcpResults createFromParcel(Parcel in) {
return readFromParcel(in);
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 87c62d2..6728712 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -47,10 +47,12 @@
{
Network getActiveNetwork();
Network getActiveNetworkForUid(int uid, boolean ignoreBlocked);
+ @UnsupportedAppUsage
NetworkInfo getActiveNetworkInfo();
NetworkInfo getActiveNetworkInfoForUid(int uid, boolean ignoreBlocked);
NetworkInfo getNetworkInfo(int networkType);
NetworkInfo getNetworkInfoForUid(in Network network, int uid, boolean ignoreBlocked);
+ @UnsupportedAppUsage
NetworkInfo[] getAllNetworkInfo();
Network getNetworkForType(int networkType);
Network[] getAllNetworks();
@@ -58,12 +60,14 @@
boolean isNetworkSupported(int networkType);
+ @UnsupportedAppUsage
LinkProperties getActiveLinkProperties();
LinkProperties getLinkPropertiesForType(int networkType);
LinkProperties getLinkProperties(in Network network);
NetworkCapabilities getNetworkCapabilities(in Network network);
+ @UnsupportedAppUsage
NetworkState[] getAllNetworkState();
NetworkQuotaInfo getActiveNetworkQuotaInfo();
@@ -75,6 +79,7 @@
int untether(String iface, String callerPkg);
+ @UnsupportedAppUsage
int getLastTetherError(String iface);
boolean isTetheringSupported(String callerPkg);
@@ -84,16 +89,21 @@
void stopTethering(int type, String callerPkg);
+ @UnsupportedAppUsage
String[] getTetherableIfaces();
+ @UnsupportedAppUsage
String[] getTetheredIfaces();
+ @UnsupportedAppUsage
String[] getTetheringErroredIfaces();
String[] getTetheredDhcpRanges();
+ @UnsupportedAppUsage
String[] getTetherableUsbRegexs();
+ @UnsupportedAppUsage
String[] getTetherableWifiRegexs();
String[] getTetherableBluetoothRegexs();
@@ -118,12 +128,11 @@
VpnConfig getVpnConfig(int userId);
+ @UnsupportedAppUsage
void startLegacyVpn(in VpnProfile profile);
LegacyVpnInfo getLegacyVpnInfo(int userId);
- VpnInfo[] getAllVpnInfo();
-
boolean updateLockdownVpn();
boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);
boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown,
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index e92302a..385cb1d 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -31,9 +31,11 @@
interface INetworkPolicyManager {
/** Control UID policies. */
+ @UnsupportedAppUsage
void setUidPolicy(int uid, int policy);
void addUidPolicy(int uid, int policy);
void removeUidPolicy(int uid, int policy);
+ @UnsupportedAppUsage
int getUidPolicy(int uid);
int[] getUidsWithPolicy(int policy);
@@ -41,14 +43,18 @@
void unregisterListener(INetworkPolicyListener listener);
/** Control network policies atomically. */
+ @UnsupportedAppUsage
void setNetworkPolicies(in NetworkPolicy[] policies);
NetworkPolicy[] getNetworkPolicies(String callingPackage);
/** Snooze limit on policy matching given template. */
+ @UnsupportedAppUsage
void snoozeLimit(in NetworkTemplate template);
/** Control if background data is restricted system-wide. */
+ @UnsupportedAppUsage
void setRestrictBackground(boolean restrictBackground);
+ @UnsupportedAppUsage
boolean getRestrictBackground();
/** Callback used to change internal state on tethering */
@@ -64,6 +70,7 @@
void setDeviceIdleMode(boolean enabled);
void setWifiMeteredOverride(String networkId, int meteredOverride);
+ @UnsupportedAppUsage
NetworkQuotaInfo getNetworkQuotaInfo(in NetworkState state);
SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage);
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index 8e6f272..41efc50 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -19,16 +19,19 @@
import android.net.DataUsageRequest;
import android.net.INetworkStatsSession;
import android.net.Network;
+import android.net.NetworkState;
import android.net.NetworkStats;
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
import android.os.IBinder;
import android.os.Messenger;
+import com.android.internal.net.VpnInfo;
/** {@hide} */
interface INetworkStatsService {
/** Start a statistics query session. */
+ @UnsupportedAppUsage
INetworkStatsSession openSession();
/** Start a statistics query session. If calling package is profile or device owner then it is
@@ -37,9 +40,11 @@
* PACKAGE_USAGE_STATS permission is always checked. If PACKAGE_USAGE_STATS is not granted
* READ_NETWORK_USAGE_STATS is checked for.
*/
+ @UnsupportedAppUsage
INetworkStatsSession openSessionForUsageStats(int flags, String callingPackage);
/** Return data layer snapshot of UID network usage. */
+ @UnsupportedAppUsage
NetworkStats getDataLayerSnapshotForUid(int uid);
/** Get a detailed snapshot of stats since boot for all UIDs.
@@ -52,14 +57,20 @@
NetworkStats getDetailedUidStats(in String[] requiredIfaces);
/** Return set of any ifaces associated with mobile networks since boot. */
+ @UnsupportedAppUsage
String[] getMobileIfaces();
/** Increment data layer count of operations performed for UID and tag. */
void incrementOperationCount(int uid, int tag, int operationCount);
/** Force update of ifaces. */
- void forceUpdateIfaces(in Network[] defaultNetworks);
+ void forceUpdateIfaces(
+ in Network[] defaultNetworks,
+ in VpnInfo[] vpnArray,
+ in NetworkState[] networkStates,
+ in String activeIface);
/** Force update of statistics. */
+ @UnsupportedAppUsage
void forceUpdate();
/** Registers a callback on data usage. */
diff --git a/core/java/android/net/INetworkStatsSession.aidl b/core/java/android/net/INetworkStatsSession.aidl
index 5229a3b..f13f2cb 100644
--- a/core/java/android/net/INetworkStatsSession.aidl
+++ b/core/java/android/net/INetworkStatsSession.aidl
@@ -27,13 +27,17 @@
NetworkStats getDeviceSummaryForNetwork(in NetworkTemplate template, long start, long end);
/** Return network layer usage summary for traffic that matches template. */
+ @UnsupportedAppUsage
NetworkStats getSummaryForNetwork(in NetworkTemplate template, long start, long end);
/** Return historical network layer stats for traffic that matches template. */
+ @UnsupportedAppUsage
NetworkStatsHistory getHistoryForNetwork(in NetworkTemplate template, int fields);
/** Return network layer usage summary per UID for traffic that matches template. */
+ @UnsupportedAppUsage
NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);
/** Return historical network layer stats for specific UID traffic that matches template. */
+ @UnsupportedAppUsage
NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
/** Return historical network layer stats for specific UID traffic that matches template. */
NetworkStatsHistory getHistoryIntervalForUid(in NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end);
@@ -41,6 +45,7 @@
/** Return array of uids that have stats and are accessible to the calling user */
int[] getRelevantUids();
+ @UnsupportedAppUsage
void close();
}
diff --git a/core/java/android/net/InetAddresses.java b/core/java/android/net/InetAddresses.java
index 8e6c69a..01b795e 100644
--- a/core/java/android/net/InetAddresses.java
+++ b/core/java/android/net/InetAddresses.java
@@ -16,6 +16,8 @@
package android.net;
+import android.annotation.NonNull;
+
import libcore.net.InetAddressUtils;
import java.net.InetAddress;
@@ -40,7 +42,7 @@
* @param address the address to parse.
* @return true if the supplied address is numeric, false otherwise.
*/
- public static boolean isNumericAddress(String address) {
+ public static boolean isNumericAddress(@NonNull String address) {
return InetAddressUtils.isNumericAddress(address);
}
@@ -57,7 +59,7 @@
* @return an {@link InetAddress} instance corresponding to the address.
* @throws IllegalArgumentException if {@code address} is not a numeric address.
*/
- public static InetAddress parseNumericAddress(String address) {
+ public static @NonNull InetAddress parseNumericAddress(@NonNull String address) {
return InetAddressUtils.parseNumericAddress(address);
}
}
diff --git a/core/java/android/net/InterfaceConfiguration.java b/core/java/android/net/InterfaceConfiguration.java
index b9d49c1..c638491 100644
--- a/core/java/android/net/InterfaceConfiguration.java
+++ b/core/java/android/net/InterfaceConfiguration.java
@@ -194,7 +194,7 @@
}
}
- public static final Creator<InterfaceConfiguration> CREATOR = new Creator<
+ public static final @android.annotation.NonNull Creator<InterfaceConfiguration> CREATOR = new Creator<
InterfaceConfiguration>() {
public InterfaceConfiguration createFromParcel(Parcel in) {
InterfaceConfiguration info = new InterfaceConfiguration();
diff --git a/core/java/android/net/IpConfiguration.java b/core/java/android/net/IpConfiguration.java
index 3319f33..2af82d7 100644
--- a/core/java/android/net/IpConfiguration.java
+++ b/core/java/android/net/IpConfiguration.java
@@ -189,7 +189,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<IpConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Creator<IpConfiguration> CREATOR =
new Creator<IpConfiguration>() {
public IpConfiguration createFromParcel(Parcel in) {
IpConfiguration config = new IpConfiguration();
diff --git a/core/java/android/net/IpPrefix.java b/core/java/android/net/IpPrefix.java
index 175263f..21bbd30 100644
--- a/core/java/android/net/IpPrefix.java
+++ b/core/java/android/net/IpPrefix.java
@@ -285,7 +285,7 @@
/**
* Implement the Parcelable interface.
*/
- public static final Creator<IpPrefix> CREATOR =
+ public static final @android.annotation.NonNull Creator<IpPrefix> CREATOR =
new Creator<IpPrefix>() {
public IpPrefix createFromParcel(Parcel in) {
byte[] address = in.createByteArray();
diff --git a/core/java/android/net/IpSecAlgorithm.java b/core/java/android/net/IpSecAlgorithm.java
index 8034bb6..38d9883 100644
--- a/core/java/android/net/IpSecAlgorithm.java
+++ b/core/java/android/net/IpSecAlgorithm.java
@@ -191,7 +191,7 @@
}
/** Parcelable Creator */
- public static final Parcelable.Creator<IpSecAlgorithm> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecAlgorithm> CREATOR =
new Parcelable.Creator<IpSecAlgorithm>() {
public IpSecAlgorithm createFromParcel(Parcel in) {
final String name = in.readString();
diff --git a/core/java/android/net/IpSecConfig.java b/core/java/android/net/IpSecConfig.java
index 3552655..a64014f 100644
--- a/core/java/android/net/IpSecConfig.java
+++ b/core/java/android/net/IpSecConfig.java
@@ -322,7 +322,7 @@
return strBuilder.toString();
}
- public static final Parcelable.Creator<IpSecConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecConfig> CREATOR =
new Parcelable.Creator<IpSecConfig>() {
public IpSecConfig createFromParcel(Parcel in) {
return new IpSecConfig(in);
diff --git a/core/java/android/net/IpSecSpiResponse.java b/core/java/android/net/IpSecSpiResponse.java
index 71dfa03..f99e570 100644
--- a/core/java/android/net/IpSecSpiResponse.java
+++ b/core/java/android/net/IpSecSpiResponse.java
@@ -65,7 +65,7 @@
spi = in.readInt();
}
- public static final Parcelable.Creator<IpSecSpiResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecSpiResponse> CREATOR =
new Parcelable.Creator<IpSecSpiResponse>() {
public IpSecSpiResponse createFromParcel(Parcel in) {
return new IpSecSpiResponse(in);
diff --git a/core/java/android/net/IpSecTransformResponse.java b/core/java/android/net/IpSecTransformResponse.java
index cfc1762..a384889 100644
--- a/core/java/android/net/IpSecTransformResponse.java
+++ b/core/java/android/net/IpSecTransformResponse.java
@@ -60,7 +60,7 @@
resourceId = in.readInt();
}
- public static final Parcelable.Creator<IpSecTransformResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecTransformResponse> CREATOR =
new Parcelable.Creator<IpSecTransformResponse>() {
public IpSecTransformResponse createFromParcel(Parcel in) {
return new IpSecTransformResponse(in);
diff --git a/core/java/android/net/IpSecTunnelInterfaceResponse.java b/core/java/android/net/IpSecTunnelInterfaceResponse.java
index c23d831..e3411e0 100644
--- a/core/java/android/net/IpSecTunnelInterfaceResponse.java
+++ b/core/java/android/net/IpSecTunnelInterfaceResponse.java
@@ -65,7 +65,7 @@
interfaceName = in.readString();
}
- public static final Parcelable.Creator<IpSecTunnelInterfaceResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecTunnelInterfaceResponse> CREATOR =
new Parcelable.Creator<IpSecTunnelInterfaceResponse>() {
public IpSecTunnelInterfaceResponse createFromParcel(Parcel in) {
return new IpSecTunnelInterfaceResponse(in);
diff --git a/core/java/android/net/IpSecUdpEncapResponse.java b/core/java/android/net/IpSecUdpEncapResponse.java
index 4679267..4e7ba9b 100644
--- a/core/java/android/net/IpSecUdpEncapResponse.java
+++ b/core/java/android/net/IpSecUdpEncapResponse.java
@@ -83,7 +83,7 @@
fileDescriptor = in.readParcelable(ParcelFileDescriptor.class.getClassLoader());
}
- public static final Parcelable.Creator<IpSecUdpEncapResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<IpSecUdpEncapResponse> CREATOR =
new Parcelable.Creator<IpSecUdpEncapResponse>() {
public IpSecUdpEncapResponse createFromParcel(Parcel in) {
return new IpSecUdpEncapResponse(in);
diff --git a/core/java/android/net/KeepalivePacketData.java b/core/java/android/net/KeepalivePacketData.java
index 18726f7..9b8b732 100644
--- a/core/java/android/net/KeepalivePacketData.java
+++ b/core/java/android/net/KeepalivePacketData.java
@@ -105,7 +105,7 @@
}
/** Parcelable Creator */
- public static final Parcelable.Creator<KeepalivePacketData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeepalivePacketData> CREATOR =
new Parcelable.Creator<KeepalivePacketData>() {
public KeepalivePacketData createFromParcel(Parcel in) {
return new KeepalivePacketData(in);
diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java
index 8d779aa..dcf64d5 100644
--- a/core/java/android/net/LinkAddress.java
+++ b/core/java/android/net/LinkAddress.java
@@ -356,7 +356,7 @@
/**
* Implement the Parcelable interface.
*/
- public static final Creator<LinkAddress> CREATOR =
+ public static final @android.annotation.NonNull Creator<LinkAddress> CREATOR =
new Creator<LinkAddress>() {
public LinkAddress createFromParcel(Parcel in) {
InetAddress address = null;
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java
index 42db0fd..b52b15e 100644
--- a/core/java/android/net/LinkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -1574,7 +1574,7 @@
/**
* Implement the Parcelable interface.
*/
- public static final Creator<LinkProperties> CREATOR =
+ public static final @android.annotation.NonNull Creator<LinkProperties> CREATOR =
new Creator<LinkProperties>() {
public LinkProperties createFromParcel(Parcel in) {
LinkProperties netProp = new LinkProperties();
diff --git a/core/java/android/net/LinkQualityInfo.java b/core/java/android/net/LinkQualityInfo.java
index b6f8825..3c5d474 100644
--- a/core/java/android/net/LinkQualityInfo.java
+++ b/core/java/android/net/LinkQualityInfo.java
@@ -111,7 +111,7 @@
/**
* @hide
*/
- public static final Creator<LinkQualityInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<LinkQualityInfo> CREATOR =
new Creator<LinkQualityInfo>() {
public LinkQualityInfo createFromParcel(Parcel in) {
int objectType = in.readInt();
diff --git a/core/java/android/net/MacAddress.java b/core/java/android/net/MacAddress.java
index 77d83f5..aa8e010 100644
--- a/core/java/android/net/MacAddress.java
+++ b/core/java/android/net/MacAddress.java
@@ -167,7 +167,7 @@
return 0;
}
- public static final Parcelable.Creator<MacAddress> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MacAddress> CREATOR =
new Parcelable.Creator<MacAddress>() {
public MacAddress createFromParcel(Parcel in) {
return new MacAddress(in.readLong());
diff --git a/core/java/android/net/MatchAllNetworkSpecifier.java b/core/java/android/net/MatchAllNetworkSpecifier.java
index 7aafc93..ab4f627 100644
--- a/core/java/android/net/MatchAllNetworkSpecifier.java
+++ b/core/java/android/net/MatchAllNetworkSpecifier.java
@@ -68,7 +68,7 @@
// Nothing to write.
}
- public static final Parcelable.Creator<MatchAllNetworkSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MatchAllNetworkSpecifier> CREATOR =
new Parcelable.Creator<MatchAllNetworkSpecifier>() {
public MatchAllNetworkSpecifier createFromParcel(Parcel in) {
return new MatchAllNetworkSpecifier();
diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java
index e04b5fc..0fafdf7 100644
--- a/core/java/android/net/Network.java
+++ b/core/java/android/net/Network.java
@@ -470,7 +470,7 @@
dest.writeInt(netId);
}
- public static final Creator<Network> CREATOR =
+ public static final @android.annotation.NonNull Creator<Network> CREATOR =
new Creator<Network>() {
public Network createFromParcel(Parcel in) {
int netId = in.readInt();
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 1d2d81d..a17ebcb 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -1442,7 +1442,7 @@
dest.writeString(mSSID);
}
- public static final Creator<NetworkCapabilities> CREATOR =
+ public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
new Creator<NetworkCapabilities>() {
@Override
public NetworkCapabilities createFromParcel(Parcel in) {
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index 89d9961..cd83531 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -557,7 +557,7 @@
}
}
- public static final Creator<NetworkInfo> CREATOR = new Creator<NetworkInfo>() {
+ public static final @android.annotation.NonNull Creator<NetworkInfo> CREATOR = new Creator<NetworkInfo>() {
@Override
public NetworkInfo createFromParcel(Parcel in) {
int netType = in.readInt();
diff --git a/core/java/android/net/NetworkKey.java b/core/java/android/net/NetworkKey.java
index 31a74dc..0a9a3c8 100644
--- a/core/java/android/net/NetworkKey.java
+++ b/core/java/android/net/NetworkKey.java
@@ -178,7 +178,7 @@
}
}
- public static final Parcelable.Creator<NetworkKey> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NetworkKey> CREATOR =
new Parcelable.Creator<NetworkKey>() {
@Override
public NetworkKey createFromParcel(Parcel in) {
diff --git a/core/java/android/net/NetworkMisc.java b/core/java/android/net/NetworkMisc.java
index c0487b5..ed0b61e 100644
--- a/core/java/android/net/NetworkMisc.java
+++ b/core/java/android/net/NetworkMisc.java
@@ -100,7 +100,7 @@
out.writeInt(skip464xlat ? 1 : 0);
}
- public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() {
+ public static final @android.annotation.NonNull Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() {
@Override
public NetworkMisc createFromParcel(Parcel in) {
NetworkMisc networkMisc = new NetworkMisc();
diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java
index f8973eb..33baebb 100644
--- a/core/java/android/net/NetworkPolicy.java
+++ b/core/java/android/net/NetworkPolicy.java
@@ -237,7 +237,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() {
+ public static final @android.annotation.NonNull Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() {
@Override
public NetworkPolicy createFromParcel(Parcel in) {
return new NetworkPolicy(in);
diff --git a/core/java/android/net/NetworkQuotaInfo.java b/core/java/android/net/NetworkQuotaInfo.java
index e7182f7..a46cdde 100644
--- a/core/java/android/net/NetworkQuotaInfo.java
+++ b/core/java/android/net/NetworkQuotaInfo.java
@@ -62,7 +62,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkQuotaInfo> CREATOR = new Creator<NetworkQuotaInfo>() {
+ public static final @android.annotation.NonNull Creator<NetworkQuotaInfo> CREATOR = new Creator<NetworkQuotaInfo>() {
@Override
public NetworkQuotaInfo createFromParcel(Parcel in) {
return new NetworkQuotaInfo(in);
diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java
index 9508217..dcb027d 100644
--- a/core/java/android/net/NetworkRequest.java
+++ b/core/java/android/net/NetworkRequest.java
@@ -363,7 +363,7 @@
dest.writeInt(requestId);
dest.writeString(type.name());
}
- public static final Creator<NetworkRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<NetworkRequest> CREATOR =
new Creator<NetworkRequest>() {
public NetworkRequest createFromParcel(Parcel in) {
NetworkCapabilities nc = NetworkCapabilities.CREATOR.createFromParcel(in);
diff --git a/core/java/android/net/NetworkScorerAppData.java b/core/java/android/net/NetworkScorerAppData.java
index 1734b34..116e39e 100644
--- a/core/java/android/net/NetworkScorerAppData.java
+++ b/core/java/android/net/NetworkScorerAppData.java
@@ -61,7 +61,7 @@
return 0;
}
- public static final Creator<NetworkScorerAppData> CREATOR =
+ public static final @android.annotation.NonNull Creator<NetworkScorerAppData> CREATOR =
new Creator<NetworkScorerAppData>() {
@Override
public NetworkScorerAppData createFromParcel(Parcel in) {
diff --git a/core/java/android/net/NetworkState.java b/core/java/android/net/NetworkState.java
index 97fb3fb..292cf50 100644
--- a/core/java/android/net/NetworkState.java
+++ b/core/java/android/net/NetworkState.java
@@ -87,7 +87,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkState> CREATOR = new Creator<NetworkState>() {
+ public static final @android.annotation.NonNull Creator<NetworkState> CREATOR = new Creator<NetworkState>() {
@Override
public NetworkState createFromParcel(Parcel in) {
return new NetworkState(in);
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index 9cf582b..e892b65 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -1153,7 +1153,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkStats> CREATOR = new Creator<NetworkStats>() {
+ public static final @android.annotation.NonNull Creator<NetworkStats> CREATOR = new Creator<NetworkStats>() {
@Override
public NetworkStats createFromParcel(Parcel in) {
return new NetworkStats(in);
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index d53e032..f61260e 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -719,7 +719,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkStatsHistory> CREATOR = new Creator<NetworkStatsHistory>() {
+ public static final @android.annotation.NonNull Creator<NetworkStatsHistory> CREATOR = new Creator<NetworkStatsHistory>() {
@Override
public NetworkStatsHistory createFromParcel(Parcel in) {
return new NetworkStatsHistory(in);
diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java
index bb75c63..d42fce3 100644
--- a/core/java/android/net/NetworkTemplate.java
+++ b/core/java/android/net/NetworkTemplate.java
@@ -482,7 +482,7 @@
}
@UnsupportedAppUsage
- public static final Creator<NetworkTemplate> CREATOR = new Creator<NetworkTemplate>() {
+ public static final @android.annotation.NonNull Creator<NetworkTemplate> CREATOR = new Creator<NetworkTemplate>() {
@Override
public NetworkTemplate createFromParcel(Parcel in) {
return new NetworkTemplate(in);
diff --git a/core/java/android/net/ProxyInfo.java b/core/java/android/net/ProxyInfo.java
index ef2269a..807c467 100644
--- a/core/java/android/net/ProxyInfo.java
+++ b/core/java/android/net/ProxyInfo.java
@@ -342,7 +342,7 @@
dest.writeStringArray(mParsedExclusionList);
}
- public static final Creator<ProxyInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ProxyInfo> CREATOR =
new Creator<ProxyInfo>() {
public ProxyInfo createFromParcel(Parcel in) {
String host = null;
diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java
index 5c0f758..c1c8f6e 100644
--- a/core/java/android/net/RouteInfo.java
+++ b/core/java/android/net/RouteInfo.java
@@ -486,7 +486,7 @@
/**
* Implement the Parcelable interface.
*/
- public static final Creator<RouteInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RouteInfo> CREATOR =
new Creator<RouteInfo>() {
public RouteInfo createFromParcel(Parcel in) {
IpPrefix dest = in.readParcelable(null);
diff --git a/core/java/android/net/RssiCurve.java b/core/java/android/net/RssiCurve.java
index 5b81f52..a173b0c 100644
--- a/core/java/android/net/RssiCurve.java
+++ b/core/java/android/net/RssiCurve.java
@@ -209,7 +209,7 @@
return sb.toString();
}
- public static final Creator<RssiCurve> CREATOR =
+ public static final @android.annotation.NonNull Creator<RssiCurve> CREATOR =
new Creator<RssiCurve>() {
@Override
public RssiCurve createFromParcel(Parcel in) {
diff --git a/core/java/android/net/ScoredNetwork.java b/core/java/android/net/ScoredNetwork.java
index e38d227..effc1aa 100644
--- a/core/java/android/net/ScoredNetwork.java
+++ b/core/java/android/net/ScoredNetwork.java
@@ -302,7 +302,7 @@
return NetworkBadging.BADGING_NONE;
}
- public static final Parcelable.Creator<ScoredNetwork> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ScoredNetwork> CREATOR =
new Parcelable.Creator<ScoredNetwork>() {
@Override
public ScoredNetwork createFromParcel(Parcel in) {
diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java
index 99cf3a9..8b264ee 100644
--- a/core/java/android/net/StaticIpConfiguration.java
+++ b/core/java/android/net/StaticIpConfiguration.java
@@ -212,7 +212,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<StaticIpConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Creator<StaticIpConfiguration> CREATOR =
new Creator<StaticIpConfiguration>() {
public StaticIpConfiguration createFromParcel(Parcel in) {
return readFromParcel(in);
diff --git a/core/java/android/net/StringNetworkSpecifier.java b/core/java/android/net/StringNetworkSpecifier.java
index b5d12f9..21dee55 100644
--- a/core/java/android/net/StringNetworkSpecifier.java
+++ b/core/java/android/net/StringNetworkSpecifier.java
@@ -69,7 +69,7 @@
dest.writeString(specifier);
}
- public static final Parcelable.Creator<StringNetworkSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<StringNetworkSpecifier> CREATOR =
new Parcelable.Creator<StringNetworkSpecifier>() {
public StringNetworkSpecifier createFromParcel(Parcel in) {
return new StringNetworkSpecifier(in.readString());
diff --git a/core/java/android/net/TcpKeepalivePacketData.java b/core/java/android/net/TcpKeepalivePacketData.java
index f07dfb6..99d36c5 100644
--- a/core/java/android/net/TcpKeepalivePacketData.java
+++ b/core/java/android/net/TcpKeepalivePacketData.java
@@ -194,7 +194,7 @@
}
/** Parcelable Creator. */
- public static final Parcelable.Creator<TcpKeepalivePacketData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TcpKeepalivePacketData> CREATOR =
new Parcelable.Creator<TcpKeepalivePacketData>() {
public TcpKeepalivePacketData createFromParcel(Parcel in) {
return new TcpKeepalivePacketData(in);
diff --git a/core/java/android/net/UidRange.java b/core/java/android/net/UidRange.java
index 793c82d..d4a4cf4 100644
--- a/core/java/android/net/UidRange.java
+++ b/core/java/android/net/UidRange.java
@@ -91,7 +91,7 @@
* The parceling code is autogenerated by the superclass.
*/
- public static final Creator<UidRange> CREATOR =
+ public static final @android.annotation.NonNull Creator<UidRange> CREATOR =
new Creator<UidRange>() {
@Override
public UidRange createFromParcel(Parcel in) {
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index af3ee09..fdf5321 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -402,7 +402,7 @@
}
return builder.toString();
} else if (scheme.equalsIgnoreCase("http") || scheme.equalsIgnoreCase("https")
- || scheme.equalsIgnoreCase("ftp")) {
+ || scheme.equalsIgnoreCase("ftp") || scheme.equalsIgnoreCase("rtsp")) {
ssp = "//" + ((getHost() != null) ? getHost() : "")
+ ((getPort() != -1) ? (":" + getPort()) : "")
+ "/...";
@@ -1799,7 +1799,7 @@
/**
* Reads Uris from Parcels.
*/
- public static final Parcelable.Creator<Uri> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Uri> CREATOR
= new Parcelable.Creator<Uri>() {
public Uri createFromParcel(Parcel in) {
int type = in.readInt();
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java
index ebb1ae4..870d8b1 100644
--- a/core/java/android/net/VpnService.java
+++ b/core/java/android/net/VpnService.java
@@ -20,6 +20,7 @@
import static android.system.OsConstants.AF_INET6;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -479,7 +480,8 @@
* system-managed dialogs and notifications. This is recommended
* not required.
*/
- public Builder setSession(String session) {
+ @NonNull
+ public Builder setSession(@NonNull String session) {
mConfig.session = session;
return this;
}
@@ -489,7 +491,8 @@
* configure the VPN connection. If it is not set, the button
* to configure will not be shown in system-managed dialogs.
*/
- public Builder setConfigureIntent(PendingIntent intent) {
+ @NonNull
+ public Builder setConfigureIntent(@NonNull PendingIntent intent) {
mConfig.configureIntent = intent;
return this;
}
@@ -501,6 +504,7 @@
*
* @throws IllegalArgumentException if the value is not positive.
*/
+ @NonNull
public Builder setMtu(int mtu) {
if (mtu <= 0) {
throw new IllegalArgumentException("Bad mtu");
@@ -513,6 +517,7 @@
* Sets an HTTP proxy for the VPN network. This proxy is only a recommendation
* and it is possible that some apps will ignore it.
*/
+ @NonNull
public Builder setHttpProxy(@NonNull ProxyInfo proxyInfo) {
mConfig.proxyInfo = proxyInfo;
return this;
@@ -528,7 +533,8 @@
*
* @throws IllegalArgumentException if the address is invalid.
*/
- public Builder addAddress(InetAddress address, int prefixLength) {
+ @NonNull
+ public Builder addAddress(@NonNull InetAddress address, int prefixLength) {
check(address, prefixLength);
if (address.isAnyLocalAddress()) {
@@ -550,7 +556,8 @@
* @throws IllegalArgumentException if the address is invalid.
* @see #addAddress(InetAddress, int)
*/
- public Builder addAddress(String address, int prefixLength) {
+ @NonNull
+ public Builder addAddress(@NonNull String address, int prefixLength) {
return addAddress(InetAddress.parseNumericAddress(address), prefixLength);
}
@@ -563,7 +570,8 @@
*
* @throws IllegalArgumentException if the route is invalid.
*/
- public Builder addRoute(InetAddress address, int prefixLength) {
+ @NonNull
+ public Builder addRoute(@NonNull InetAddress address, int prefixLength) {
check(address, prefixLength);
int offset = prefixLength / 8;
@@ -591,7 +599,8 @@
* @throws IllegalArgumentException if the route is invalid.
* @see #addRoute(InetAddress, int)
*/
- public Builder addRoute(String address, int prefixLength) {
+ @NonNull
+ public Builder addRoute(@NonNull String address, int prefixLength) {
return addRoute(InetAddress.parseNumericAddress(address), prefixLength);
}
@@ -605,7 +614,8 @@
*
* @throws IllegalArgumentException if the address is invalid.
*/
- public Builder addDnsServer(InetAddress address) {
+ @NonNull
+ public Builder addDnsServer(@NonNull InetAddress address) {
if (address.isLoopbackAddress() || address.isAnyLocalAddress()) {
throw new IllegalArgumentException("Bad address");
}
@@ -627,14 +637,16 @@
* @throws IllegalArgumentException if the address is invalid.
* @see #addDnsServer(InetAddress)
*/
- public Builder addDnsServer(String address) {
+ @NonNull
+ public Builder addDnsServer(@NonNull String address) {
return addDnsServer(InetAddress.parseNumericAddress(address));
}
/**
* Add a search domain to the DNS resolver.
*/
- public Builder addSearchDomain(String domain) {
+ @NonNull
+ public Builder addSearchDomain(@NonNull String domain) {
if (mConfig.searchDomains == null) {
mConfig.searchDomains = new ArrayList<String>();
}
@@ -660,6 +672,7 @@
*
* @return this {@link Builder} object to facilitate chaining of method calls.
*/
+ @NonNull
public Builder allowFamily(int family) {
if (family == AF_INET) {
mConfig.allowIPv4 = true;
@@ -703,7 +716,8 @@
*
* @return this {@link Builder} object to facilitate chaining method calls.
*/
- public Builder addAllowedApplication(String packageName)
+ @NonNull
+ public Builder addAllowedApplication(@NonNull String packageName)
throws PackageManager.NameNotFoundException {
if (mConfig.disallowedApplications != null) {
throw new UnsupportedOperationException("addDisallowedApplication already called");
@@ -735,7 +749,8 @@
*
* @return this {@link Builder} object to facilitate chaining method calls.
*/
- public Builder addDisallowedApplication(String packageName)
+ @NonNull
+ public Builder addDisallowedApplication(@NonNull String packageName)
throws PackageManager.NameNotFoundException {
if (mConfig.allowedApplications != null) {
throw new UnsupportedOperationException("addAllowedApplication already called");
@@ -758,6 +773,7 @@
*
* @return this {@link Builder} object to facilitate chaining of method calls.
*/
+ @NonNull
public Builder allowBypass() {
mConfig.allowBypass = true;
return this;
@@ -772,6 +788,7 @@
*
* @return this {@link Builder} object to facilitate chaining method calls.
*/
+ @NonNull
public Builder setBlocking(boolean blocking) {
mConfig.blocking = blocking;
return this;
@@ -786,7 +803,8 @@
*
* @return this {@link Builder} object to facilitate chaining method calls.
*/
- public Builder setUnderlyingNetworks(Network[] networks) {
+ @NonNull
+ public Builder setUnderlyingNetworks(@Nullable Network[] networks) {
mConfig.underlyingNetworks = networks != null ? networks.clone() : null;
return this;
}
@@ -807,6 +825,7 @@
* @see #setUnderlyingNetworks(Networks[])
* @see ConnectivityManager#isActiveNetworkMetered()
*/
+ @NonNull
public Builder setMetered(boolean isMetered) {
mConfig.isMetered = isMetered;
return this;
@@ -855,6 +874,7 @@
* in {@code AndroidManifest.xml}.
* @see VpnService
*/
+ @Nullable
public ParcelFileDescriptor establish() {
mConfig.addresses = mAddresses;
mConfig.routes = mRoutes;
diff --git a/core/java/android/net/WifiKey.java b/core/java/android/net/WifiKey.java
index 68b505d..e3a93a8 100644
--- a/core/java/android/net/WifiKey.java
+++ b/core/java/android/net/WifiKey.java
@@ -110,7 +110,7 @@
return "WifiKey[SSID=" + ssid + ",BSSID=" + bssid + "]";
}
- public static final Creator<WifiKey> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiKey> CREATOR =
new Creator<WifiKey>() {
@Override
public WifiKey createFromParcel(Parcel in) {
diff --git a/core/java/android/net/metrics/ApfProgramEvent.java b/core/java/android/net/metrics/ApfProgramEvent.java
index 8601005..b30d8cb 100644
--- a/core/java/android/net/metrics/ApfProgramEvent.java
+++ b/core/java/android/net/metrics/ApfProgramEvent.java
@@ -185,7 +185,7 @@
}
/** @hide */
- public static final Parcelable.Creator<ApfProgramEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ApfProgramEvent> CREATOR
= new Parcelable.Creator<ApfProgramEvent>() {
public ApfProgramEvent createFromParcel(Parcel in) {
return new ApfProgramEvent(in);
diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java
index 844a134..e1c8888 100644
--- a/core/java/android/net/metrics/ApfStats.java
+++ b/core/java/android/net/metrics/ApfStats.java
@@ -264,7 +264,7 @@
}
/** @hide */
- public static final Parcelable.Creator<ApfStats> CREATOR = new Parcelable.Creator<ApfStats>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<ApfStats> CREATOR = new Parcelable.Creator<ApfStats>() {
public ApfStats createFromParcel(Parcel in) {
return new ApfStats(in);
}
diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java
index 3008115..e4faea9 100644
--- a/core/java/android/net/metrics/DhcpClientEvent.java
+++ b/core/java/android/net/metrics/DhcpClientEvent.java
@@ -98,7 +98,7 @@
}
/** @hide */
- public static final Parcelable.Creator<DhcpClientEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<DhcpClientEvent> CREATOR
= new Parcelable.Creator<DhcpClientEvent>() {
public DhcpClientEvent createFromParcel(Parcel in) {
return new DhcpClientEvent(in);
diff --git a/core/java/android/net/metrics/DhcpErrorEvent.java b/core/java/android/net/metrics/DhcpErrorEvent.java
index 18fde80..91318a2 100644
--- a/core/java/android/net/metrics/DhcpErrorEvent.java
+++ b/core/java/android/net/metrics/DhcpErrorEvent.java
@@ -87,7 +87,7 @@
}
/** @hide */
- public static final Parcelable.Creator<DhcpErrorEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<DhcpErrorEvent> CREATOR
= new Parcelable.Creator<DhcpErrorEvent>() {
public DhcpErrorEvent createFromParcel(Parcel in) {
return new DhcpErrorEvent(in);
diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java
index 013e353..9d358d1 100644
--- a/core/java/android/net/metrics/IpManagerEvent.java
+++ b/core/java/android/net/metrics/IpManagerEvent.java
@@ -84,7 +84,7 @@
}
/** @hide */
- public static final Parcelable.Creator<IpManagerEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IpManagerEvent> CREATOR
= new Parcelable.Creator<IpManagerEvent>() {
public IpManagerEvent createFromParcel(Parcel in) {
return new IpManagerEvent(in);
diff --git a/core/java/android/net/metrics/IpReachabilityEvent.java b/core/java/android/net/metrics/IpReachabilityEvent.java
index c736297..80c8211 100644
--- a/core/java/android/net/metrics/IpReachabilityEvent.java
+++ b/core/java/android/net/metrics/IpReachabilityEvent.java
@@ -74,7 +74,7 @@
}
/** @hide */
- public static final Parcelable.Creator<IpReachabilityEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IpReachabilityEvent> CREATOR
= new Parcelable.Creator<IpReachabilityEvent>() {
public IpReachabilityEvent createFromParcel(Parcel in) {
return new IpReachabilityEvent(in);
diff --git a/core/java/android/net/metrics/NetworkEvent.java b/core/java/android/net/metrics/NetworkEvent.java
index f5b2ff1..ed58843 100644
--- a/core/java/android/net/metrics/NetworkEvent.java
+++ b/core/java/android/net/metrics/NetworkEvent.java
@@ -101,7 +101,7 @@
}
/** @hide */
- public static final Parcelable.Creator<NetworkEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NetworkEvent> CREATOR
= new Parcelable.Creator<NetworkEvent>() {
public NetworkEvent createFromParcel(Parcel in) {
return new NetworkEvent(in);
diff --git a/core/java/android/net/metrics/RaEvent.java b/core/java/android/net/metrics/RaEvent.java
index 04a2e6e..0d43f12 100644
--- a/core/java/android/net/metrics/RaEvent.java
+++ b/core/java/android/net/metrics/RaEvent.java
@@ -97,7 +97,7 @@
}
/** @hide */
- public static final Parcelable.Creator<RaEvent> CREATOR = new Parcelable.Creator<RaEvent>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<RaEvent> CREATOR = new Parcelable.Creator<RaEvent>() {
public RaEvent createFromParcel(Parcel in) {
return new RaEvent(in);
}
diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java
index a43dc60..052758d 100644
--- a/core/java/android/net/metrics/ValidationProbeEvent.java
+++ b/core/java/android/net/metrics/ValidationProbeEvent.java
@@ -133,7 +133,7 @@
}
/** @hide */
- public static final Parcelable.Creator<ValidationProbeEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ValidationProbeEvent> CREATOR
= new Parcelable.Creator<ValidationProbeEvent>() {
public ValidationProbeEvent createFromParcel(Parcel in) {
return new ValidationProbeEvent(in);
diff --git a/core/java/android/net/nsd/DnsSdTxtRecord.java b/core/java/android/net/nsd/DnsSdTxtRecord.java
index 2f20d44..e4a91c5 100644
--- a/core/java/android/net/nsd/DnsSdTxtRecord.java
+++ b/core/java/android/net/nsd/DnsSdTxtRecord.java
@@ -310,7 +310,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<DnsSdTxtRecord> CREATOR =
+ public static final @android.annotation.NonNull Creator<DnsSdTxtRecord> CREATOR =
new Creator<DnsSdTxtRecord>() {
public DnsSdTxtRecord createFromParcel(Parcel in) {
DnsSdTxtRecord info = new DnsSdTxtRecord();
diff --git a/core/java/android/net/nsd/NsdServiceInfo.java b/core/java/android/net/nsd/NsdServiceInfo.java
index 9ba17ed..459b140 100644
--- a/core/java/android/net/nsd/NsdServiceInfo.java
+++ b/core/java/android/net/nsd/NsdServiceInfo.java
@@ -355,7 +355,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<NsdServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<NsdServiceInfo> CREATOR =
new Creator<NsdServiceInfo>() {
public NsdServiceInfo createFromParcel(Parcel in) {
NsdServiceInfo info = new NsdServiceInfo();
diff --git a/core/java/android/nfc/ApduList.java b/core/java/android/nfc/ApduList.java
index 85b0547..027141d 100644
--- a/core/java/android/nfc/ApduList.java
+++ b/core/java/android/nfc/ApduList.java
@@ -24,7 +24,7 @@
return commands;
}
- public static final Parcelable.Creator<ApduList> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ApduList> CREATOR =
new Parcelable.Creator<ApduList>() {
@Override
public ApduList createFromParcel(Parcel in) {
diff --git a/core/java/android/nfc/BeamShareData.java b/core/java/android/nfc/BeamShareData.java
index 918ec3d..ed3b74a 100644
--- a/core/java/android/nfc/BeamShareData.java
+++ b/core/java/android/nfc/BeamShareData.java
@@ -42,7 +42,7 @@
dest.writeInt(this.flags);
}
- public static final Parcelable.Creator<BeamShareData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BeamShareData> CREATOR =
new Parcelable.Creator<BeamShareData>() {
@Override
public BeamShareData createFromParcel(Parcel source) {
diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl
index 41ebf63..dd260bc 100644
--- a/core/java/android/nfc/INfcAdapterExtras.aidl
+++ b/core/java/android/nfc/INfcAdapterExtras.aidl
@@ -23,11 +23,18 @@
* {@hide}
*/
interface INfcAdapterExtras {
+ @UnsupportedAppUsage
Bundle open(in String pkg, IBinder b);
+ @UnsupportedAppUsage
Bundle close(in String pkg, IBinder b);
+ @UnsupportedAppUsage
Bundle transceive(in String pkg, in byte[] data_in);
+ @UnsupportedAppUsage
int getCardEmulationRoute(in String pkg);
+ @UnsupportedAppUsage
void setCardEmulationRoute(in String pkg, int route);
+ @UnsupportedAppUsage
void authenticate(in String pkg, in byte[] token);
+ @UnsupportedAppUsage
String getDriverName(in String pkg);
}
diff --git a/core/java/android/nfc/NdefMessage.java b/core/java/android/nfc/NdefMessage.java
index 0bb1108..57d79c8 100644
--- a/core/java/android/nfc/NdefMessage.java
+++ b/core/java/android/nfc/NdefMessage.java
@@ -213,7 +213,7 @@
dest.writeTypedArray(mRecords, flags);
}
- public static final Parcelable.Creator<NdefMessage> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NdefMessage> CREATOR =
new Parcelable.Creator<NdefMessage>() {
@Override
public NdefMessage createFromParcel(Parcel in) {
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index b0090ca..5044a86 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -992,7 +992,7 @@
dest.writeByteArray(mPayload);
}
- public static final Parcelable.Creator<NdefRecord> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NdefRecord> CREATOR =
new Parcelable.Creator<NdefRecord>() {
@Override
public NdefRecord createFromParcel(Parcel in) {
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index ce684cf..5a4c465 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -421,7 +421,7 @@
}
}
- public static final Parcelable.Creator<Tag> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Tag> CREATOR =
new Parcelable.Creator<Tag>() {
@Override
public Tag createFromParcel(Parcel in) {
diff --git a/core/java/android/nfc/TechListParcel.java b/core/java/android/nfc/TechListParcel.java
index 396f0f1..90645dd 100644
--- a/core/java/android/nfc/TechListParcel.java
+++ b/core/java/android/nfc/TechListParcel.java
@@ -47,7 +47,7 @@
}
}
- public static final Creator<TechListParcel> CREATOR = new Creator<TechListParcel>() {
+ public static final @android.annotation.NonNull Creator<TechListParcel> CREATOR = new Creator<TechListParcel>() {
@Override
public TechListParcel createFromParcel(Parcel source) {
int count = source.readInt();
diff --git a/core/java/android/nfc/TransceiveResult.java b/core/java/android/nfc/TransceiveResult.java
index 3538825..7992094 100644
--- a/core/java/android/nfc/TransceiveResult.java
+++ b/core/java/android/nfc/TransceiveResult.java
@@ -67,7 +67,7 @@
}
}
- public static final Parcelable.Creator<TransceiveResult> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TransceiveResult> CREATOR =
new Parcelable.Creator<TransceiveResult>() {
@Override
public TransceiveResult createFromParcel(Parcel in) {
diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java
index 63776c4..77b5552 100644
--- a/core/java/android/nfc/cardemulation/AidGroup.java
+++ b/core/java/android/nfc/cardemulation/AidGroup.java
@@ -132,7 +132,7 @@
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<AidGroup> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AidGroup> CREATOR =
new Parcelable.Creator<AidGroup>() {
@Override
diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
index 911ec84..6f9858c 100644
--- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -540,7 +540,7 @@
};
@UnsupportedAppUsage
- public static final Parcelable.Creator<ApduServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ApduServiceInfo> CREATOR =
new Parcelable.Creator<ApduServiceInfo>() {
@Override
public ApduServiceInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/nfc/cardemulation/NfcFServiceInfo.java b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
index 1d3f9c2..bda14299 100644
--- a/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/NfcFServiceInfo.java
@@ -289,7 +289,7 @@
dest.writeString(mT3tPmm);
};
- public static final Parcelable.Creator<NfcFServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NfcFServiceInfo> CREATOR =
new Parcelable.Creator<NfcFServiceInfo>() {
@Override
public NfcFServiceInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/os/BatteryProperty.java b/core/java/android/os/BatteryProperty.java
index b7e7b17..b40988a 100644
--- a/core/java/android/os/BatteryProperty.java
+++ b/core/java/android/os/BatteryProperty.java
@@ -67,7 +67,7 @@
p.writeLong(mValueLong);
}
- public static final Parcelable.Creator<BatteryProperty> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<BatteryProperty> CREATOR
= new Parcelable.Creator<BatteryProperty>() {
public BatteryProperty createFromParcel(Parcel p) {
return new BatteryProperty(p);
diff --git a/core/java/android/os/BatterySaverPolicyConfig.java b/core/java/android/os/BatterySaverPolicyConfig.java
index a107a7a..af7d11d 100644
--- a/core/java/android/os/BatterySaverPolicyConfig.java
+++ b/core/java/android/os/BatterySaverPolicyConfig.java
@@ -111,7 +111,7 @@
Math.min(in.readInt(), PowerManager.MAX_LOCATION_MODE));
}
- public static final Creator<BatterySaverPolicyConfig> CREATOR =
+ public static final @android.annotation.NonNull Creator<BatterySaverPolicyConfig> CREATOR =
new Creator<BatterySaverPolicyConfig>() {
@Override
public BatterySaverPolicyConfig createFromParcel(Parcel in) {
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index 7ae5a67..8e6a554 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -1196,7 +1196,7 @@
}
}
- public static final Parcelable.Creator<Bundle> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Bundle> CREATOR =
new Parcelable.Creator<Bundle>() {
@Override
public Bundle createFromParcel(Parcel in) {
diff --git a/core/java/android/os/CpuUsageInfo.java b/core/java/android/os/CpuUsageInfo.java
index 54caa15..444579f 100644
--- a/core/java/android/os/CpuUsageInfo.java
+++ b/core/java/android/os/CpuUsageInfo.java
@@ -23,7 +23,7 @@
private long mActive;
private long mTotal;
- public static final Parcelable.Creator<CpuUsageInfo> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<CpuUsageInfo> CREATOR = new
Parcelable.Creator<CpuUsageInfo>() {
public CpuUsageInfo createFromParcel(Parcel in) {
return new CpuUsageInfo(in);
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 149ef54..a395ed4 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -859,7 +859,7 @@
otherStats = source.createIntArray();
}
- public static final Creator<MemoryInfo> CREATOR = new Creator<MemoryInfo>() {
+ public static final @android.annotation.NonNull Creator<MemoryInfo> CREATOR = new Creator<MemoryInfo>() {
public MemoryInfo createFromParcel(Parcel source) {
return new MemoryInfo(source);
}
diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java
index eeae25e..1be7b6b 100644
--- a/core/java/android/os/DropBoxManager.java
+++ b/core/java/android/os/DropBoxManager.java
@@ -227,7 +227,7 @@
return (mFlags & IS_GZIPPED) != 0 ? new GZIPInputStream(is) : is;
}
- public static final Parcelable.Creator<Entry> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Entry> CREATOR = new Parcelable.Creator() {
public Entry[] newArray(int size) { return new Entry[size]; }
public Entry createFromParcel(Parcel in) {
String tag = in.readString();
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 0aed981..b3e35b6 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.admin.DevicePolicyManager;
@@ -155,13 +156,13 @@
* Return root of the "system" partition holding the core Android OS.
* Always present and mounted read-only.
*/
- public static File getRootDirectory() {
+ public static @NonNull File getRootDirectory() {
return DIR_ANDROID_ROOT;
}
/** {@hide} */
@TestApi
- public static File getStorageDirectory() {
+ public static @NonNull File getStorageDirectory() {
return DIR_ANDROID_STORAGE;
}
@@ -172,7 +173,7 @@
* @hide
*/
@SystemApi
- public static File getOemDirectory() {
+ public static @NonNull File getOemDirectory() {
return DIR_OEM_ROOT;
}
@@ -183,7 +184,7 @@
* @hide
*/
@SystemApi
- public static File getOdmDirectory() {
+ public static @NonNull File getOdmDirectory() {
return DIR_ODM_ROOT;
}
@@ -193,7 +194,7 @@
* @hide
*/
@SystemApi
- public static File getVendorDirectory() {
+ public static @NonNull File getVendorDirectory() {
return DIR_VENDOR_ROOT;
}
@@ -205,7 +206,7 @@
*/
@SystemApi
@TestApi
- public static File getProductDirectory() {
+ public static @NonNull File getProductDirectory() {
return DIR_PRODUCT_ROOT;
}
@@ -216,7 +217,7 @@
* @hide
*/
@SystemApi
- public static File getProductServicesDirectory() {
+ public static @NonNull File getProductServicesDirectory() {
return DIR_PRODUCT_SERVICES_ROOT;
}
diff --git a/core/java/android/os/ExternalVibration.java b/core/java/android/os/ExternalVibration.java
index 69ab1d9..b93bef8 100644
--- a/core/java/android/os/ExternalVibration.java
+++ b/core/java/android/os/ExternalVibration.java
@@ -156,7 +156,7 @@
return 0;
}
- public static final Parcelable.Creator<ExternalVibration> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ExternalVibration> CREATOR =
new Parcelable.Creator<ExternalVibration>() {
@Override
public ExternalVibration createFromParcel(Parcel in) {
diff --git a/core/java/android/os/IncidentManager.java b/core/java/android/os/IncidentManager.java
index a1c7b08..0bdf6f1 100644
--- a/core/java/android/os/IncidentManager.java
+++ b/core/java/android/os/IncidentManager.java
@@ -323,7 +323,7 @@
/**
* {@link Parcelable.Creator Creator} for {@link IncidentReport}.
*/
- public static final Parcelable.Creator<IncidentReport> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<IncidentReport> CREATOR = new Parcelable.Creator() {
/**
* @inheritDoc
*/
diff --git a/core/java/android/os/IncidentReportArgs.java b/core/java/android/os/IncidentReportArgs.java
index 8d44727..1bdfd94 100644
--- a/core/java/android/os/IncidentReportArgs.java
+++ b/core/java/android/os/IncidentReportArgs.java
@@ -93,7 +93,7 @@
mPrivacyPolicy = in.readInt();
}
- public static final Parcelable.Creator<IncidentReportArgs> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IncidentReportArgs> CREATOR
= new Parcelable.Creator<IncidentReportArgs>() {
public IncidentReportArgs createFromParcel(Parcel in) {
return new IncidentReportArgs(in);
diff --git a/core/java/android/os/LocaleList.java b/core/java/android/os/LocaleList.java
index 1420e2f..a9da080 100644
--- a/core/java/android/os/LocaleList.java
+++ b/core/java/android/os/LocaleList.java
@@ -256,7 +256,7 @@
mStringRepresentation = sb.toString();
}
- public static final Parcelable.Creator<LocaleList> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<LocaleList> CREATOR
= new Parcelable.Creator<LocaleList>() {
@Override
public LocaleList createFromParcel(Parcel source) {
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 5d5e5e2..317579e 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -595,7 +595,7 @@
proto.end(messageToken);
}
- public static final Parcelable.Creator<Message> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Message> CREATOR
= new Parcelable.Creator<Message>() {
public Message createFromParcel(Parcel source) {
Message msg = Message.obtain();
diff --git a/core/java/android/os/Messenger.java b/core/java/android/os/Messenger.java
index f362f56..ed5c470 100644
--- a/core/java/android/os/Messenger.java
+++ b/core/java/android/os/Messenger.java
@@ -95,7 +95,7 @@
out.writeStrongBinder(mTarget.asBinder());
}
- public static final Parcelable.Creator<Messenger> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Messenger> CREATOR
= new Parcelable.Creator<Messenger>() {
public Messenger createFromParcel(Parcel in) {
IBinder target = in.readStrongBinder();
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index d68eeed..7a8727c 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -1032,7 +1032,7 @@
}
}
- public static final Parcelable.Creator<ParcelFileDescriptor> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelFileDescriptor> CREATOR
= new Parcelable.Creator<ParcelFileDescriptor>() {
@Override
public ParcelFileDescriptor createFromParcel(Parcel in) {
diff --git a/core/java/android/os/ParcelUuid.java b/core/java/android/os/ParcelUuid.java
index 5b45ac2..cc50c89 100644
--- a/core/java/android/os/ParcelUuid.java
+++ b/core/java/android/os/ParcelUuid.java
@@ -109,7 +109,7 @@
return (this.mUuid.equals(that.mUuid));
}
- public static final Parcelable.Creator<ParcelUuid> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelUuid> CREATOR =
new Parcelable.Creator<ParcelUuid>() {
@UnsupportedAppUsage
public ParcelUuid createFromParcel(Parcel source) {
diff --git a/core/java/android/os/ParcelableException.java b/core/java/android/os/ParcelableException.java
index 7f71905..81b9d15 100644
--- a/core/java/android/os/ParcelableException.java
+++ b/core/java/android/os/ParcelableException.java
@@ -76,7 +76,7 @@
writeToParcel(dest, getCause());
}
- public static final Creator<ParcelableException> CREATOR = new Creator<ParcelableException>() {
+ public static final @android.annotation.NonNull Creator<ParcelableException> CREATOR = new Creator<ParcelableException>() {
@Override
public ParcelableException createFromParcel(Parcel source) {
return new ParcelableException(readFromParcel(source));
diff --git a/core/java/android/os/PatternMatcher.java b/core/java/android/os/PatternMatcher.java
index 76b2142..ef03e8c 100644
--- a/core/java/android/os/PatternMatcher.java
+++ b/core/java/android/os/PatternMatcher.java
@@ -158,7 +158,7 @@
mParsedPattern = src.createIntArray();
}
- public static final Parcelable.Creator<PatternMatcher> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PatternMatcher> CREATOR
= new Parcelable.Creator<PatternMatcher>() {
public PatternMatcher createFromParcel(Parcel source) {
return new PatternMatcher(source);
diff --git a/core/java/android/os/PersistableBundle.java b/core/java/android/os/PersistableBundle.java
index 40eceb8..6f1bf71 100644
--- a/core/java/android/os/PersistableBundle.java
+++ b/core/java/android/os/PersistableBundle.java
@@ -212,7 +212,7 @@
}
}
- public static final Parcelable.Creator<PersistableBundle> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PersistableBundle> CREATOR =
new Parcelable.Creator<PersistableBundle>() {
@Override
public PersistableBundle createFromParcel(Parcel in) {
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 91ddf82..c906d33 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -694,9 +694,11 @@
ServiceType.BATTERY_STATS,
ServiceType.DATA_SAVER,
ServiceType.FORCE_ALL_APPS_STANDBY,
+ ServiceType.FORCE_BACKGROUND_CHECK,
ServiceType.OPTIONAL_SENSORS,
ServiceType.AOD,
ServiceType.QUICK_DOZE,
+ ServiceType.NIGHT_MODE,
})
public @interface ServiceType {
int NULL = 0;
@@ -762,8 +764,14 @@
*/
public static final int LOCATION_MODE_FOREGROUND_ONLY = 3;
+ /**
+ * In this mode, location will not be turned off, but LocationManager will throttle all
+ * requests to providers when the device is non-interactive.
+ */
+ public static final int LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF = 4;
+
static final int MIN_LOCATION_MODE = LOCATION_MODE_NO_CHANGE;
- static final int MAX_LOCATION_MODE = LOCATION_MODE_FOREGROUND_ONLY;
+ static final int MAX_LOCATION_MODE = LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF;
/**
* @hide
@@ -774,9 +782,28 @@
LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF,
LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF,
LOCATION_MODE_FOREGROUND_ONLY,
+ LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF,
})
public @interface LocationPowerSaveMode {}
+ /** @hide */
+ public static String locationPowerSaveModeToString(@LocationPowerSaveMode int mode) {
+ switch (mode) {
+ case LOCATION_MODE_NO_CHANGE:
+ return "NO_CHANGE";
+ case LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF:
+ return "GPS_DISABLED_WHEN_SCREEN_OFF";
+ case LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF:
+ return "ALL_DISABLED_WHEN_SCREEN_OFF";
+ case LOCATION_MODE_FOREGROUND_ONLY:
+ return "FOREGROUND_ONLY";
+ case LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF:
+ return "THROTTLE_REQUESTS_WHEN_SCREEN_OFF";
+ default:
+ return Integer.toString(mode);
+ }
+ }
+
final Context mContext;
final IPowerManager mService;
final Handler mHandler;
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index cd43b42..03fc2a9 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -529,7 +529,8 @@
return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids,
runtimeFlags, mountExternal, targetSdkVersion, seInfo,
abi, instructionSet, appDataDir, invokeWith, packageName,
- packagesForUid, sandboxId, /*useBlastulaPool=*/ true, zygoteArgs);
+ packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ true,
+ zygoteArgs);
}
/** @hide */
@@ -550,7 +551,8 @@
return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids,
runtimeFlags, mountExternal, targetSdkVersion, seInfo,
abi, instructionSet, appDataDir, invokeWith, packageName,
- packagesForUid, sandboxId, /*useBlastulaPool=*/ false, zygoteArgs);
+ packagesForUid, sandboxId, /*useUnspecializedAppProcessPool=*/ false,
+ zygoteArgs);
}
/**
diff --git a/core/java/android/os/RemoteCallback.java b/core/java/android/os/RemoteCallback.java
index 5914739..22cf404 100644
--- a/core/java/android/os/RemoteCallback.java
+++ b/core/java/android/os/RemoteCallback.java
@@ -94,7 +94,7 @@
parcel.writeStrongBinder(mCallback.asBinder());
}
- public static final Parcelable.Creator<RemoteCallback> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<RemoteCallback> CREATOR
= new Parcelable.Creator<RemoteCallback>() {
public RemoteCallback createFromParcel(Parcel parcel) {
return new RemoteCallback(parcel);
diff --git a/core/java/android/os/ResultReceiver.java b/core/java/android/os/ResultReceiver.java
index 34a66b6..f2d8fe4 100644
--- a/core/java/android/os/ResultReceiver.java
+++ b/core/java/android/os/ResultReceiver.java
@@ -125,7 +125,7 @@
mReceiver = IResultReceiver.Stub.asInterface(in.readStrongBinder());
}
- public static final Parcelable.Creator<ResultReceiver> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ResultReceiver> CREATOR
= new Parcelable.Creator<ResultReceiver>() {
public ResultReceiver createFromParcel(Parcel in) {
return new ResultReceiver(in);
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
index e6c7a17..395485b 100644
--- a/core/java/android/os/SharedMemory.java
+++ b/core/java/android/os/SharedMemory.java
@@ -270,7 +270,7 @@
dest.writeFileDescriptor(mFileDescriptor);
}
- public static final Parcelable.Creator<SharedMemory> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SharedMemory> CREATOR =
new Parcelable.Creator<SharedMemory>() {
@Override
public SharedMemory createFromParcel(Parcel source) {
diff --git a/core/java/android/os/ShellCallback.java b/core/java/android/os/ShellCallback.java
index 6a62424..632f6c8 100644
--- a/core/java/android/os/ShellCallback.java
+++ b/core/java/android/os/ShellCallback.java
@@ -110,7 +110,7 @@
}
}
- public static final Parcelable.Creator<ShellCallback> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ShellCallback> CREATOR
= new Parcelable.Creator<ShellCallback>() {
public ShellCallback createFromParcel(Parcel in) {
return new ShellCallback(in);
diff --git a/core/java/android/os/StatsDimensionsValue.java b/core/java/android/os/StatsDimensionsValue.java
index 257cc52..da13ea1 100644
--- a/core/java/android/os/StatsDimensionsValue.java
+++ b/core/java/android/os/StatsDimensionsValue.java
@@ -264,7 +264,7 @@
/**
* Parcelable Creator for StatsDimensionsValue.
*/
- public static final Parcelable.Creator<StatsDimensionsValue> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<StatsDimensionsValue> CREATOR = new
Parcelable.Creator<StatsDimensionsValue>() {
public StatsDimensionsValue createFromParcel(Parcel in) {
return new StatsDimensionsValue(in);
diff --git a/core/java/android/os/StatsLogEventWrapper.java b/core/java/android/os/StatsLogEventWrapper.java
index 2334242..89c9bb2 100644
--- a/core/java/android/os/StatsLogEventWrapper.java
+++ b/core/java/android/os/StatsLogEventWrapper.java
@@ -54,7 +54,7 @@
/**
* Boilerplate for Parcel.
*/
- public static final Parcelable.Creator<StatsLogEventWrapper> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<StatsLogEventWrapper> CREATOR = new
Parcelable.Creator<StatsLogEventWrapper>() {
public StatsLogEventWrapper createFromParcel(Parcel in) {
return new StatsLogEventWrapper(in);
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 5ff6e55..f0b83d8 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -482,7 +482,7 @@
* <p>As of the Gingerbread release this includes network and disk operations but will
* likely expand in future releases.
*/
- public Builder detectAll() {
+ public @NonNull Builder detectAll() {
detectDiskReads();
detectDiskWrites();
detectNetwork();
@@ -501,52 +501,52 @@
}
/** Disable the detection of everything. */
- public Builder permitAll() {
+ public @NonNull Builder permitAll() {
return disable(DETECT_THREAD_ALL);
}
/** Enable detection of network operations. */
- public Builder detectNetwork() {
+ public @NonNull Builder detectNetwork() {
return enable(DETECT_THREAD_NETWORK);
}
/** Disable detection of network operations. */
- public Builder permitNetwork() {
+ public @NonNull Builder permitNetwork() {
return disable(DETECT_THREAD_NETWORK);
}
/** Enable detection of disk reads. */
- public Builder detectDiskReads() {
+ public @NonNull Builder detectDiskReads() {
return enable(DETECT_THREAD_DISK_READ);
}
/** Disable detection of disk reads. */
- public Builder permitDiskReads() {
+ public @NonNull Builder permitDiskReads() {
return disable(DETECT_THREAD_DISK_READ);
}
/** Enable detection of slow calls. */
- public Builder detectCustomSlowCalls() {
+ public @NonNull Builder detectCustomSlowCalls() {
return enable(DETECT_THREAD_CUSTOM);
}
/** Disable detection of slow calls. */
- public Builder permitCustomSlowCalls() {
+ public @NonNull Builder permitCustomSlowCalls() {
return disable(DETECT_THREAD_CUSTOM);
}
/** Disable detection of mismatches between defined resource types and getter calls. */
- public Builder permitResourceMismatches() {
+ public @NonNull Builder permitResourceMismatches() {
return disable(DETECT_THREAD_RESOURCE_MISMATCH);
}
/** Detect unbuffered input/output operations. */
- public Builder detectUnbufferedIo() {
+ public @NonNull Builder detectUnbufferedIo() {
return enable(DETECT_THREAD_UNBUFFERED_IO);
}
/** Disable detection of unbuffered input/output operations. */
- public Builder permitUnbufferedIo() {
+ public @NonNull Builder permitUnbufferedIo() {
return disable(DETECT_THREAD_UNBUFFERED_IO);
}
@@ -562,17 +562,17 @@
* call will return a value without crashing; however, the developer should format the
* resource as an integer to avoid unnecessary type conversion.
*/
- public Builder detectResourceMismatches() {
+ public @NonNull Builder detectResourceMismatches() {
return enable(DETECT_THREAD_RESOURCE_MISMATCH);
}
/** Enable detection of disk writes. */
- public Builder detectDiskWrites() {
+ public @NonNull Builder detectDiskWrites() {
return enable(DETECT_THREAD_DISK_WRITE);
}
/** Disable detection of disk writes. */
- public Builder permitDiskWrites() {
+ public @NonNull Builder permitDiskWrites() {
return disable(DETECT_THREAD_DISK_WRITE);
}
@@ -582,7 +582,7 @@
* @hide
*/
@TestApi
- public Builder detectExplicitGc() {
+ public @NonNull Builder detectExplicitGc() {
// TODO(b/3400644): Un-hide this for next API update
// TODO(b/3400644): Un-hide ExplicitGcViolation for next API update
// TODO(b/3400644): Make DETECT_EXPLICIT_GC a @TestApi for next API update
@@ -595,7 +595,7 @@
*
* @hide
*/
- public Builder permitExplicitGc() {
+ public @NonNull Builder permitExplicitGc() {
// TODO(b/3400644): Un-hide this for next API update
return disable(DETECT_THREAD_EXPLICIT_GC);
}
@@ -604,7 +604,7 @@
* Show an annoying dialog to the developer on detected violations, rate-limited to be
* only a little annoying.
*/
- public Builder penaltyDialog() {
+ public @NonNull Builder penaltyDialog() {
return enable(PENALTY_DIALOG);
}
@@ -616,7 +616,7 @@
* <p>Unlike {@link #penaltyDeathOnNetwork}, this applies to disk reads, disk writes,
* and network usage if their corresponding detect flags are set.
*/
- public Builder penaltyDeath() {
+ public @NonNull Builder penaltyDeath() {
return enable(PENALTY_DEATH);
}
@@ -627,17 +627,17 @@
*
* <p>In the Honeycomb or later SDKs, this is on by default.
*/
- public Builder penaltyDeathOnNetwork() {
+ public @NonNull Builder penaltyDeathOnNetwork() {
return enable(PENALTY_DEATH_ON_NETWORK);
}
/** Flash the screen during a violation. */
- public Builder penaltyFlashScreen() {
+ public @NonNull Builder penaltyFlashScreen() {
return enable(PENALTY_FLASH);
}
/** Log detected violations to the system log. */
- public Builder penaltyLog() {
+ public @NonNull Builder penaltyLog() {
return enable(PENALTY_LOG);
}
@@ -646,7 +646,7 @@
* android.os.DropBoxManager DropBox} on policy violation. Intended mostly for platform
* integrators doing beta user field data collection.
*/
- public Builder penaltyDropBox() {
+ public @NonNull Builder penaltyDropBox() {
return enable(PENALTY_DROPBOX);
}
@@ -654,7 +654,7 @@
* Call #{@link OnThreadViolationListener#onThreadViolation(Violation)} on specified
* executor every violation.
*/
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull Executor executor, @NonNull OnThreadViolationListener listener) {
if (executor == null) {
throw new NullPointerException("executor must not be null");
@@ -665,7 +665,7 @@
}
/** @removed */
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull OnThreadViolationListener listener, @NonNull Executor executor) {
return penaltyListener(executor, listener);
}
@@ -782,7 +782,7 @@
* Set an upper bound on how many instances of a class can be in memory at once. Helps
* to prevent object leaks.
*/
- public Builder setClassInstanceLimit(Class klass, int instanceLimit) {
+ public @NonNull Builder setClassInstanceLimit(Class klass, int instanceLimit) {
if (klass == null) {
throw new NullPointerException("klass == null");
}
@@ -803,12 +803,12 @@
}
/** Detect leaks of {@link android.app.Activity} subclasses. */
- public Builder detectActivityLeaks() {
+ public @NonNull Builder detectActivityLeaks() {
return enable(DETECT_VM_ACTIVITY_LEAKS);
}
/** @hide */
- public Builder permitActivityLeaks() {
+ public @NonNull Builder permitActivityLeaks() {
return disable(DETECT_VM_ACTIVITY_LEAKS);
}
@@ -819,7 +819,7 @@
* enabled may not be detected. To ensure that all such API accesses are detected,
* you should apply this policy as early as possible after process creation.
*/
- public Builder detectNonSdkApiUsage() {
+ public @NonNull Builder detectNonSdkApiUsage() {
return enable(DETECT_VM_NON_SDK_API_USAGE);
}
@@ -829,7 +829,7 @@
* continue to restrict or warn on access to methods that are not part of the
* public SDK.
*/
- public Builder permitNonSdkApiUsage() {
+ public @NonNull Builder permitNonSdkApiUsage() {
return disable(DETECT_VM_NON_SDK_API_USAGE);
}
@@ -839,7 +839,7 @@
* <p>In the Honeycomb release this includes leaks of SQLite cursors, Activities, and
* other closable objects but will likely expand in future releases.
*/
- public Builder detectAll() {
+ public @NonNull Builder detectAll() {
detectLeakedSqlLiteObjects();
final int targetSdk = VMRuntime.getRuntime().getTargetSdkVersion();
@@ -881,7 +881,7 @@
* <p>You always want to explicitly close your SQLite cursors to avoid unnecessary
* database contention and temporary memory leaks.
*/
- public Builder detectLeakedSqlLiteObjects() {
+ public @NonNull Builder detectLeakedSqlLiteObjects() {
return enable(DETECT_VM_CURSOR_LEAKS);
}
@@ -892,7 +892,7 @@
* <p>You always want to explicitly close such objects to avoid unnecessary resources
* leaks.
*/
- public Builder detectLeakedClosableObjects() {
+ public @NonNull Builder detectLeakedClosableObjects() {
return enable(DETECT_VM_CLOSABLE_LEAKS);
}
@@ -900,7 +900,7 @@
* Detect when a {@link BroadcastReceiver} or {@link ServiceConnection} is leaked during
* {@link Context} teardown.
*/
- public Builder detectLeakedRegistrationObjects() {
+ public @NonNull Builder detectLeakedRegistrationObjects() {
return enable(DETECT_VM_REGISTRATION_LEAKS);
}
@@ -919,7 +919,7 @@
* @see android.support.v4.content.FileProvider
* @see Intent#FLAG_GRANT_READ_URI_PERMISSION
*/
- public Builder detectFileUriExposure() {
+ public @NonNull Builder detectFileUriExposure() {
return enable(DETECT_VM_FILE_URI_EXPOSURE);
}
@@ -938,7 +938,7 @@
* <p>This inspects both IPv4/IPv6 and TCP/UDP network traffic, but it may be subject to
* false positives, such as when STARTTLS protocols or HTTP proxies are used.
*/
- public Builder detectCleartextNetwork() {
+ public @NonNull Builder detectCleartextNetwork() {
return enable(DETECT_VM_CLEARTEXT_NETWORK);
}
@@ -954,7 +954,7 @@
* @see Intent#FLAG_GRANT_READ_URI_PERMISSION
* @see Intent#FLAG_GRANT_WRITE_URI_PERMISSION
*/
- public Builder detectContentUriWithoutPermission() {
+ public @NonNull Builder detectContentUriWithoutPermission() {
return enable(DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION);
}
@@ -969,12 +969,12 @@
* @see TrafficStats#tagSocket(java.net.Socket)
* @see TrafficStats#tagDatagramSocket(java.net.DatagramSocket)
*/
- public Builder detectUntaggedSockets() {
+ public @NonNull Builder detectUntaggedSockets() {
return enable(DETECT_VM_UNTAGGED_SOCKET);
}
/** @hide */
- public Builder permitUntaggedSockets() {
+ public @NonNull Builder permitUntaggedSockets() {
return disable(DETECT_VM_UNTAGGED_SOCKET);
}
@@ -992,12 +992,12 @@
* <li>{@link PackageManager#MATCH_DIRECT_BOOT_AUTO}
* </ul>
*/
- public Builder detectImplicitDirectBoot() {
+ public @NonNull Builder detectImplicitDirectBoot() {
return enable(DETECT_VM_IMPLICIT_DIRECT_BOOT);
}
/** @hide */
- public Builder permitImplicitDirectBoot() {
+ public @NonNull Builder permitImplicitDirectBoot() {
return disable(DETECT_VM_IMPLICIT_DIRECT_BOOT);
}
@@ -1014,12 +1014,12 @@
* @see Context#createCredentialProtectedStorageContext()
* @see Context#createDeviceProtectedStorageContext()
*/
- public Builder detectCredentialProtectedWhileLocked() {
+ public @NonNull Builder detectCredentialProtectedWhileLocked() {
return enable(DETECT_VM_CREDENTIAL_PROTECTED_WHILE_LOCKED);
}
/** @hide */
- public Builder permitCredentialProtectedWhileLocked() {
+ public @NonNull Builder permitCredentialProtectedWhileLocked() {
return disable(DETECT_VM_CREDENTIAL_PROTECTED_WHILE_LOCKED);
}
@@ -1028,7 +1028,7 @@
* penalties so you'll still get your logging or other violations before the process
* dies.
*/
- public Builder penaltyDeath() {
+ public @NonNull Builder penaltyDeath() {
return enable(PENALTY_DEATH);
}
@@ -1037,7 +1037,7 @@
*
* @see #detectCleartextNetwork()
*/
- public Builder penaltyDeathOnCleartextNetwork() {
+ public @NonNull Builder penaltyDeathOnCleartextNetwork() {
return enable(PENALTY_DEATH_ON_CLEARTEXT_NETWORK);
}
@@ -1047,12 +1047,12 @@
*
* @see #detectFileUriExposure()
*/
- public Builder penaltyDeathOnFileUriExposure() {
+ public @NonNull Builder penaltyDeathOnFileUriExposure() {
return enable(PENALTY_DEATH_ON_FILE_URI_EXPOSURE);
}
/** Log detected violations to the system log. */
- public Builder penaltyLog() {
+ public @NonNull Builder penaltyLog() {
return enable(PENALTY_LOG);
}
@@ -1061,14 +1061,14 @@
* android.os.DropBoxManager DropBox} on policy violation. Intended mostly for platform
* integrators doing beta user field data collection.
*/
- public Builder penaltyDropBox() {
+ public @NonNull Builder penaltyDropBox() {
return enable(PENALTY_DROPBOX);
}
/**
* Call #{@link OnVmViolationListener#onVmViolation(Violation)} on every violation.
*/
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull Executor executor, @NonNull OnVmViolationListener listener) {
if (executor == null) {
throw new NullPointerException("executor must not be null");
@@ -1079,7 +1079,7 @@
}
/** @removed */
- public Builder penaltyListener(
+ public @NonNull Builder penaltyListener(
@NonNull OnVmViolationListener listener, @NonNull Executor executor) {
return penaltyListener(executor, listener);
}
@@ -2853,7 +2853,7 @@
return 0;
}
- public static final Parcelable.Creator<ViolationInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ViolationInfo> CREATOR =
new Parcelable.Creator<ViolationInfo>() {
@Override
public ViolationInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/os/Temperature.java b/core/java/android/os/Temperature.java
index eee2b52..be7e824 100644
--- a/core/java/android/os/Temperature.java
+++ b/core/java/android/os/Temperature.java
@@ -177,7 +177,7 @@
p.writeInt(mStatus);
}
- public static final Parcelable.Creator<Temperature> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Temperature> CREATOR =
new Parcelable.Creator<Temperature>() {
@Override
public Temperature createFromParcel(Parcel p) {
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 40c48a0..82d1b1a 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -481,7 +481,7 @@
return h != USER_NULL ? new UserHandle(h) : null;
}
- public static final Parcelable.Creator<UserHandle> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<UserHandle> CREATOR
= new Parcelable.Creator<UserHandle>() {
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 0673755..7f73dab 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -3021,7 +3021,7 @@
userRestrictionSource = in.readInt();
}
- public static final Creator<EnforcingUser> CREATOR = new Creator<EnforcingUser>() {
+ public static final @android.annotation.NonNull Creator<EnforcingUser> CREATOR = new Creator<EnforcingUser>() {
@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 99fb608..44add87 100644
--- a/core/java/android/os/VibrationEffect.java
+++ b/core/java/android/os/VibrationEffect.java
@@ -240,7 +240,7 @@
*
* @return The desired effect.
*/
- public static VibrationEffect createPrebaked(@EffectType int effectId) {
+ public static VibrationEffect createPredefined(@EffectType int effectId) {
return get(effectId, true);
}
@@ -471,7 +471,7 @@
out.writeInt(mAmplitude);
}
- public static final Parcelable.Creator<OneShot> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<OneShot> CREATOR =
new Parcelable.Creator<OneShot>() {
@Override
public OneShot createFromParcel(Parcel in) {
@@ -659,7 +659,7 @@
}
- public static final Parcelable.Creator<Waveform> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Waveform> CREATOR =
new Parcelable.Creator<Waveform>() {
@Override
public Waveform createFromParcel(Parcel in) {
@@ -796,7 +796,7 @@
out.writeInt(mEffectStrength);
}
- public static final Parcelable.Creator<Prebaked> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Prebaked> CREATOR =
new Parcelable.Creator<Prebaked>() {
@Override
public Prebaked createFromParcel(Parcel in) {
@@ -811,7 +811,7 @@
};
}
- public static final Parcelable.Creator<VibrationEffect> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VibrationEffect> CREATOR =
new Parcelable.Creator<VibrationEffect>() {
@Override
public VibrationEffect createFromParcel(Parcel in) {
diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java
index 76fe560..9980ade 100644
--- a/core/java/android/os/WorkSource.java
+++ b/core/java/android/os/WorkSource.java
@@ -1030,7 +1030,7 @@
dest.writeStringArray(mTags);
}
- public static final Parcelable.Creator<WorkChain> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WorkChain> CREATOR =
new Parcelable.Creator<WorkChain>() {
public WorkChain createFromParcel(Parcel in) {
return new WorkChain(in);
@@ -1171,7 +1171,7 @@
proto.end(workSourceToken);
}
- public static final Parcelable.Creator<WorkSource> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<WorkSource> CREATOR
= new Parcelable.Creator<WorkSource>() {
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 e49b65e..60f4f06 100644
--- a/core/java/android/os/ZygoteProcess.java
+++ b/core/java/android/os/ZygoteProcess.java
@@ -82,9 +82,9 @@
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 @@
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 @@
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 @@
mZygoteSocketAddress = primarySocketAddress;
mZygoteSecondarySocketAddress = secondarySocketAddress;
- mBlastulaPoolSocketAddress = null;
- mBlastulaPoolSecondarySocketAddress = null;
+ mUsapPoolSocketAddress = null;
+ mUsapPoolSecondarySocketAddress = null;
}
public LocalSocketAddress getPrimarySocketAddress() {
@@ -144,7 +144,7 @@
*/
public static class ZygoteState {
final LocalSocketAddress mZygoteSocketAddress;
- final LocalSocketAddress mBlastulaSocketAddress;
+ final LocalSocketAddress mUsapSocketAddress;
private final LocalSocket mZygoteSessionSocket;
@@ -156,13 +156,13 @@
private boolean mClosed;
private ZygoteState(LocalSocketAddress zygoteSocketAddress,
- LocalSocketAddress blastulaSocketAddress,
+ LocalSocketAddress usapSocketAddress,
LocalSocket zygoteSessionSocket,
DataInputStream zygoteInputStream,
BufferedWriter zygoteOutputWriter,
List<String> abiList) {
this.mZygoteSocketAddress = zygoteSocketAddress;
- this.mBlastulaSocketAddress = blastulaSocketAddress;
+ this.mUsapSocketAddress = usapSocketAddress;
this.mZygoteSessionSocket = zygoteSessionSocket;
this.mZygoteInputStream = zygoteInputStream;
this.mZygoteOutputWriter = zygoteOutputWriter;
@@ -171,16 +171,16 @@
/**
* 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 @@
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) {
@@ -253,6 +253,11 @@
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.
*/
private ZygoteState primaryZygoteState;
@@ -263,13 +268,13 @@
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 @@
@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 @@
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 @@
*/
@GuardedBy("mLock")
private Process.ProcessStartResult zygoteSendArgsAndGetResult(
- ZygoteState zygoteState, boolean useBlastulaPool, ArrayList<String> args)
+ ZygoteState zygoteState, boolean useUsapPool, ArrayList<String> 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 @@
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 @@
}
/**
- * 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 @@
"--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<String> args) {
+ private static boolean isValidUsapCommand(ArrayList<String> 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 @@
@Nullable String packageName,
@Nullable String[] packagesForUid,
@Nullable String sandboxId,
- boolean useBlastulaPool,
+ boolean useUnspecializedAppProcessPool,
@Nullable String[] extraArgs)
throws ZygoteStartFailedEx {
ArrayList<String> argsForZygote = new ArrayList<String>();
@@ -645,41 +651,41 @@
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 @@
}
}
+ /**
+ * Set the precentage of detected hidden API accesses that are logged to the new event log.
+ *
+ * <p>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 @@
}
}
+ 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 @@
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 @@
if (secondaryZygoteState == null || secondaryZygoteState.isClosed()) {
secondaryZygoteState =
ZygoteState.connect(mZygoteSecondarySocketAddress,
- mBlastulaPoolSecondarySocketAddress);
+ mUsapPoolSecondarySocketAddress);
maybeSetApiBlacklistExemptions(secondaryZygoteState, false);
maybeSetHiddenApiAccessLogSampleRate(secondaryZygoteState);
@@ -1007,11 +1052,11 @@
}
/**
- * 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 @@
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 @@
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 @@
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 @@
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 c99ecb32..2e09040 100644
--- a/core/java/android/os/connectivity/CellularBatteryStats.java
+++ b/core/java/android/os/connectivity/CellularBatteryStats.java
@@ -46,7 +46,7 @@
private long[] mTxTimeMs;
private long mMonitoredRailChargeConsumedMaMs;
- public static final Parcelable.Creator<CellularBatteryStats> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<CellularBatteryStats> CREATOR = new
Parcelable.Creator<CellularBatteryStats>() {
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 f2ac5ef..ef03caa 100644
--- a/core/java/android/os/connectivity/GpsBatteryStats.java
+++ b/core/java/android/os/connectivity/GpsBatteryStats.java
@@ -33,7 +33,7 @@
private long mEnergyConsumedMaMs;
private long[] mTimeInGpsSignalQualityLevel;
- public static final Parcelable.Creator<GpsBatteryStats> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<GpsBatteryStats> CREATOR = new
Parcelable.Creator<GpsBatteryStats>() {
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 3639c71..9d2d5d8 100644
--- a/core/java/android/os/connectivity/WifiBatteryStats.java
+++ b/core/java/android/os/connectivity/WifiBatteryStats.java
@@ -46,7 +46,7 @@
private long[] mTimeInRxSignalStrengthLevelMs;
private long mMonitoredRailChargeConsumedMaMs;
- public static final Parcelable.Creator<WifiBatteryStats> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<WifiBatteryStats> CREATOR = new
Parcelable.Creator<WifiBatteryStats>() {
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 d358a2e..de98359 100644
--- a/core/java/android/os/health/HealthStatsParceler.java
+++ b/core/java/android/os/health/HealthStatsParceler.java
@@ -41,7 +41,7 @@
private HealthStatsWriter mWriter;
private HealthStats mHealthStats;
- public static final Parcelable.Creator<HealthStatsParceler> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<HealthStatsParceler> CREATOR
= new Parcelable.Creator<HealthStatsParceler>() {
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 6af1faf..4aaa85f 100644
--- a/core/java/android/os/health/TimerStat.java
+++ b/core/java/android/os/health/TimerStat.java
@@ -34,7 +34,7 @@
/**
* The CREATOR instance for use by aidl Binder interfaces.
*/
- public static final Parcelable.Creator<TimerStat> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<TimerStat> CREATOR
= new Parcelable.Creator<TimerStat>() {
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 828f1c3..b797324 100644
--- a/core/java/android/os/storage/DiskInfo.java
+++ b/core/java/android/os/storage/DiskInfo.java
@@ -198,7 +198,7 @@
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public static final Creator<DiskInfo> CREATOR = new Creator<DiskInfo>() {
+ public static final @android.annotation.NonNull Creator<DiskInfo> CREATOR = new Creator<DiskInfo>() {
@Override
public DiskInfo createFromParcel(Parcel in) {
return new DiskInfo(in);
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 90a5f76..27e3914 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -136,6 +136,8 @@
public static final String PROP_ISOLATED_STORAGE = "persist.sys.isolated_storage";
/** {@hide} */
public static final String PROP_ISOLATED_STORAGE_SNAPSHOT = "sys.isolated_storage_snapshot";
+ /** {@hide} */
+ public static final String PROP_LEGACY_GREYLIST = "persist.sys.legacy_greylist";
/** {@hide} */
public static final String PROP_FORCE_AUDIO = "persist.fw.force_audio";
@@ -233,6 +235,8 @@
public static final int DEBUG_ISOLATED_STORAGE_FORCE_ON = 1 << 6;
/** {@hide} */
public static final int DEBUG_ISOLATED_STORAGE_FORCE_OFF = 1 << 7;
+ /** {@hide} */
+ public static final int DEBUG_LEGACY_GREYLIST = 1 << 8;
/** {@hide} */
public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE;
diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java
index 714a061..225ecfa 100644
--- a/core/java/android/os/storage/StorageVolume.java
+++ b/core/java/android/os/storage/StorageVolume.java
@@ -431,7 +431,7 @@
pw.decreaseIndent();
}
- public static final Creator<StorageVolume> CREATOR = new Creator<StorageVolume>() {
+ public static final @android.annotation.NonNull Creator<StorageVolume> CREATOR = new Creator<StorageVolume>() {
@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 5d310e1..7699a05 100644
--- a/core/java/android/os/storage/VolumeInfo.java
+++ b/core/java/android/os/storage/VolumeInfo.java
@@ -527,7 +527,7 @@
}
@UnsupportedAppUsage
- public static final Creator<VolumeInfo> CREATOR = new Creator<VolumeInfo>() {
+ public static final @android.annotation.NonNull Creator<VolumeInfo> CREATOR = new Creator<VolumeInfo>() {
@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 bc2d55a..b6ee261 100644
--- a/core/java/android/os/storage/VolumeRecord.java
+++ b/core/java/android/os/storage/VolumeRecord.java
@@ -130,7 +130,7 @@
}
@UnsupportedAppUsage
- public static final Creator<VolumeRecord> CREATOR = new Creator<VolumeRecord>() {
+ public static final @android.annotation.NonNull Creator<VolumeRecord> CREATOR = new Creator<VolumeRecord>() {
@Override
public VolumeRecord createFromParcel(Parcel in) {
return new VolumeRecord(in);
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index e883d25..ee03689 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -197,7 +197,7 @@
@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(
diff --git a/core/java/android/permission/RuntimePermissionPresentationInfo.java b/core/java/android/permission/RuntimePermissionPresentationInfo.java
index ed7b05c..d66789f 100644
--- a/core/java/android/permission/RuntimePermissionPresentationInfo.java
+++ b/core/java/android/permission/RuntimePermissionPresentationInfo.java
@@ -97,7 +97,7 @@
parcel.writeInt(mFlags);
}
- public static final Creator<RuntimePermissionPresentationInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RuntimePermissionPresentationInfo> CREATOR =
new Creator<RuntimePermissionPresentationInfo>() {
public RuntimePermissionPresentationInfo createFromParcel(Parcel source) {
return new RuntimePermissionPresentationInfo(source);
diff --git a/core/java/android/permission/RuntimePermissionUsageInfo.java b/core/java/android/permission/RuntimePermissionUsageInfo.java
index af1a1be..9f954f7 100644
--- a/core/java/android/permission/RuntimePermissionUsageInfo.java
+++ b/core/java/android/permission/RuntimePermissionUsageInfo.java
@@ -83,7 +83,7 @@
parcel.writeInt(mNumUsers);
}
- public static final Creator<RuntimePermissionUsageInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RuntimePermissionUsageInfo> CREATOR =
new Creator<RuntimePermissionUsageInfo>() {
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 96c8589..8880296 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -519,7 +519,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 c09cec8..74c5e3e 100644
--- a/core/java/android/preference/EditTextPreference.java
+++ b/core/java/android/preference/EditTextPreference.java
@@ -234,7 +234,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 14c1dc81..830de525 100644
--- a/core/java/android/preference/ListPreference.java
+++ b/core/java/android/preference/ListPreference.java
@@ -348,7 +348,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 e3d0e26..4b854ad 100644
--- a/core/java/android/preference/MultiCheckPreference.java
+++ b/core/java/android/preference/MultiCheckPreference.java
@@ -329,7 +329,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 43182d9..3d80717 100644
--- a/core/java/android/preference/MultiSelectListPreference.java
+++ b/core/java/android/preference/MultiSelectListPreference.java
@@ -279,7 +279,7 @@
dest.writeStringArray(values.toArray(new String[0]));
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 3c1ba9d..e82e60d 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -2108,7 +2108,7 @@
super(superState);
}
- public static final Parcelable.Creator<BaseSavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BaseSavedState> CREATOR =
new Parcelable.Creator<BaseSavedState>() {
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 eab5937..4750971 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -518,7 +518,7 @@
readFromParcel(in);
}
- public static final Creator<Header> CREATOR = new Creator<Header>() {
+ public static final @android.annotation.NonNull Creator<Header> CREATOR = new Creator<Header>() {
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 c7653c8..a353dbc 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -315,7 +315,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 f789e31..99ab9db 100644
--- a/core/java/android/preference/SeekBarPreference.java
+++ b/core/java/android/preference/SeekBarPreference.java
@@ -249,7 +249,7 @@
}
@SuppressWarnings("unused")
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 454472a..bb771d7 100644
--- a/core/java/android/preference/TwoStatePreference.java
+++ b/core/java/android/preference/TwoStatePreference.java
@@ -278,7 +278,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 92d848a..a2d5a23 100644
--- a/core/java/android/preference/VolumePreference.java
+++ b/core/java/android/preference/VolumePreference.java
@@ -236,7 +236,7 @@
super(superState);
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 2941283..1345038 100644
--- a/core/java/android/print/PageRange.java
+++ b/core/java/android/print/PageRange.java
@@ -162,7 +162,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<PageRange> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PageRange> CREATOR =
new Creator<PageRange>() {
@Override
public PageRange createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrintAttributes.java b/core/java/android/print/PrintAttributes.java
index f0d9a0c..e607ced 100644
--- a/core/java/android/print/PrintAttributes.java
+++ b/core/java/android/print/PrintAttributes.java
@@ -1465,7 +1465,7 @@
}
}
- public static final Parcelable.Creator<PrintAttributes> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrintAttributes> CREATOR =
new Creator<PrintAttributes>() {
@Override
public PrintAttributes createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java
index 55c902e..e10c507 100644
--- a/core/java/android/print/PrintDocumentInfo.java
+++ b/core/java/android/print/PrintDocumentInfo.java
@@ -367,7 +367,7 @@
}
}
- public static final Parcelable.Creator<PrintDocumentInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrintDocumentInfo> CREATOR =
new Creator<PrintDocumentInfo>() {
@Override
public PrintDocumentInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrintJobId.java b/core/java/android/print/PrintJobId.java
index 186ae9b..606cbb8 100644
--- a/core/java/android/print/PrintJobId.java
+++ b/core/java/android/print/PrintJobId.java
@@ -109,7 +109,7 @@
return new PrintJobId(string);
}
- public static final Parcelable.Creator<PrintJobId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrintJobId> CREATOR =
new Parcelable.Creator<PrintJobId>() {
@Override
public PrintJobId createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java
index 41f261b..25f383c 100644
--- a/core/java/android/print/PrintJobInfo.java
+++ b/core/java/android/print/PrintJobInfo.java
@@ -881,7 +881,7 @@
}
}
- public static final Parcelable.Creator<PrintJobInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrintJobInfo> CREATOR =
new Creator<PrintJobInfo>() {
@Override
public PrintJobInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrinterCapabilitiesInfo.java b/core/java/android/print/PrinterCapabilitiesInfo.java
index 01c23f6..e465d3b 100644
--- a/core/java/android/print/PrinterCapabilitiesInfo.java
+++ b/core/java/android/print/PrinterCapabilitiesInfo.java
@@ -646,7 +646,7 @@
}
}
- public static final Parcelable.Creator<PrinterCapabilitiesInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrinterCapabilitiesInfo> CREATOR =
new Parcelable.Creator<PrinterCapabilitiesInfo>() {
@Override
public PrinterCapabilitiesInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrinterId.java b/core/java/android/print/PrinterId.java
index 659e56f..42570c6 100644
--- a/core/java/android/print/PrinterId.java
+++ b/core/java/android/print/PrinterId.java
@@ -124,7 +124,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<PrinterId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrinterId> CREATOR =
new Creator<PrinterId>() {
@Override
public PrinterId createFromParcel(Parcel parcel) {
diff --git a/core/java/android/print/PrinterInfo.java b/core/java/android/print/PrinterInfo.java
index e79cc65..4d5ccc0 100644
--- a/core/java/android/print/PrinterInfo.java
+++ b/core/java/android/print/PrinterInfo.java
@@ -563,7 +563,7 @@
}
}
- public static final Parcelable.Creator<PrinterInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrinterInfo> CREATOR =
new Parcelable.Creator<PrinterInfo>() {
@Override
public PrinterInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/printservice/PrintServiceInfo.java b/core/java/android/printservice/PrintServiceInfo.java
index 57f1229..565843e 100644
--- a/core/java/android/printservice/PrintServiceInfo.java
+++ b/core/java/android/printservice/PrintServiceInfo.java
@@ -328,7 +328,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<PrintServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PrintServiceInfo> CREATOR =
new Parcelable.Creator<PrintServiceInfo>() {
@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 a327956..156f182 100644
--- a/core/java/android/printservice/recommendation/RecommendationInfo.java
+++ b/core/java/android/printservice/recommendation/RecommendationInfo.java
@@ -182,7 +182,7 @@
*
* @see #RecommendationInfo(Parcel)
*/
- public static final Creator<RecommendationInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<RecommendationInfo> CREATOR =
new Creator<RecommendationInfo>() {
@Override
public RecommendationInfo createFromParcel(Parcel in) {
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 3e5bd4b..5d34aa6 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -183,6 +183,22 @@
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
/**
+ * The content:// style URL for the top-level cross-profile calendar uris.
+ * {@link android.database.ContentObserver} for this URL in the primary profile will be
+ * notified when there is a change in the managed profile calendar provider.
+ *
+ * @see Events#ENTERPRISE_CONTENT_URI
+ * @see Calendars#ENTERPRISE_CONTENT_URI
+ * @see Instances#ENTERPRISE_CONTENT_URI
+ * @see Instances#ENTERPRISE_CONTENT_BY_DAY_URI
+ * @see Instances#ENTERPRISE_CONTENT_SEARCH_URI
+ * @see Instances#ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI
+ * @hide
+ */
+ public static final Uri ENTERPRISE_CONTENT_URI = Uri.parse(
+ "content://" + AUTHORITY + "/enterprise");
+
+ /**
* An optional insert, update or delete URI parameter that allows the caller
* to specify that it is a sync adapter. The default value is false. If set
* to true, the modified row is not marked as "dirty" (needs to be synced)
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index ddb8758..2cd3c48 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -55,6 +55,15 @@
public static final Uri CONTENT_URI = Uri.parse("content://" + Settings.AUTHORITY + "/config");
/**
+ * Namespace for activity manager related features. These features will be applied
+ * immediately upon change.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager";
+
+ /**
* Namespace for all Game Driver features.
*
* @hide
@@ -136,32 +145,32 @@
*/
/**
- * 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";
+ String USAP_POOL_REFILL_THRESHOLD = "usap_refill_threshold";
}
/**
@@ -281,35 +290,6 @@
}
/**
- * Namespace for activity manager related features. These features will be applied
- * immediately upon change.
- *
- * @hide
- */
- @SystemApi
- public interface ActivityManager {
- String NAMESPACE = "activity_manager";
-
- /**
- * App compaction flags. See {@link com.android.server.am.AppCompactor}.
- */
- String KEY_USE_COMPACTION = "use_compaction";
- String KEY_COMPACT_ACTION_1 = "compact_action_1";
- String KEY_COMPACT_ACTION_2 = "compact_action_2";
- String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
- String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
- String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
- String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
- String KEY_COMPACT_STATSD_SAMPLE_RATE = "compact_statsd_sample_rate";
-
- /**
- * Maximum number of cached processes. See
- * {@link com.android.server.am.ActivityManagerConstants}.
- */
- String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
- }
-
- /**
* Namespace for {@link AttentionManagerService} related features.
*
* @hide
@@ -412,6 +392,110 @@
}
/**
+ * 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
* namespaces and might have different values in any or all namespaces.
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index d282967..49567b2 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -1794,7 +1794,7 @@
return 0;
}
- public static final Creator<Path> CREATOR = new Creator<Path>() {
+ public static final @android.annotation.NonNull Creator<Path> CREATOR = new Creator<Path>() {
@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 643307e..a34ac70 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -529,7 +529,6 @@
*
* @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
- * @see MediaStore#createPending(Context, PendingParams)
*/
public static @NonNull Uri setIncludePending(@NonNull Uri uri) {
return setIncludePending(uri.buildUpon()).build();
@@ -586,7 +585,9 @@
* @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
* @see MediaStore#createPending(Context, PendingParams)
+ * @removed
*/
+ @Deprecated
public static @NonNull Uri createPending(@NonNull Context context,
@NonNull PendingParams params) {
return context.getContentResolver().insert(params.insertUri, params.insertValues);
@@ -599,14 +600,19 @@
*
* @param uri token which was previously returned from
* {@link #createPending(Context, PendingParams)}.
+ * @removed
*/
+ @Deprecated
public static @NonNull PendingSession openPending(@NonNull Context context, @NonNull Uri uri) {
return new PendingSession(context, uri);
}
/**
* Parameters that describe a pending media item.
+ *
+ * @removed
*/
+ @Deprecated
public static class PendingParams {
/** {@hide} */
public final Uri insertUri;
@@ -711,7 +717,10 @@
* expected to have a short lifetime, and owners should either
* {@link PendingSession#publish()} or {@link PendingSession#abandon()} a
* pending item within a few hours after first creating it.
+ *
+ * @removed
*/
+ @Deprecated
public static class PendingSession implements AutoCloseable {
/** {@hide} */
private final Context mContext;
@@ -976,9 +985,7 @@
* Flag indicating if a media item is pending, and still being inserted
* by its owner.
*
- * @see MediaColumns#IS_PENDING
* @see MediaStore#setIncludePending(Uri)
- * @see MediaStore#createPending(Context, PendingParams)
*/
@Column(Cursor.FIELD_TYPE_INTEGER)
public static final String IS_PENDING = "is_pending";
@@ -998,12 +1005,8 @@
/**
* The time the media item should be considered expired. Typically only
- * meaningful in the context of {@link #IS_PENDING} or
- * {@link #IS_TRASHED}.
- *
- * @removed
+ * meaningful in the context of {@link #IS_PENDING}.
*/
- @Deprecated
@CurrentTimeSecondsLong
@Column(Cursor.FIELD_TYPE_INTEGER)
public static final String DATE_EXPIRES = "date_expires";
@@ -1030,8 +1033,6 @@
/**
* The primary directory name this media exists under. The value may be
* {@code NULL} if the media doesn't have a primary directory name.
- *
- * @see PendingParams#setPrimaryDirectory(String)
*/
@Column(Cursor.FIELD_TYPE_STRING)
public static final String PRIMARY_DIRECTORY = "primary_directory";
@@ -1039,8 +1040,6 @@
/**
* The secondary directory name this media exists under. The value may
* be {@code NULL} if the media doesn't have a secondary directory name.
- *
- * @see PendingParams#setSecondaryDirectory(String)
*/
@Column(Cursor.FIELD_TYPE_STRING)
public static final String SECONDARY_DIRECTORY = "secondary_directory";
@@ -1292,12 +1291,7 @@
}
/**
- * Container for downloaded files.
- *
- * <p>
- * Querying for downloads from this table will return files contributed via
- * {@link PendingSession} and also ones which were downloaded using
- * {@link android.app.DownloadManager} APIs.
+ * Collection of downloaded items.
*/
public static final class Downloads implements DownloadColumns {
private Downloads() {}
@@ -1305,6 +1299,7 @@
/**
* The content:// style URI for the internal storage.
*/
+ @NonNull
public static final Uri INTERNAL_CONTENT_URI =
getContentUri("internal");
@@ -1312,6 +1307,7 @@
* The content:// style URI for the "primary" external storage
* volume.
*/
+ @NonNull
public static final Uri EXTERNAL_CONTENT_URI =
getContentUri("external");
@@ -1336,13 +1332,13 @@
* @param volumeName the name of the volume to get the URI for
* @return the URI to the image media table on the given volume
*/
- public static Uri getContentUri(String volumeName) {
+ public static @NonNull Uri getContentUri(@NonNull String volumeName) {
return AUTHORITY_URI.buildUpon().appendPath(volumeName)
.appendPath("downloads").build();
}
/** @hide */
- public static Uri getContentUriForPath(@NonNull String path) {
+ public static @NonNull Uri getContentUriForPath(@NonNull String path) {
return getContentUri(getVolumeName(new File(path)));
}
@@ -1620,9 +1616,9 @@
* @param name The name of the image
* @param description The description of the image
* @return The URL to the newly created image
- * @deprecated inserting of images should be performed through
- * {@link MediaStore#createPending(Context, PendingParams)},
- * which offers richer control over lifecycle.
+ * @deprecated inserting of images should be performed using
+ * {@link MediaColumns#IS_PENDING}, which offers richer
+ * control over lifecycle.
*/
@Deprecated
public static final String insertImage(ContentResolver cr, String imagePath,
@@ -1651,9 +1647,9 @@
* @param description The description of the image
* @return The URL to the newly created image, or <code>null</code> if the image failed to be stored
* for any reason.
- * @deprecated inserting of images should be performed through
- * {@link MediaStore#createPending(Context, PendingParams)},
- * which offers richer control over lifecycle.
+ * @deprecated inserting of images should be performed using
+ * {@link MediaColumns#IS_PENDING}, which offers richer
+ * control over lifecycle.
*/
@Deprecated
public static final String insertImage(ContentResolver cr, Bitmap source,
@@ -3180,7 +3176,7 @@
* {@link MediaStore.Images.Media#getContentUri(String)} to query media at
* that location.
*/
- public static @NonNull Set<String> getAllVolumeNames(Context context) {
+ public static @NonNull Set<String> getAllVolumeNames(@NonNull Context context) {
final StorageManager sm = context.getSystemService(StorageManager.class);
final Set<String> volumeNames = new ArraySet<>();
volumeNames.add(VOLUME_INTERNAL);
@@ -3354,7 +3350,7 @@
* if no equivalent was found.
* @see #getMediaUri(Context, Uri)
*/
- public static Uri getDocumentUri(Context context, Uri mediaUri) {
+ public static @Nullable Uri getDocumentUri(@NonNull Context context, @NonNull Uri mediaUri) {
final ContentResolver resolver = context.getContentResolver();
final List<UriPermission> uriPermissions = resolver.getPersistedUriPermissions();
@@ -3384,7 +3380,7 @@
* equivalent was found.
* @see #getDocumentUri(Context, Uri)
*/
- public static Uri getMediaUri(Context context, Uri documentUri) {
+ public static @Nullable Uri getMediaUri(@NonNull Context context, @NonNull Uri documentUri) {
final ContentResolver resolver = context.getContentResolver();
final List<UriPermission> uriPermissions = resolver.getPersistedUriPermissions();
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 0d7e00f..f5eb63f 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9635,6 +9635,7 @@
* 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";
@@ -13376,8 +13377,8 @@
"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
*/
@@ -13385,6 +13386,15 @@
"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.
*
* Values correspond to @{@link
diff --git a/core/java/android/security/KeystoreArguments.java b/core/java/android/security/KeystoreArguments.java
index 7d85ca7..e634234 100644
--- a/core/java/android/security/KeystoreArguments.java
+++ b/core/java/android/security/KeystoreArguments.java
@@ -29,7 +29,7 @@
public byte[][] args;
@UnsupportedAppUsage
- public static final Parcelable.Creator<KeystoreArguments> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeystoreArguments> CREATOR = new
Parcelable.Creator<KeystoreArguments>() {
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 1ab79fb..1be5ae9 100644
--- a/core/java/android/security/keymaster/ExportResult.java
+++ b/core/java/android/security/keymaster/ExportResult.java
@@ -34,7 +34,7 @@
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<ExportResult> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<ExportResult> CREATOR = new
Parcelable.Creator<ExportResult>() {
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 8e585f4b..670f30e1b 100644
--- a/core/java/android/security/keymaster/KeyAttestationApplicationId.java
+++ b/core/java/android/security/keymaster/KeyAttestationApplicationId.java
@@ -55,7 +55,7 @@
dest.writeTypedArray(mAttestationPackageInfos, flags);
}
- public static final Parcelable.Creator<KeyAttestationApplicationId> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyAttestationApplicationId> CREATOR
= new Parcelable.Creator<KeyAttestationApplicationId>() {
@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 a93d1e1..c0b8d8d 100644
--- a/core/java/android/security/keymaster/KeyAttestationPackageInfo.java
+++ b/core/java/android/security/keymaster/KeyAttestationPackageInfo.java
@@ -74,7 +74,7 @@
dest.writeTypedArray(mPackageSignatures, flags);
}
- public static final Parcelable.Creator<KeyAttestationPackageInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyAttestationPackageInfo> CREATOR
= new Parcelable.Creator<KeyAttestationPackageInfo>() {
@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 a4fe75d..2eb2cef 100644
--- a/core/java/android/security/keymaster/KeyCharacteristics.java
+++ b/core/java/android/security/keymaster/KeyCharacteristics.java
@@ -32,7 +32,7 @@
public KeymasterArguments swEnforced;
public KeymasterArguments hwEnforced;
- public static final Parcelable.Creator<KeyCharacteristics> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyCharacteristics> CREATOR =
new Parcelable.Creator<KeyCharacteristics>() {
@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 6ad53a4..8b86d41 100644
--- a/core/java/android/security/keymaster/KeymasterArgument.java
+++ b/core/java/android/security/keymaster/KeymasterArgument.java
@@ -30,7 +30,7 @@
abstract class KeymasterArgument implements Parcelable {
public final int tag;
- public static final Parcelable.Creator<KeymasterArgument> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeymasterArgument> CREATOR = new
Parcelable.Creator<KeymasterArgument>() {
@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 5aa0f91..d2dbdec 100644
--- a/core/java/android/security/keymaster/KeymasterArguments.java
+++ b/core/java/android/security/keymaster/KeymasterArguments.java
@@ -42,7 +42,7 @@
private List<KeymasterArgument> mArguments;
@UnsupportedAppUsage
- public static final Parcelable.Creator<KeymasterArguments> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeymasterArguments> CREATOR = new
Parcelable.Creator<KeymasterArguments>() {
@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 0659a22..6a2024f 100644
--- a/core/java/android/security/keymaster/KeymasterBlob.java
+++ b/core/java/android/security/keymaster/KeymasterBlob.java
@@ -30,7 +30,7 @@
this.blob = blob;
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<KeymasterBlob> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeymasterBlob> CREATOR = new
Parcelable.Creator<KeymasterBlob>() {
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 00a1a1c..4bad462 100644
--- a/core/java/android/security/keymaster/KeymasterCertificateChain.java
+++ b/core/java/android/security/keymaster/KeymasterCertificateChain.java
@@ -32,7 +32,7 @@
private List<byte[]> mCertificates;
- public static final Parcelable.Creator<KeymasterCertificateChain> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeymasterCertificateChain> CREATOR = new
Parcelable.Creator<KeymasterCertificateChain>() {
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 bc4f360..c278eb3 100644
--- a/core/java/android/security/keymaster/OperationResult.java
+++ b/core/java/android/security/keymaster/OperationResult.java
@@ -35,7 +35,7 @@
public final KeymasterArguments outParams;
@UnsupportedAppUsage
- public static final Parcelable.Creator<OperationResult> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<OperationResult> CREATOR = new
Parcelable.Creator<OperationResult>() {
@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 4af1af5..8f6b6ec 100644
--- a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java
+++ b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java
@@ -236,7 +236,7 @@
Arrays.fill(mSecret, (byte) 0);
}
- public static final Parcelable.Creator<KeyChainProtectionParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyChainProtectionParams> CREATOR =
new Parcelable.Creator<KeyChainProtectionParams>() {
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 035b226..18517aa 100644
--- a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
+++ b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java
@@ -147,7 +147,7 @@
return mEncryptedRecoveryKeyBlob;
}
- public static final Creator<KeyChainSnapshot> CREATOR =
+ public static final @android.annotation.NonNull Creator<KeyChainSnapshot> CREATOR =
new Creator<KeyChainSnapshot>() {
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 5165f0c..6d1533e 100644
--- a/core/java/android/security/keystore/recovery/KeyDerivationParams.java
+++ b/core/java/android/security/keystore/recovery/KeyDerivationParams.java
@@ -140,7 +140,7 @@
return mMemoryDifficulty;
}
- public static final Parcelable.Creator<KeyDerivationParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyDerivationParams> CREATOR =
new Parcelable.Creator<KeyDerivationParams>() {
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 f3604fe..04e965f 100644
--- a/core/java/android/security/keystore/recovery/RecoveryCertPath.java
+++ b/core/java/android/security/keystore/recovery/RecoveryCertPath.java
@@ -74,7 +74,7 @@
mEncodedCertPath = in.createByteArray();
}
- public static final Parcelable.Creator<RecoveryCertPath> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RecoveryCertPath> CREATOR =
new Parcelable.Creator<RecoveryCertPath>() {
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 dbfd655..c6e6272 100644
--- a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java
+++ b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java
@@ -143,7 +143,7 @@
return mMetadata;
}
- public static final Parcelable.Creator<WrappedApplicationKey> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WrappedApplicationKey> CREATOR =
new Parcelable.Creator<WrappedApplicationKey>() {
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 2612917..5f64755 100644
--- a/core/java/android/service/autofill/AutofillFieldClassificationService.java
+++ b/core/java/android/service/autofill/AutofillFieldClassificationService.java
@@ -349,7 +349,7 @@
}
}
- public static final Creator<Scores> CREATOR = new Creator<Scores>() {
+ public static final @android.annotation.NonNull Creator<Scores> CREATOR = new Creator<Scores>() {
@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 2ba0376..e0b1c2f 100644
--- a/core/java/android/service/autofill/BatchUpdates.java
+++ b/core/java/android/service/autofill/BatchUpdates.java
@@ -187,7 +187,7 @@
}
dest.writeParcelable(mUpdates, flags);
}
- public static final Parcelable.Creator<BatchUpdates> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BatchUpdates> CREATOR =
new Parcelable.Creator<BatchUpdates>() {
@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 271707a..e3e8844 100644
--- a/core/java/android/service/autofill/CharSequenceTransformation.java
+++ b/core/java/android/service/autofill/CharSequenceTransformation.java
@@ -208,7 +208,7 @@
parcel.writeStringArray(substs);
}
- public static final Parcelable.Creator<CharSequenceTransformation> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CharSequenceTransformation> CREATOR =
new Parcelable.Creator<CharSequenceTransformation>() {
@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 2df4ddf..c7dc15a 100644
--- a/core/java/android/service/autofill/CompositeUserData.java
+++ b/core/java/android/service/autofill/CompositeUserData.java
@@ -191,7 +191,7 @@
parcel.writeParcelable(mPackageUserData, 0);
}
- public static final Parcelable.Creator<CompositeUserData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CompositeUserData> CREATOR =
new Parcelable.Creator<CompositeUserData>() {
@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 fdbb1c2..c28d2bb 100644
--- a/core/java/android/service/autofill/CustomDescription.java
+++ b/core/java/android/service/autofill/CustomDescription.java
@@ -176,6 +176,7 @@
* 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 @@
* 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 @@
* 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 @@
/**
* Creates a new {@link CustomDescription} instance.
*/
+ @NonNull
public CustomDescription build() {
throwIfDestroyed();
mDestroyed = true;
@@ -425,7 +429,7 @@
dest.writeParcelableArray(values, flags);
}
}
- public static final Parcelable.Creator<CustomDescription> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CustomDescription> CREATOR =
new Parcelable.Creator<CustomDescription>() {
@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 f8408be..d53e62a 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -500,7 +500,7 @@
parcel.writeString(mId);
}
- public static final Creator<Dataset> CREATOR = new Creator<Dataset>() {
+ public static final @android.annotation.NonNull Creator<Dataset> CREATOR = new Creator<Dataset>() {
@Override
public Dataset createFromParcel(Parcel parcel) {
// Always go through the builder to ensure the data ingested by
@@ -572,7 +572,7 @@
}
@SuppressWarnings("hiding")
- public static final Creator<DatasetFieldFilter> CREATOR =
+ public static final @android.annotation.NonNull Creator<DatasetFieldFilter> CREATOR =
new Creator<DatasetFieldFilter>() {
@Override
diff --git a/core/java/android/service/autofill/DateTransformation.java b/core/java/android/service/autofill/DateTransformation.java
index ec24a09..338ba74 100644
--- a/core/java/android/service/autofill/DateTransformation.java
+++ b/core/java/android/service/autofill/DateTransformation.java
@@ -111,7 +111,7 @@
parcel.writeSerializable(mDateFormat);
}
- public static final Parcelable.Creator<DateTransformation> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DateTransformation> CREATOR =
new Parcelable.Creator<DateTransformation>() {
@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 4f797f4..707bab1 100644
--- a/core/java/android/service/autofill/DateValueSanitizer.java
+++ b/core/java/android/service/autofill/DateValueSanitizer.java
@@ -108,7 +108,7 @@
parcel.writeSerializable(mDateFormat);
}
- public static final Parcelable.Creator<DateValueSanitizer> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DateValueSanitizer> CREATOR =
new Parcelable.Creator<DateValueSanitizer>() {
@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 535c00b..70f434c 100644
--- a/core/java/android/service/autofill/FillContext.java
+++ b/core/java/android/service/autofill/FillContext.java
@@ -49,6 +49,7 @@
public final class FillContext implements Parcelable {
private final int mRequestId;
private final @NonNull AssistStructure mStructure;
+ private final @NonNull AutofillId mFocusedId;
/**
* Lookup table AutofillId->ViewNode to speed up {@link #findViewNodesByAutofillIds}
@@ -58,13 +59,15 @@
/** @hide */
- public FillContext(int requestId, @NonNull AssistStructure structure) {
+ public FillContext(int requestId, @NonNull AssistStructure structure,
+ @NonNull AutofillId autofillId) {
mRequestId = requestId;
mStructure = structure;
+ mFocusedId = autofillId;
}
private FillContext(Parcel parcel) {
- this(parcel.readInt(), parcel.readParcelable(null));
+ this(parcel.readInt(), parcel.readParcelable(null), parcel.readParcelable(null));
}
/**
@@ -82,15 +85,24 @@
/**
* @return The screen content.
*/
+ @NonNull
public AssistStructure getStructure() {
return mStructure;
}
+ /**
+ * @return the AutofillId of the view that triggered autofill.
+ */
+ @NonNull
+ public AutofillId getFocusedId() {
+ return mFocusedId;
+ }
+
@Override
public String toString() {
if (!sDebug) return super.toString();
- return "FillContext [reqId=" + mRequestId + "]";
+ return "FillContext [reqId=" + mRequestId + ", focusedId=" + mFocusedId + "]";
}
@Override
@@ -102,6 +114,7 @@
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mRequestId);
parcel.writeParcelable(mStructure, flags);
+ parcel.writeParcelable(mFocusedId, flags);
}
/**
@@ -177,14 +190,16 @@
return foundNodes;
}
- public static final Parcelable.Creator<FillContext> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FillContext> CREATOR =
new Parcelable.Creator<FillContext>() {
@Override
+ @NonNull
public FillContext createFromParcel(Parcel parcel) {
return new FillContext(parcel);
}
@Override
+ @NonNull
public FillContext[] newArray(int size) {
return new FillContext[size];
}
diff --git a/core/java/android/service/autofill/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java
index 6e5bacf..c65e773 100644
--- a/core/java/android/service/autofill/FillEventHistory.java
+++ b/core/java/android/service/autofill/FillEventHistory.java
@@ -517,7 +517,7 @@
}
}
- public static final Parcelable.Creator<FillEventHistory> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FillEventHistory> CREATOR =
new Parcelable.Creator<FillEventHistory>() {
@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 cbd0cd9..66864c6 100644
--- a/core/java/android/service/autofill/FillRequest.java
+++ b/core/java/android/service/autofill/FillRequest.java
@@ -176,7 +176,7 @@
parcel.writeInt(mFlags);
}
- public static final Parcelable.Creator<FillRequest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FillRequest> CREATOR =
new Parcelable.Creator<FillRequest>() {
@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 93ee8c3..6b3009f 100644
--- a/core/java/android/service/autofill/FillResponse.java
+++ b/core/java/android/service/autofill/FillResponse.java
@@ -272,7 +272,8 @@
*
* @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 @@
* <p>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 @@
*
* @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 @@
* @param clientState The custom client state.
* @return This builder.
*/
+ @NonNull
public Builder setClientState(@Nullable Bundle clientState) {
throwIfDestroyed();
throwIfDisableAutofillCalled();
@@ -379,6 +383,7 @@
* 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 @@
*
* @return This builder.
*/
+ @NonNull
public Builder setFlags(@FillResponseFlags int flags) {
throwIfDestroyed();
mFlags = Preconditions.checkFlagsArgument(flags,
@@ -437,6 +443,7 @@
* {@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 @@
* 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 @@
* requires authentication}.
*/
// TODO(b/69796626): make it sticky / update javadoc
+ @NonNull
public Builder setFooter(@NonNull RemoteViews footer) {
throwIfDestroyed();
throwIfAuthenticationCalled();
@@ -524,6 +533,7 @@
* {@link #setAuthentication(AutofillId[], IntentSender, RemoteViews)
* requires authentication}.
*/
+ @NonNull
public Builder setUserData(@NonNull UserData userData) {
throwIfDestroyed();
throwIfAuthenticationCalled();
@@ -548,6 +558,7 @@
*
* @return A built response.
*/
+ @NonNull
public FillResponse build() {
throwIfDestroyed();
if (mAuthentication == null && mDatasets == null && mSaveInfo == null
@@ -658,7 +669,7 @@
parcel.writeInt(mRequestId);
}
- public static final Parcelable.Creator<FillResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FillResponse> CREATOR =
new Parcelable.Creator<FillResponse>() {
@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 4afda24..12376e8 100644
--- a/core/java/android/service/autofill/ImageTransformation.java
+++ b/core/java/android/service/autofill/ImageTransformation.java
@@ -242,7 +242,7 @@
parcel.writeCharSequenceArray(contentDescriptions);
}
- public static final Parcelable.Creator<ImageTransformation> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ImageTransformation> CREATOR =
new Parcelable.Creator<ImageTransformation>() {
@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 c56ae84..ef0bd74 100644
--- a/core/java/android/service/autofill/LuhnChecksumValidator.java
+++ b/core/java/android/service/autofill/LuhnChecksumValidator.java
@@ -124,7 +124,7 @@
parcel.writeParcelableArray(mIds, flags);
}
- public static final Parcelable.Creator<LuhnChecksumValidator> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<LuhnChecksumValidator> CREATOR =
new Parcelable.Creator<LuhnChecksumValidator>() {
@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 a963f9f..2f098e2 100644
--- a/core/java/android/service/autofill/NegationValidator.java
+++ b/core/java/android/service/autofill/NegationValidator.java
@@ -64,7 +64,7 @@
dest.writeParcelable(mValidator, flags);
}
- public static final Parcelable.Creator<NegationValidator> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NegationValidator> CREATOR =
new Parcelable.Creator<NegationValidator>() {
@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 7aec59f..7189c88 100644
--- a/core/java/android/service/autofill/OptionalValidators.java
+++ b/core/java/android/service/autofill/OptionalValidators.java
@@ -79,7 +79,7 @@
dest.writeParcelableArray(mValidators, flags);
}
- public static final Parcelable.Creator<OptionalValidators> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<OptionalValidators> CREATOR =
new Parcelable.Creator<OptionalValidators>() {
@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 9dfe78d..8cb67d0 100644
--- a/core/java/android/service/autofill/RegexValidator.java
+++ b/core/java/android/service/autofill/RegexValidator.java
@@ -93,7 +93,7 @@
parcel.writeSerializable(mRegex);
}
- public static final Parcelable.Creator<RegexValidator> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RegexValidator> CREATOR =
new Parcelable.Creator<RegexValidator>() {
@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 9e1db2b..619eba0 100644
--- a/core/java/android/service/autofill/RequiredValidators.java
+++ b/core/java/android/service/autofill/RequiredValidators.java
@@ -78,7 +78,7 @@
dest.writeParcelableArray(mValidators, flags);
}
- public static final Parcelable.Creator<RequiredValidators> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RequiredValidators> CREATOR =
new Parcelable.Creator<RequiredValidators>() {
@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 dfaf49a..94b9d05 100644
--- a/core/java/android/service/autofill/SaveInfo.java
+++ b/core/java/android/service/autofill/SaveInfo.java
@@ -776,7 +776,7 @@
parcel.writeInt(mFlags);
}
- public static final Parcelable.Creator<SaveInfo> CREATOR = new Parcelable.Creator<SaveInfo>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<SaveInfo> CREATOR = new Parcelable.Creator<SaveInfo>() {
@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 c9b5b55..5dd07c4 100644
--- a/core/java/android/service/autofill/SaveRequest.java
+++ b/core/java/android/service/autofill/SaveRequest.java
@@ -101,7 +101,7 @@
parcel.writeStringList(mDatasetIds);
}
- public static final Creator<SaveRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<SaveRequest> CREATOR =
new Creator<SaveRequest>() {
@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 a8c080a..cc48fcb 100644
--- a/core/java/android/service/autofill/TextValueSanitizer.java
+++ b/core/java/android/service/autofill/TextValueSanitizer.java
@@ -116,7 +116,7 @@
parcel.writeString(mSubst);
}
- public static final Parcelable.Creator<TextValueSanitizer> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextValueSanitizer> CREATOR =
new Parcelable.Creator<TextValueSanitizer>() {
@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 a793e09..7814f70 100644
--- a/core/java/android/service/autofill/UserData.java
+++ b/core/java/android/service/autofill/UserData.java
@@ -266,6 +266,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder setFieldClassificationAlgorithm(@Nullable String name,
@Nullable Bundle args) {
throwIfDestroyed();
@@ -291,6 +292,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder setFieldClassificationAlgorithmForCategory(@NonNull String categoryId,
@Nullable String name, @Nullable Bundle args) {
throwIfDestroyed();
@@ -333,6 +335,7 @@
* {@link UserData#getMaxValueLength()}</li>
* </ul>
*/
+ @NonNull
public Builder add(@NonNull String value, @NonNull String categoryId) {
throwIfDestroyed();
checkNotEmpty("categoryId", categoryId);
@@ -386,6 +389,7 @@
*
* @return The built dataset.
*/
+ @NonNull
public UserData build() {
throwIfDestroyed();
mDestroyed = true;
@@ -435,7 +439,7 @@
parcel.writeMap(mCategoryArgs);
}
- public static final Parcelable.Creator<UserData> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UserData> CREATOR =
new Parcelable.Creator<UserData>() {
@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 9f977d7..e29a23f 100644
--- a/core/java/android/service/autofill/VisibilitySetterAction.java
+++ b/core/java/android/service/autofill/VisibilitySetterAction.java
@@ -70,7 +70,7 @@
/**
* Builder for {@link VisibilitySetterAction} objects.
*/
- public static class Builder {
+ public static final class Builder {
private final SparseIntArray mVisibilities = new SparseIntArray();
private boolean mDestroyed;
@@ -96,6 +96,7 @@
* @throws IllegalArgumentException if visibility is not one of {@link View#VISIBLE},
* {@link View#INVISIBLE}, or {@link View#GONE}.
*/
+ @NonNull
public Builder setVisibility(@IdRes int id, @Visibility int visibility) {
throwIfDestroyed();
switch (visibility) {
@@ -111,6 +112,7 @@
/**
* Creates a new {@link VisibilitySetterAction} instance.
*/
+ @NonNull
public VisibilitySetterAction build() {
throwIfDestroyed();
mDestroyed = true;
@@ -145,8 +147,10 @@
parcel.writeSparseIntArray(mVisibilities);
}
- public static final Parcelable.Creator<VisibilitySetterAction> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VisibilitySetterAction> CREATOR =
new Parcelable.Creator<VisibilitySetterAction>() {
+
+ @NonNull
@Override
public VisibilitySetterAction createFromParcel(Parcel parcel) {
// Always go through the builder to ensure the data ingested by
@@ -165,6 +169,7 @@
return builder == null ? null : builder.build();
}
+ @NonNull
@Override
public VisibilitySetterAction[] newArray(int size) {
return new VisibilitySetterAction[size];
diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
index 463eae68..cd54930 100644
--- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
+++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
@@ -253,6 +253,7 @@
}
@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 2ac406c..48a3c1b 100644
--- a/core/java/android/service/autofill/augmented/FillResponse.java
+++ b/core/java/android/service/autofill/augmented/FillResponse.java
@@ -19,9 +19,6 @@
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
-import android.view.autofill.AutofillId;
-
-import java.util.List;
/**
* Response to a {@link FillRequest}.
@@ -63,6 +60,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder setFillWindow(@NonNull FillWindow fillWindow) {
// TODO(b/123100712): check not null / unit test / throw exception if FillWindow not
// updated yet
@@ -71,19 +69,6 @@
}
/**
- * Tells the Android System that the given {@code ids} should not trigger further
- * {@link FillRequest requests} when focused.
- *
- * @param ids ids of the fields that should be ignored
- *
- * @return this builder
- */
- public Builder setIgnoredIds(@NonNull List<AutofillId> ids) {
- // TODO(b/123100695): implement / check not null / unit test
- return this;
- }
-
- /**
* Builds a new {@link FillResponse} instance.
*
* @throws IllegalStateException if any of the following conditions occur:
@@ -95,6 +80,7 @@
*
* @return A built response.
*/
+ @NonNull
public FillResponse build() {
// TODO(b/123100712): check conditions / add unit test
return new FillResponse(this);
diff --git a/core/java/android/service/carrier/CarrierIdentifier.java b/core/java/android/service/carrier/CarrierIdentifier.java
index 568ca0f..3a57e3a 100644
--- a/core/java/android/service/carrier/CarrierIdentifier.java
+++ b/core/java/android/service/carrier/CarrierIdentifier.java
@@ -35,7 +35,7 @@
public class CarrierIdentifier implements Parcelable {
/** Used to create a {@link CarrierIdentifier} from a {@link Parcel}. */
- public static final Creator<CarrierIdentifier> CREATOR = new Creator<CarrierIdentifier>() {
+ public static final @android.annotation.NonNull Creator<CarrierIdentifier> CREATOR = new Creator<CarrierIdentifier>() {
@Override
public CarrierIdentifier createFromParcel(Parcel parcel) {
return new CarrierIdentifier(parcel);
diff --git a/core/java/android/service/carrier/CarrierMessagingClientService.java b/core/java/android/service/carrier/CarrierMessagingClientService.java
index 13f4fc4..767c1d1 100644
--- a/core/java/android/service/carrier/CarrierMessagingClientService.java
+++ b/core/java/android/service/carrier/CarrierMessagingClientService.java
@@ -15,6 +15,8 @@
*/
package android.service.carrier;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
@@ -71,7 +73,8 @@
}
@Override
- public final IBinder onBind(Intent intent) {
+ @NonNull
+ public final IBinder onBind(@Nullable Intent intent) {
return mImpl.asBinder();
}
diff --git a/core/java/android/service/carrier/MessagePdu.java b/core/java/android/service/carrier/MessagePdu.java
index ca18e53..19c41b1 100644
--- a/core/java/android/service/carrier/MessagePdu.java
+++ b/core/java/android/service/carrier/MessagePdu.java
@@ -72,7 +72,7 @@
/**
* Constructs a {@link MessagePdu} from a {@link Parcel}.
*/
- public static final Parcelable.Creator<MessagePdu> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<MessagePdu> CREATOR
= new Parcelable.Creator<MessagePdu>() {
@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 c2f70cc..5d2d667 100644
--- a/core/java/android/service/chooser/ChooserTarget.java
+++ b/core/java/android/service/chooser/ChooserTarget.java
@@ -202,7 +202,7 @@
dest.writeBundle(mIntentExtras);
}
- public static final Creator<ChooserTarget> CREATOR
+ public static final @android.annotation.NonNull Creator<ChooserTarget> CREATOR
= new Creator<ChooserTarget>() {
@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 c3af1f0..5b3930a 100644
--- a/core/java/android/service/contentcapture/SnapshotData.java
+++ b/core/java/android/service/contentcapture/SnapshotData.java
@@ -60,6 +60,7 @@
/**
* Returns the assist data for this snapshot.
*/
+ @NonNull
public Bundle getAssistData() {
return mAssistData;
}
@@ -67,6 +68,7 @@
/**
* Returns the assist structure for this snapshot.
*/
+ @NonNull
public AssistStructure getAssistStructure() {
return mAssistStructure;
}
@@ -74,6 +76,7 @@
/**
* Returns the assist context for this snapshot.
*/
+ @Nullable
public AssistContent getAssistContent() {
return mAssistContent;
}
@@ -90,15 +93,17 @@
parcel.writeParcelable(mAssistContent, flags);
}
- public static final Creator<SnapshotData> CREATOR =
+ public static final @android.annotation.NonNull Creator<SnapshotData> CREATOR =
new Creator<SnapshotData>() {
@Override
+ @NonNull
public SnapshotData createFromParcel(@NonNull Parcel parcel) {
return new SnapshotData(parcel);
}
@Override
+ @NonNull
public SnapshotData[] newArray(int size) {
return new SnapshotData[size];
}
diff --git a/core/java/android/service/contentsuggestions/ContentSuggestionsService.java b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java
index 333f4be..40333bf 100644
--- a/core/java/android/service/contentsuggestions/ContentSuggestionsService.java
+++ b/core/java/android/service/contentsuggestions/ContentSuggestionsService.java
@@ -60,11 +60,17 @@
@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 b410e35..3b1a2c9 100644
--- a/core/java/android/service/euicc/DownloadSubscriptionResult.java
+++ b/core/java/android/service/euicc/DownloadSubscriptionResult.java
@@ -28,7 +28,7 @@
@SystemApi
public final class DownloadSubscriptionResult implements Parcelable {
- public static final Creator<DownloadSubscriptionResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<DownloadSubscriptionResult> CREATOR =
new Creator<DownloadSubscriptionResult>() {
@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 4a39782..702837b 100644
--- a/core/java/android/service/euicc/EuiccProfileInfo.java
+++ b/core/java/android/service/euicc/EuiccProfileInfo.java
@@ -126,7 +126,7 @@
*/
private final @Nullable UiccAccessRule[] mAccessRules;
- public static final Creator<EuiccProfileInfo> CREATOR = new Creator<EuiccProfileInfo>() {
+ public static final @android.annotation.NonNull Creator<EuiccProfileInfo> CREATOR = new Creator<EuiccProfileInfo>() {
@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 bd91ca0..c7a9851 100644
--- a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java
+++ b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java
@@ -32,7 +32,7 @@
@SystemApi
public final class GetDefaultDownloadableSubscriptionListResult implements Parcelable {
- public static final Creator<GetDefaultDownloadableSubscriptionListResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<GetDefaultDownloadableSubscriptionListResult> CREATOR =
new Creator<GetDefaultDownloadableSubscriptionListResult>() {
@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 71f1d22..abd4065 100644
--- a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java
+++ b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java
@@ -29,7 +29,7 @@
@SystemApi
public final class GetDownloadableSubscriptionMetadataResult implements Parcelable {
- public static final Creator<GetDownloadableSubscriptionMetadataResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<GetDownloadableSubscriptionMetadataResult> CREATOR =
new Creator<GetDownloadableSubscriptionMetadataResult>() {
@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 464d136..7a9d8a0 100644
--- a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java
+++ b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java
@@ -30,7 +30,7 @@
@SystemApi
public final class GetEuiccProfileInfoListResult implements Parcelable {
- public static final Creator<GetEuiccProfileInfoListResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<GetEuiccProfileInfoListResult> CREATOR =
new Creator<GetEuiccProfileInfoListResult>() {
@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 4667066..aff8f1b 100644
--- a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl
+++ b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl
@@ -18,5 +18,6 @@
/** @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 c975f18..34b53cc 100644
--- a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl
+++ b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl
@@ -18,5 +18,6 @@
/** @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 0c5a0c6..ad69ef1 100644
--- a/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl
+++ b/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl
@@ -20,5 +20,6 @@
/** @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 3353061..01f187e 100644
--- a/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl
+++ b/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl
@@ -20,5 +20,6 @@
/** @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 35ee9c2..e405a98 100644
--- a/core/java/android/service/euicc/IGetEidCallback.aidl
+++ b/core/java/android/service/euicc/IGetEidCallback.aidl
@@ -18,5 +18,6 @@
/** @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 6d28148..c061182 100644
--- a/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl
+++ b/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl
@@ -20,5 +20,6 @@
/** @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 761ec1f..0485f7b 100644
--- a/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl
+++ b/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl
@@ -20,5 +20,6 @@
/** @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 1276830..340401f 100644
--- a/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl
+++ b/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl
@@ -18,5 +18,6 @@
/** @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 0f91a6b..b8f984d 100644
--- a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl
+++ b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl
@@ -18,5 +18,6 @@
/** @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 6666933..0aa6697 100644
--- a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl
+++ b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl
@@ -18,5 +18,6 @@
/** @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 9b52934..66fee1e 100644
--- a/core/java/android/service/gatekeeper/GateKeeperResponse.java
+++ b/core/java/android/service/gatekeeper/GateKeeperResponse.java
@@ -66,7 +66,7 @@
return 0;
}
- public static final Parcelable.Creator<GateKeeperResponse> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<GateKeeperResponse> CREATOR
= new Parcelable.Creator<GateKeeperResponse>() {
@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 bddc5ef..d84124d 100644
--- a/core/java/android/service/notification/Adjustment.java
+++ b/core/java/android/service/notification/Adjustment.java
@@ -165,7 +165,7 @@
mUser = in.readInt();
}
- public static final Creator<Adjustment> CREATOR = new Creator<Adjustment>() {
+ public static final @android.annotation.NonNull Creator<Adjustment> CREATOR = new Creator<Adjustment>() {
@Override
public Adjustment createFromParcel(Parcel in) {
return new Adjustment(in);
diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java
index 30d9804..e506509 100644
--- a/core/java/android/service/notification/Condition.java
+++ b/core/java/android/service/notification/Condition.java
@@ -227,7 +227,7 @@
return id != null && SCHEME.equals(id.getScheme()) && pkg.equals(id.getAuthority());
}
- public static final Parcelable.Creator<Condition> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Condition> CREATOR
= new Parcelable.Creator<Condition>() {
@Override
public Condition createFromParcel(Parcel source) {
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index d3285bb..edb10ec 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -2163,7 +2163,7 @@
dest.writeParcelable(mRankingUpdate, flags);
}
- public static final Creator<RankingMap> CREATOR = new Creator<RankingMap>() {
+ public static final @android.annotation.NonNull Creator<RankingMap> CREATOR = new Creator<RankingMap>() {
@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 230ae27..c5c70f8 100644
--- a/core/java/android/service/notification/NotificationRankingUpdate.java
+++ b/core/java/android/service/notification/NotificationRankingUpdate.java
@@ -119,7 +119,7 @@
out.writeBooleanArray(mCanBubble);
}
- public static final Parcelable.Creator<NotificationRankingUpdate> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NotificationRankingUpdate> CREATOR
= new Parcelable.Creator<NotificationRankingUpdate>() {
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 ebfabbf..5a54a43 100644
--- a/core/java/android/service/notification/NotificationStats.java
+++ b/core/java/android/service/notification/NotificationStats.java
@@ -131,7 +131,7 @@
return 0;
}
- public static final Creator<NotificationStats> CREATOR = new Creator<NotificationStats>() {
+ public static final @android.annotation.NonNull Creator<NotificationStats> CREATOR = new Creator<NotificationStats>() {
@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 38f18c6..a560623 100644
--- a/core/java/android/service/notification/NotifyingApp.java
+++ b/core/java/android/service/notification/NotifyingApp.java
@@ -74,7 +74,7 @@
return this;
}
- public static final Creator<NotifyingApp> CREATOR = new Creator<NotifyingApp>() {
+ public static final @android.annotation.NonNull Creator<NotifyingApp> CREATOR = new Creator<NotifyingApp>() {
@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 bd93eff..938cc10 100644
--- a/core/java/android/service/notification/SnoozeCriterion.java
+++ b/core/java/android/service/notification/SnoozeCriterion.java
@@ -78,7 +78,7 @@
return mConfirmation;
}
- public static final Creator<SnoozeCriterion> CREATOR = new Creator<SnoozeCriterion>() {
+ public static final @android.annotation.NonNull Creator<SnoozeCriterion> CREATOR = new Creator<SnoozeCriterion>() {
@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 954dc39..0836327 100644
--- a/core/java/android/service/notification/StatusBarNotification.java
+++ b/core/java/android/service/notification/StatusBarNotification.java
@@ -205,7 +205,7 @@
return 0;
}
- public static final Parcelable.Creator<StatusBarNotification> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<StatusBarNotification> CREATOR
= new Parcelable.Creator<StatusBarNotification>()
{
public StatusBarNotification createFromParcel(Parcel parcel)
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index bff118e..cb7d41b 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -921,7 +921,7 @@
}
}
- public static final Parcelable.Creator<ZenModeConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ZenModeConfig> CREATOR
= new Parcelable.Creator<ZenModeConfig>() {
@Override
public ZenModeConfig createFromParcel(Parcel source) {
@@ -1860,7 +1860,7 @@
|| condition.state == Condition.STATE_UNKNOWN);
}
- public static final Parcelable.Creator<ZenRule> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ZenRule> CREATOR
= new Parcelable.Creator<ZenRule>() {
@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 6392704..74e6c6e 100644
--- a/core/java/android/service/notification/ZenPolicy.java
+++ b/core/java/android/service/notification/ZenPolicy.java
@@ -713,7 +713,7 @@
dest.writeInt(mPriorityMessages);
}
- public static final Parcelable.Creator<ZenPolicy> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ZenPolicy> CREATOR =
new Parcelable.Creator<ZenPolicy>() {
@Override
public ZenPolicy createFromParcel(Parcel source) {
diff --git a/core/java/android/service/quicksettings/Tile.java b/core/java/android/service/quicksettings/Tile.java
index 6b569cf..4191040 100644
--- a/core/java/android/service/quicksettings/Tile.java
+++ b/core/java/android/service/quicksettings/Tile.java
@@ -229,7 +229,7 @@
mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
}
- public static final Creator<Tile> CREATOR = new Creator<Tile>() {
+ public static final @android.annotation.NonNull Creator<Tile> CREATOR = new Creator<Tile>() {
@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 fb3e2d7..33b3283 100644
--- a/core/java/android/service/resolver/ResolverTarget.java
+++ b/core/java/android/service/resolver/ResolverTarget.java
@@ -201,7 +201,7 @@
}
// creator definition for the class.
- public static final Creator<ResolverTarget> CREATOR
+ public static final @android.annotation.NonNull Creator<ResolverTarget> CREATOR
= new Creator<ResolverTarget>() {
@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 e97f963a..3e63efb 100644
--- a/core/java/android/service/settings/suggestions/Suggestion.java
+++ b/core/java/android/service/settings/suggestions/Suggestion.java
@@ -125,7 +125,7 @@
mPendingIntent = in.readParcelable(PendingIntent.class.getClassLoader());
}
- public static final Creator<Suggestion> CREATOR = new Creator<Suggestion>() {
+ public static final @android.annotation.NonNull Creator<Suggestion> CREATOR = new Creator<Suggestion>() {
@Override
public Suggestion createFromParcel(Parcel in) {
return new Suggestion(in);
diff --git a/core/java/android/service/vr/IVrManager.aidl b/core/java/android/service/vr/IVrManager.aidl
index b0269e3..a8293b4 100644
--- a/core/java/android/service/vr/IVrManager.aidl
+++ b/core/java/android/service/vr/IVrManager.aidl
@@ -57,6 +57,7 @@
*
* @return {@code true} if VR mode is enabled.
*/
+ @UnsupportedAppUsage
boolean getVrModeState();
/**
@@ -93,6 +94,7 @@
* @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 ebce484..00e0b7c 100644
--- a/core/java/android/service/wallpaper/IWallpaperEngine.aidl
+++ b/core/java/android/service/wallpaper/IWallpaperEngine.aidl
@@ -26,11 +26,15 @@
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 3d3c44b..e77851b 100644
--- a/core/java/android/speech/IRecognitionListener.aidl
+++ b/core/java/android/speech/IRecognitionListener.aidl
@@ -83,5 +83,6 @@
* @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 dcf5980..fefc35e 100644
--- a/core/java/android/speech/tts/Voice.java
+++ b/core/java/android/speech/tts/Voice.java
@@ -106,7 +106,7 @@
return 0;
}
- public static final Parcelable.Creator<Voice> CREATOR = new Parcelable.Creator<Voice>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Voice> CREATOR = new Parcelable.Creator<Voice>() {
@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 7f39cc1..534ce63 100644
--- a/core/java/android/text/style/AccessibilityClickableSpan.java
+++ b/core/java/android/text/style/AccessibilityClickableSpan.java
@@ -144,7 +144,7 @@
R.id.accessibilityActionClickOnClickableSpan, arguments);
}
- public static final Parcelable.Creator<AccessibilityClickableSpan> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityClickableSpan> CREATOR =
new Parcelable.Creator<AccessibilityClickableSpan>() {
@Override
public AccessibilityClickableSpan createFromParcel(Parcel parcel) {
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index dd073e9..c000ae3 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -344,7 +344,7 @@
languageTag, localeStringForCompatibility});
}
- public static final Parcelable.Creator<SuggestionSpan> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SuggestionSpan> CREATOR =
new Parcelable.Creator<SuggestionSpan>() {
@Override
public SuggestionSpan createFromParcel(Parcel source) {
diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java
index 294a179..436cb4f 100644
--- a/core/java/android/util/ArrayMap.java
+++ b/core/java/android/util/ArrayMap.java
@@ -19,6 +19,9 @@
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 @@
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/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 2d6cbd6c..fac699e 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -50,7 +50,7 @@
DEFAULT_FLAGS.put("settings_slice_injection", "true");
DEFAULT_FLAGS.put("settings_systemui_theme", "true");
DEFAULT_FLAGS.put("settings_wifi_mac_randomization", "true");
- DEFAULT_FLAGS.put("settings_mainline_module", "true");
+ DEFAULT_FLAGS.put("settings_mainline_module", "false");
DEFAULT_FLAGS.put("settings_dynamic_android", "false");
DEFAULT_FLAGS.put(SEAMLESS_TRANSFER, "false");
DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false");
diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java
index d5bec0f..74fea3f 100644
--- a/core/java/android/util/MemoryIntArray.java
+++ b/core/java/android/util/MemoryIntArray.java
@@ -235,7 +235,7 @@
return MAX_SIZE;
}
- public static final Parcelable.Creator<MemoryIntArray> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MemoryIntArray> CREATOR =
new Parcelable.Creator<MemoryIntArray>() {
@Override
public MemoryIntArray createFromParcel(Parcel parcel) {
diff --git a/core/java/android/util/MergedConfiguration.java b/core/java/android/util/MergedConfiguration.java
index ae66050..2399ada 100644
--- a/core/java/android/util/MergedConfiguration.java
+++ b/core/java/android/util/MergedConfiguration.java
@@ -74,7 +74,7 @@
return 0;
}
- public static final Creator<MergedConfiguration> CREATOR = new Creator<MergedConfiguration>() {
+ public static final @android.annotation.NonNull Creator<MergedConfiguration> CREATOR = new Creator<MergedConfiguration>() {
@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 209a5912..9c60228 100644
--- a/core/java/android/util/RecurrenceRule.java
+++ b/core/java/android/util/RecurrenceRule.java
@@ -140,7 +140,7 @@
return false;
}
- public static final Parcelable.Creator<RecurrenceRule> CREATOR = new Parcelable.Creator<RecurrenceRule>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<RecurrenceRule> CREATOR = new Parcelable.Creator<RecurrenceRule>() {
@Override
public RecurrenceRule createFromParcel(Parcel source) {
return new RecurrenceRule(source);
diff --git a/core/java/android/view/AbsSavedState.java b/core/java/android/view/AbsSavedState.java
index 6b616c0..009898e 100644
--- a/core/java/android/view/AbsSavedState.java
+++ b/core/java/android/view/AbsSavedState.java
@@ -80,7 +80,7 @@
dest.writeParcelable(mSuperState, flags);
}
- public static final Parcelable.Creator<AbsSavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AbsSavedState> CREATOR
= new Parcelable.ClassLoaderCreator<AbsSavedState>() {
@Override
diff --git a/core/java/android/view/AppTransitionAnimationSpec.java b/core/java/android/view/AppTransitionAnimationSpec.java
index 6585e40..4c0ed52 100644
--- a/core/java/android/view/AppTransitionAnimationSpec.java
+++ b/core/java/android/view/AppTransitionAnimationSpec.java
@@ -44,7 +44,7 @@
dest.writeParcelable(buffer, 0);
}
- public static final Parcelable.Creator<AppTransitionAnimationSpec> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AppTransitionAnimationSpec> CREATOR
= new Parcelable.Creator<AppTransitionAnimationSpec>() {
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 94a9a1c..dbb2071 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -21,7 +21,6 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
-import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.app.KeyguardManager;
import android.content.res.CompatibilityInfo;
@@ -231,7 +230,6 @@
* bar, navigation bar, home activity or IME.
* </p>
*
- * @see #supportsSystemDecorations
* @hide
*/
// TODO (b/114338689): Remove the flag and use IWindowManager#setShouldShowSystemDecors
@@ -907,18 +905,6 @@
}
/**
- * 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.
*
* @see #isHdr()
@@ -1375,7 +1361,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<Mode> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Mode> CREATOR
= new Parcelable.Creator<Mode>() {
@Override
public Mode createFromParcel(Parcel in) {
@@ -1504,7 +1490,7 @@
return hash;
}
- public static final Creator<HdrCapabilities> CREATOR = new Creator<HdrCapabilities>() {
+ public static final @android.annotation.NonNull Creator<HdrCapabilities> CREATOR = new Creator<HdrCapabilities>() {
@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 17ea4c4..1360815 100644
--- a/core/java/android/view/DisplayAddress.java
+++ b/core/java/android/view/DisplayAddress.java
@@ -109,7 +109,7 @@
mPhysicalDisplayId = physicalDisplayId;
}
- public static final Parcelable.Creator<Physical> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Physical> CREATOR =
new Parcelable.Creator<Physical>() {
@Override
public Physical createFromParcel(Parcel in) {
@@ -153,7 +153,7 @@
mMacAddress = macAddress;
}
- public static final Parcelable.Creator<Network> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Network> CREATOR =
new Parcelable.Creator<Network>() {
@Override
public Network createFromParcel(Parcel in) {
diff --git a/core/java/android/view/DisplayCutout.java b/core/java/android/view/DisplayCutout.java
index e9f1edf..610f7ed 100644
--- a/core/java/android/view/DisplayCutout.java
+++ b/core/java/android/view/DisplayCutout.java
@@ -233,6 +233,9 @@
/**
* Creates a DisplayCutout instance.
*
+ * <p>Note that this is only useful for tests. For production code, developers should always
+ * use a {@link DisplayCutout} obtained from the system.</p>
+ *
* @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 @@
/**
* Creates a DisplayCutout instance.
*
+ * <p>Note that this is only useful for tests. For production code, developers should always
+ * use a {@link DisplayCutout} obtained from the system.</p>
+ *
* @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 @@
mInner = readCutoutFromParcel(in);
}
- public static final Creator<ParcelableWrapper> CREATOR = new Creator<ParcelableWrapper>() {
+ public static final @android.annotation.NonNull Creator<ParcelableWrapper> CREATOR = new Creator<ParcelableWrapper>() {
@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 3aa779b..11ed357 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -271,7 +271,7 @@
// TODO (b/114338689): Remove the flag and use IWindowManager#getRemoveContentMode
public int removeMode = Display.REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY;
- public static final Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() {
+ public static final @android.annotation.NonNull Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() {
@Override
public DisplayInfo createFromParcel(Parcel source) {
return new DisplayInfo(source);
diff --git a/core/java/android/view/DragAndDropPermissions.java b/core/java/android/view/DragAndDropPermissions.java
index c198e1f..e72ff38 100644
--- a/core/java/android/view/DragAndDropPermissions.java
+++ b/core/java/android/view/DragAndDropPermissions.java
@@ -117,7 +117,7 @@
}
}
- public static final Parcelable.Creator<DragAndDropPermissions> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DragAndDropPermissions> CREATOR =
new Parcelable.Creator<DragAndDropPermissions> () {
@Override
public DragAndDropPermissions createFromParcel(Parcel source) {
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index bd4dda2..2a43bcc 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -528,7 +528,7 @@
/**
* A container for creating a DragEvent from a Parcel.
*/
- public static final Parcelable.Creator<DragEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DragEvent> CREATOR =
new Parcelable.Creator<DragEvent>() {
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 0000000..8eccc04
--- /dev/null
+++ b/core/java/android/view/GestureExclusionTracker.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Rect;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Used by {@link ViewRootImpl} to track system gesture exclusion rects reported by views.
+ */
+class GestureExclusionTracker {
+ private boolean mGestureExclusionViewsChanged = false;
+ private List<GestureExclusionViewInfo> mGestureExclusionViewInfos = new ArrayList<>();
+ private List<Rect> mGestureExclusionRects = Collections.emptyList();
+
+ public void updateRectsForView(@NonNull View view) {
+ boolean found = false;
+ final Iterator<GestureExclusionViewInfo> i = mGestureExclusionViewInfos.iterator();
+ while (i.hasNext()) {
+ final GestureExclusionViewInfo info = i.next();
+ final View v = info.getView();
+ if (v == null || !v.isAttachedToWindow()) {
+ mGestureExclusionViewsChanged = true;
+ i.remove();
+ continue;
+ }
+ if (v == view) {
+ found = true;
+ info.mDirty = true;
+ break;
+ }
+ }
+ if (!found && view.isAttachedToWindow()) {
+ mGestureExclusionViewInfos.add(new GestureExclusionViewInfo(view));
+ mGestureExclusionViewsChanged = true;
+ }
+ }
+
+ @Nullable
+ public List<Rect> computeChangedRects() {
+ boolean changed = false;
+ final Iterator<GestureExclusionViewInfo> i = mGestureExclusionViewInfos.iterator();
+ final List<Rect> rects = new ArrayList<>();
+ while (i.hasNext()) {
+ final GestureExclusionViewInfo info = i.next();
+ switch (info.update()) {
+ case GestureExclusionViewInfo.CHANGED:
+ changed = true;
+ // Deliberate fall-through
+ case GestureExclusionViewInfo.UNCHANGED:
+ rects.addAll(info.mExclusionRects);
+ break;
+ case GestureExclusionViewInfo.GONE:
+ mGestureExclusionViewsChanged = true;
+ i.remove();
+ break;
+ }
+ }
+ if (changed || mGestureExclusionViewsChanged) {
+ mGestureExclusionViewsChanged = false;
+ if (!mGestureExclusionRects.equals(rects)) {
+ mGestureExclusionRects = rects;
+ return rects;
+ }
+ }
+ return null;
+ }
+
+ private static class GestureExclusionViewInfo {
+ public static final int CHANGED = 0;
+ public static final int UNCHANGED = 1;
+ public static final int GONE = 2;
+
+ private final WeakReference<View> mView;
+ boolean mDirty = true;
+ List<Rect> mExclusionRects = Collections.emptyList();
+
+ GestureExclusionViewInfo(View view) {
+ mView = new WeakReference<>(view);
+ }
+
+ public View getView() {
+ return mView.get();
+ }
+
+ public int update() {
+ final View excludedView = getView();
+ if (excludedView == null || !excludedView.isAttachedToWindow()) return GONE;
+ final List<Rect> localRects = excludedView.getSystemGestureExclusionRects();
+ final List<Rect> newRects = new ArrayList<>(localRects.size());
+ for (Rect src : localRects) {
+ Rect mappedRect = new Rect(src);
+ ViewParent p = excludedView.getParent();
+ if (p != null && p.getChildVisibleRect(excludedView, mappedRect, null)) {
+ newRects.add(mappedRect);
+ }
+ }
+
+ if (mExclusionRects.equals(localRects)) return UNCHANGED;
+ mExclusionRects = newRects;
+ return CHANGED;
+ }
+ }
+}
diff --git a/core/java/android/view/IRecentsAnimationController.aidl b/core/java/android/view/IRecentsAnimationController.aidl
index 94b9bc0..b1f934a 100644
--- a/core/java/android/view/IRecentsAnimationController.aidl
+++ b/core/java/android/view/IRecentsAnimationController.aidl
@@ -33,6 +33,7 @@
* 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 @@
* 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 @@
* 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 @@
* 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 4cdf664..6e382f4 100644
--- a/core/java/android/view/IRecentsAnimationRunner.aidl
+++ b/core/java/android/view/IRecentsAnimationRunner.aidl
@@ -33,6 +33,7 @@
* 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 @@
* @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 ae58b22..a99162b 100644
--- a/core/java/android/view/IRemoteAnimationFinishedCallback.aidl
+++ b/core/java/android/view/IRemoteAnimationFinishedCallback.aidl
@@ -23,5 +23,6 @@
* {@hide}
*/
interface IRemoteAnimationFinishedCallback {
+ @UnsupportedAppUsage
void onAnimationFinished();
}
diff --git a/core/java/android/view/IRemoteAnimationRunner.aidl b/core/java/android/view/IRemoteAnimationRunner.aidl
index 1350ebf..73b023c 100644
--- a/core/java/android/view/IRemoteAnimationRunner.aidl
+++ b/core/java/android/view/IRemoteAnimationRunner.aidl
@@ -33,6 +33,7 @@
* @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 @@
* 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 5dc54a5..e32c4e1 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -74,10 +74,13 @@
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 @@
* 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 @@
/** @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 @@
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 @@
// 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 @@
* Remove a rotation watcher set using watchRotation.
* @hide
*/
+ @UnsupportedAppUsage
void removeRotationWatcher(IRotationWatcher watcher);
/**
@@ -203,12 +218,14 @@
* 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 @@
/**
* 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 @@
*
* @param displayId the id of display to check if there is a software navigation bar.
*/
+ @UnsupportedAppUsage
boolean hasNavigationBar(int displayId);
/**
@@ -308,11 +328,13 @@
/**
* 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 @@
* @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 @@
* 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 @@
/**
* Retrieves the current stable insets from the primary display.
*/
+ @UnsupportedAppUsage
void getStableInsets(int displayId, out Rect outInsets);
/**
@@ -400,6 +425,7 @@
/**
* 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 @@
* 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 240aad5..1fcd432 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -46,6 +46,7 @@
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 @@
* 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 @@
*/
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 @@
* @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 @@
*/
void setWallpaperPosition(IBinder windowToken, float x, float y, float xstep, float ystep);
+ @UnsupportedAppUsage
void wallpaperOffsetsComplete(IBinder window);
/**
@@ -209,6 +217,7 @@
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 84c8e7a..af2b992 100644
--- a/core/java/android/view/InputChannel.java
+++ b/core/java/android/view/InputChannel.java
@@ -35,7 +35,7 @@
private static final boolean DEBUG = false;
@UnsupportedAppUsage
- public static final Parcelable.Creator<InputChannel> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InputChannel> CREATOR
= new Parcelable.Creator<InputChannel>() {
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 868a9de..e723f91 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -397,7 +397,7 @@
private static final int MAX_RANGES = 1000;
- public static final Parcelable.Creator<InputDevice> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<InputDevice> CREATOR =
new Parcelable.Creator<InputDevice>() {
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 c2848d4..4b88a6a 100644
--- a/core/java/android/view/InputEvent.java
+++ b/core/java/android/view/InputEvent.java
@@ -237,7 +237,7 @@
return 0;
}
- public static final Parcelable.Creator<InputEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InputEvent> CREATOR
= new Parcelable.Creator<InputEvent>() {
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 fbc72a0..16e00da 100644
--- a/core/java/android/view/InsetsSource.java
+++ b/core/java/android/view/InsetsSource.java
@@ -151,7 +151,7 @@
dest.writeBoolean(mVisible);
}
- public static final Creator<InsetsSource> CREATOR = new Creator<InsetsSource>() {
+ public static final @android.annotation.NonNull Creator<InsetsSource> CREATOR = new Creator<InsetsSource>() {
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 9fb6bdb..4940981 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -76,7 +76,7 @@
dest.writeParcelable(mSurfacePosition, 0 /* flags*/);
}
- public static final Creator<InsetsSourceControl> CREATOR
+ public static final @android.annotation.NonNull Creator<InsetsSourceControl> CREATOR
= new Creator<InsetsSourceControl>() {
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 69f86aa..1382fbc 100644
--- a/core/java/android/view/InsetsState.java
+++ b/core/java/android/view/InsetsState.java
@@ -386,7 +386,7 @@
}
}
- public static final Creator<InsetsState> CREATOR = new Creator<InsetsState>() {
+ public static final @android.annotation.NonNull Creator<InsetsState> CREATOR = new Creator<InsetsState>() {
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 989bf67..bd03348 100644
--- a/core/java/android/view/KeyCharacterMap.java
+++ b/core/java/android/view/KeyCharacterMap.java
@@ -272,7 +272,7 @@
sDeadKeyCache.put(combination, result);
}
- public static final Parcelable.Creator<KeyCharacterMap> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyCharacterMap> CREATOR =
new Parcelable.Creator<KeyCharacterMap>() {
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 f9a46b1..f700d32 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -3065,7 +3065,7 @@
return result.toString();
}
- public static final Parcelable.Creator<KeyEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<KeyEvent> CREATOR
= new Parcelable.Creator<KeyEvent>() {
@Override
public KeyEvent createFromParcel(Parcel in) {
diff --git a/core/java/android/view/KeyboardShortcutGroup.java b/core/java/android/view/KeyboardShortcutGroup.java
index 52e9832..763ca26 100644
--- a/core/java/android/view/KeyboardShortcutGroup.java
+++ b/core/java/android/view/KeyboardShortcutGroup.java
@@ -125,7 +125,7 @@
dest.writeInt(mSystemGroup ? 1 : 0);
}
- public static final Creator<KeyboardShortcutGroup> CREATOR =
+ public static final @android.annotation.NonNull Creator<KeyboardShortcutGroup> CREATOR =
new Creator<KeyboardShortcutGroup>() {
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 c934a4e..2660e74 100644
--- a/core/java/android/view/KeyboardShortcutInfo.java
+++ b/core/java/android/view/KeyboardShortcutInfo.java
@@ -156,7 +156,7 @@
dest.writeInt(mModifiers);
}
- public static final Creator<KeyboardShortcutInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<KeyboardShortcutInfo> CREATOR =
new Creator<KeyboardShortcutInfo>() {
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 956a211..aea337e 100644
--- a/core/java/android/view/MagnificationSpec.java
+++ b/core/java/android/view/MagnificationSpec.java
@@ -146,7 +146,7 @@
offsetY = parcel.readFloat();
}
- public static final Creator<MagnificationSpec> CREATOR = new Creator<MagnificationSpec>() {
+ public static final @android.annotation.NonNull Creator<MagnificationSpec> CREATOR = new Creator<MagnificationSpec>() {
@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 b6c4cbb..86e94f4 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -3660,7 +3660,7 @@
return (getButtonState() & button) == button;
}
- public static final Parcelable.Creator<MotionEvent> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<MotionEvent> CREATOR
= new Parcelable.Creator<MotionEvent>() {
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 c3d13bd..dfe34c8 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -361,7 +361,7 @@
return mType;
}
- public static final Parcelable.Creator<PointerIcon> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PointerIcon> CREATOR
= new Parcelable.Creator<PointerIcon>() {
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 6f5a85d..bc2fe54 100644
--- a/core/java/android/view/RemoteAnimationAdapter.java
+++ b/core/java/android/view/RemoteAnimationAdapter.java
@@ -129,7 +129,7 @@
dest.writeBoolean(mChangeNeedsSnapshot);
}
- public static final Creator<RemoteAnimationAdapter> CREATOR
+ public static final @android.annotation.NonNull Creator<RemoteAnimationAdapter> CREATOR
= new Creator<RemoteAnimationAdapter>() {
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 beb1c1d..884cae4 100644
--- a/core/java/android/view/RemoteAnimationDefinition.java
+++ b/core/java/android/view/RemoteAnimationDefinition.java
@@ -139,7 +139,7 @@
}
}
- public static final Creator<RemoteAnimationDefinition> CREATOR =
+ public static final @android.annotation.NonNull Creator<RemoteAnimationDefinition> CREATOR =
new Creator<RemoteAnimationDefinition>() {
public RemoteAnimationDefinition createFromParcel(Parcel in) {
return new RemoteAnimationDefinition(in);
@@ -181,7 +181,7 @@
return 0;
}
- private static final Creator<RemoteAnimationAdapterEntry> CREATOR
+ private static final @android.annotation.NonNull Creator<RemoteAnimationAdapterEntry> CREATOR
= new Creator<RemoteAnimationAdapterEntry>() {
@Override
diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java
index 9b3efe1..ae3e1d0 100644
--- a/core/java/android/view/RemoteAnimationTarget.java
+++ b/core/java/android/view/RemoteAnimationTarget.java
@@ -255,7 +255,7 @@
proto.end(token);
}
- public static final Creator<RemoteAnimationTarget> CREATOR
+ public static final @android.annotation.NonNull Creator<RemoteAnimationTarget> CREATOR
= new Creator<RemoteAnimationTarget>() {
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 23f2b8a..7ab9534 100644
--- a/core/java/android/view/RenderNodeAnimator.java
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -336,6 +336,7 @@
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 a15a20a..6ff699e 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -84,7 +84,7 @@
private static native int nativeSetSharedBufferModeEnabled(long nativeObject, boolean enabled);
private static native int nativeSetAutoRefreshEnabled(long nativeObject, boolean enabled);
- public static final Parcelable.Creator<Surface> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Surface> CREATOR =
new Parcelable.Creator<Surface>() {
@Override
public Surface createFromParcel(Parcel source) {
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index ea7f31d..54e70ea 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -160,6 +160,7 @@
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);
@@ -818,7 +819,7 @@
proto.end(token);
}
- public static final Creator<SurfaceControl> CREATOR
+ public static final @android.annotation.NonNull Creator<SurfaceControl> CREATOR
= new Creator<SurfaceControl>() {
public SurfaceControl createFromParcel(Parcel in) {
return new SurfaceControl(in);
@@ -1538,6 +1539,16 @@
/**
* @hide
*/
+ public static int[] getAllowedDisplayConfigs(IBinder displayToken) {
+ if (displayToken == null) {
+ throw new IllegalArgumentException("displayToken must not be null");
+ }
+ return nativeGetAllowedDisplayConfigs(displayToken);
+ }
+
+ /**
+ * @hide
+ */
public static int[] getDisplayColorModes(IBinder displayToken) {
if (displayToken == null) {
throw new IllegalArgumentException("displayToken must not be null");
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index fe9aa23..ee8d663 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -210,7 +210,7 @@
public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- mRenderNode.requestPositionUpdates(mPositionListener);
+ mRenderNode.addPositionUpdateListener(mPositionListener);
setWillNotDraw(true);
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 7afdc70..877b304 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -881,12 +881,6 @@
private static boolean sAlwaysRemeasureExactly = false;
/**
- * Relax constraints around whether setLayoutParams() must be called after
- * modifying the layout params.
- */
- private static boolean sLayoutParamsAlwaysChanged = false;
-
- /**
* Allow setForeground/setBackground to be called (and ignored) on a textureview,
* without throwing
*/
@@ -4603,6 +4597,16 @@
private ArrayList<OnUnhandledKeyEventListener> mUnhandledKeyListeners;
private WindowInsetsAnimationListener mWindowInsetsAnimationListener;
+
+ /**
+ * This lives here since it's only valid for interactive views.
+ */
+ private List<Rect> mSystemGestureExclusionRects;
+
+ /**
+ * Used to track {@link #mSystemGestureExclusionRects}
+ */
+ public RenderNode.PositionUpdateListener mPositionUpdateListener;
}
@UnsupportedAppUsage
@@ -5170,11 +5174,6 @@
// modes, so we always need to run an additional EXACTLY pass.
sAlwaysRemeasureExactly = targetSdkVersion <= Build.VERSION_CODES.M;
- // Prior to N, layout params could change without requiring a
- // subsequent call to setLayoutParams() and they would usually
- // work. Partial layout breaks this assumption.
- sLayoutParamsAlwaysChanged = targetSdkVersion <= Build.VERSION_CODES.M;
-
// Prior to N, TextureView would silently ignore calls to setBackground/setForeground.
// On N+, we throw, but that breaks compatibility with apps that use these methods.
sTextureViewIgnoresDrawableSetters = targetSdkVersion <= Build.VERSION_CODES.M;
@@ -5972,7 +5971,7 @@
@NonNull
public List<Integer> getAttributeResolutionStack(@AttrRes int attribute) {
ArrayList<Integer> stack = new ArrayList<>();
- if (!sDebugViewAttributes) {
+ if (!sDebugViewAttributes || mAttributeResolutionStacks == null) {
return stack;
}
if (mSourceLayoutId != ID_NULL) {
@@ -6004,7 +6003,7 @@
@NonNull
public Map<Integer, Integer> getAttributeSourceResourceMap() {
HashMap<Integer, Integer> map = new HashMap<>();
- if (!sDebugViewAttributes) {
+ if (!sDebugViewAttributes || mAttributeSourceResId == null) {
return map;
}
for (int i = 0; i < mAttributeSourceResId.size(); i++) {
@@ -10974,6 +10973,95 @@
}
/**
+ * Sets a list of areas within this view's post-layout coordinate space where the system
+ * should not intercept touch or other pointing device gestures. <em>This method should
+ * be called by {@link #onLayout(boolean, int, int, int, int)} or {@link #onDraw(Canvas)}.</em>
+ *
+ * <p>Use this to tell the system which specific sub-areas of a view need to receive gesture
+ * input in order to function correctly in the presence of global system gestures that may
+ * conflict. For example, if the system wishes to capture swipe-in-from-screen-edge gestures
+ * to provide system-level navigation functionality, a view such as a navigation drawer
+ * container can mark the left (or starting) edge of itself as requiring gesture capture
+ * priority using this API. The system may then choose to relax its own gesture recognition
+ * to allow the app to consume the user's gesture. It is not necessary for an app to register
+ * exclusion rects for broadly spanning regions such as the entirety of a
+ * <code>ScrollView</code> or for simple press and release click targets such as
+ * <code>Button</code>. Mark an exclusion rect when interacting with a view requires
+ * a precision touch gesture in a small area in either the X or Y dimension, such as
+ * an edge swipe or dragging a <code>SeekBar</code> thumb.</p>
+ *
+ * <p>Do not modify the provided list after this method is called.</p>
+ *
+ * @param rects A list of precision gesture regions that this view needs to function correctly
+ */
+ public void setSystemGestureExclusionRects(@NonNull List<Rect> rects) {
+ if (rects.isEmpty() && mListenerInfo == null) return;
+
+ final ListenerInfo info = getListenerInfo();
+ if (rects.isEmpty()) {
+ info.mSystemGestureExclusionRects = null;
+ if (info.mPositionUpdateListener != null) {
+ mRenderNode.removePositionUpdateListener(info.mPositionUpdateListener);
+ }
+ } else {
+ info.mSystemGestureExclusionRects = rects;
+ if (info.mPositionUpdateListener == null) {
+ info.mPositionUpdateListener = new RenderNode.PositionUpdateListener() {
+ @Override
+ public void positionChanged(long n, int l, int t, int r, int b) {
+ postUpdateSystemGestureExclusionRects();
+ }
+
+ @Override
+ public void positionLost(long frameNumber) {
+ postUpdateSystemGestureExclusionRects();
+ }
+ };
+ mRenderNode.addPositionUpdateListener(info.mPositionUpdateListener);
+ }
+ }
+ postUpdateSystemGestureExclusionRects();
+ }
+
+ /**
+ * WARNING: this can be called by a hwui worker thread, not just the UI thread!
+ */
+ void postUpdateSystemGestureExclusionRects() {
+ // Potentially racey from a background thread. It's ok if it's not perfect.
+ final Handler h = getHandler();
+ if (h != null) {
+ h.postAtFrontOfQueue(this::updateSystemGestureExclusionRects);
+ }
+ }
+
+ void updateSystemGestureExclusionRects() {
+ final AttachInfo ai = mAttachInfo;
+ if (ai != null) {
+ ai.mViewRootImpl.updateSystemGestureExclusionRectsForView(this);
+ }
+ }
+
+ /**
+ * Retrieve the list of areas within this view's post-layout coordinate space where the system
+ * should not intercept touch or other pointing device gestures.
+ *
+ * <p>Do not modify the returned list.</p>
+ *
+ * @return the list set by {@link #setSystemGestureExclusionRects(List)}
+ */
+ @NonNull
+ public List<Rect> getSystemGestureExclusionRects() {
+ final ListenerInfo info = mListenerInfo;
+ if (info != null) {
+ final List<Rect> list = info.mSystemGestureExclusionRects;
+ if (list != null) {
+ return list;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ /**
* Compute the view's coordinate within the surface.
*
* <p>Computes the coordinates of this view in its surface. The argument
@@ -17988,21 +18076,6 @@
}
/**
- * Utility method to transform a given Rect by the current matrix of this view.
- */
- void transformRect(final Rect rect) {
- if (!getMatrix().isIdentity()) {
- RectF boundingRect = mAttachInfo.mTmpTransformRect;
- boundingRect.set(rect);
- getMatrix().mapRect(boundingRect);
- rect.set((int) Math.floor(boundingRect.left),
- (int) Math.floor(boundingRect.top),
- (int) Math.ceil(boundingRect.right),
- (int) Math.ceil(boundingRect.bottom));
- }
- }
-
- /**
* Used to indicate that the parent of this view should clear its caches. This functionality
* is used to force the parent to rebuild its display list (when hardware-accelerated),
* which is necessary when various parent-managed properties of the view change, such as
@@ -27916,7 +27989,7 @@
out.writeInt(mAutofillViewId);
}
- public static final Parcelable.Creator<BaseSavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<BaseSavedState> CREATOR
= new Parcelable.ClassLoaderCreator<BaseSavedState>() {
@Override
public BaseSavedState createFromParcel(Parcel in) {
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index ad0aaa6..a3d0a7e 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -605,6 +605,8 @@
private final InsetsController mInsetsController = new InsetsController(this);
+ private final GestureExclusionTracker mGestureExclusionTracker = new GestureExclusionTracker();
+
static final class SystemUiVisibilityInfo {
int seq;
int globalVisibility;
@@ -3475,7 +3477,7 @@
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) {
@@ -3487,7 +3489,7 @@
} 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();
}
@@ -3977,6 +3979,20 @@
return mAttachInfo.mAccessibilityFocusDrawable;
}
+ void updateSystemGestureExclusionRectsForView(View view) {
+ mGestureExclusionTracker.updateRectsForView(view);
+ mHandler.sendEmptyMessage(MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED);
+ }
+
+ void systemGestureExclusionChanged() {
+ final List<Rect> rectsForWindowManager = mGestureExclusionTracker.computeChangedRects();
+ if (rectsForWindowManager != null) {
+ // TODO Send to WM
+ mAttachInfo.mTreeObserver
+ .dispatchOnSystemGestureExclusionRectsChanged(rectsForWindowManager);
+ }
+ }
+
/**
* Requests that the root render node is invalidated next time we perform a draw, such that
* {@link WindowCallbacks#onPostDraw} gets called.
@@ -4433,35 +4449,36 @@
}
}
- private final static int MSG_INVALIDATE = 1;
- private final static int MSG_INVALIDATE_RECT = 2;
- private final static int MSG_DIE = 3;
- private final static int MSG_RESIZED = 4;
- private final static int MSG_RESIZED_REPORT = 5;
- private final static int MSG_WINDOW_FOCUS_CHANGED = 6;
- private final static int MSG_DISPATCH_INPUT_EVENT = 7;
- private final static int MSG_DISPATCH_APP_VISIBILITY = 8;
- private final static int MSG_DISPATCH_GET_NEW_SURFACE = 9;
- private final static int MSG_DISPATCH_KEY_FROM_IME = 11;
- private final static int MSG_DISPATCH_KEY_FROM_AUTOFILL = 12;
- private final static int MSG_CHECK_FOCUS = 13;
- private final static int MSG_CLOSE_SYSTEM_DIALOGS = 14;
- private final static int MSG_DISPATCH_DRAG_EVENT = 15;
- private final static int MSG_DISPATCH_DRAG_LOCATION_EVENT = 16;
- private final static int MSG_DISPATCH_SYSTEM_UI_VISIBILITY = 17;
- private final static int MSG_UPDATE_CONFIGURATION = 18;
- private final static int MSG_PROCESS_INPUT_EVENTS = 19;
- private final static int MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST = 21;
- private final static int MSG_INVALIDATE_WORLD = 22;
- private final static int MSG_WINDOW_MOVED = 23;
- private final static int MSG_SYNTHESIZE_INPUT_EVENT = 24;
- private final static int MSG_DISPATCH_WINDOW_SHOWN = 25;
- private final static int MSG_REQUEST_KEYBOARD_SHORTCUTS = 26;
- private final static int MSG_UPDATE_POINTER_ICON = 27;
- private final static int MSG_POINTER_CAPTURE_CHANGED = 28;
- private final static int MSG_DRAW_FINISHED = 29;
- private final static int MSG_INSETS_CHANGED = 30;
- private final static int MSG_INSETS_CONTROL_CHANGED = 31;
+ private static final int MSG_INVALIDATE = 1;
+ private static final int MSG_INVALIDATE_RECT = 2;
+ private static final int MSG_DIE = 3;
+ private static final int MSG_RESIZED = 4;
+ private static final int MSG_RESIZED_REPORT = 5;
+ private static final int MSG_WINDOW_FOCUS_CHANGED = 6;
+ private static final int MSG_DISPATCH_INPUT_EVENT = 7;
+ private static final int MSG_DISPATCH_APP_VISIBILITY = 8;
+ private static final int MSG_DISPATCH_GET_NEW_SURFACE = 9;
+ private static final int MSG_DISPATCH_KEY_FROM_IME = 11;
+ private static final int MSG_DISPATCH_KEY_FROM_AUTOFILL = 12;
+ private static final int MSG_CHECK_FOCUS = 13;
+ private static final int MSG_CLOSE_SYSTEM_DIALOGS = 14;
+ private static final int MSG_DISPATCH_DRAG_EVENT = 15;
+ private static final int MSG_DISPATCH_DRAG_LOCATION_EVENT = 16;
+ private static final int MSG_DISPATCH_SYSTEM_UI_VISIBILITY = 17;
+ private static final int MSG_UPDATE_CONFIGURATION = 18;
+ private static final int MSG_PROCESS_INPUT_EVENTS = 19;
+ private static final int MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST = 21;
+ private static final int MSG_INVALIDATE_WORLD = 22;
+ private static final int MSG_WINDOW_MOVED = 23;
+ private static final int MSG_SYNTHESIZE_INPUT_EVENT = 24;
+ private static final int MSG_DISPATCH_WINDOW_SHOWN = 25;
+ private static final int MSG_REQUEST_KEYBOARD_SHORTCUTS = 26;
+ private static final int MSG_UPDATE_POINTER_ICON = 27;
+ private static final int MSG_POINTER_CAPTURE_CHANGED = 28;
+ private static final int MSG_DRAW_FINISHED = 29;
+ private static final int MSG_INSETS_CHANGED = 30;
+ private static final int MSG_INSETS_CONTROL_CHANGED = 31;
+ private static final int MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED = 32;
final class ViewRootHandler extends Handler {
@Override
@@ -4519,6 +4536,10 @@
return "MSG_DRAW_FINISHED";
case MSG_INSETS_CHANGED:
return "MSG_INSETS_CHANGED";
+ case MSG_INSETS_CONTROL_CHANGED:
+ return "MSG_INSETS_CONTROL_CHANGED";
+ case MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED:
+ return "MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED";
}
return super.getMessageName(message);
}
@@ -4750,6 +4771,9 @@
case MSG_DRAW_FINISHED: {
pendingDrawFinished();
} break;
+ case MSG_SYSTEM_GESTURE_EXCLUSION_CHANGED: {
+ systemGestureExclusionChanged();
+ } break;
}
}
}
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index 763ce4f..2896bd0 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -26,7 +26,9 @@
import android.util.Log;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Consumer;
/**
* A view tree observer is used to register listeners that can be notified of global
@@ -57,6 +59,7 @@
private CopyOnWriteArray<OnScrollChangedListener> mOnScrollChangedListeners;
private CopyOnWriteArray<OnPreDrawListener> mOnPreDrawListeners;
private CopyOnWriteArray<OnWindowShownListener> mOnWindowShownListeners;
+ private CopyOnWriteArray<Consumer<List<Rect>>> mGestureExclusionListeners;
// These listeners cannot be mutated during dispatch
private boolean mInDispatchOnDraw;
@@ -450,6 +453,14 @@
}
}
+ if (observer.mGestureExclusionListeners != null) {
+ if (mGestureExclusionListeners != null) {
+ mGestureExclusionListeners.addAll(observer.mGestureExclusionListeners);
+ } else {
+ mGestureExclusionListeners = observer.mGestureExclusionListeners;
+ }
+ }
+
observer.kill();
}
@@ -913,6 +924,35 @@
mOnEnterAnimationCompleteListeners.remove(listener);
}
+ /**
+ * Add a listener to be notified when the tree's <em>transformed</em> gesture exclusion rects
+ * change. This could be the result of an animation or other layout change, or a view calling
+ * {@link View#setSystemGestureExclusionRects(List)}.
+ *
+ * @param listener listener to add
+ * @see View#setSystemGestureExclusionRects(List)
+ */
+ public void addOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener) {
+ checkIsAlive();
+ if (mGestureExclusionListeners == null) {
+ mGestureExclusionListeners = new CopyOnWriteArray<>();
+ }
+ mGestureExclusionListeners.add(listener);
+ }
+
+ /**
+ * Unsubscribe the given listener from gesture exclusion rect changes.
+ * @see #addOnSystemGestureExclusionRectsChangedListener(Consumer)
+ * @see View#setSystemGestureExclusionRects(List)
+ */
+ public void removeOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener) {
+ checkIsAlive();
+ if (mGestureExclusionListeners == null) {
+ return;
+ }
+ mGestureExclusionListeners.remove(listener);
+ }
+
private void checkIsAlive() {
if (!mAlive) {
throw new IllegalStateException("This ViewTreeObserver is not alive, call "
@@ -1178,6 +1218,21 @@
}
}
+ void dispatchOnSystemGestureExclusionRectsChanged(@NonNull List<Rect> rects) {
+ final CopyOnWriteArray<Consumer<List<Rect>>> listeners = mGestureExclusionListeners;
+ if (listeners != null && listeners.size() > 0) {
+ CopyOnWriteArray.Access<Consumer<List<Rect>>> access = listeners.start();
+ try {
+ final int count = access.size();
+ for (int i = 0; i < count; i++) {
+ access.get(i).accept(rects);
+ }
+ } finally {
+ listeners.end();
+ }
+ }
+ }
+
/**
* Copy on write array. This array is not thread safe, and only one loop can
* iterate over this array at any given time. This class avoids allocations
diff --git a/core/java/android/view/WindowAnimationFrameStats.java b/core/java/android/view/WindowAnimationFrameStats.java
index 0233c86..399dfba 100644
--- a/core/java/android/view/WindowAnimationFrameStats.java
+++ b/core/java/android/view/WindowAnimationFrameStats.java
@@ -81,7 +81,7 @@
return builder.toString();
}
- public static final Creator<WindowAnimationFrameStats> CREATOR =
+ public static final @android.annotation.NonNull Creator<WindowAnimationFrameStats> CREATOR =
new Creator<WindowAnimationFrameStats>() {
@Override
public WindowAnimationFrameStats createFromParcel(Parcel parcel) {
diff --git a/core/java/android/view/WindowContentFrameStats.java b/core/java/android/view/WindowContentFrameStats.java
index 96878e9..9fa5a00 100644
--- a/core/java/android/view/WindowContentFrameStats.java
+++ b/core/java/android/view/WindowContentFrameStats.java
@@ -139,7 +139,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<WindowContentFrameStats> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WindowContentFrameStats> CREATOR =
new Creator<WindowContentFrameStats>() {
@Override
public WindowContentFrameStats createFromParcel(Parcel parcel) {
diff --git a/core/java/android/view/WindowId.java b/core/java/android/view/WindowId.java
index 12e58f1..26d3405 100644
--- a/core/java/android/view/WindowId.java
+++ b/core/java/android/view/WindowId.java
@@ -196,7 +196,7 @@
out.writeStrongBinder(mToken.asBinder());
}
- public static final Parcelable.Creator<WindowId> CREATOR = new Parcelable.Creator<WindowId>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<WindowId> CREATOR = new Parcelable.Creator<WindowId>() {
@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 82e9a5c..74fc15a 100644
--- a/core/java/android/view/WindowInfo.java
+++ b/core/java/android/view/WindowInfo.java
@@ -176,7 +176,7 @@
hasFlagWatchOutsideTouch = false;
}
- public static final Parcelable.Creator<WindowInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WindowInfo> CREATOR =
new Creator<WindowInfo>() {
@Override
public WindowInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 6326c59..86b7350 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -481,6 +481,7 @@
*
* @param displayId The id of the display.
* @param shouldShow Indicates that the display should show system decors.
+ * @see #shouldShowSystemDecors(int)
* @hide
*/
@TestApi
@@ -488,6 +489,21 @@
}
/**
+ * Checks if the display supports showing system decors.
+ * <p>
+ * System decors include status bar, navigation bar, launcher.
+ * </p>
+ *
+ * @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.
*
* @param displayId Display ID.
@@ -2724,7 +2740,7 @@
out.writeLong(hideTimeoutMilliseconds);
}
- public static final Parcelable.Creator<LayoutParams> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<LayoutParams> CREATOR
= new Parcelable.Creator<LayoutParams>() {
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 a102f6c..2e4db5c 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -177,6 +177,15 @@
}
@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 {
WindowManagerGlobal.getWindowManagerService().setShouldShowIme(displayId, shouldShow);
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
index 87e18b7..5d59e42 100644
--- a/core/java/android/view/accessibility/AccessibilityCache.java
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -424,20 +424,28 @@
*
* @param nodes The nodes in the hosting window.
* @param rootNodeId The id of the root to evict.
+ *
+ * @return {@code true} if the cache was cleared
*/
- private void clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes,
+ private boolean clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes,
long rootNodeId) {
AccessibilityNodeInfo current = nodes.get(rootNodeId);
if (current == null) {
- return;
+ // The node isn't in the cache, but its descendents might be.
+ clear();
+ return true;
}
nodes.remove(rootNodeId);
final int childCount = current.getChildCount();
for (int i = 0; i < childCount; i++) {
final long childNodeId = current.getChildId(i);
- clearSubTreeRecursiveLocked(nodes, childNodeId);
+ if (clearSubTreeRecursiveLocked(nodes, childNodeId)) {
+ current.recycle();
+ return true;
+ }
}
current.recycle();
+ return false;
}
/**
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index dccf9d4..2ac44d2 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -1430,7 +1430,7 @@
/**
* @see Parcelable.Creator
*/
- public static final Parcelable.Creator<AccessibilityEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityEvent> CREATOR =
new Parcelable.Creator<AccessibilityEvent>() {
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 1ac7047..0f5e950 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeIdManager.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeIdManager.java
@@ -45,7 +45,9 @@
* @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 @@
* @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 @@
* @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 793c315..a8a787e 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -5144,7 +5144,7 @@
/**
* @see android.os.Parcelable.Creator
*/
- public static final Parcelable.Creator<TouchDelegateInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TouchDelegateInfo> CREATOR =
new Parcelable.Creator<TouchDelegateInfo>() {
@Override
public TouchDelegateInfo createFromParcel(Parcel parcel) {
@@ -5173,7 +5173,7 @@
/**
* @see android.os.Parcelable.Creator
*/
- public static final Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
new Parcelable.Creator<AccessibilityNodeInfo>() {
@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 c1c9174..4383f8a 100644
--- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
@@ -770,7 +770,7 @@
return changes;
}
- public static final Parcelable.Creator<AccessibilityWindowInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityWindowInfo> CREATOR =
new Creator<AccessibilityWindowInfo>() {
@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 e095094..3b60aee 100644
--- a/core/java/android/view/animation/Animation.java
+++ b/core/java/android/view/animation/Animation.java
@@ -207,6 +207,7 @@
private float mScaleFactor = 1f;
private boolean mShowWallpaper;
+ private boolean mHasRoundedCorners;
private boolean mMore = true;
private boolean mOneMoreTime = true;
@@ -263,6 +264,8 @@
a.getBoolean(com.android.internal.R.styleable.Animation_detachWallpaper, false));
setShowWallpaper(
a.getBoolean(com.android.internal.R.styleable.Animation_showWallpaper, false));
+ setHasRoundedCorners(
+ a.getBoolean(com.android.internal.R.styleable.Animation_hasRoundedCorners, false));
final int resID = a.getResourceId(com.android.internal.R.styleable.Animation_interpolator, 0);
@@ -678,6 +681,19 @@
}
/**
+ * If this is a window animation, the window will have rounded corners matching the display
+ * corner radius.
+ *
+ * @param hasRoundedCorners Whether the window should have rounded corners or not.
+ * @attr ref android.R.styleable#Animation_hasRoundedCorners
+ * @see com.android.internal.policy.ScreenDecorationsUtils#getWindowCornerRadius(Resources)
+ * @hide
+ */
+ public void setHasRoundedCorners(boolean hasRoundedCorners) {
+ mHasRoundedCorners = hasRoundedCorners;
+ }
+
+ /**
* Gets the acceleration curve type for this animation.
*
* @return the {@link Interpolator} associated to this animation
@@ -804,6 +820,16 @@
}
/**
+ * @return if a window animation should have rounded corners or not.
+ *
+ * @attr ref android.R.styleable#Animation_hasRoundedCorners
+ * @hide
+ */
+ public boolean hasRoundedCorners() {
+ return mHasRoundedCorners;
+ }
+
+ /**
* <p>Indicates whether or not this animation will affect the transformation
* matrix. For instance, a fade animation will not affect the matrix whereas
* a scale animation will.</p>
diff --git a/core/java/android/view/autofill/AutofillId.java b/core/java/android/view/autofill/AutofillId.java
index 5608bb3..8fa29f3 100644
--- a/core/java/android/view/autofill/AutofillId.java
+++ b/core/java/android/view/autofill/AutofillId.java
@@ -206,7 +206,7 @@
}
}
- public static final Parcelable.Creator<AutofillId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AutofillId> CREATOR =
new Parcelable.Creator<AutofillId>() {
@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 186a97d..64c8777 100644
--- a/core/java/android/view/autofill/AutofillValue.java
+++ b/core/java/android/view/autofill/AutofillValue.java
@@ -241,7 +241,7 @@
}
}
- public static final Parcelable.Creator<AutofillValue> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AutofillValue> CREATOR =
new Parcelable.Creator<AutofillValue>() {
@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 f97b1a0..d8459aa 100644
--- a/core/java/android/view/autofill/ParcelableMap.java
+++ b/core/java/android/view/autofill/ParcelableMap.java
@@ -47,7 +47,7 @@
}
}
- public static final Parcelable.Creator<ParcelableMap> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableMap> CREATOR =
new Parcelable.Creator<ParcelableMap>() {
@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 8bb4d21..86f85bf 100644
--- a/core/java/android/view/contentcapture/ContentCaptureContext.java
+++ b/core/java/android/view/contentcapture/ContentCaptureContext.java
@@ -214,6 +214,7 @@
/**
* Helper that creates a {@link ContentCaptureContext} associated with the given {@code uri}.
*/
+ @NonNull
public static ContentCaptureContext forLocusId(@NonNull Uri uri) {
return new Builder(new LocusId(uri)).build();
}
@@ -269,6 +270,7 @@
*
* @return the built {@code ContentCaptureContext}
*/
+ @NonNull
public ContentCaptureContext build() {
throwIfDestroyed();
mDestroyed = true;
@@ -351,10 +353,11 @@
}
}
- public static final Parcelable.Creator<ContentCaptureContext> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentCaptureContext> CREATOR =
new Parcelable.Creator<ContentCaptureContext>() {
@Override
+ @NonNull
public ContentCaptureContext createFromParcel(Parcel parcel) {
final boolean hasClientContext = parcel.readInt() == 1;
@@ -383,6 +386,7 @@
}
@Override
+ @NonNull
public ContentCaptureContext[] newArray(int size) {
return new ContentCaptureContext[size];
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureEvent.java b/core/java/android/view/contentcapture/ContentCaptureEvent.java
index 2585b74..67d3629 100644
--- a/core/java/android/view/contentcapture/ContentCaptureEvent.java
+++ b/core/java/android/view/contentcapture/ContentCaptureEvent.java
@@ -383,10 +383,11 @@
}
}
- public static final Parcelable.Creator<ContentCaptureEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentCaptureEvent> CREATOR =
new Parcelable.Creator<ContentCaptureEvent>() {
@Override
+ @NonNull
public ContentCaptureEvent createFromParcel(Parcel parcel) {
final String sessionId = parcel.readString();
final int type = parcel.readInt();
@@ -415,6 +416,7 @@
}
@Override
+ @NonNull
public ContentCaptureEvent[] newArray(int size) {
return new ContentCaptureEvent[size];
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureSession.java b/core/java/android/view/contentcapture/ContentCaptureSession.java
index ab8f346..6bf1eba 100644
--- a/core/java/android/view/contentcapture/ContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/ContentCaptureSession.java
@@ -208,6 +208,7 @@
/**
* Gets the id used to identify this session.
*/
+ @NonNull
public final ContentCaptureSessionId getContentCaptureSessionId() {
if (mContentCaptureSessionId == null) {
mContentCaptureSessionId = new ContentCaptureSessionId(mId);
diff --git a/core/java/android/view/contentcapture/ContentCaptureSessionId.java b/core/java/android/view/contentcapture/ContentCaptureSessionId.java
index d7f9fcc..e7c350a 100644
--- a/core/java/android/view/contentcapture/ContentCaptureSessionId.java
+++ b/core/java/android/view/contentcapture/ContentCaptureSessionId.java
@@ -96,15 +96,17 @@
parcel.writeString(mValue);
}
- public static final Parcelable.Creator<ContentCaptureSessionId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ContentCaptureSessionId> CREATOR =
new Parcelable.Creator<ContentCaptureSessionId>() {
@Override
+ @NonNull
public ContentCaptureSessionId createFromParcel(Parcel parcel) {
return new ContentCaptureSessionId(parcel.readString());
}
@Override
+ @NonNull
public ContentCaptureSessionId[] newArray(int size) {
return new ContentCaptureSessionId[size];
}
diff --git a/core/java/android/view/contentcapture/UserDataRemovalRequest.java b/core/java/android/view/contentcapture/UserDataRemovalRequest.java
index 7d66af9..b273f7c 100644
--- a/core/java/android/view/contentcapture/UserDataRemovalRequest.java
+++ b/core/java/android/view/contentcapture/UserDataRemovalRequest.java
@@ -121,6 +121,7 @@
*
* @return this builder
*/
+ @NonNull
public Builder addLocusId(@NonNull LocusId locusId, boolean recursive) {
throwIfDestroyed();
Preconditions.checkState(!mForEverything, "Already is for everything");
@@ -174,15 +175,17 @@
}
}
- public static final Parcelable.Creator<UserDataRemovalRequest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<UserDataRemovalRequest> CREATOR =
new Parcelable.Creator<UserDataRemovalRequest>() {
@Override
+ @NonNull
public UserDataRemovalRequest createFromParcel(Parcel parcel) {
return new UserDataRemovalRequest(parcel);
}
@Override
+ @NonNull
public UserDataRemovalRequest[] newArray(int size) {
return new UserDataRemovalRequest[size];
}
diff --git a/core/java/android/view/inputmethod/CompletionInfo.java b/core/java/android/view/inputmethod/CompletionInfo.java
index 70b8059..eee8a62 100644
--- a/core/java/android/view/inputmethod/CompletionInfo.java
+++ b/core/java/android/view/inputmethod/CompletionInfo.java
@@ -153,7 +153,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<CompletionInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<CompletionInfo> CREATOR
= new Parcelable.Creator<CompletionInfo>() {
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 a43dfe8..6db5784 100644
--- a/core/java/android/view/inputmethod/CorrectionInfo.java
+++ b/core/java/android/view/inputmethod/CorrectionInfo.java
@@ -88,7 +88,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<CorrectionInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CorrectionInfo> CREATOR =
new Parcelable.Creator<CorrectionInfo>() {
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 24739bf..ee5b3ec 100644
--- a/core/java/android/view/inputmethod/CursorAnchorInfo.java
+++ b/core/java/android/view/inputmethod/CursorAnchorInfo.java
@@ -559,7 +559,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<CursorAnchorInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<CursorAnchorInfo> CREATOR
= new Parcelable.Creator<CursorAnchorInfo>() {
@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 8e7b0db..e1a9898 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -585,7 +585,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<EditorInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<EditorInfo> CREATOR =
new Parcelable.Creator<EditorInfo>() {
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 1eb300e..159d2aa 100644
--- a/core/java/android/view/inputmethod/ExtractedText.java
+++ b/core/java/android/view/inputmethod/ExtractedText.java
@@ -115,7 +115,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<ExtractedText> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ExtractedText> CREATOR
= new Parcelable.Creator<ExtractedText>() {
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 bf0bef3..e442185 100644
--- a/core/java/android/view/inputmethod/ExtractedTextRequest.java
+++ b/core/java/android/view/inputmethod/ExtractedTextRequest.java
@@ -63,7 +63,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<ExtractedTextRequest> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<ExtractedTextRequest> CREATOR
= new Parcelable.Creator<ExtractedTextRequest>() {
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 bcd459e..2bfeb5a 100644
--- a/core/java/android/view/inputmethod/InputBinding.java
+++ b/core/java/android/view/inputmethod/InputBinding.java
@@ -135,7 +135,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<InputBinding> CREATOR = new Parcelable.Creator<InputBinding>() {
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 0d0fea6..9aa410f 100644
--- a/core/java/android/view/inputmethod/InputContentInfo.java
+++ b/core/java/android/view/inputmethod/InputContentInfo.java
@@ -265,7 +265,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<InputContentInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InputContentInfo> CREATOR
= new Parcelable.Creator<InputContentInfo>() {
@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 04028ae..fe07fee 100644
--- a/core/java/android/view/inputmethod/InputMethodInfo.java
+++ b/core/java/android/view/inputmethod/InputMethodInfo.java
@@ -548,7 +548,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<InputMethodInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InputMethodInfo> CREATOR
= new Parcelable.Creator<InputMethodInfo>() {
@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 14c879e..5989847 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -636,7 +636,7 @@
dest.writeInt(mIsAsciiCapable ? 1 : 0);
}
- public static final Parcelable.Creator<InputMethodSubtype> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<InputMethodSubtype> CREATOR
= new Parcelable.Creator<InputMethodSubtype>() {
@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 484fe46..596ea86 100644
--- a/core/java/android/view/inputmethod/SparseRectFArray.java
+++ b/core/java/android/view/inputmethod/SparseRectFArray.java
@@ -292,7 +292,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<SparseRectFArray> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SparseRectFArray> CREATOR =
new Parcelable.Creator<SparseRectFArray>() {
@Override
public SparseRectFArray createFromParcel(Parcel source) {
diff --git a/core/java/android/view/textclassifier/ConversationAction.java b/core/java/android/view/textclassifier/ConversationAction.java
index ae6a645..2b952a3 100644
--- a/core/java/android/view/textclassifier/ConversationAction.java
+++ b/core/java/android/view/textclassifier/ConversationAction.java
@@ -95,7 +95,7 @@
/** @hide **/
public static final String TYPE_ADD_CONTACT = "add_contact";
- public static final Creator<ConversationAction> CREATOR =
+ public static final @android.annotation.NonNull Creator<ConversationAction> CREATOR =
new Creator<ConversationAction>() {
@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 cf31445..9f9e666 100644
--- a/core/java/android/view/textclassifier/ConversationActions.java
+++ b/core/java/android/view/textclassifier/ConversationActions.java
@@ -44,7 +44,7 @@
*/
public final class ConversationActions implements Parcelable {
- public static final Creator<ConversationActions> CREATOR =
+ public static final @android.annotation.NonNull Creator<ConversationActions> CREATOR =
new Creator<ConversationActions>() {
@Override
public ConversationActions createFromParcel(Parcel in) {
@@ -175,7 +175,7 @@
return 0;
}
- public static final Creator<Message> CREATOR =
+ public static final @android.annotation.NonNull Creator<Message> CREATOR =
new Creator<Message>() {
@Override
public Message createFromParcel(Parcel in) {
@@ -367,7 +367,7 @@
return 0;
}
- public static final Creator<Request> CREATOR =
+ public static final @android.annotation.NonNull Creator<Request> CREATOR =
new Creator<Request>() {
@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 69a59a5..3c51c38 100644
--- a/core/java/android/view/textclassifier/EntityConfidence.java
+++ b/core/java/android/view/textclassifier/EntityConfidence.java
@@ -108,7 +108,7 @@
}
}
- public static final Parcelable.Creator<EntityConfidence> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<EntityConfidence> CREATOR =
new Parcelable.Creator<EntityConfidence>() {
@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 b073596..105cbcc 100644
--- a/core/java/android/view/textclassifier/SelectionEvent.java
+++ b/core/java/android/view/textclassifier/SelectionEvent.java
@@ -643,7 +643,7 @@
mSessionId, mStart, mEnd, mSmartStart, mSmartEnd);
}
- public static final Creator<SelectionEvent> CREATOR = new Creator<SelectionEvent>() {
+ public static final @android.annotation.NonNull Creator<SelectionEvent> CREATOR = new Creator<SelectionEvent>() {
@Override
public SelectionEvent createFromParcel(Parcel in) {
return new SelectionEvent(in);
diff --git a/core/java/android/view/textclassifier/TextClassification.java b/core/java/android/view/textclassifier/TextClassification.java
index 052ee95..034da01 100644
--- a/core/java/android/view/textclassifier/TextClassification.java
+++ b/core/java/android/view/textclassifier/TextClassification.java
@@ -756,7 +756,7 @@
return request;
}
- public static final Parcelable.Creator<Request> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Request> CREATOR =
new Parcelable.Creator<Request>() {
@Override
public Request createFromParcel(Parcel in) {
@@ -785,7 +785,7 @@
dest.writeBundle(mExtras);
}
- public static final Parcelable.Creator<TextClassification> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextClassification> CREATOR =
new Parcelable.Creator<TextClassification>() {
@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 a15411f..3bf8e9b 100644
--- a/core/java/android/view/textclassifier/TextClassificationContext.java
+++ b/core/java/android/view/textclassifier/TextClassificationContext.java
@@ -141,7 +141,7 @@
mWidgetVersion = in.readString();
}
- public static final Parcelable.Creator<TextClassificationContext> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextClassificationContext> CREATOR =
new Parcelable.Creator<TextClassificationContext>() {
@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 1378bd9..5e62a11 100644
--- a/core/java/android/view/textclassifier/TextClassificationSessionId.java
+++ b/core/java/android/view/textclassifier/TextClassificationSessionId.java
@@ -115,7 +115,7 @@
return new TextClassificationSessionId(string);
}
- public static final Parcelable.Creator<TextClassificationSessionId> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextClassificationSessionId> CREATOR =
new Parcelable.Creator<TextClassificationSessionId>() {
@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 e010155..23ce90e 100644
--- a/core/java/android/view/textclassifier/TextClassifier.java
+++ b/core/java/android/view/textclassifier/TextClassifier.java
@@ -550,7 +550,7 @@
return 0;
}
- public static final Parcelable.Creator<EntityConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<EntityConfig> CREATOR =
new Parcelable.Creator<EntityConfig>() {
@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 0d4338b..236f89b 100644
--- a/core/java/android/view/textclassifier/TextClassifierEvent.java
+++ b/core/java/android/view/textclassifier/TextClassifierEvent.java
@@ -35,7 +35,7 @@
// TODO: Comprehensive javadoc.
public final class TextClassifierEvent implements Parcelable {
- public static final Creator<TextClassifierEvent> CREATOR = new Creator<TextClassifierEvent>() {
+ public static final @android.annotation.NonNull Creator<TextClassifierEvent> CREATOR = new Creator<TextClassifierEvent>() {
@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 735c3eb..eaf4d7f 100644
--- a/core/java/android/view/textclassifier/TextLanguage.java
+++ b/core/java/android/view/textclassifier/TextLanguage.java
@@ -43,7 +43,7 @@
*/
public final class TextLanguage implements Parcelable {
- public static final Creator<TextLanguage> CREATOR = new Creator<TextLanguage>() {
+ public static final @android.annotation.NonNull Creator<TextLanguage> CREATOR = new Creator<TextLanguage>() {
@Override
public TextLanguage createFromParcel(Parcel in) {
return readFromParcel(in);
@@ -212,7 +212,7 @@
*/
public static final class Request implements Parcelable {
- public static final Creator<Request> CREATOR = new Creator<Request>() {
+ public static final @android.annotation.NonNull Creator<Request> CREATOR = new Creator<Request>() {
@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 ab34178..d8216ef 100644
--- a/core/java/android/view/textclassifier/TextLinks.java
+++ b/core/java/android/view/textclassifier/TextLinks.java
@@ -180,7 +180,7 @@
dest.writeBundle(mExtras);
}
- public static final Parcelable.Creator<TextLinks> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextLinks> CREATOR =
new Parcelable.Creator<TextLinks>() {
@Override
public TextLinks createFromParcel(Parcel in) {
@@ -315,7 +315,7 @@
return new TextLink(start, end, entityConfidence, extras, null /* urlSpan */);
}
- public static final Parcelable.Creator<TextLink> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextLink> CREATOR =
new Parcelable.Creator<TextLink>() {
@Override
public TextLink createFromParcel(Parcel in) {
@@ -528,7 +528,7 @@
return request;
}
- public static final Parcelable.Creator<Request> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Request> CREATOR =
new Parcelable.Creator<Request>() {
@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 4a6f3e5..52c532b 100644
--- a/core/java/android/view/textclassifier/TextSelection.java
+++ b/core/java/android/view/textclassifier/TextSelection.java
@@ -413,7 +413,7 @@
return request;
}
- public static final Parcelable.Creator<Request> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Request> CREATOR =
new Parcelable.Creator<Request>() {
@Override
public Request createFromParcel(Parcel in) {
@@ -441,7 +441,7 @@
dest.writeBundle(mExtras);
}
- public static final Parcelable.Creator<TextSelection> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TextSelection> CREATOR =
new Parcelable.Creator<TextSelection>() {
@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 afd62eb..0d37632 100644
--- a/core/java/android/view/textservice/SentenceSuggestionsInfo.java
+++ b/core/java/android/view/textservice/SentenceSuggestionsInfo.java
@@ -129,7 +129,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<SentenceSuggestionsInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SentenceSuggestionsInfo> CREATOR
= new Parcelable.Creator<SentenceSuggestionsInfo>() {
@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 7aa2c23..13d44da 100644
--- a/core/java/android/view/textservice/SpellCheckerInfo.java
+++ b/core/java/android/view/textservice/SpellCheckerInfo.java
@@ -192,7 +192,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<SpellCheckerInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SpellCheckerInfo> CREATOR
= new Parcelable.Creator<SpellCheckerInfo>() {
@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 d904d467..8224e0e 100644
--- a/core/java/android/view/textservice/SpellCheckerSubtype.java
+++ b/core/java/android/view/textservice/SpellCheckerSubtype.java
@@ -271,7 +271,7 @@
dest.writeInt(mSubtypeId);
}
- public static final Parcelable.Creator<SpellCheckerSubtype> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SpellCheckerSubtype> CREATOR
= new Parcelable.Creator<SpellCheckerSubtype>() {
@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 dc2051c..e69b6e7 100644
--- a/core/java/android/view/textservice/SuggestionsInfo.java
+++ b/core/java/android/view/textservice/SuggestionsInfo.java
@@ -162,7 +162,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<SuggestionsInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SuggestionsInfo> CREATOR
= new Parcelable.Creator<SuggestionsInfo>() {
@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 5499918..571bdf3 100644
--- a/core/java/android/view/textservice/TextInfo.java
+++ b/core/java/android/view/textservice/TextInfo.java
@@ -138,7 +138,7 @@
/**
* Used to make this class parcelable.
*/
- public static final Parcelable.Creator<TextInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<TextInfo> CREATOR
= new Parcelable.Creator<TextInfo>() {
@Override
public TextInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl
index dbca7ff..10cfea1 100644
--- a/core/java/android/webkit/IWebViewUpdateService.aidl
+++ b/core/java/android/webkit/IWebViewUpdateService.aidl
@@ -51,6 +51,7 @@
* DevelopmentSettings uses this to get the current available WebView
* providers (to display as choices to the user).
*/
+ @UnsupportedAppUsage
WebViewProviderInfo[] getValidWebViewPackages();
/**
@@ -61,6 +62,7 @@
/**
* Used by DevelopmentSetting to get the name of the WebView provider currently in use.
*/
+ @UnsupportedAppUsage
String getCurrentWebViewPackageName();
/**
@@ -72,6 +74,7 @@
* 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/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index baf5826..4c8f72a 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -351,7 +351,7 @@
}
default void onProvideContentCaptureStructure(
- @SuppressWarnings("unused") android.view.ViewStructure structure,
+ @NonNull @SuppressWarnings("unused") android.view.ViewStructure structure,
@SuppressWarnings("unused") int flags) {
}
diff --git a/core/java/android/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java
index 1704757..7e00cde 100644
--- a/core/java/android/webkit/WebViewProviderInfo.java
+++ b/core/java/android/webkit/WebViewProviderInfo.java
@@ -46,7 +46,7 @@
}
// aidl stuff
- public static final Parcelable.Creator<WebViewProviderInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WebViewProviderInfo> CREATOR =
new Parcelable.Creator<WebViewProviderInfo>() {
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 0edcb6f..5622abe 100644
--- a/core/java/android/webkit/WebViewProviderResponse.java
+++ b/core/java/android/webkit/WebViewProviderResponse.java
@@ -30,7 +30,7 @@
}
// aidl stuff
- public static final Parcelable.Creator<WebViewProviderResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WebViewProviderResponse> CREATOR =
new Parcelable.Creator<WebViewProviderResponse>() {
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 f01babe..6eceb003 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1803,7 +1803,7 @@
+ " checkState=" + checkState + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
@Override
public SavedState createFromParcel(Parcel in) {
@@ -2821,7 +2821,7 @@
* @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 3dcba48..daf6914 100644
--- a/core/java/android/widget/AbsSpinner.java
+++ b/core/java/android/widget/AbsSpinner.java
@@ -415,7 +415,7 @@
+ " position=" + position + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 eb20a76..cfb93ec 100644
--- a/core/java/android/widget/ActionMenuPresenter.java
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -830,7 +830,7 @@
dest.writeInt(openSubMenuId);
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 5174c1a..d93b635 100644
--- a/core/java/android/widget/AdapterViewAnimator.java
+++ b/core/java/android/widget/AdapterViewAnimator.java
@@ -804,7 +804,7 @@
return "AdapterViewAnimator.SavedState{ whichChild = " + this.whichChild + " }";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 99440f8..a211b46 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -493,7 +493,7 @@
+ " checked=" + checked + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 3cfd373..80ec1c6 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -545,7 +545,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
@Override
public SavedState createFromParcel(Parcel in) {
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index ada4f00..ecb846b 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -791,7 +791,7 @@
@SuppressWarnings("all")
// suppress unused and hiding
- public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
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 bda64ba..f04f605 100644
--- a/core/java/android/widget/ExpandableListConnector.java
+++ b/core/java/android/widget/ExpandableListConnector.java
@@ -927,7 +927,7 @@
dest.writeLong(gId);
}
- public static final Parcelable.Creator<GroupMetadata> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GroupMetadata> CREATOR =
new Parcelable.Creator<GroupMetadata>() {
public GroupMetadata createFromParcel(Parcel in) {
diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java
index 2cc013e..cae91fc 100644
--- a/core/java/android/widget/ExpandableListView.java
+++ b/core/java/android/widget/ExpandableListView.java
@@ -1318,7 +1318,7 @@
out.writeList(expandedGroupMetadataList);
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 25cfdc7..5921feb 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -1844,7 +1844,7 @@
+ "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 8113b40..0b433b1 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -2061,7 +2061,7 @@
out.writeInt(secondaryProgress);
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 8514b85..564d972 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -2803,7 +2803,7 @@
* @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 @@
/**
* Parcelable.Creator that instantiates RemoteViews objects
*/
- public static final Parcelable.Creator<RemoteViews> CREATOR = new Parcelable.Creator<RemoteViews>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<RemoteViews> CREATOR = new Parcelable.Creator<RemoteViews>() {
public RemoteViews createFromParcel(Parcel parcel) {
return new RemoteViews(parcel);
}
@@ -3926,7 +3926,8 @@
*
* @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 @@
* @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 @@
*
* @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 7e72c6a..457be34 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -1978,7 +1978,7 @@
+ " scrollPosition=" + scrollPosition + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
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 172f1d8..89d9e97 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -1433,7 +1433,7 @@
+ " isIconified=" + isIconified + "}";
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 d6c657b..92fcea3 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -944,7 +944,7 @@
out.writeByte((byte) (showDropdown ? 1 : 0));
}
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 51eaa12..73792b0 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -13062,7 +13062,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<SavedState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
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 97a8ade..c7a2980 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -552,7 +552,7 @@
}
@SuppressWarnings({"unused", "hiding"})
- public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
+ public static final @android.annotation.NonNull Creator<SavedState> CREATOR = new Creator<SavedState>() {
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 b76c2ca..9255ccb 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 @@
* @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 f25109e..a21fb41 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -2384,7 +2384,7 @@
out.writeInt(isOverflowOpen ? 1 : 0);
}
- public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
+ public static final @android.annotation.NonNull Creator<SavedState> CREATOR = new Creator<SavedState>() {
@Override
public SavedState createFromParcel(Parcel source) {
diff --git a/core/java/android/widget/ViewFlipper.java b/core/java/android/widget/ViewFlipper.java
index 414b136..b962298 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 @@
* 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 @@
* @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 dd6a27b8f..7a5b7e8 100644
--- a/core/java/android/widget/ZoomControls.java
+++ b/core/java/android/widget/ZoomControls.java
@@ -30,7 +30,11 @@
/**
* The {@code ZoomControls} class displays a simple set of controls used for zooming and
- * provides callbacks to register for events. */
+ * provides callbacks to register for events.
+ * @deprecated This functionality and UI is better handled with custom views and layouts
+ * rather than a dedicated zoom-control widget
+ */
+@Deprecated
@Widget
public class ZoomControls extends LinearLayout {
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 89e3d6b..a5a1dd9 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -135,7 +135,7 @@
* {@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";
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index 8a90cad..c096961 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -32,6 +32,7 @@
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,7 +43,9 @@
// Remaining methods are only used in Java.
int checkPackage(int uid, String packageName);
+ @UnsupportedAppUsage
List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);
+ @UnsupportedAppUsage
List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);
void getHistoricalOps(int uid, String packageName, in List<String> ops, long beginTimeMillis,
long endTimeMillis, in RemoteCallback callback);
@@ -55,7 +58,9 @@
void clearHistory();
List<AppOpsManager.PackageOps> 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 d7514d1..114d31f 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -49,11 +49,13 @@
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 @@
// 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 @@
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 9ce7ed1..420749e 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -51,6 +51,7 @@
* @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 f9bf373..6d1d1ab 100644
--- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
+++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
@@ -42,6 +42,7 @@
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 @@
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 5b778d2..f3bf913 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
@@ -23,6 +23,8 @@
*/
public final class SystemUiDeviceConfigFlags {
+ // Flags related to NotificationAssistant
+
/**
* Whether the Notification Assistant should generate replies for notifications.
*/
@@ -45,5 +47,47 @@
*/
public static final String NAS_MAX_SUGGESTIONS = "nas_max_suggestions";
+ // Flags related to Smart Suggestions - these are read in SmartReplyConstants.
+
+ /** (boolean) Whether to enable smart suggestions in notifications. */
+ public static final String SSIN_ENABLED = "ssin_enabled";
+
+ /**
+ * (boolean) Whether apps need to target at least P to provide their own smart replies (this
+ * doesn't apply to actions!).
+ */
+ public static final String SSIN_REQUIRES_TARGETING_P = "ssin_requires_targeting_p";
+
+ /**
+ * (int) The number of times we'll try to find a better line-break for double-line smart
+ * suggestion buttons.
+ */
+ public static final String SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS =
+ "ssin_max_squeeze_remeasure_attempts";
+
+ /** (boolean) Whether to let the user edit smart replies before sending. */
+ public static final String SSIN_EDIT_CHOICES_BEFORE_SENDING =
+ "ssin_edit_choices_before_sending";
+
+ /** (boolean) Whether smart suggestions should be enabled in heads-up notifications. */
+ public static final String SSIN_SHOW_IN_HEADS_UP = "ssin_show_in_heads_up";
+
+ /** (int) Minimum number of system generated replies to show in a notification. */
+ public static final String SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES =
+ "ssin_min_num_system_generated_replies";
+
+ /**
+ * (int) Maximum number of actions to show in a notification, -1 if there shouldn't be a limit
+ */
+ 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/IDropBoxManagerService.aidl b/core/java/com/android/internal/os/IDropBoxManagerService.aidl
index 70844ee..5e60394 100644
--- a/core/java/com/android/internal/os/IDropBoxManagerService.aidl
+++ b/core/java/com/android/internal/os/IDropBoxManagerService.aidl
@@ -37,5 +37,6 @@
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 6bbfc2b..6a9db10 100644
--- a/core/java/com/android/internal/os/KernelCpuThreadReader.java
+++ b/core/java/com/android/internal/os/KernelCpuThreadReader.java
@@ -103,6 +103,16 @@
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 @@
/**
* 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 @@
* 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 @@
+ " and user ID " + uid);
}
+ int[] filteredThreadsCpuUsage = null;
final Path allThreadsPath = processPath.resolve("task");
final ArrayList<ThreadCpuUsage> threadCpuUsages = new ArrayList<>();
try (DirectoryStream<Path> 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 @@
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 @@
}
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);
}
@@ -424,6 +442,28 @@
}
/**
+ * 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
*/
@VisibleForTesting
@@ -440,7 +480,7 @@
* 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/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 58b48d8..2bba3c9 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -126,8 +126,8 @@
/** 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 @@
/**
* @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 @@
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 @@
* @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 @@
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 @@
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 @@
}
/**
- * @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 @@
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 @@
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 @@
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 @@
}
/**
- * @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 9cb5820..28642d8 100644
--- a/core/java/com/android/internal/os/ZygoteArguments.java
+++ b/core/java/com/android/internal/os/ZygoteArguments.java
@@ -103,8 +103,8 @@
/**
*
*/
- boolean mBlastulaPoolEnabled;
- boolean mBlastulaPoolStatusSpecified = false;
+ boolean mUsapPoolEnabled;
+ boolean mUsapPoolStatusSpecified = false;
/**
* from all --rlimit=r,c,m
@@ -205,6 +205,12 @@
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
*
* @param args zygote command-line args
@@ -391,6 +397,15 @@
"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 @@
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 c7ba22d..87adce7 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.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 @@
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 @@
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 @@
}
}
- 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 @@
* 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 @@
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 @@
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 @@
}
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 7cddf75..a5e7202 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -99,7 +99,7 @@
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=";
/**
diff --git a/core/java/com/android/internal/os/ZygoteServer.java b/core/java/com/android/internal/os/ZygoteServer.java
index c4c98ba..6595317 100644
--- a/core/java/com/android/internal/os/ZygoteServer.java
+++ b/core/java/com/android/internal/os/ZygoteServer.java
@@ -51,39 +51,40 @@
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 @@
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 @@
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 @@
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 @@
}
/**
- * 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 @@
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 @@
++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 @@
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 @@
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 @@
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 cdaf33f..c4626c2 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -1639,6 +1639,9 @@
@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 e5d5685..54f31f9 100644
--- a/core/java/com/android/internal/policy/IKeyguardService.aidl
+++ b/core/java/com/android/internal/policy/IKeyguardService.aidl
@@ -88,8 +88,10 @@
*/
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 bfb5084..3437614 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -31,16 +31,21 @@
/** @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 @@
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 b04ebec..ff5b996 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -712,4 +712,30 @@
}
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 e90a8d5..19b68e5 100644
--- a/core/java/com/android/internal/widget/DecorCaptionView.java
+++ b/core/java/com/android/internal/widget/DecorCaptionView.java
@@ -103,6 +103,7 @@
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 @@
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 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 1c5816c..3be7c3e 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -30,11 +30,17 @@
/** {@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 @@
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 7317ecf..d6efca5 100644
--- a/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl
+++ b/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl
@@ -21,15 +21,23 @@
/** {@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 3537465..958bb18 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -206,6 +206,8 @@
// associate with any other apps, but does not limit what apps B can associate with.
final ArrayMap<String, ArraySet<String>> mAllowedAssociations = new ArrayMap<>();
+ private final ArraySet<String> mBugreportWhitelistedPackages = new ArraySet<>();
+
public static SystemConfig getInstance() {
synchronized (SystemConfig.class) {
if (sInstance == null) {
@@ -339,6 +341,10 @@
return mAllowedAssociations;
}
+ public ArraySet<String> getBugreportWhitelistedPackages() {
+ return mBugreportWhitelistedPackages;
+ }
+
SystemConfig() {
// Read configuration from system
readPermissions(Environment.buildPath(
@@ -924,6 +930,15 @@
}
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.bp b/core/jni/Android.bp
index c309f27..cd34d2e 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -165,6 +165,8 @@
"android_media_AudioTrack.cpp",
"android_media_AudioAttributes.cpp",
"android_media_AudioProductStrategies.cpp",
+ "android_media_AudioVolumeGroups.cpp",
+ "android_media_AudioVolumeGroupCallback.cpp",
"android_media_DeviceCallback.cpp",
"android_media_JetPlayer.cpp",
"android_media_MediaMetricsJNI.cpp",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 16517bf..da27852 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -110,6 +110,8 @@
extern int register_android_media_AudioTrack(JNIEnv *env);
extern int register_android_media_AudioAttributes(JNIEnv *env);
extern int register_android_media_AudioProductStrategies(JNIEnv *env);
+extern int register_android_media_AudioVolumeGroups(JNIEnv *env);
+extern int register_android_media_AudioVolumeGroupChangeHandler(JNIEnv *env);
extern int register_android_media_MicrophoneInfo(JNIEnv *env);
extern int register_android_media_JetPlayer(JNIEnv *env);
extern int register_android_media_ToneGenerator(JNIEnv *env);
@@ -1524,6 +1526,8 @@
REG_JNI(register_android_media_AudioTrack),
REG_JNI(register_android_media_AudioAttributes),
REG_JNI(register_android_media_AudioProductStrategies),
+ REG_JNI(register_android_media_AudioVolumeGroups),
+ REG_JNI(register_android_media_AudioVolumeGroupChangeHandler),
REG_JNI(register_android_media_JetPlayer),
REG_JNI(register_android_media_MicrophoneInfo),
REG_JNI(register_android_media_RemoteDisplay),
diff --git a/core/jni/android/graphics/TEST_MAPPING b/core/jni/android/graphics/TEST_MAPPING
new file mode 100644
index 0000000..10bd0ee
--- /dev/null
+++ b/core/jni/android/graphics/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "presubmit": [
+ {
+ "name": "CtsGraphicsTestCases"
+ }
+ ]
+}
diff --git a/core/jni/android_media_AudioProductStrategies.cpp b/core/jni/android_media_AudioProductStrategies.cpp
index d7d31e5..822b74a 100644
--- a/core/jni/android_media_AudioProductStrategies.cpp
+++ b/core/jni/android_media_AudioProductStrategies.cpp
@@ -57,7 +57,7 @@
static jclass gAudioAttributesGroupClass;
static jmethodID gAudioAttributesGroupCstor;
static struct {
- jfieldID mGroupId;
+ jfieldID mVolumeGroupId;
jfieldID mLegacyStreamType;
jfieldID mAudioAttributes;
} gAudioAttributesGroupsFields;
@@ -207,7 +207,7 @@
}
product_strategy_t psId;
status_t status = AudioSystem::getProductStrategyFromAudioAttributes(
- AudioAttributes(*attributes.get()), psId);
+ AudioAttributes(*attributes.get()), psId);
if (status != NO_ERROR) {
return nativeToJavaStatus(status);
}
@@ -249,8 +249,8 @@
gAudioAttributesGroupClass = MakeGlobalRefOrDie(env, audioAttributesGroupClass);
gAudioAttributesGroupCstor = GetMethodIDOrDie(env, audioAttributesGroupClass, "<init>",
"(II[Landroid/media/AudioAttributes;)V");
- gAudioAttributesGroupsFields.mGroupId = GetFieldIDOrDie(
- env, audioAttributesGroupClass, "mGroupId", "I");
+ gAudioAttributesGroupsFields.mVolumeGroupId = GetFieldIDOrDie(
+ env, audioAttributesGroupClass, "mVolumeGroupId", "I");
gAudioAttributesGroupsFields.mLegacyStreamType = GetFieldIDOrDie(
env, audioAttributesGroupClass, "mLegacyStreamType", "I");
gAudioAttributesGroupsFields.mAudioAttributes = GetFieldIDOrDie(
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index bd998999..1a90ebf 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -573,6 +573,81 @@
}
static jint
+android_media_AudioSystem_setVolumeIndexForAttributes(JNIEnv *env,
+ jobject thiz,
+ jobject jaa,
+ jint index,
+ jint device)
+{
+ // read the AudioAttributes values
+ JNIAudioAttributeHelper::UniqueAaPtr paa = JNIAudioAttributeHelper::makeUnique();
+ jint jStatus = JNIAudioAttributeHelper::nativeFromJava(env, jaa, paa.get());
+ if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
+ return jStatus;
+ }
+ return (jint) check_AudioSystem_Command(
+ AudioSystem::setVolumeIndexForAttributes(*(paa.get()), index, (audio_devices_t)device));
+}
+
+static jint
+android_media_AudioSystem_getVolumeIndexForAttributes(JNIEnv *env,
+ jobject thiz,
+ jobject jaa,
+ jint device)
+{
+ // read the AudioAttributes values
+ JNIAudioAttributeHelper::UniqueAaPtr paa = JNIAudioAttributeHelper::makeUnique();
+ jint jStatus = JNIAudioAttributeHelper::nativeFromJava(env, jaa, paa.get());
+ if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
+ return jStatus;
+ }
+ int index;
+ if (AudioSystem::getVolumeIndexForAttributes(*(paa.get()), index, (audio_devices_t)device)
+ != NO_ERROR) {
+ index = -1;
+ }
+ return (jint) index;
+}
+
+static jint
+android_media_AudioSystem_getMinVolumeIndexForAttributes(JNIEnv *env,
+ jobject thiz,
+ jobject jaa)
+{
+ // read the AudioAttributes values
+ JNIAudioAttributeHelper::UniqueAaPtr paa = JNIAudioAttributeHelper::makeUnique();
+ jint jStatus = JNIAudioAttributeHelper::nativeFromJava(env, jaa, paa.get());
+ if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
+ return jStatus;
+ }
+ int index;
+ if (AudioSystem::getMinVolumeIndexForAttributes(*(paa.get()), index)
+ != NO_ERROR) {
+ index = -1;
+ }
+ return (jint) index;
+}
+
+static jint
+android_media_AudioSystem_getMaxVolumeIndexForAttributes(JNIEnv *env,
+ jobject thiz,
+ jobject jaa)
+{
+ // read the AudioAttributes values
+ JNIAudioAttributeHelper::UniqueAaPtr paa = JNIAudioAttributeHelper::makeUnique();
+ jint jStatus = JNIAudioAttributeHelper::nativeFromJava(env, jaa, paa.get());
+ if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
+ return jStatus;
+ }
+ int index;
+ if (AudioSystem::getMaxVolumeIndexForAttributes(*(paa.get()), index)
+ != NO_ERROR) {
+ index = -1;
+ }
+ return (jint) index;
+}
+
+static jint
android_media_AudioSystem_setMasterVolume(JNIEnv *env, jobject thiz, jfloat value)
{
return (jint) check_AudioSystem_Command(AudioSystem::setMasterVolume(value));
@@ -2172,6 +2247,10 @@
{"initStreamVolume", "(III)I", (void *)android_media_AudioSystem_initStreamVolume},
{"setStreamVolumeIndex","(III)I", (void *)android_media_AudioSystem_setStreamVolumeIndex},
{"getStreamVolumeIndex","(II)I", (void *)android_media_AudioSystem_getStreamVolumeIndex},
+ {"setVolumeIndexForAttributes","(Landroid/media/AudioAttributes;II)I", (void *)android_media_AudioSystem_setVolumeIndexForAttributes},
+ {"getVolumeIndexForAttributes","(Landroid/media/AudioAttributes;I)I", (void *)android_media_AudioSystem_getVolumeIndexForAttributes},
+ {"getMinVolumeIndexForAttributes","(Landroid/media/AudioAttributes;)I", (void *)android_media_AudioSystem_getMinVolumeIndexForAttributes},
+ {"getMaxVolumeIndexForAttributes","(Landroid/media/AudioAttributes;)I", (void *)android_media_AudioSystem_getMaxVolumeIndexForAttributes},
{"setMasterVolume", "(F)I", (void *)android_media_AudioSystem_setMasterVolume},
{"getMasterVolume", "()F", (void *)android_media_AudioSystem_getMasterVolume},
{"setMasterMute", "(Z)I", (void *)android_media_AudioSystem_setMasterMute},
diff --git a/core/jni/android_media_AudioVolumeGroupCallback.cpp b/core/jni/android_media_AudioVolumeGroupCallback.cpp
new file mode 100644
index 0000000..cb4ddbd
--- /dev/null
+++ b/core/jni/android_media_AudioVolumeGroupCallback.cpp
@@ -0,0 +1,175 @@
+/*
+ * 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.
+ */
+
+//#define LOG_NDEBUG 0
+
+#define LOG_TAG "AudioVolumeGroupCallback-JNI"
+
+#include <utils/Log.h>
+#include <nativehelper/JNIHelp.h>
+#include "core_jni_helpers.h"
+
+#include "android_media_AudioVolumeGroupCallback.h"
+
+
+// ----------------------------------------------------------------------------
+using namespace android;
+
+static const char* const kAudioVolumeGroupChangeHandlerClassPathName =
+ "android/media/audiopolicy/AudioVolumeGroupChangeHandler";
+
+static struct {
+ jfieldID mJniCallback;
+} gAudioVolumeGroupChangeHandlerFields;
+
+static struct {
+ jmethodID postEventFromNative;
+} gAudioVolumeGroupChangeHandlerMethods;
+
+static Mutex gLock;
+
+JNIAudioVolumeGroupCallback::JNIAudioVolumeGroupCallback(JNIEnv* env,
+ jobject thiz,
+ jobject weak_thiz)
+{
+ jclass clazz = env->GetObjectClass(thiz);
+ if (clazz == NULL) {
+ ALOGE("Can't find class %s", kAudioVolumeGroupChangeHandlerClassPathName);
+ return;
+ }
+ mClass = (jclass)env->NewGlobalRef(clazz);
+
+ // We use a weak reference so the AudioVolumeGroupChangeHandler object can be garbage collected.
+ // The reference is only used as a proxy for callbacks.
+ mObject = env->NewGlobalRef(weak_thiz);
+}
+
+JNIAudioVolumeGroupCallback::~JNIAudioVolumeGroupCallback()
+{
+ // remove global references
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+ env->DeleteGlobalRef(mObject);
+ env->DeleteGlobalRef(mClass);
+}
+
+void JNIAudioVolumeGroupCallback::onAudioVolumeGroupChanged(volume_group_t group, int flags)
+{
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+ ALOGV("%s volume group id %d", __FUNCTION__, group);
+ env->CallStaticVoidMethod(mClass,
+ gAudioVolumeGroupChangeHandlerMethods.postEventFromNative,
+ mObject,
+ AUDIOVOLUMEGROUP_EVENT_VOLUME_CHANGED, group, flags, NULL);
+ if (env->ExceptionCheck()) {
+ ALOGW("An exception occurred while notifying an event.");
+ env->ExceptionClear();
+ }
+}
+
+void JNIAudioVolumeGroupCallback::onServiceDied()
+{
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+ env->CallStaticVoidMethod(mClass,
+ gAudioVolumeGroupChangeHandlerMethods.postEventFromNative,
+ mObject,
+ AUDIOVOLUMEGROUP_EVENT_SERVICE_DIED, 0, 0, NULL);
+ if (env->ExceptionCheck()) {
+ ALOGW("An exception occurred while notifying an event.");
+ env->ExceptionClear();
+ }
+}
+
+static
+sp<JNIAudioVolumeGroupCallback> setJniCallback(JNIEnv* env,
+ jobject thiz,
+ const sp<JNIAudioVolumeGroupCallback>& callback)
+{
+ Mutex::Autolock l(gLock);
+ sp<JNIAudioVolumeGroupCallback> old = (JNIAudioVolumeGroupCallback*)env->GetLongField(
+ thiz, gAudioVolumeGroupChangeHandlerFields.mJniCallback);
+ if (callback.get()) {
+ callback->incStrong((void*)setJniCallback);
+ }
+ if (old != 0) {
+ old->decStrong((void*)setJniCallback);
+ }
+ env->SetLongField(thiz, gAudioVolumeGroupChangeHandlerFields.mJniCallback,
+ (jlong)callback.get());
+ return old;
+}
+
+static void
+android_media_AudioVolumeGroupChangeHandler_eventHandlerSetup(JNIEnv *env,
+ jobject thiz,
+ jobject weak_this)
+{
+ ALOGV("%s", __FUNCTION__);
+ sp<JNIAudioVolumeGroupCallback> callback =
+ new JNIAudioVolumeGroupCallback(env, thiz, weak_this);
+
+ if (AudioSystem::addAudioVolumeGroupCallback(callback) == NO_ERROR) {
+ setJniCallback(env, thiz, callback);
+ }
+}
+
+static void
+android_media_AudioVolumeGroupChangeHandler_eventHandlerFinalize(JNIEnv *env, jobject thiz)
+{
+ ALOGV("%s", __FUNCTION__);
+ sp<JNIAudioVolumeGroupCallback> callback = setJniCallback(env, thiz, 0);
+ if (callback != 0) {
+ AudioSystem::removeAudioVolumeGroupCallback(callback);
+ }
+}
+
+/*
+ * JNI registration.
+ */
+static const JNINativeMethod gMethods[] = {
+ {"native_setup", "(Ljava/lang/Object;)V",
+ (void *)android_media_AudioVolumeGroupChangeHandler_eventHandlerSetup},
+ {"native_finalize", "()V",
+ (void *)android_media_AudioVolumeGroupChangeHandler_eventHandlerFinalize},
+};
+
+int register_android_media_AudioVolumeGroupChangeHandler(JNIEnv *env)
+{
+ jclass audioVolumeGroupChangeHandlerClass =
+ FindClassOrDie(env, kAudioVolumeGroupChangeHandlerClassPathName);
+ gAudioVolumeGroupChangeHandlerMethods.postEventFromNative =
+ GetStaticMethodIDOrDie(env, audioVolumeGroupChangeHandlerClass, "postEventFromNative",
+ "(Ljava/lang/Object;IIILjava/lang/Object;)V");
+
+ gAudioVolumeGroupChangeHandlerFields.mJniCallback =
+ GetFieldIDOrDie(env, audioVolumeGroupChangeHandlerClass, "mJniCallback", "J");
+
+ env->DeleteLocalRef(audioVolumeGroupChangeHandlerClass);
+
+ return RegisterMethodsOrDie(env,
+ kAudioVolumeGroupChangeHandlerClassPathName,
+ gMethods,
+ NELEM(gMethods));
+}
+
diff --git a/core/jni/android_media_AudioVolumeGroupCallback.h b/core/jni/android_media_AudioVolumeGroupCallback.h
new file mode 100644
index 0000000..de06549
--- /dev/null
+++ b/core/jni/android_media_AudioVolumeGroupCallback.h
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <system/audio.h>
+#include <media/AudioSystem.h>
+
+namespace android {
+
+// keep in sync with AudioManager.AudioVolumeGroupChangeHandler.java
+#define AUDIOVOLUMEGROUP_EVENT_VOLUME_CHANGED 1000
+#define AUDIOVOLUMEGROUP_EVENT_SERVICE_DIED 1001
+
+class JNIAudioVolumeGroupCallback: public AudioSystem::AudioVolumeGroupCallback
+{
+public:
+ JNIAudioVolumeGroupCallback(JNIEnv* env, jobject thiz, jobject weak_thiz);
+ ~JNIAudioVolumeGroupCallback();
+
+ void onAudioVolumeGroupChanged(volume_group_t group, int flags) override;
+ void onServiceDied() override;
+
+private:
+ void sendEvent(int event);
+
+ jclass mClass; /**< Reference to AudioVolumeGroupChangeHandler class. */
+ jobject mObject; /**< Weak ref to AudioVolumeGroupChangeHandler object to call on. */
+};
+
+} // namespace android
diff --git a/core/jni/android_media_AudioVolumeGroups.cpp b/core/jni/android_media_AudioVolumeGroups.cpp
new file mode 100644
index 0000000..64f0c1e
--- /dev/null
+++ b/core/jni/android_media_AudioVolumeGroups.cpp
@@ -0,0 +1,183 @@
+/*
+ * 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.
+ */
+
+//#define LOG_NDEBUG 0
+
+#define LOG_TAG "AudioVolumeGroups-JNI"
+
+#include <inttypes.h>
+#include <jni.h>
+#include <nativehelper/JNIHelp.h>
+#include "core_jni_helpers.h"
+
+#include <utils/Log.h>
+#include <vector>
+
+#include <media/AudioSystem.h>
+#include <media/AudioPolicy.h>
+
+#include <nativehelper/ScopedUtfChars.h>
+
+#include "android_media_AudioAttributes.h"
+#include "android_media_AudioErrors.h"
+
+// ----------------------------------------------------------------------------
+
+using namespace android;
+
+// ----------------------------------------------------------------------------
+static const char* const kClassPathName = "android/media/audiopolicy/AudioVolumeGroups";
+static const char* const kAudioVolumeGroupClassPathName =
+ "android/media/audiopolicy/AudioVolumeGroup";
+
+static jclass gAudioVolumeGroupClass;
+static jmethodID gAudioVolumeGroupCstor;
+static struct {
+ jfieldID mName;
+ jfieldID mId;
+} gAudioVolumeGroupFields;
+
+static jclass gArrayListClass;
+static jmethodID gArrayListCstor;
+static struct {
+ jmethodID add;
+ jmethodID toArray;
+} gArrayListMethods;
+
+
+static jint convertAudioVolumeGroupsFromNative(
+ JNIEnv *env, jobject *jGroup, const AudioVolumeGroup &group)
+{
+ jint jStatus = (jint)AUDIO_JAVA_SUCCESS;
+ jstring jName = NULL;
+ jint Id = NULL;
+
+ jintArray jLegacyStreamTypes = NULL;
+ jobjectArray jAudioAttributes = NULL;
+ jint numAttributes;
+ jobject jAudioAttribute = NULL;
+
+ jName = env->NewStringUTF(group.getName().c_str());
+ Id = static_cast<jint>(group.getId());
+
+ // Legacy stream types array
+ jLegacyStreamTypes = env->NewIntArray(group.getStreamTypes().size());
+ if (jLegacyStreamTypes == NULL) {
+ jStatus = (jint)AUDIO_JAVA_ERROR;
+ goto exit;
+ }
+ for (size_t streamIndex = 0; streamIndex < group.getStreamTypes().size(); streamIndex++) {
+ jint jStream = group.getStreamTypes()[streamIndex];
+ env->SetIntArrayRegion(jLegacyStreamTypes, streamIndex, 1, &jStream);
+ }
+
+ // Audio Attributes array
+ numAttributes = group.getAudioAttributes().size();
+ jStatus = JNIAudioAttributeHelper::getJavaArray(env, &jAudioAttributes, numAttributes);
+ if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
+ goto exit;
+ }
+
+ for (size_t j = 0; j < static_cast<size_t>(numAttributes); j++) {
+ auto attributes = group.getAudioAttributes()[j];
+
+ jStatus = JNIAudioAttributeHelper::nativeToJava(env, &jAudioAttribute, attributes);
+ if (jStatus != AUDIO_JAVA_SUCCESS) {
+ goto exit;
+ }
+ env->SetObjectArrayElement(jAudioAttributes, j, jAudioAttribute);
+ }
+
+ *jGroup = env->NewObject(gAudioVolumeGroupClass, gAudioVolumeGroupCstor,
+ jName, Id, jAudioAttributes, jLegacyStreamTypes);
+exit:
+ if (jName != NULL) {
+ env->DeleteLocalRef(jName);
+ }
+ return jStatus;
+}
+
+static jint
+android_media_AudioSystem_listAudioVolumeGroups(JNIEnv *env, jobject clazz, jobject jVolumeGroups)
+{
+ if (env == NULL) {
+ return AUDIO_JAVA_DEAD_OBJECT;
+ }
+ if (jVolumeGroups == NULL) {
+ ALOGE("listAudioVolumeGroups NULL AudioVolumeGroups");
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+ if (!env->IsInstanceOf(jVolumeGroups, gArrayListClass)) {
+ ALOGE("listAudioVolumeGroups not an arraylist");
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+
+ status_t status;
+ AudioVolumeGroupVector groups;
+ jint jStatus;
+ jobject jGroup = NULL;
+
+ status = AudioSystem::listAudioVolumeGroups(groups);
+ if (status != NO_ERROR) {
+ ALOGE("AudioSystem::listAudioVolumeGroups error %d", status);
+ return nativeToJavaStatus(status);
+ }
+ for (const auto &group : groups) {
+ jStatus = convertAudioVolumeGroupsFromNative(env, &jGroup, group);
+ if (jStatus != AUDIO_JAVA_SUCCESS) {
+ goto exit;
+ }
+ env->CallBooleanMethod(jVolumeGroups, gArrayListMethods.add, jGroup);
+ }
+exit:
+ if (jGroup != NULL) {
+ env->DeleteLocalRef(jGroup);
+ }
+ return jStatus;
+}
+
+/*
+ * JNI registration.
+ */
+static const JNINativeMethod gMethods[] = {
+ {"native_list_audio_volume_groups", "(Ljava/util/ArrayList;)I",
+ (void *)android_media_AudioSystem_listAudioVolumeGroups},
+};
+
+int register_android_media_AudioVolumeGroups(JNIEnv *env)
+{
+ jclass arrayListClass = FindClassOrDie(env, "java/util/ArrayList");
+ gArrayListClass = MakeGlobalRefOrDie(env, arrayListClass);
+ gArrayListCstor = GetMethodIDOrDie(env, arrayListClass, "<init>", "()V");
+ gArrayListMethods.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
+ gArrayListMethods.toArray = GetMethodIDOrDie(env, arrayListClass,
+ "toArray", "()[Ljava/lang/Object;");
+
+ jclass audioVolumeGroupClass = FindClassOrDie(env, kAudioVolumeGroupClassPathName);
+ gAudioVolumeGroupClass = MakeGlobalRefOrDie(env, audioVolumeGroupClass);
+ gAudioVolumeGroupCstor = GetMethodIDOrDie(
+ env, audioVolumeGroupClass, "<init>",
+ "(Ljava/lang/String;I[Landroid/media/AudioAttributes;[I)V");
+
+ gAudioVolumeGroupFields.mName = GetFieldIDOrDie(
+ env, audioVolumeGroupClass, "mName", "Ljava/lang/String;");
+ gAudioVolumeGroupFields.mId = GetFieldIDOrDie(
+ env, audioVolumeGroupClass, "mId", "I");
+
+ env->DeleteLocalRef(audioVolumeGroupClass);
+
+ return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
+}
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index af2d413..bf56ef4 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -238,6 +238,11 @@
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<std::string> argv{"/system/bin/idmap2",
"scan",
"--recursive",
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index fb6dd93..7975c86 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -23,10 +23,9 @@
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
-#include <utils/Log.h>
+#include <log/log.h>
#include <utils/Looper.h>
#include <utils/Vector.h>
-#include <utils/threads.h>
#include <input/InputTransport.h>
#include "android_os_MessageQueue.h"
#include "android_view_InputChannel.h"
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index aa10a2f..2542286 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -21,10 +21,8 @@
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
-#include <utils/Log.h>
+#include <log/log.h>
#include <utils/Looper.h>
-#include <utils/threads.h>
-#include <utils/KeyedVector.h>
#include <input/InputTransport.h>
#include "android_os_MessageQueue.h"
#include "android_view_InputChannel.h"
@@ -32,6 +30,7 @@
#include "android_view_MotionEvent.h"
#include <nativehelper/ScopedLocalRef.h>
+#include <unordered_map>
#include "core_jni_helpers.h"
@@ -65,7 +64,8 @@
jobject mSenderWeakGlobal;
InputPublisher mInputPublisher;
sp<MessageQueue> mMessageQueue;
- KeyedVector<uint32_t, uint32_t> mPublishedSeqMap;
+ std::unordered_map<uint32_t, uint32_t> mPublishedSeqMap;
+
uint32_t mNextPublishedSeq;
const std::string getInputChannelName() {
@@ -122,7 +122,7 @@
getInputChannelName().c_str(), status);
return status;
}
- mPublishedSeqMap.add(publishedSeq, seq);
+ mPublishedSeqMap.emplace(publishedSeq, seq);
return OK;
}
@@ -150,7 +150,7 @@
return status;
}
}
- mPublishedSeqMap.add(publishedSeq, seq);
+ mPublishedSeqMap.emplace(publishedSeq, seq);
return OK;
}
@@ -199,35 +199,37 @@
return status;
}
- ssize_t index = mPublishedSeqMap.indexOfKey(publishedSeq);
- if (index >= 0) {
- uint32_t seq = mPublishedSeqMap.valueAt(index);
- mPublishedSeqMap.removeItemsAt(index);
+ auto it = mPublishedSeqMap.find(publishedSeq);
+ if (it == mPublishedSeqMap.end()) {
+ continue;
+ }
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, "
- "pendingEvents=%zu.",
- getInputChannelName().c_str(), seq, handled ? "true" : "false",
- mPublishedSeqMap.size());
+ uint32_t seq = it->second;
+ mPublishedSeqMap.erase(it);
+
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, "
+ "pendingEvents=%zu.",
+ getInputChannelName().c_str(), seq, handled ? "true" : "false",
+ mPublishedSeqMap.size());
+ }
+
+ if (!skipCallbacks) {
+ if (!senderObj.get()) {
+ senderObj.reset(jniGetReferent(env, mSenderWeakGlobal));
+ if (!senderObj.get()) {
+ ALOGW("channel '%s' ~ Sender object was finalized "
+ "without being disposed.", getInputChannelName().c_str());
+ return DEAD_OBJECT;
+ }
}
- if (!skipCallbacks) {
- if (!senderObj.get()) {
- senderObj.reset(jniGetReferent(env, mSenderWeakGlobal));
- if (!senderObj.get()) {
- ALOGW("channel '%s' ~ Sender object was finalized "
- "without being disposed.", getInputChannelName().c_str());
- return DEAD_OBJECT;
- }
- }
-
- env->CallVoidMethod(senderObj.get(),
- gInputEventSenderClassInfo.dispatchInputEventFinished,
- jint(seq), jboolean(handled));
- if (env->ExceptionCheck()) {
- ALOGE("Exception dispatching finished signal.");
- skipCallbacks = true;
- }
+ env->CallVoidMethod(senderObj.get(),
+ gInputEventSenderClassInfo.dispatchInputEventFinished,
+ jint(seq), jboolean(handled));
+ if (env->ExceptionCheck()) {
+ ALOGE("Exception dispatching finished signal.");
+ skipCallbacks = true;
}
}
}
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 464f249..a900294 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 @@
}
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<int>(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<android_dataspace>(dataspace);
+ return mapPublicFormatToHalDataspace(f);
}
PublicFormat android_view_Surface_mapHalFormatDataspaceToPublicFormat(
int format, android_dataspace dataSpace) {
- Dataspace ds = static_cast<Dataspace>(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<PublicFormat>(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<android_dataspace>(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 4c25fd4..af2bf2d 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -717,6 +717,29 @@
return result == NO_ERROR ? JNI_TRUE : JNI_FALSE;
}
+static jintArray nativeGetAllowedDisplayConfigs(JNIEnv* env, jclass clazz, jobject tokenObj) {
+ sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
+ if (token == nullptr) return JNI_FALSE;
+
+ std::vector<int32_t> 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<jint>(allowedConfigs[i]);
+ }
+ env->ReleaseIntArrayElements(allowedConfigsArray, allowedConfigsArrayValues, 0);
+ return allowedConfigsArray;
+}
+
static jint nativeGetActiveConfig(JNIEnv* env, jclass clazz, jobject tokenObj) {
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
if (token == NULL) return -1;
@@ -1215,6 +1238,8 @@
(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 2ccb01a..c6f62ca 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -138,32 +138,32 @@
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;
@@ -181,7 +181,7 @@
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
@@ -246,7 +246,7 @@
* 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.
*/
@@ -263,14 +263,14 @@
};
/**
- * 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<BlastulaTableEntry, BLASTULA_POOL_SIZE_MAX_LIMIT> gBlastulaTable;
+static std::array<UsapTableEntry, USAP_POOL_SIZE_MAX_LIMIT> gUsapTable;
/**
* The list of open zygote file descriptors.
@@ -295,7 +295,7 @@
};
// 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;
@@ -307,7 +307,7 @@
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
@@ -338,9 +338,9 @@
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;
}
}
@@ -351,12 +351,12 @@
"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);
}
@@ -1181,12 +1181,12 @@
}
}
-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.
@@ -1231,8 +1231,8 @@
// 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.
@@ -1525,47 +1525,47 @@
}
/**
- * 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;
}
}
@@ -1574,13 +1574,13 @@
}
/**
- * @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<int> MakeBlastulaPipeReadFDVector() {
+std::vector<int> MakeUsapPipeReadFDVector() {
std::vector<int> 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()) {
@@ -1624,16 +1624,16 @@
ExtractJIntArray(env, "zygote", nice_name, managed_fds_to_ignore)
.value_or(std::vector<int>());
- std::vector<int> blastula_pipes = MakeBlastulaPipeReadFDVector();
+ std::vector<int> 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);
@@ -1652,14 +1652,14 @@
JNIEnv* env, jclass, uid_t uid, gid_t gid, jintArray gids,
jint runtime_flags, jobjectArray rlimits, jlong permitted_capabilities,
jlong effective_capabilities) {
- std::vector<int> fds_to_close(MakeBlastulaPipeReadFDVector()),
+ std::vector<int> 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,
@@ -1696,49 +1696,52 @@
}
/**
- * 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<int> 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<int> fds_to_close(MakeUsapPipeReadFDVector()),
fds_to_ignore(fds_to_close);
std::vector<int> session_socket_fds =
- ExtractJIntArray(env, "blastula", nullptr, managed_session_socket_fds)
+ ExtractJIntArray(env, "USAP", nullptr, managed_session_socket_fds)
.value_or(std::vector<int>());
- // 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(
@@ -1803,7 +1806,8 @@
}
/**
- * 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
@@ -1818,7 +1822,7 @@
* @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,
@@ -1855,77 +1859,77 @@
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<int> blastula_fds = MakeBlastulaPipeReadFDVector();
+static jintArray com_android_internal_os_Zygote_nativeGetUsapPipeFDs(JNIEnv* env, jclass) {
+ std::vector<int> 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()) {
@@ -1934,7 +1938,7 @@
// Avoid a second atomic load by invalidating instead of clearing.
entry.Invalidate();
- --gBlastulaPoolCount;
+ --gUsapPoolCount;
}
}
}
@@ -1955,23 +1959,23 @@
(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 4b37f13..d8d4656 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -38,8 +38,8 @@
"/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 @@
// 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 3f7c00c..04718cd 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 <android/native_window.h>
#include <system/graphics.h>
+#include <ui/PublicFormat.h>
#include "jni.h"
@@ -27,41 +28,6 @@
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<ANativeWindow> 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 01f37f0..cdfeffc 100755
--- a/core/jni/runtime_native_boot-flags-test.sh
+++ b/core/jni/runtime_native_boot-flags-test.sh
@@ -139,47 +139,73 @@
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 @@
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 @@
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 @@
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/hardware/biometrics/enums.proto b/core/proto/android/hardware/biometrics/enums.proto
index 973e3e6..f2e0638 100644
--- a/core/proto/android/hardware/biometrics/enums.proto
+++ b/core/proto/android/hardware/biometrics/enums.proto
@@ -55,4 +55,6 @@
// When the HAL has a template that doesn't exist in Android Framework. The framework
// is expected to notify the HAL to remove this template to stay in sync with the framework.
ISSUE_UNKNOWN_TEMPLATE_ENROLLED_HAL = 3;
+ // When the HAL has not sent ERROR_CANCELED within the specified timeout.
+ ISSUE_CANCEL_TIMED_OUT = 4;
}
\ No newline at end of file
diff --git a/core/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto
index 6f9a564..79a5dd7 100644
--- a/core/proto/android/server/activitymanagerservice.proto
+++ b/core/proto/android/server/activitymanagerservice.proto
@@ -132,6 +132,7 @@
optional bool keyguard_showing = 1;
repeated KeyguardOccludedProto keyguard_occluded_states= 2;
+ optional bool aod_showing = 3;
}
message KeyguardOccludedProto {
diff --git a/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml b/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
index 6f3dc8c..5add19b 100644
--- a/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
+++ b/core/res/res/anim-ldrtl/cross_profile_apps_thumbnail_enter.xml
@@ -18,7 +18,9 @@
-->
<!-- This should be kept in sync with task_open_enter.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false" android:zAdjustment="top">
+ android:hasRoundedCorners="true"
+ android:shareInterpolator="false"
+ android:zAdjustment="top">
<alpha
android:fromAlpha="1"
diff --git a/core/res/res/anim-ldrtl/task_close_enter.xml b/core/res/res/anim-ldrtl/task_close_enter.xml
index 7abada3..e00141a 100644
--- a/core/res/res/anim-ldrtl/task_close_enter.xml
+++ b/core/res/res/anim-ldrtl/task_close_enter.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_close_exit.xml b/core/res/res/anim-ldrtl/task_close_exit.xml
index a017820..71a44ae 100644
--- a/core/res/res/anim-ldrtl/task_close_exit.xml
+++ b/core/res/res/anim-ldrtl/task_close_exit.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_enter.xml b/core/res/res/anim-ldrtl/task_open_enter.xml
index 0433664..7815f7d 100644
--- a/core/res/res/anim-ldrtl/task_open_enter.xml
+++ b/core/res/res/anim-ldrtl/task_open_enter.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml b/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
index 45ca80e..5fccd6df 100644
--- a/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
+++ b/core/res/res/anim-ldrtl/task_open_enter_cross_profile_apps.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim-ldrtl/task_open_exit.xml b/core/res/res/anim-ldrtl/task_open_exit.xml
index f50494d..025e1bd 100644
--- a/core/res/res/anim-ldrtl/task_open_exit.xml
+++ b/core/res/res/anim-ldrtl/task_open_exit.xml
@@ -16,6 +16,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml b/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
index 4c2559f..2cfeecf 100644
--- a/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
+++ b/core/res/res/anim/cross_profile_apps_thumbnail_enter.xml
@@ -18,7 +18,9 @@
-->
<!-- This should be kept in sync with task_open_enter.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false" android:zAdjustment="top">
+ android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
+ android:zAdjustment="top">
<alpha
android:fromAlpha="1"
diff --git a/core/res/res/anim/task_close_enter.xml b/core/res/res/anim/task_close_enter.xml
index b059aa9..487ff5c 100644
--- a/core/res/res/anim/task_close_enter.xml
+++ b/core/res/res/anim/task_close_enter.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_close_exit.xml b/core/res/res/anim/task_close_exit.xml
index c9ade22..afc3256c 100644
--- a/core/res/res/anim/task_close_exit.xml
+++ b/core/res/res/anim/task_close_exit.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_enter.xml b/core/res/res/anim/task_open_enter.xml
index 5c61859..0aafc1c 100644
--- a/core/res/res/anim/task_open_enter.xml
+++ b/core/res/res/anim/task_open_enter.xml
@@ -20,6 +20,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_enter_cross_profile_apps.xml b/core/res/res/anim/task_open_enter_cross_profile_apps.xml
index 6441047..702f7ba 100644
--- a/core/res/res/anim/task_open_enter_cross_profile_apps.xml
+++ b/core/res/res/anim/task_open_enter_cross_profile_apps.xml
@@ -20,6 +20,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/anim/task_open_exit.xml b/core/res/res/anim/task_open_exit.xml
index 9394c57..691317d 100644
--- a/core/res/res/anim/task_open_exit.xml
+++ b/core/res/res/anim/task_open_exit.xml
@@ -18,6 +18,7 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
+ android:hasRoundedCorners="true"
android:showWallpaper="true">
<alpha
diff --git a/core/res/res/color-car/car_borderless_button_text_color.xml b/core/res/res/color-car/car_borderless_button_text_color.xml
new file mode 100644
index 0000000..1cdd6cd
--- /dev/null
+++ b/core/res/res/color-car/car_borderless_button_text_color.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<!-- Default text colors for car buttons when enabled/disabled. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@*android:color/car_grey_700" android:state_enabled="false"/>
+ <item android:color="?android:attr/colorButtonNormal"/>
+</selector>
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 0000000..eda54d9
--- /dev/null
+++ b/core/res/res/color-car/car_button_text_color.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<!-- Default text colors for car buttons when enabled/disabled. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@*android:color/car_grey_700" android:state_enabled="false"/>
+ <item android:color="@*android:color/car_action1"/>
+</selector>
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 0000000..ebf3841
--- /dev/null
+++ b/core/res/res/color-car/car_switch.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:color="?attr/colorControlActivated"
+ android:state_checked="true"/>
+ <item
+ android:color="?attr/colorSwitchThumbNormal"/>
+</selector>
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 0000000..3e2610c
--- /dev/null
+++ b/core/res/res/drawable-car/car_button_background.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<!-- Default background styles for car buttons when enabled/disabled. -->
+<ripple
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight">
+ <item>
+ <selector>
+ <item android:state_enabled="false">
+ <shape android:shape="rectangle">
+ <corners android:radius="@*android:dimen/car_button_radius"/>
+ <solid android:color="@*android:color/car_grey_300"/>
+ </shape>
+ </item>
+ <item>
+ <shape android:shape="rectangle">
+ <corners android:radius="@*android:dimen/car_button_radius"/>
+ <solid android:color="?android:attr/colorButtonNormal"/>
+ </shape>
+ </item>
+ </selector>
+ </item>
+</ripple>
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 0000000..651e678
--- /dev/null
+++ b/core/res/res/drawable-car/car_checkbox.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:width="@*android:dimen/car_primary_icon_size"
+ android:height="@*android:dimen/car_primary_icon_size"
+ android:drawable="@drawable/btn_check_material_anim"/>
+</layer-list>
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 0000000..dc742d5
--- /dev/null
+++ b/core/res/res/drawable-car/car_dialog_button_background.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@*android:color/car_card_ripple_background">
+ <item android:id="@android:id/mask">
+ <color android:color="@*android:color/car_white_1000" />
+ </item>
+</ripple>
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 0000000..fe9c773
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_thumb.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@*android:color/car_accent" />
+ <size
+ android:width="@*android:dimen/car_seekbar_thumb_size"
+ android:height="@*android:dimen/car_seekbar_thumb_size" />
+</shape>
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 0000000..8ac9975
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_thumb_dark.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@*android:color/car_accent_dark" />
+ <size
+ android:width="@*android:dimen/car_seekbar_thumb_size"
+ android:height="@*android:dimen/car_seekbar_thumb_size" />
+</shape>
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 0000000..b212b76
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_thumb_light.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@*android:color/car_accent_light" />
+ <size
+ android:width="@*android:dimen/car_seekbar_thumb_size"
+ android:height="@*android:dimen/car_seekbar_thumb_size" />
+</shape>
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 0000000..5ea7b22
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_track.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background">
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_background" />
+ </shape>
+ </item>
+ <item android:id="@android:id/secondaryProgress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_secondary_progress" />
+ </shape>
+ </clip>
+ </item>
+ <item android:id="@android:id/progress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_accent" />
+ </shape>
+ </clip>
+ </item>
+</layer-list>
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 0000000..19f6340
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_track_dark.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Drawable of seekbar track. Uses dark color for track. -->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background">
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_background_dark" />
+ </shape>
+ </item>
+ <item android:id="@android:id/secondaryProgress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_secondary_progress" />
+ </shape>
+ </clip>
+ </item>
+ <item android:id="@android:id/progress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_accent_light" />
+ </shape>
+ </clip>
+ </item>
+</layer-list>
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 0000000..d23ca33
--- /dev/null
+++ b/core/res/res/drawable-car/car_seekbar_track_light.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Drawable of seekbar track. Uses light color for track. -->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@android:id/background">
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_background_light" />
+ </shape>
+ </item>
+ <item android:id="@android:id/secondaryProgress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_seekbar_track_secondary_progress" />
+ </shape>
+ </clip>
+ </item>
+ <item android:id="@android:id/progress">
+ <clip>
+ <shape android:shape="line">
+ <stroke
+ android:width="@*android:dimen/car_seekbar_height"
+ android:color="@*android:color/car_accent_dark" />
+ </shape>
+ </clip>
+ </item>
+</layer-list>
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 0000000..03efc18
--- /dev/null
+++ b/core/res/res/drawable-car/car_switch_thumb.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@color/car_switch"/>
+ <size
+ android:width="@dimen/car_seekbar_thumb_size"
+ android:height="@dimen/car_seekbar_thumb_size"/>
+</shape>
diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml
index 6839e39..08e9fad 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 @@
<!--
Copyright (C) 2019 The Android Open Source Project
- Licensed under the Apache License, Version 2 (the "License");
+ 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
+ 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,
@@ -16,19 +16,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
- android:viewportWidth="24"
- android:viewportHeight="24">
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:pathData="M12,12m-7,0a7,7,0,1,1,14,0a7,7,0,1,1,-14,0"
- android:strokeColor="#FF0000"
- android:strokeWidth="4"/>
+ android:fillColor="#FF000000"
+ android:pathData="M16.28,16.19A6,6 0,1 0,6 12c0,0.1 0,0.19 0,0.29L9.2,9.11Z"/>
<path
- android:pathData="M19,19 L12,12"
- android:strokeLineCap="round"
- android:strokeColor="#FF0000"
- android:strokeWidth="4"
- android:strokeAlpha=".5"/>
+ android:fillColor="#FF000000"
+ android:pathData="M16,19.48a8.57,8.57 0,1 1,2 -1.52l1.77,1.77a11.07,11.07 0,1 0,-2 1.57Z"/>
<path
- android:pathData="M12,12m-2,0a2,2,0,1,1,4,0a2,2,0,1,1,-4,0"
- android:fillColor="#FF0000"/>
+ android:fillColor="#FF000000"
+ android:pathData="M12,18a5.77,5.77 0,0 0,2 -0.34l0.19,-0.07 -0.87,-0.87L9.2,12.64 6.82,15A6,6 0,0 0,12 18Z"/>
</vector>
diff --git a/core/res/res/layout-car/car_preference.xml b/core/res/res/layout-car/car_preference.xml
new file mode 100644
index 0000000..939c3fb
--- /dev/null
+++ b/core/res/res/layout-car/car_preference.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:focusable="true"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart">
+
+ <com.android.internal.widget.PreferenceImageView
+ android:id="@id/icon"
+ android:layout_width="@*android:dimen/car_primary_icon_size"
+ android:layout_height="@*android:dimen/car_primary_icon_size"
+ android:layout_alignParentStart="true"
+ android:layout_centerVertical="true"
+ android:layout_marginBottom="@*android:dimen/car_padding_2"
+ android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:layout_marginTop="@android:dimen/car_padding_2"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_marginBottom="@*android:dimen/car_padding_2"
+ android:layout_marginTop="@*android:dimen/car_padding_2"
+ android:layout_toEndOf="@id/icon"
+ android:layout_toStartOf="@id/widget_frame"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceListItem"/>
+
+ <TextView
+ android:id="@id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"/>
+
+ </LinearLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <FrameLayout
+ android:id="@id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"/>
+
+</RelativeLayout>
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 0000000..d1f7342
--- /dev/null
+++ b/core/res/res/layout-car/car_preference_category.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:focusable="true"
+ android:gravity="center_vertical"
+ android:minHeight="@*android:dimen/car_card_header_height"
+ android:orientation="horizontal"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart">
+
+ <com.android.internal.widget.PreferenceImageView
+ android:id="@id/icon"
+ android:layout_width="@*android:dimen/car_primary_icon_size"
+ android:layout_height="@*android:dimen/car_primary_icon_size"
+ android:layout_gravity="center_vertical"
+ android:layout_marginBottom="@dimen/car_padding_2"
+ android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:layout_marginTop="@*android:dimen/car_padding_2"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@*android:dimen/car_padding_2"
+ android:layout_marginTop="@*android:dimen/car_padding_2"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:fontFamily="sans-serif-medium"
+ android:textAlignment="viewStart"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/colorAccent"/>
+
+ <TextView
+ android:id="@id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:textColor="?android:attr/textColorSecondary"/>
+
+ </LinearLayout>
+
+</LinearLayout>
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 0000000..222ecc6
--- /dev/null
+++ b/core/res/res/layout-car/car_resolver_different_item_header.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * 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.
+ */
+-->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alwaysShow="true"
+ android:text="@*android:string/use_a_different_app"
+ android:minHeight="56dp"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:gravity="start|center_vertical"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:elevation="8dp"
+/>
\ 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 0000000..15a8645
--- /dev/null
+++ b/core/res/res/layout-car/car_resolver_list.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* 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.
+*/
+-->
+<com.android.internal.widget.ResolverDrawerLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@id/contentPanel">
+
+ <LinearLayout
+ android:id="@+id/button_bar"
+ android:visibility="gone"
+ style="?attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_ignoreOffset="true"
+ android:layout_alwaysShow="true"
+ android:layout_hasNestedScrollIndicator="true"
+ android:background="?attr/colorBackgroundFloating"
+ android:orientation="horizontal"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingStart="12dp"
+ android:weightSum="5"
+ android:paddingEnd="12dp"
+ android:elevation="8dp">
+
+ <TextView
+ android:id="@+id/profile_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp"
+ android:textSize="40sp"
+ android:layout_weight="5"
+ android:layout_gravity = "left"
+ android:visibility="gone"
+ android:textColor="?attr/colorAccent"
+ android:singleLine="true"/>
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="56dp"
+ android:layout_gravity = "left"
+ android:layout_weight="3"
+ android:paddingTop="8dp"
+ android:layout_below="@id/profile_button"
+ android:paddingBottom="8dp"/>
+
+ <Button
+ android:id="@+id/button_once"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:layout_gravity = "right"
+ android:text="@string/activity_resolver_use_once"
+ android:layout_weight="1"
+ android:onClick="onButtonClick"/>
+
+ <Button
+ android:id="@+id/button_always"
+ android:layout_marginLeft="10dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:layout_gravity = "right"
+ android:text="@string/activity_resolver_use_always"
+ android:layout_weight="1"
+ android:onClick="onButtonClick"/>
+ </LinearLayout>
+
+ <ListView
+ android:layout_width="match_parent"
+ android:layout_height="500dp"
+ android:id="@+id/resolver_list"
+ android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay"
+ android:background="?attr/colorBackgroundFloating"
+ android:elevation="8dp"
+ android:nestedScrollingEnabled="true"
+ android:scrollIndicators="top|bottom"/>
+
+ <TextView android:id="@+id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?attr/colorBackgroundFloating"
+ android:elevation="8dp"
+ android:layout_alwaysShow="true"
+ android:text="@string/noApplications"
+ android:padding="32dp"
+ android:gravity="center"
+ android:visibility="gone"/>
+
+</com.android.internal.widget.ResolverDrawerLayout>
diff --git a/core/res/res/layout-car/car_resolver_list_with_default.xml b/core/res/res/layout-car/car_resolver_list_with_default.xml
new file mode 100644
index 0000000..2aed00b
--- /dev/null
+++ b/core/res/res/layout-car/car_resolver_list_with_default.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* 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.
+*/
+-->
+<com.android.internal.widget.ResolverDrawerLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxCollapsedHeight="200dp"
+ android:id="@id/contentPanel">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:weightSum="5"
+ android:layout_alwaysShow="true"
+ android:orientation="vertical"
+ android:background="?attr/colorBackgroundFloating"
+ android:elevation="8dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.5"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="start|top"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginTop="20dp"
+ android:src="@drawable/resolver_icon_placeholder"
+ android:scaleType="fitCenter"/>
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="?attr/listPreferredItemHeight"
+ android:layout_marginStart="16dp"
+ android:textAppearance="?attr/textAppearanceMedium"
+ android:gravity="start|center_vertical"
+ android:paddingEnd="16dp"/>
+
+ <LinearLayout
+ android:id="@+id/profile_button"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ android:layout_marginEnd="4dp"
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
+ android:focusable="true"
+ android:visibility="gone"
+ style="?attr/borderlessButtonStyle">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="start|center_vertical"
+ android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp"
+ android:scaleType="fitCenter"/>
+
+ <TextView
+ android:id="@id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="start|center_vertical"
+ android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+ android:textAppearance="?attr/textAppearanceButton"
+ android:textColor="?attr/textColorPrimary"
+ android:minLines="1"
+ android:maxLines="1"
+ android:ellipsize="marquee"/>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/button_bar"
+ android:visibility="gone"
+ style="?attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alwaysShow="true"
+ android:gravity="end|center_vertical"
+ android:layout_weight="0.5"
+ android:orientation="horizontal"
+ android:layoutDirection="locale"
+ android:measureWithLargestChild="true"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingStart="12dp"
+ android:paddingEnd="12dp"
+ android:elevation="8dp">
+
+ <Button
+ android:id="@+id/button_once"
+ android:layout_width="wrap_content"
+ android:layout_gravity="start"
+ android:maxLines="2"
+ style="?attr/buttonBarNegativeButtonStyle"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_once"
+ android:onClick="onButtonClick"/>
+
+ <Button
+ android:id="@+id/button_always"
+ android:layout_width="wrap_content"
+ android:layout_gravity="end"
+ android:maxLines="2"
+ android:minHeight="@dimen/alert_dialog_button_bar_height"
+ style="?attr/buttonBarPositiveButtonStyle"
+ android:layout_height="wrap_content"
+ android:enabled="false"
+ android:text="@string/activity_resolver_use_always"
+ android:onClick="onButtonClick"/>
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?attr/dividerVertical"/>
+
+ <ListView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/resolver_list"
+ android:layout_weight="4"
+ android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay"
+ android:background="?attr/colorBackgroundFloating"
+ android:elevation="8dp"
+ android:nestedScrollingEnabled="true"
+ android:divider="@null"/>
+ </LinearLayout>
+
+</com.android.internal.widget.ResolverDrawerLayout>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 088669d..743496f 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -6488,6 +6488,9 @@
<!-- Special option for window animations: show the wallpaper behind when running this
animation. -->
<attr name="showWallpaper" format="boolean" />
+ <!-- Special option for window animations: whether window should have rounded corners.
+ @see ScreenDecorationsUtils#getWindowCornerRadius(Resources) -->
+ <attr name="hasRoundedCorners" format="boolean" />
</declare-styleable>
<declare-styleable name="AnimationSet">
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 1053184..6b8e000 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1667,6 +1667,9 @@
This flag is turned on by default. <em>This attribute is usable only by system apps.
</em> -->
<attr name="allowClearUserDataOnFailedRestore"/>
+ <!-- If {@code true} the app's non sensitive audio can be capture by other apps.
+ The default value is true. -->
+ <attr name="allowAudioPlaybackCapture" format="boolean" />
</declare-styleable>
<!-- The <code>permission</code> tag declares a security permission that can be
used to control access from other packages to specific components or
diff --git a/core/res/res/values/colors_device_defaults.xml b/core/res/res/values/colors_device_defaults.xml
index 824b4b5..7209103 100644
--- a/core/res/res/values/colors_device_defaults.xml
+++ b/core/res/res/values/colors_device_defaults.xml
@@ -26,6 +26,8 @@
<color name="primary_dark_device_default_settings">@color/primary_dark_material_settings</color>
<color name="primary_dark_device_default_settings_light">@color/primary_dark_material_settings_light</color>
+ <color name="navigation_bar_divider_device_default_settings">#1f000000</color>
+
<color name="secondary_device_default_settings">@color/secondary_material_settings</color>
<color name="secondary_device_default_settings_light">@color/secondary_material_settings_light</color>
<color name="tertiary_device_default_settings">@color/tertiary_material_settings</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 910af4c..4e174c4 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -127,7 +127,7 @@
<bool name="config_sendAudioBecomingNoisy">true</bool>
<!-- Whether Hearing Aid profile is supported -->
- <bool name="config_hearing_aid_profile_supported">true</bool>
+ <bool name="config_hearing_aid_profile_supported">false</bool>
<!-- Flag to disable all transition animations -->
<bool name="config_disableTransitionAnimation">false</bool>
@@ -2267,7 +2267,7 @@
<!-- If the sensor that wakes up the lock screen is available or not. -->
<bool name="config_dozeWakeLockScreenSensorAvailable">false</bool>
- <integer name="config_dozeWakeLockScreenDebounce">3000</integer>
+ <integer name="config_dozeWakeLockScreenDebounce">1500</integer>
<!-- Control whether the always on display mode is available. This should only be enabled on
devices where the display has been tuned to be power efficient in DOZE and/or DOZE_SUSPEND
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 5a3c536..61d53002 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2941,6 +2941,7 @@
<public name="forceUriPermissions" />
<!-- @hide @SystemApi -->
<public name="allowClearUserDataOnFailedRestore"/>
+ <public name="allowAudioPlaybackCapture"/>
</public-group>
<public-group type="drawable" first-id="0x010800b4">
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 194c86c..9a95ecc 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -1468,7 +1468,7 @@
<item name="colorEdgeEffect">@android:color/black</item>
<!-- Add white nav bar with divider that matches material -->
- <item name="navigationBarDividerColor">#1f000000</item>
+ <item name="navigationBarDividerColor">@color/navigation_bar_divider_device_default_settings</item>
<item name="navigationBarColor">@android:color/white</item>
<item name="windowLightNavigationBar">true</item>
diff --git a/core/tests/coretests/src/android/provider/DeviceConfigTest.java b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
index 5d5754b..de1453a 100644
--- a/core/tests/coretests/src/android/provider/DeviceConfigTest.java
+++ b/core/tests/coretests/src/android/provider/DeviceConfigTest.java
@@ -59,6 +59,131 @@
}
@Test
+ public void getString_empty() {
+ final String default_value = "default_value";
+ final String result = DeviceConfig.getString(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getString_nonEmpty() {
+ final String value = "new_value";
+ final String default_value = "default";
+ DeviceConfig.setProperty(sNamespace, sKey, value, false);
+
+ final String result = DeviceConfig.getString(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(value);
+ }
+
+ @Test
+ public void getBoolean_empty() {
+ final boolean default_value = true;
+ final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getBoolean_valid() {
+ final boolean value = true;
+ final boolean default_value = false;
+ DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false);
+
+ final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(value);
+ }
+
+ @Test
+ public void getBoolean_invalid() {
+ final boolean default_value = true;
+ DeviceConfig.setProperty(sNamespace, sKey, "not_a_boolean", false);
+
+ final boolean result = DeviceConfig.getBoolean(sNamespace, sKey, default_value);
+ // Anything non-null other than case insensitive "true" parses to false.
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void getInt_empty() {
+ final int default_value = 999;
+ final int result = DeviceConfig.getInt(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getInt_valid() {
+ final int value = 123;
+ final int default_value = 999;
+ DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false);
+
+ final int result = DeviceConfig.getInt(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(value);
+ }
+
+ @Test
+ public void getInt_invalid() {
+ final int default_value = 999;
+ DeviceConfig.setProperty(sNamespace, sKey, "not_an_int", false);
+
+ final int result = DeviceConfig.getInt(sNamespace, sKey, default_value);
+ // Failure to parse results in using the default value
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getLong_empty() {
+ final long default_value = 123456;
+ final long result = DeviceConfig.getLong(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getLong_valid() {
+ final long value = 456789;
+ final long default_value = 123456;
+ DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false);
+
+ final long result = DeviceConfig.getLong(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(value);
+ }
+
+ @Test
+ public void getLong_invalid() {
+ final long default_value = 123456;
+ DeviceConfig.setProperty(sNamespace, sKey, "not_a_long", false);
+
+ final long result = DeviceConfig.getLong(sNamespace, sKey, default_value);
+ // Failure to parse results in using the default value
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getFloat_empty() {
+ final float default_value = 123.456f;
+ final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
+ public void getFloat_valid() {
+ final float value = 456.789f;
+ final float default_value = 123.456f;
+ DeviceConfig.setProperty(sNamespace, sKey, String.valueOf(value), false);
+
+ final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value);
+ assertThat(result).isEqualTo(value);
+ }
+
+ @Test
+ public void getFloat_invalid() {
+ final float default_value = 123.456f;
+ DeviceConfig.setProperty(sNamespace, sKey, "not_a_float", false);
+
+ final float result = DeviceConfig.getFloat(sNamespace, sKey, default_value);
+ // Failure to parse results in using the default value
+ assertThat(result).isEqualTo(default_value);
+ }
+
+ @Test
public void setAndGetProperty_sameNamespace() {
DeviceConfig.setProperty(sNamespace, sKey, sValue, false);
String result = DeviceConfig.getProperty(sNamespace, sKey);
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 23cd963..69632c1 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -287,6 +287,7 @@
Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
Settings.Global.HIDDEN_API_ACCESS_LOG_SAMPLING_RATE,
+ Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE,
Settings.Global.HIDDEN_API_POLICY,
Settings.Global.HIDE_ERROR_DIALOGS,
Settings.Global.HTTP_PROXY,
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
index e3852e1..a88968b 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java
@@ -301,6 +301,26 @@
}
@Test
+ public void subTreeChangeEventFromUncachedNode_clearsNodeInCache() {
+ AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(CHILD_VIEW_ID, WINDOW_ID_1);
+ long id = nodeInfo.getSourceNodeId();
+ mAccessibilityCache.add(nodeInfo);
+ nodeInfo.recycle();
+
+ AccessibilityEvent event = AccessibilityEvent
+ .obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
+ event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE);
+ event.setSource(getMockViewWithA11yAndWindowIds(PARENT_VIEW_ID, WINDOW_ID_1));
+
+ mAccessibilityCache.onAccessibilityEvent(event);
+ AccessibilityNodeInfo shouldBeNull = mAccessibilityCache.getNode(WINDOW_ID_1, id);
+ if (shouldBeNull != null) {
+ shouldBeNull.recycle();
+ }
+ assertNull(shouldBeNull);
+ }
+
+ @Test
public void scrollEvent_clearsNodeAndChild() {
AccessibilityEvent event = AccessibilityEvent
.obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED);
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderTest.java
index 442ece5..5dddd1a 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuThreadReaderTest.java
@@ -218,6 +218,51 @@
}
+ @Test
+ public void testReader_otherThreads() throws IOException {
+ final Path processPath = mProcDirectory.toPath().resolve("self");
+ setupDirectory(
+ processPath,
+ new int[]{1, 2, 3},
+ "process",
+ new String[]{"thread1", "thread2", "thread3"},
+ new int[]{1000, 2000},
+ new int[][]{{0, 100}, {10, 0}, {0, 300}});
+ final KernelCpuThreadReader kernelCpuThreadReader = new KernelCpuThreadReader(
+ 8,
+ i -> true,
+ 2000,
+ mProcDirectory.toPath(),
+ processPath.resolve("task/1/time_in_state"),
+ new KernelCpuThreadReader.Injector() {
+ @Override
+ public int myPid() {
+ return 1000;
+ }
+
+ @Override
+ public int myUid() {
+ return 0;
+ }
+
+ @Override
+ public int getUidForPid(int pid) {
+ return 0;
+ }
+ });
+ checkResults(
+ kernelCpuThreadReader.getCurrentProcessCpuUsage(),
+ kernelCpuThreadReader.getCpuFrequenciesKhz(),
+ 0,
+ 1000,
+ new int[]{-1, 3},
+ "process",
+ new String[]{"__OTHER_THREADS", "thread3"},
+ new int[]{1000, 2000},
+ new int[][]{{100, 1000}, {0, 3000}}
+ );
+ }
+
private void setupDirectory(Path processPath, int[] threadIds, String processName,
String[] threadNames, int[] cpuFrequencies, int[][] cpuTimes) throws IOException {
// Make /proc/$PID
@@ -259,6 +304,7 @@
assertEquals(processId, processCpuUsage.processId);
assertEquals(uid, processCpuUsage.uid);
assertEquals(processName, processCpuUsage.processName);
+ assertEquals(threadIds.length, processCpuUsage.threadCpuUsages.size());
// Sort the thread CPU usages to compare with test case
final ArrayList<KernelCpuThreadReader.ThreadCpuUsage> threadCpuUsages =
diff --git a/graphics/TEST_MAPPING b/graphics/TEST_MAPPING
new file mode 100644
index 0000000..10bd0ee
--- /dev/null
+++ b/graphics/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "presubmit": [
+ {
+ "name": "CtsGraphicsTestCases"
+ }
+ ]
+}
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 920fb4c..18eafa6 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -1845,6 +1845,7 @@
* @throws IllegalStateException if the bitmap's config is {@link Config#HARDWARE}
*
*/
+ @NonNull
public Color getColor(int x, int y) {
checkRecycled("Can't call getColor() on a recycled bitmap");
checkHardware("unable to getColor(), "
@@ -2024,7 +2025,7 @@
x, y, width, height);
}
- public static final Parcelable.Creator<Bitmap> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Bitmap> CREATOR
= new Parcelable.Creator<Bitmap>() {
/**
* Rebuilds a bitmap previously stored with writeToParcel().
diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java
index 7408683..3b1fc70 100644
--- a/graphics/java/android/graphics/GraphicBuffer.java
+++ b/graphics/java/android/graphics/GraphicBuffer.java
@@ -279,7 +279,7 @@
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<GraphicBuffer> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GraphicBuffer> CREATOR =
new Parcelable.Creator<GraphicBuffer>() {
public GraphicBuffer createFromParcel(Parcel in) {
int width = in.readInt();
diff --git a/graphics/java/android/graphics/Insets.java b/graphics/java/android/graphics/Insets.java
index c64c789..c6dc239 100644
--- a/graphics/java/android/graphics/Insets.java
+++ b/graphics/java/android/graphics/Insets.java
@@ -184,7 +184,7 @@
out.writeInt(bottom);
}
- public static final Parcelable.Creator<Insets> CREATOR = new Parcelable.Creator<Insets>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Insets> CREATOR = new Parcelable.Creator<Insets>() {
@Override
public Insets createFromParcel(Parcel in) {
return new Insets(in.readInt(), in.readInt(), in.readInt(), in.readInt());
diff --git a/graphics/java/android/graphics/Point.java b/graphics/java/android/graphics/Point.java
index ea93501..3614f3b 100644
--- a/graphics/java/android/graphics/Point.java
+++ b/graphics/java/android/graphics/Point.java
@@ -139,7 +139,7 @@
protoOutputStream.end(token);
}
- public static final Parcelable.Creator<Point> CREATOR = new Parcelable.Creator<Point>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Point> CREATOR = new Parcelable.Creator<Point>() {
/**
* Return a new point from the data in the specified parcel.
*/
diff --git a/graphics/java/android/graphics/PointF.java b/graphics/java/android/graphics/PointF.java
index a3b4194..f1f48ad 100644
--- a/graphics/java/android/graphics/PointF.java
+++ b/graphics/java/android/graphics/PointF.java
@@ -130,7 +130,7 @@
out.writeFloat(y);
}
- public static final Parcelable.Creator<PointF> CREATOR = new Parcelable.Creator<PointF>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<PointF> CREATOR = new Parcelable.Creator<PointF>() {
/**
* Return a new point from the data in the specified parcel.
*/
diff --git a/graphics/java/android/graphics/Rect.java b/graphics/java/android/graphics/Rect.java
index 40a32f3..d47f682 100644
--- a/graphics/java/android/graphics/Rect.java
+++ b/graphics/java/android/graphics/Rect.java
@@ -722,7 +722,7 @@
out.writeInt(bottom);
}
- public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
/**
* Return a new rectangle from the data in the specified parcel.
*/
diff --git a/graphics/java/android/graphics/RectF.java b/graphics/java/android/graphics/RectF.java
index d6447ac..3361fa2 100644
--- a/graphics/java/android/graphics/RectF.java
+++ b/graphics/java/android/graphics/RectF.java
@@ -561,7 +561,7 @@
out.writeFloat(bottom);
}
- public static final Parcelable.Creator<RectF> CREATOR = new Parcelable.Creator<RectF>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<RectF> CREATOR = new Parcelable.Creator<RectF>() {
/**
* Return a new rectangle from the data in the specified parcel.
*/
diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java
index 29d9367..ec7f7a0 100644
--- a/graphics/java/android/graphics/Region.java
+++ b/graphics/java/android/graphics/Region.java
@@ -345,7 +345,7 @@
//////////////////////////////////////////////////////////////////////////
- public static final Parcelable.Creator<Region> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Region> CREATOR
= new Parcelable.Creator<Region>() {
/**
* Rebuild a Region previously stored with writeToParcel().
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index e98879d..42b6acd 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -27,6 +27,8 @@
import android.view.Surface;
import android.view.View;
+import com.android.internal.util.ArrayUtils;
+
import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
@@ -179,6 +181,10 @@
private final AnimationHost mAnimationHost;
private RecordingCanvas mCurrentRecordingCanvas;
+ // Will be null if not currently registered
+ @Nullable
+ private CompositePositionUpdateListener mCompositePositionUpdateListener;
+
/**
* Creates a new RenderNode that can be used to record batches of
* drawing operations, and store / apply render properties when drawn.
@@ -248,15 +254,70 @@
}
+ private static final class CompositePositionUpdateListener implements PositionUpdateListener {
+ private final PositionUpdateListener[] mListeners;
+
+ CompositePositionUpdateListener(PositionUpdateListener... listeners) {
+ mListeners = listeners;
+ }
+
+ public CompositePositionUpdateListener with(PositionUpdateListener listener) {
+ return new CompositePositionUpdateListener(
+ ArrayUtils.appendElement(PositionUpdateListener.class, mListeners, listener));
+ }
+
+ public CompositePositionUpdateListener without(PositionUpdateListener listener) {
+ return new CompositePositionUpdateListener(
+ ArrayUtils.removeElement(PositionUpdateListener.class, mListeners, listener));
+ }
+
+ @Override
+ public void positionChanged(long frameNumber, int left, int top, int right, int bottom) {
+ for (PositionUpdateListener pul : mListeners) {
+ pul.positionChanged(frameNumber, left, top, right, bottom);
+ }
+ }
+
+ @Override
+ public void positionLost(long frameNumber) {
+ for (PositionUpdateListener pul : mListeners) {
+ pul.positionLost(frameNumber);
+ }
+ }
+ }
+
/**
- * Enable callbacks for position changes.
+ * Enable callbacks for position changes. Call only from the UI thread or with
+ * external synchronization.
*
* @hide
*/
- public void requestPositionUpdates(PositionUpdateListener listener) {
- nRequestPositionUpdates(mNativeRenderNode, listener);
+ public void addPositionUpdateListener(@NonNull PositionUpdateListener listener) {
+ CompositePositionUpdateListener comp = mCompositePositionUpdateListener;
+ if (comp == null) {
+ comp = new CompositePositionUpdateListener(listener);
+ } else {
+ comp = comp.with(listener);
+ }
+ mCompositePositionUpdateListener = comp;
+ nRequestPositionUpdates(mNativeRenderNode, comp);
}
+ /**
+ * Disable a callback for position changes. Call only from the UI thread or with
+ * external synchronization.
+ *
+ * @param listener Callback to remove
+ * @hide
+ */
+ public void removePositionUpdateListener(@NonNull PositionUpdateListener listener) {
+ CompositePositionUpdateListener comp = mCompositePositionUpdateListener;
+ if (comp != null) {
+ comp = comp.without(listener);
+ mCompositePositionUpdateListener = comp;
+ nRequestPositionUpdates(mNativeRenderNode, comp);
+ }
+ }
/**
* Starts recording a display list for the render node. All
diff --git a/graphics/java/android/graphics/drawable/ColorStateListDrawable.java b/graphics/java/android/graphics/drawable/ColorStateListDrawable.java
index 5181d89..ee4d1e7 100644
--- a/graphics/java/android/graphics/drawable/ColorStateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/ColorStateListDrawable.java
@@ -17,6 +17,7 @@
import android.annotation.IntRange;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.content.res.Resources;
@@ -40,14 +41,14 @@
initializeColorDrawable();
}
- public ColorStateListDrawable(ColorStateList colorStateList) {
+ public ColorStateListDrawable(@NonNull ColorStateList colorStateList) {
mState = new ColorStateListDrawableState();
initializeColorDrawable();
setColorStateList(colorStateList);
}
@Override
- public void draw(Canvas canvas) {
+ public void draw(@NonNull Canvas canvas) {
mColorDrawable.draw(canvas);
}
@@ -73,7 +74,7 @@
}
@Override
- public void applyTheme(Resources.Theme t) {
+ public void applyTheme(@NonNull Resources.Theme t) {
super.applyTheme(t);
if (mState.mColor != null) {
@@ -106,26 +107,26 @@
}
@Override
- public void setTintList(ColorStateList tint) {
+ public void setTintList(@Nullable ColorStateList tint) {
mState.mTint = tint;
mColorDrawable.setTintList(tint);
onStateChange(getState());
}
@Override
- public void setTintMode(PorterDuff.Mode tintMode) {
+ public void setTintMode(@NonNull PorterDuff.Mode tintMode) {
mState.mTintMode = tintMode;
mColorDrawable.setTintMode(tintMode);
onStateChange(getState());
}
@Override
- public ColorFilter getColorFilter() {
+ public @Nullable ColorFilter getColorFilter() {
return mColorDrawable.getColorFilter();
}
@Override
- public void setColorFilter(ColorFilter colorFilter) {
+ public void setColorFilter(@Nullable ColorFilter colorFilter) {
mColorDrawable.setColorFilter(colorFilter);
}
@@ -156,28 +157,28 @@
}
@Override
- public void invalidateDrawable(Drawable who) {
+ public void invalidateDrawable(@NonNull Drawable who) {
if (who == mColorDrawable && getCallback() != null) {
getCallback().invalidateDrawable(this);
}
}
@Override
- public void scheduleDrawable(Drawable who, Runnable what, long when) {
+ public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
if (who == mColorDrawable && getCallback() != null) {
getCallback().scheduleDrawable(this, what, when);
}
}
@Override
- public void unscheduleDrawable(Drawable who, Runnable what) {
+ public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
if (who == mColorDrawable && getCallback() != null) {
getCallback().unscheduleDrawable(this, what);
}
}
@Override
- public ConstantState getConstantState() {
+ public @NonNull ConstantState getConstantState() {
mState.mChangingConfigurations = mState.mChangingConfigurations
| (getChangingConfigurations() & ~mState.getChangingConfigurations());
return mState;
@@ -203,7 +204,7 @@
}
@Override
- public Drawable mutate() {
+ public @NonNull Drawable mutate() {
if (!mMutated && super.mutate() == this) {
mState = new ColorStateListDrawableState(mState);
mMutated = true;
@@ -226,7 +227,7 @@
*
* @param colorStateList A color state list to attach.
*/
- public void setColorStateList(ColorStateList colorStateList) {
+ public void setColorStateList(@NonNull ColorStateList colorStateList) {
mState.mColor = colorStateList;
onStateChange(getState());
}
@@ -278,7 +279,7 @@
}
}
- private ColorStateListDrawable(ColorStateListDrawableState state) {
+ private ColorStateListDrawable(@NonNull ColorStateListDrawableState state) {
mState = state;
initializeColorDrawable();
}
diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java
index f41cc7e..71dd7a2 100644
--- a/graphics/java/android/graphics/drawable/Icon.java
+++ b/graphics/java/android/graphics/drawable/Icon.java
@@ -840,7 +840,7 @@
dest.writeInt(PorterDuff.modeToInt(mTintMode));
}
- public static final Parcelable.Creator<Icon> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<Icon> CREATOR
= new Parcelable.Creator<Icon>() {
public Icon createFromParcel(Parcel in) {
return new Icon(in);
diff --git a/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java
index 2ae28f5..08f4176 100644
--- a/keystore/java/android/security/Credentials.java
+++ b/keystore/java/android/security/Credentials.java
@@ -20,6 +20,7 @@
import com.android.org.bouncycastle.util.io.pem.PemReader;
import com.android.org.bouncycastle.util.io.pem.PemWriter;
+import android.annotation.UnsupportedAppUsage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -122,6 +123,7 @@
* Convert objects to a PEM format which is used for
* CA_CERTIFICATE and USER_CERTIFICATE entries.
*/
+ @UnsupportedAppUsage
public static byte[] convertToPem(Certificate... objects)
throws IOException, CertificateEncodingException {
ByteArrayOutputStream bao = new ByteArrayOutputStream();
diff --git a/keystore/java/android/security/IKeyChainService.aidl b/keystore/java/android/security/IKeyChainService.aidl
index 0d32075..b3cdff7 100644
--- a/keystore/java/android/security/IKeyChainService.aidl
+++ b/keystore/java/android/security/IKeyChainService.aidl
@@ -27,6 +27,7 @@
*/
interface IKeyChainService {
// APIs used by KeyChain
+ @UnsupportedAppUsage
String requestPrivateKey(String alias);
byte[] getCertificate(String alias);
byte[] getCaCertificates(String alias);
diff --git a/keystore/java/android/security/keystore/KeystoreResponse.java b/keystore/java/android/security/keystore/KeystoreResponse.java
index 3a229cb..529351e 100644
--- a/keystore/java/android/security/keystore/KeystoreResponse.java
+++ b/keystore/java/android/security/keystore/KeystoreResponse.java
@@ -30,7 +30,7 @@
public final int error_code_;
public final String error_msg_;
- public static final Parcelable.Creator<KeystoreResponse> CREATOR = new
+ public static final @android.annotation.NonNull Parcelable.Creator<KeystoreResponse> CREATOR = new
Parcelable.Creator<KeystoreResponse>() {
@Override
public KeystoreResponse createFromParcel(Parcel in) {
diff --git a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
index 8231dc9..d8030fb 100644
--- a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
@@ -193,7 +193,7 @@
unlockedDeviceRequired);
}
- public static final Creator<ParcelableKeyGenParameterSpec> CREATOR = new Creator<ParcelableKeyGenParameterSpec>() {
+ public static final @android.annotation.NonNull Creator<ParcelableKeyGenParameterSpec> CREATOR = new Creator<ParcelableKeyGenParameterSpec>() {
@Override
public ParcelableKeyGenParameterSpec createFromParcel(Parcel in) {
return new ParcelableKeyGenParameterSpec(in);
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp
index d7b84ff..117d05e 100644
--- a/libs/androidfw/AssetManager2.cpp
+++ b/libs/androidfw/AssetManager2.cpp
@@ -35,6 +35,12 @@
#endif
#endif
+#ifdef __ANDROID__
+#define ANDROID_LOG(x) LOG(x)
+#else
+#define ANDROID_LOG(x) std::stringstream()
+#endif
+
#include "androidfw/ResourceUtils.h"
namespace android {
@@ -380,7 +386,8 @@
const uint8_t package_idx = package_ids_[package_id];
if (package_idx == 0xff) {
- LOG(ERROR) << base::StringPrintf("No package ID %02x found for ID 0x%08x.", package_id, resid);
+ ANDROID_LOG(ERROR) << base::StringPrintf("No package ID %02x found for ID 0x%08x.",
+ package_id, resid);
return kInvalidCookie;
}
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 3b43f12..5af660c 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -254,10 +254,36 @@
float queuePriorities[1] = { 0.0 };
+ void* queueNextPtr = nullptr;
+
+ VkDeviceQueueGlobalPriorityCreateInfoEXT queuePriorityCreateInfo;
+
+ if (Properties::contextPriority != 0
+ && grExtensions.hasExtension(VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, 2)) {
+ memset(&queuePriorityCreateInfo, 0, sizeof(VkDeviceQueueGlobalPriorityCreateInfoEXT));
+ queuePriorityCreateInfo.sType =
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT;
+ queuePriorityCreateInfo.pNext = nullptr;
+ switch (Properties::contextPriority) {
+ case EGL_CONTEXT_PRIORITY_LOW_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_MEDIUM_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT;
+ break;
+ case EGL_CONTEXT_PRIORITY_HIGH_IMG:
+ queuePriorityCreateInfo.globalPriority = VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT;
+ break;
+ default:
+ LOG_ALWAYS_FATAL("Unsupported context priority");
+ }
+ queueNextPtr = &queuePriorityCreateInfo;
+ }
+
const VkDeviceQueueCreateInfo queueInfo[2] = {
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mGraphicsQueueIndex, // queueFamilyIndex
1, // queueCount
@@ -265,7 +291,7 @@
},
{
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType
- nullptr, // pNext
+ queueNextPtr, // pNext
0, // VkDeviceQueueCreateFlags
mPresentQueueIndex, // queueFamilyIndex
1, // queueCount
diff --git a/location/java/android/location/Address.java b/location/java/android/location/Address.java
index 83f05c2..bb97c78 100644
--- a/location/java/android/location/Address.java
+++ b/location/java/android/location/Address.java
@@ -472,7 +472,7 @@
return sb.toString();
}
- public static final Parcelable.Creator<Address> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Address> CREATOR =
new Parcelable.Creator<Address>() {
public Address createFromParcel(Parcel in) {
String language = in.readString();
diff --git a/location/java/android/location/Country.java b/location/java/android/location/Country.java
index 6f82b78..f3c2a16 100644
--- a/location/java/android/location/Country.java
+++ b/location/java/android/location/Country.java
@@ -137,7 +137,7 @@
return mTimestamp;
}
- public static final Parcelable.Creator<Country> CREATOR = new Parcelable.Creator<Country>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Country> CREATOR = new Parcelable.Creator<Country>() {
public Country createFromParcel(Parcel in) {
return new Country(in.readString(), in.readInt(), in.readLong());
}
diff --git a/location/java/android/location/Criteria.java b/location/java/android/location/Criteria.java
index 74eb445..1370b10 100644
--- a/location/java/android/location/Criteria.java
+++ b/location/java/android/location/Criteria.java
@@ -324,7 +324,7 @@
return mBearingRequired;
}
- public static final Parcelable.Creator<Criteria> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Criteria> CREATOR =
new Parcelable.Creator<Criteria>() {
@Override
public Criteria createFromParcel(Parcel in) {
diff --git a/location/java/android/location/FusedBatchOptions.java b/location/java/android/location/FusedBatchOptions.java
index aa4a860..4a022c3 100644
--- a/location/java/android/location/FusedBatchOptions.java
+++ b/location/java/android/location/FusedBatchOptions.java
@@ -113,7 +113,7 @@
/*
* Method definitions to support Parcelable operations.
*/
- public static final Parcelable.Creator<FusedBatchOptions> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FusedBatchOptions> CREATOR =
new Parcelable.Creator<FusedBatchOptions>() {
@Override
public FusedBatchOptions createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GeocoderParams.java b/location/java/android/location/GeocoderParams.java
index d90e4b5..45d92ee 100644
--- a/location/java/android/location/GeocoderParams.java
+++ b/location/java/android/location/GeocoderParams.java
@@ -67,7 +67,7 @@
return mPackageName;
}
- public static final Parcelable.Creator<GeocoderParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GeocoderParams> CREATOR =
new Parcelable.Creator<GeocoderParams>() {
public GeocoderParams createFromParcel(Parcel in) {
GeocoderParams gp = new GeocoderParams();
diff --git a/location/java/android/location/Geofence.java b/location/java/android/location/Geofence.java
index ed2aa64..9570b26 100644
--- a/location/java/android/location/Geofence.java
+++ b/location/java/android/location/Geofence.java
@@ -100,7 +100,7 @@
}
@UnsupportedAppUsage
- public static final Parcelable.Creator<Geofence> CREATOR = new Parcelable.Creator<Geofence>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Geofence> CREATOR = new Parcelable.Creator<Geofence>() {
@Override
public Geofence createFromParcel(Parcel in) {
int type = in.readInt();
diff --git a/location/java/android/location/GnssClock.java b/location/java/android/location/GnssClock.java
index 671c57c..8507c83 100644
--- a/location/java/android/location/GnssClock.java
+++ b/location/java/android/location/GnssClock.java
@@ -431,7 +431,7 @@
mHardwareClockDiscontinuityCount = value;
}
- public static final Creator<GnssClock> CREATOR = new Creator<GnssClock>() {
+ public static final @android.annotation.NonNull Creator<GnssClock> CREATOR = new Creator<GnssClock>() {
@Override
public GnssClock createFromParcel(Parcel parcel) {
GnssClock gpsClock = new GnssClock();
diff --git a/location/java/android/location/GnssMeasurement.java b/location/java/android/location/GnssMeasurement.java
index a545f2e..446ea85 100644
--- a/location/java/android/location/GnssMeasurement.java
+++ b/location/java/android/location/GnssMeasurement.java
@@ -1509,7 +1509,7 @@
}
}
- public static final Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() {
+ public static final @android.annotation.NonNull Creator<GnssMeasurement> CREATOR = new Creator<GnssMeasurement>() {
@Override
public GnssMeasurement createFromParcel(Parcel parcel) {
GnssMeasurement gnssMeasurement = new GnssMeasurement();
diff --git a/location/java/android/location/GnssMeasurementCorrections.java b/location/java/android/location/GnssMeasurementCorrections.java
index 9d3211d..fdbc3dd 100644
--- a/location/java/android/location/GnssMeasurementCorrections.java
+++ b/location/java/android/location/GnssMeasurementCorrections.java
@@ -133,7 +133,7 @@
return 0;
}
- public static final Creator<GnssMeasurementCorrections> CREATOR =
+ public static final @android.annotation.NonNull Creator<GnssMeasurementCorrections> CREATOR =
new Creator<GnssMeasurementCorrections>() {
@Override
public GnssMeasurementCorrections createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GnssMeasurementsEvent.java b/location/java/android/location/GnssMeasurementsEvent.java
index 34c7354..98ef2d4 100644
--- a/location/java/android/location/GnssMeasurementsEvent.java
+++ b/location/java/android/location/GnssMeasurementsEvent.java
@@ -130,7 +130,7 @@
return mReadOnlyMeasurements;
}
- public static final Creator<GnssMeasurementsEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<GnssMeasurementsEvent> CREATOR =
new Creator<GnssMeasurementsEvent>() {
@Override
public GnssMeasurementsEvent createFromParcel(Parcel in) {
diff --git a/location/java/android/location/GnssNavigationMessage.java b/location/java/android/location/GnssNavigationMessage.java
index c7188aa..a83db3f 100644
--- a/location/java/android/location/GnssNavigationMessage.java
+++ b/location/java/android/location/GnssNavigationMessage.java
@@ -365,7 +365,7 @@
}
}
- public static final Creator<GnssNavigationMessage> CREATOR =
+ public static final @android.annotation.NonNull Creator<GnssNavigationMessage> CREATOR =
new Creator<GnssNavigationMessage>() {
@Override
public GnssNavigationMessage createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GnssReflectingPlane.java b/location/java/android/location/GnssReflectingPlane.java
index 9a106a7..c5095d7 100644
--- a/location/java/android/location/GnssReflectingPlane.java
+++ b/location/java/android/location/GnssReflectingPlane.java
@@ -76,7 +76,7 @@
return 0;
}
- public static final Creator<GnssReflectingPlane> CREATOR =
+ public static final @android.annotation.NonNull Creator<GnssReflectingPlane> CREATOR =
new Creator<GnssReflectingPlane>() {
@Override
public GnssReflectingPlane createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GnssSingleSatCorrection.java b/location/java/android/location/GnssSingleSatCorrection.java
index f719e1a..dbf3fd9 100644
--- a/location/java/android/location/GnssSingleSatCorrection.java
+++ b/location/java/android/location/GnssSingleSatCorrection.java
@@ -215,7 +215,7 @@
return 0;
}
- public static final Creator<GnssSingleSatCorrection> CREATOR =
+ public static final @android.annotation.NonNull Creator<GnssSingleSatCorrection> CREATOR =
new Creator<GnssSingleSatCorrection>() {
@Override
public GnssSingleSatCorrection createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GpsClock.java b/location/java/android/location/GpsClock.java
index 4135a1c..52ba60e 100644
--- a/location/java/android/location/GpsClock.java
+++ b/location/java/android/location/GpsClock.java
@@ -394,7 +394,7 @@
mDriftUncertaintyInNsPerSec = Double.NaN;
}
- public static final Creator<GpsClock> CREATOR = new Creator<GpsClock>() {
+ public static final @android.annotation.NonNull Creator<GpsClock> CREATOR = new Creator<GpsClock>() {
@Override
public GpsClock createFromParcel(Parcel parcel) {
GpsClock gpsClock = new GpsClock();
diff --git a/location/java/android/location/GpsMeasurement.java b/location/java/android/location/GpsMeasurement.java
index f13a440..51718b8 100644
--- a/location/java/android/location/GpsMeasurement.java
+++ b/location/java/android/location/GpsMeasurement.java
@@ -1157,7 +1157,7 @@
mUsedInFix = value;
}
- public static final Creator<GpsMeasurement> CREATOR = new Creator<GpsMeasurement>() {
+ public static final @android.annotation.NonNull Creator<GpsMeasurement> CREATOR = new Creator<GpsMeasurement>() {
@Override
public GpsMeasurement createFromParcel(Parcel parcel) {
GpsMeasurement gpsMeasurement = new GpsMeasurement();
diff --git a/location/java/android/location/GpsMeasurementsEvent.java b/location/java/android/location/GpsMeasurementsEvent.java
index 1366873..1cd1fb4 100644
--- a/location/java/android/location/GpsMeasurementsEvent.java
+++ b/location/java/android/location/GpsMeasurementsEvent.java
@@ -103,7 +103,7 @@
return mReadOnlyMeasurements;
}
- public static final Creator<GpsMeasurementsEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<GpsMeasurementsEvent> CREATOR =
new Creator<GpsMeasurementsEvent>() {
@Override
public GpsMeasurementsEvent createFromParcel(Parcel in) {
diff --git a/location/java/android/location/GpsNavigationMessage.java b/location/java/android/location/GpsNavigationMessage.java
index 5c3c710..77f0113 100644
--- a/location/java/android/location/GpsNavigationMessage.java
+++ b/location/java/android/location/GpsNavigationMessage.java
@@ -243,7 +243,7 @@
}
}
- public static final Creator<GpsNavigationMessage> CREATOR =
+ public static final @android.annotation.NonNull Creator<GpsNavigationMessage> CREATOR =
new Creator<GpsNavigationMessage>() {
@Override
public GpsNavigationMessage createFromParcel(Parcel parcel) {
diff --git a/location/java/android/location/GpsNavigationMessageEvent.java b/location/java/android/location/GpsNavigationMessageEvent.java
index bd6921c..2aa685c 100644
--- a/location/java/android/location/GpsNavigationMessageEvent.java
+++ b/location/java/android/location/GpsNavigationMessageEvent.java
@@ -84,7 +84,7 @@
return mNavigationMessage;
}
- public static final Creator<GpsNavigationMessageEvent> CREATOR =
+ public static final @android.annotation.NonNull Creator<GpsNavigationMessageEvent> CREATOR =
new Creator<GpsNavigationMessageEvent>() {
@Override
public GpsNavigationMessageEvent createFromParcel(Parcel in) {
diff --git a/location/java/android/location/IGeocodeProvider.aidl b/location/java/android/location/IGeocodeProvider.aidl
index aaa70c7..7eaf7b8 100644
--- a/location/java/android/location/IGeocodeProvider.aidl
+++ b/location/java/android/location/IGeocodeProvider.aidl
@@ -26,9 +26,11 @@
*/
interface IGeocodeProvider {
+ @UnsupportedAppUsage
String getFromLocation(double latitude, double longitude, int maxResults,
in GeocoderParams params, out List<Address> addrs);
+ @UnsupportedAppUsage
String getFromLocationName(String locationName,
double lowerLeftLatitude, double lowerLeftLongitude,
double upperRightLatitude, double upperRightLongitude, int maxResults,
diff --git a/location/java/android/location/IGeofenceProvider.aidl b/location/java/android/location/IGeofenceProvider.aidl
index d4ff0dd..426ebef 100644
--- a/location/java/android/location/IGeofenceProvider.aidl
+++ b/location/java/android/location/IGeofenceProvider.aidl
@@ -24,5 +24,6 @@
* {@hide}
*/
oneway interface IGeofenceProvider {
+ @UnsupportedAppUsage
void setGeofenceHardware(in IGeofenceHardware proxy);
}
diff --git a/location/java/android/location/ILocationListener.aidl b/location/java/android/location/ILocationListener.aidl
index 180183e..ec11345 100644
--- a/location/java/android/location/ILocationListener.aidl
+++ b/location/java/android/location/ILocationListener.aidl
@@ -25,10 +25,14 @@
*/
oneway interface ILocationListener
{
+ @UnsupportedAppUsage
void onLocationChanged(in Location location);
+ @UnsupportedAppUsage
void onProviderEnabled(String provider);
+ @UnsupportedAppUsage
void onProviderDisabled(String provider);
// --- deprecated ---
+ @UnsupportedAppUsage
void onStatusChanged(String provider, int status, in Bundle extras);
}
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index 57a0a72..c371c5f 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -85,6 +85,7 @@
boolean stopGnssBatch();
boolean injectLocation(in Location location);
+ @UnsupportedAppUsage
List<String> getAllProviders();
List<String> getProviders(in Criteria criteria, boolean enabledOnly);
String getBestProvider(in Criteria criteria, boolean enabledOnly);
@@ -102,6 +103,7 @@
void removeTestProvider(String provider, String opPackageName);
void setTestProviderLocation(String provider, in Location loc, String opPackageName);
void setTestProviderEnabled(String provider, boolean enabled, String opPackageName);
+ List<LocationRequest> getTestProviderCurrentRequests(String provider, String opPackageName);
// --- deprecated ---
void setTestProviderStatus(String provider, int status, in Bundle extras, long updateTime,
diff --git a/location/java/android/location/INetInitiatedListener.aidl b/location/java/android/location/INetInitiatedListener.aidl
index fc64dd6..a9e9136 100644
--- a/location/java/android/location/INetInitiatedListener.aidl
+++ b/location/java/android/location/INetInitiatedListener.aidl
@@ -22,5 +22,6 @@
*/
interface INetInitiatedListener
{
+ @UnsupportedAppUsage
boolean sendNiResponse(int notifId, int userResponse);
}
diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java
index fbebbb1..ed74333 100644
--- a/location/java/android/location/Location.java
+++ b/location/java/android/location/Location.java
@@ -113,6 +113,10 @@
* Bit mask for mFieldsMask indicating the presence of mBearingAccuracy.
*/
private static final int HAS_BEARING_ACCURACY_MASK = 128;
+ /**
+ * Bit mask for mFieldsMask indicating the presence of mElapsedRealtimeUncertaintyNanos.
+ */
+ private static final int HAS_ELAPSED_REALTIME_UNCERTAINTY_MASK = 256;
// Cached data to make bearing/distance computations more efficient for the case
// where distanceTo and bearingTo are called in sequence. Assume this typically happens
@@ -130,6 +134,9 @@
private long mTime = 0;
@UnsupportedAppUsage
private long mElapsedRealtimeNanos = 0;
+ // Estimate of the relative precision of the alignment of this SystemClock
+ // timestamp, with the reported measurements in nanoseconds (68% confidence).
+ private long mElapsedRealtimeUncertaintyNanos = 0;
private double mLatitude = 0.0;
private double mLongitude = 0.0;
private double mAltitude = 0.0f;
@@ -171,6 +178,7 @@
mProvider = l.mProvider;
mTime = l.mTime;
mElapsedRealtimeNanos = l.mElapsedRealtimeNanos;
+ mElapsedRealtimeUncertaintyNanos = l.mElapsedRealtimeUncertaintyNanos;
mFieldsMask = l.mFieldsMask;
mLatitude = l.mLatitude;
mLongitude = l.mLongitude;
@@ -191,6 +199,7 @@
mProvider = null;
mTime = 0;
mElapsedRealtimeNanos = 0;
+ mElapsedRealtimeUncertaintyNanos = 0;
mFieldsMask = 0;
mLatitude = 0;
mLongitude = 0;
@@ -586,6 +595,37 @@
}
/**
+ * Get estimate of the relative precision of the alignment of the
+ * ElapsedRealtimeNanos timestamp, with the reported measurements in
+ * nanoseconds (68% confidence).
+ *
+ * @return uncertainty of elapsed real-time of fix, in nanoseconds.
+ */
+ public long getElapsedRealtimeUncertaintyNanos() {
+ return mElapsedRealtimeUncertaintyNanos;
+ }
+
+ /**
+ * Set estimate of the relative precision of the alignment of the
+ * ElapsedRealtimeNanos timestamp, with the reported measurements in
+ * nanoseconds (68% confidence).
+ *
+ * @param time uncertainty of the elapsed real-time of fix, in nanoseconds.
+ */
+ public void setElapsedRealtimeUncertaintyNanos(long time) {
+ mElapsedRealtimeUncertaintyNanos = time;
+ mFieldsMask |= HAS_ELAPSED_REALTIME_UNCERTAINTY_MASK;
+ }
+
+ /**
+ * True if this location has a elapsed realtime accuracy.
+ */
+ public boolean hasElapsedRealtimeUncertaintyNanos() {
+ return (mFieldsMask & HAS_ELAPSED_REALTIME_UNCERTAINTY_MASK) != 0;
+ }
+
+
+ /**
* Get the latitude, in degrees.
*
* <p>All locations generated by the {@link LocationManager}
@@ -1062,6 +1102,10 @@
s.append(" et=");
TimeUtils.formatDuration(mElapsedRealtimeNanos / 1000000L, s);
}
+ if (hasElapsedRealtimeUncertaintyNanos()) {
+ s.append(" etAcc=");
+ TimeUtils.formatDuration(mElapsedRealtimeUncertaintyNanos / 1000000L, s);
+ }
if (hasAltitude()) s.append(" alt=").append(mAltitude);
if (hasSpeed()) s.append(" vel=").append(mSpeed);
if (hasBearing()) s.append(" bear=").append(mBearing);
@@ -1084,7 +1128,7 @@
pw.println(prefix + toString());
}
- public static final Parcelable.Creator<Location> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Location> CREATOR =
new Parcelable.Creator<Location>() {
@Override
public Location createFromParcel(Parcel in) {
@@ -1092,6 +1136,7 @@
Location l = new Location(provider);
l.mTime = in.readLong();
l.mElapsedRealtimeNanos = in.readLong();
+ l.mElapsedRealtimeUncertaintyNanos = in.readLong();
l.mFieldsMask = in.readByte();
l.mLatitude = in.readDouble();
l.mLongitude = in.readDouble();
@@ -1122,6 +1167,7 @@
parcel.writeString(mProvider);
parcel.writeLong(mTime);
parcel.writeLong(mElapsedRealtimeNanos);
+ parcel.writeLong(mElapsedRealtimeUncertaintyNanos);
parcel.writeByte(mFieldsMask);
parcel.writeDouble(mLatitude);
parcel.writeDouble(mLongitude);
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 586ee2a..6828c59 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -1626,6 +1626,23 @@
setTestProviderStatus(provider, LocationProvider.AVAILABLE, null, 0L);
}
+ /**
+ * Get the last list of {@link LocationRequest}s sent to the provider.
+ *
+ * @hide
+ */
+ @TestApi
+ @NonNull
+ public List<LocationRequest> getTestProviderCurrentRequests(String providerName) {
+ checkProvider(providerName);
+ try {
+ return mService.getTestProviderCurrentRequests(providerName,
+ mContext.getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
// --- GPS-specific support ---
// This class is used to send Gnss status events to the client's specific thread.
diff --git a/location/java/android/location/LocationRequest.java b/location/java/android/location/LocationRequest.java
index b3953fd..6fd063e 100644
--- a/location/java/android/location/LocationRequest.java
+++ b/location/java/android/location/LocationRequest.java
@@ -270,7 +270,7 @@
* Set the quality of the request.
*
* <p>Use with a accuracy constant such as {@link #ACCURACY_FINE}, or a power
- * constant such as {@link #POWER_LOW}. You cannot request both and accuracy and
+ * constant such as {@link #POWER_LOW}. You cannot request both accuracy and
* power, only one or the other can be specified. The system will then
* maximize accuracy or minimize power as appropriate.
*
@@ -384,10 +384,8 @@
*
* @param locationSettingsIgnored Whether to ignore location settings
* @return the same object, so that setters can be chained
- * @hide
*/
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
- @SystemApi
public LocationRequest setLocationSettingsIgnored(boolean locationSettingsIgnored) {
mLocationSettingsIgnored = locationSettingsIgnored;
return this;
@@ -395,10 +393,7 @@
/**
* Returns true if location settings will be ignored in order to satisfy this request.
- *
- * @hide
*/
- @SystemApi
public boolean isLocationSettingsIgnored() {
return mLocationSettingsIgnored;
}
@@ -558,9 +553,6 @@
}
}
-
- /** @hide */
- @SystemApi
public LocationRequest setProvider(String provider) {
checkProvider(provider);
mProvider = provider;
@@ -669,7 +661,7 @@
}
}
- public static final Parcelable.Creator<LocationRequest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<LocationRequest> CREATOR =
new Parcelable.Creator<LocationRequest>() {
@Override
public LocationRequest createFromParcel(Parcel in) {
diff --git a/location/java/com/android/internal/location/ILocationProvider.aidl b/location/java/com/android/internal/location/ILocationProvider.aidl
index 71b54fb..a571630 100644
--- a/location/java/com/android/internal/location/ILocationProvider.aidl
+++ b/location/java/com/android/internal/location/ILocationProvider.aidl
@@ -36,6 +36,8 @@
oneway void sendExtraCommand(String command, in Bundle extras);
// --- deprecated and will be removed the future ---
+ @UnsupportedAppUsage
int getStatus(out Bundle extras);
+ @UnsupportedAppUsage
long getStatusUpdateTime();
}
diff --git a/location/java/com/android/internal/location/ILocationProviderManager.aidl b/location/java/com/android/internal/location/ILocationProviderManager.aidl
index 79166ae..85e18ba 100644
--- a/location/java/com/android/internal/location/ILocationProviderManager.aidl
+++ b/location/java/com/android/internal/location/ILocationProviderManager.aidl
@@ -28,9 +28,12 @@
void onSetAdditionalProviderPackages(in List<String> packageNames);
+ @UnsupportedAppUsage
void onSetEnabled(boolean enabled);
+ @UnsupportedAppUsage
void onSetProperties(in ProviderProperties properties);
+ @UnsupportedAppUsage
void onReportLocation(in Location location);
}
diff --git a/location/java/com/android/internal/location/ProviderRequest.java b/location/java/com/android/internal/location/ProviderRequest.java
index af8123a..155f788 100644
--- a/location/java/com/android/internal/location/ProviderRequest.java
+++ b/location/java/com/android/internal/location/ProviderRequest.java
@@ -56,7 +56,7 @@
* low power fast interval request.
*/
@UnsupportedAppUsage
- public List<LocationRequest> locationRequests = new ArrayList<LocationRequest>();
+ public final List<LocationRequest> locationRequests = new ArrayList<>();
@UnsupportedAppUsage
public ProviderRequest() {
diff --git a/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java
index 345a4c5..5d4a3a0 100644
--- a/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java
+++ b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java
@@ -208,7 +208,7 @@
}
/** Implement the Parcelable interface. */
- public static final Creator<LowpanBeaconInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<LowpanBeaconInfo> CREATOR =
new Creator<LowpanBeaconInfo>() {
public LowpanBeaconInfo createFromParcel(Parcel in) {
Builder builder = new Builder();
diff --git a/lowpan/java/android/net/lowpan/LowpanChannelInfo.java b/lowpan/java/android/net/lowpan/LowpanChannelInfo.java
index 52b1c6d..12c98b6 100644
--- a/lowpan/java/android/net/lowpan/LowpanChannelInfo.java
+++ b/lowpan/java/android/net/lowpan/LowpanChannelInfo.java
@@ -193,7 +193,7 @@
}
/** Implement the Parcelable interface. */
- public static final Creator<LowpanChannelInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<LowpanChannelInfo> CREATOR =
new Creator<LowpanChannelInfo>() {
public LowpanChannelInfo createFromParcel(Parcel in) {
diff --git a/lowpan/java/android/net/lowpan/LowpanCredential.java b/lowpan/java/android/net/lowpan/LowpanCredential.java
index e9126f9..dcbb831 100644
--- a/lowpan/java/android/net/lowpan/LowpanCredential.java
+++ b/lowpan/java/android/net/lowpan/LowpanCredential.java
@@ -153,7 +153,7 @@
}
/** Implement the Parcelable interface. */
- public static final Creator<LowpanCredential> CREATOR =
+ public static final @android.annotation.NonNull Creator<LowpanCredential> CREATOR =
new Creator<LowpanCredential>() {
public LowpanCredential createFromParcel(Parcel in) {
diff --git a/lowpan/java/android/net/lowpan/LowpanIdentity.java b/lowpan/java/android/net/lowpan/LowpanIdentity.java
index 6cb1f98..1997bc4 100644
--- a/lowpan/java/android/net/lowpan/LowpanIdentity.java
+++ b/lowpan/java/android/net/lowpan/LowpanIdentity.java
@@ -233,7 +233,7 @@
}
/** Implement the Parcelable interface. */
- public static final Creator<LowpanIdentity> CREATOR =
+ public static final @android.annotation.NonNull Creator<LowpanIdentity> CREATOR =
new Creator<LowpanIdentity>() {
public LowpanIdentity createFromParcel(Parcel in) {
diff --git a/lowpan/java/android/net/lowpan/LowpanProvision.java b/lowpan/java/android/net/lowpan/LowpanProvision.java
index f126003..68c8709 100644
--- a/lowpan/java/android/net/lowpan/LowpanProvision.java
+++ b/lowpan/java/android/net/lowpan/LowpanProvision.java
@@ -128,7 +128,7 @@
}
/** Implement the Parcelable interface. */
- public static final Creator<LowpanProvision> CREATOR =
+ public static final @android.annotation.NonNull Creator<LowpanProvision> CREATOR =
new Creator<LowpanProvision>() {
public LowpanProvision createFromParcel(Parcel in) {
Builder builder = new Builder();
diff --git a/media/apex/java/android/media/BufferingParams.java b/media/apex/java/android/media/BufferingParams.java
index aaae5e7b..83594d4 100644
--- a/media/apex/java/android/media/BufferingParams.java
+++ b/media/apex/java/android/media/BufferingParams.java
@@ -167,7 +167,7 @@
mResumePlaybackMarkMs = in.readInt();
}
- public static final Parcelable.Creator<BufferingParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<BufferingParams> CREATOR =
new Parcelable.Creator<BufferingParams>() {
@Override
public BufferingParams createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/Controller2Link.java b/media/apex/java/android/media/Controller2Link.java
index d11f776..04185e7 100644
--- a/media/apex/java/android/media/Controller2Link.java
+++ b/media/apex/java/android/media/Controller2Link.java
@@ -34,7 +34,7 @@
private static final String TAG = "Controller2Link";
private static final boolean DEBUG = MediaController2.DEBUG;
- public static final Parcelable.Creator<Controller2Link> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Controller2Link> CREATOR =
new Parcelable.Creator<Controller2Link>() {
@Override
public Controller2Link createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/MediaItem2.java b/media/apex/java/android/media/MediaItem2.java
index c496cf7..fc0f08e 100644
--- a/media/apex/java/android/media/MediaItem2.java
+++ b/media/apex/java/android/media/MediaItem2.java
@@ -55,7 +55,7 @@
*/
public static final long POSITION_UNKNOWN = LONG_MAX;
- public static final Parcelable.Creator<MediaItem2> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaItem2> CREATOR =
new Parcelable.Creator<MediaItem2>() {
@Override
public MediaItem2 createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/MediaPlayer2.java b/media/apex/java/android/media/MediaPlayer2.java
index 89a9540..ef30172 100644
--- a/media/apex/java/android/media/MediaPlayer2.java
+++ b/media/apex/java/android/media/MediaPlayer2.java
@@ -962,7 +962,7 @@
return;
}
} catch (NullPointerException | SecurityException | IOException ex) {
- Log.w(TAG, "Couldn't open " + uri + ": " + ex);
+ Log.w(TAG, "Couldn't open " + uri == null ? "null uri" : uri.toSafeString(), ex);
// Fallback to media server
}
handleDataSource(isCurrent, srcId, uri.toString(), headers, cookies, startPos, endPos);
diff --git a/media/apex/java/android/media/Session2Command.java b/media/apex/java/android/media/Session2Command.java
index 8b285f2..20d6391 100644
--- a/media/apex/java/android/media/Session2Command.java
+++ b/media/apex/java/android/media/Session2Command.java
@@ -60,7 +60,7 @@
*/
public static final int RESULT_ERROR_UNKNOWN_ERROR = -1;
- public static final Parcelable.Creator<Session2Command> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Session2Command> CREATOR =
new Parcelable.Creator<Session2Command>() {
@Override
public Session2Command createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/Session2CommandGroup.java b/media/apex/java/android/media/Session2CommandGroup.java
index 2dab697..73a59d0 100644
--- a/media/apex/java/android/media/Session2CommandGroup.java
+++ b/media/apex/java/android/media/Session2CommandGroup.java
@@ -39,7 +39,7 @@
public final class Session2CommandGroup implements Parcelable {
private static final String TAG = "Session2CommandGroup";
- public static final Parcelable.Creator<Session2CommandGroup> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Session2CommandGroup> CREATOR =
new Parcelable.Creator<Session2CommandGroup>() {
@Override
public Session2CommandGroup createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/Session2Link.java b/media/apex/java/android/media/Session2Link.java
index 08664aa..6e550e8 100644
--- a/media/apex/java/android/media/Session2Link.java
+++ b/media/apex/java/android/media/Session2Link.java
@@ -37,7 +37,7 @@
private static final String TAG = "Session2Link";
private static final boolean DEBUG = MediaSession2.DEBUG;
- public static final Parcelable.Creator<Session2Link> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Session2Link> CREATOR =
new Parcelable.Creator<Session2Link>() {
@Override
public Session2Link createFromParcel(Parcel in) {
diff --git a/media/apex/java/android/media/Session2Token.java b/media/apex/java/android/media/Session2Token.java
index 6680e40..dc970ae 100644
--- a/media/apex/java/android/media/Session2Token.java
+++ b/media/apex/java/android/media/Session2Token.java
@@ -52,7 +52,7 @@
public final class Session2Token implements Parcelable {
private static final String TAG = "Session2Token";
- public static final Creator<Session2Token> CREATOR = new Creator<Session2Token>() {
+ public static final @android.annotation.NonNull Creator<Session2Token> CREATOR = new Creator<Session2Token>() {
@Override
public Session2Token createFromParcel(Parcel p) {
return new Session2Token(p);
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index ea396c6..46d4204 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -877,7 +877,7 @@
}
}
- public static final Parcelable.Creator<AudioAttributes> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioAttributes> CREATOR
= new Parcelable.Creator<AudioAttributes>() {
/**
* Rebuilds an AudioAttributes previously stored with writeToParcel().
diff --git a/media/java/android/media/AudioFocusInfo.java b/media/java/android/media/AudioFocusInfo.java
index 3594ee7..3aaa7df 100644
--- a/media/java/android/media/AudioFocusInfo.java
+++ b/media/java/android/media/AudioFocusInfo.java
@@ -190,7 +190,7 @@
return true;
}
- public static final Parcelable.Creator<AudioFocusInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioFocusInfo> CREATOR
= new Parcelable.Creator<AudioFocusInfo>() {
public AudioFocusInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index 5516086..f0787e9 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -1096,7 +1096,7 @@
);
}
- public static final Parcelable.Creator<AudioFormat> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioFormat> CREATOR =
new Parcelable.Creator<AudioFormat>() {
public AudioFormat createFromParcel(Parcel p) {
return new AudioFormat(p);
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 3fb2365..15f9b47 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -37,6 +37,8 @@
import android.media.audiopolicy.AudioPolicy;
import android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener;
import android.media.audiopolicy.AudioProductStrategies;
+import android.media.audiopolicy.AudioVolumeGroupChangeHandler;
+import android.media.audiopolicy.AudioVolumeGroups;
import android.media.projection.MediaProjection;
import android.media.session.MediaController;
import android.media.session.MediaSession;
@@ -61,6 +63,7 @@
import android.view.KeyEvent;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.Preconditions;
import java.io.IOException;
import java.lang.annotation.Retention;
@@ -90,6 +93,8 @@
private static final String TAG = "AudioManager";
private static final boolean DEBUG = false;
private static final AudioPortEventHandler sAudioPortEventHandler = new AudioPortEventHandler();
+ private static final AudioVolumeGroupChangeHandler sAudioAudioVolumeGroupChangedHandler =
+ new AudioVolumeGroupChangeHandler();
/**
* Broadcast intent, a hint for applications that audio is about to become
@@ -1164,6 +1169,93 @@
}
/**
+ * Sets the volume index for a particular {@link AudioAttributes}.
+ * @param attr The {@link AudioAttributes} whose volume index should be set.
+ * @param index The volume index to set. See
+ * {@link #getMaxVolumeIndexForAttributes(AudioAttributes)} for the largest valid value
+ * {@link #getMinVolumeIndexForAttributes(AudioAttributes)} for the lowest valid value.
+ * @param flags One or more flags.
+ * @see #getMaxVolumeIndexForAttributes(AudioAttributes)
+ * @see #getMinVolumeIndexForAttributes(AudioAttributes)
+ * @see #isVolumeFixed()
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public void setVolumeIndexForAttributes(@NonNull AudioAttributes attr, int index, int flags) {
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ final IAudioService service = getService();
+ try {
+ service.setVolumeIndexForAttributes(attr, index, flags,
+ getContext().getOpPackageName());
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Returns the current volume index for a particular {@link AudioAttributes}.
+ *
+ * @param attr The {@link AudioAttributes} whose volume index is returned.
+ * @return The current volume index for the stream.
+ * @see #getMaxVolumeIndexForAttributes(AudioAttributes)
+ * @see #getMinVolumeIndexForAttributes(AudioAttributes)
+ * @see #setVolumeForAttributes(AudioAttributes, int, int)
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public int getVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ final IAudioService service = getService();
+ try {
+ return service.getVolumeIndexForAttributes(attr);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Returns the maximum volume index for a particular {@link AudioAttributes}.
+ *
+ * @param attr The {@link AudioAttributes} whose maximum volume index is returned.
+ * @return The maximum valid volume index for the {@link AudioAttributes}.
+ * @see #getVolumeIndexForAttributes(AudioAttributes)
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ final IAudioService service = getService();
+ try {
+ return service.getMaxVolumeIndexForAttributes(attr);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Returns the minimum volume index for a particular {@link AudioAttributes}.
+ *
+ * @param attr The {@link AudioAttributes} whose minimum volume index is returned.
+ * @return The minimum valid volume index for the {@link AudioAttributes}.
+ * @see #getVolumeIndexForAttributes(AudioAttributes)
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ final IAudioService service = getService();
+ try {
+ return service.getMinVolumeIndexForAttributes(attr);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Solo or unsolo a particular stream.
* <p>
* Do not use. This method has been deprecated and is now a no-op.
@@ -5246,6 +5338,65 @@
}
}
+ /**
+ * @hide
+ * Introspection API to retrieve audio volume groups.
+ * When implementing {Car|Oem}AudioManager, use this method to retrieve the collection of
+ * audio volume groups.
+ * @return a (possibly zero-length) array of
+ * {@see android.media.audiopolicy.AudioVolumeGroups} objects.
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ public @NonNull AudioVolumeGroups getAudioVolumeGroups() {
+ final IAudioService service = getService();
+ try {
+ return service.listAudioVolumeGroups();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @hide
+ * Callback registered by client to be notified upon volume group change.
+ */
+ @SystemApi
+ public abstract static class VolumeGroupCallback {
+ /**
+ * Callback method called upon audio volume group change.
+ * @param group the group for which the volume has changed
+ */
+ public void onAudioVolumeGroupChanged(int group, int flags) {}
+ }
+
+ /**
+ * @hide
+ * Register an audio volume group change listener.
+ * @param callback the {@link VolumeGroupCallback} to register
+ */
+ @SystemApi
+ public void registerVolumeGroupCallback(
+ @NonNull Executor executor,
+ @NonNull VolumeGroupCallback callback) {
+ Preconditions.checkNotNull(executor, "executor must not be null");
+ Preconditions.checkNotNull(callback, "volume group change cb must not be null");
+ sAudioAudioVolumeGroupChangedHandler.init();
+ // TODO: make use of executor
+ sAudioAudioVolumeGroupChangedHandler.registerListener(callback);
+ }
+
+ /**
+ * @hide
+ * Unregister an audio volume group change listener.
+ * @param callback the {@link VolumeGroupCallback} to unregister
+ */
+ @SystemApi
+ public void unregisterVolumeGroupCallback(
+ @NonNull VolumeGroupCallback callback) {
+ Preconditions.checkNotNull(callback, "volume group change cb must not be null");
+ sAudioAudioVolumeGroupChangedHandler.unregisterListener(callback);
+ }
//---------------------------------------------------------
// Inner classes
diff --git a/media/java/android/media/AudioPlaybackCaptureConfiguration.java b/media/java/android/media/AudioPlaybackCaptureConfiguration.java
index d714dc7..9a16aea 100644
--- a/media/java/android/media/AudioPlaybackCaptureConfiguration.java
+++ b/media/java/android/media/AudioPlaybackCaptureConfiguration.java
@@ -33,7 +33,7 @@
* - played by apps that MUST be in the same user profile as the capturing app
* (eg work profile can not capture user profile apps and vice-versa).
* - played by apps that MUST NOT have in their manifest.xml the application
- * attribute android:allowPlaybackCapture="false"
+ * attribute android:allowAudioPlaybackCapture="false"
* - played by apps that MUST have a targetSdkVersion higher or equal to 29 (Q).
*
* <p>An example for creating a capture configuration for capturing all media playback:
diff --git a/media/java/android/media/AudioPlaybackConfiguration.java b/media/java/android/media/AudioPlaybackConfiguration.java
index 7dfdb20..5d12c3c 100644
--- a/media/java/android/media/AudioPlaybackConfiguration.java
+++ b/media/java/android/media/AudioPlaybackConfiguration.java
@@ -430,7 +430,7 @@
+ " -- attr:" + apc.mPlayerAttr);
}
- public static final Parcelable.Creator<AudioPlaybackConfiguration> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioPlaybackConfiguration> CREATOR
= new Parcelable.Creator<AudioPlaybackConfiguration>() {
/**
* Rebuilds an AudioPlaybackConfiguration previously stored with writeToParcel().
diff --git a/media/java/android/media/AudioPresentation.java b/media/java/android/media/AudioPresentation.java
index fca7074..894fbba 100644
--- a/media/java/android/media/AudioPresentation.java
+++ b/media/java/android/media/AudioPresentation.java
@@ -45,6 +45,9 @@
* accessibility, end point mastering and dialogue enhancement. An audio presentation may also have
* a set of description labels in different languages to help the user to make an informed
* selection.
+ *
+ * Applications that parse media streams and extract presentation information on their own
+ * can create instances of AudioPresentation by using {@link AudioPresentation.Builder} class.
*/
public final class AudioPresentation {
private final int mPresentationId;
@@ -66,7 +69,7 @@
private final boolean mAudioDescriptionAvailable;
private final boolean mSpokenSubtitlesAvailable;
private final boolean mDialogueEnhancementAvailable;
- private final Map<ULocale, String> mLabels;
+ private final Map<ULocale, CharSequence> mLabels;
/**
* No preferred reproduction channel layout.
@@ -131,7 +134,7 @@
boolean audioDescriptionAvailable,
boolean spokenSubtitlesAvailable,
boolean dialogueEnhancementAvailable,
- @NonNull Map<ULocale, String> labels) {
+ @NonNull Map<ULocale, CharSequence> labels) {
mPresentationId = presentationId;
mProgramId = programId;
mLanguage = language;
@@ -139,7 +142,7 @@
mAudioDescriptionAvailable = audioDescriptionAvailable;
mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
- mLabels = new HashMap<ULocale, String>(labels);
+ mLabels = new HashMap<ULocale, CharSequence>(labels);
}
/**
@@ -164,14 +167,14 @@
* or ISO 639-2/T could be used.
*/
public Map<Locale, String> getLabels() {
- Map<Locale, String> localeLabels = new HashMap<Locale, String>();
- for (Map.Entry<ULocale, String> entry : mLabels.entrySet()) {
- localeLabels.put(entry.getKey().toLocale(), entry.getValue());
+ Map<Locale, String> localeLabels = new HashMap<Locale, String>(mLabels.size());
+ for (Map.Entry<ULocale, CharSequence> entry : mLabels.entrySet()) {
+ localeLabels.put(entry.getKey().toLocale(), entry.getValue().toString());
}
return localeLabels;
}
- private Map<ULocale, String> getULabels() {
+ private Map<ULocale, CharSequence> getULabels() {
return mLabels;
}
@@ -273,7 +276,7 @@
/**
* A builder class for creating {@link AudioPresentation} objects.
*/
- public static class Builder {
+ public static final class Builder {
private final int mPresentationId;
private int mProgramId = UNKNOWN_ID;
private ULocale mLanguage = new ULocale("");
@@ -281,13 +284,13 @@
private boolean mAudioDescriptionAvailable = false;
private boolean mSpokenSubtitlesAvailable = false;
private boolean mDialogueEnhancementAvailable = false;
- private Map<ULocale, String> mLabels = new HashMap<ULocale, String>();
+ private Map<ULocale, CharSequence> mLabels = new HashMap<ULocale, CharSequence>();
/**
* Create a {@link Builder}. Any field that should be included in the
* {@link AudioPresentation} must be added.
*
- * @param presentationId the presentation ID of this audio presentation
+ * @param presentationId The presentation ID of this audio presentation.
*/
public Builder(int presentationId) {
mPresentationId = presentationId;
@@ -295,7 +298,7 @@
/**
* Sets the ProgramId to which this audio presentation refers.
*
- * @param programId
+ * @param programId The program ID to be decoded.
*/
public @NonNull Builder setProgramId(int programId) {
mProgramId = programId;
@@ -304,9 +307,9 @@
/**
* Sets the language information of the audio presentation.
*
- * @param language code
+ * @param language Locale corresponding to ISO 639-1/639-2 language code.
*/
- public @NonNull Builder setLocale(ULocale language) {
+ public @NonNull Builder setLocale(@NonNull ULocale language) {
mLanguage = language;
return this;
}
@@ -339,17 +342,17 @@
/**
* Sets locale / text label pairs describing the presentation.
*
- * @param labels
+ * @param labels Text label indexed by its locale corresponding to the language code.
*/
- public @NonNull Builder setLabels(@NonNull Map<ULocale, String> labels) {
- mLabels = new HashMap<ULocale, String>(labels);
+ public @NonNull Builder setLabels(@NonNull Map<ULocale, CharSequence> labels) {
+ mLabels = new HashMap<ULocale, CharSequence>(labels);
return this;
}
/**
* Indicate whether the presentation contains audio description for the visually impaired.
*
- * @param audioDescriptionAvailable
+ * @param audioDescriptionAvailable Audio description for the visually impaired.
*/
public @NonNull Builder setHasAudioDescription(boolean audioDescriptionAvailable) {
mAudioDescriptionAvailable = audioDescriptionAvailable;
@@ -359,7 +362,7 @@
/**
* Indicate whether the presentation contains spoken subtitles for the visually impaired.
*
- * @param spokenSubtitlesAvailable
+ * @param spokenSubtitlesAvailable Spoken subtitles for the visually impaired.
*/
public @NonNull Builder setHasSpokenSubtitles(boolean spokenSubtitlesAvailable) {
mSpokenSubtitlesAvailable = spokenSubtitlesAvailable;
@@ -369,7 +372,7 @@
/**
* Indicate whether the presentation supports dialogue enhancement.
*
- * @param dialogueEnhancementAvailable
+ * @param dialogueEnhancementAvailable Dialogue enhancement.
*/
public @NonNull Builder setHasDialogueEnhancement(boolean dialogueEnhancementAvailable) {
mDialogueEnhancementAvailable = dialogueEnhancementAvailable;
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index ec1a854..3d5120f 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -653,7 +653,16 @@
AudioPolicy audioPolicy = new AudioPolicy.Builder(/*context=*/ null)
.setMediaProjection(projection)
.addMix(audioMix).build();
+
+ int error = AudioManager.registerAudioPolicyStatic(audioPolicy);
+ if (error != 0) {
+ throw new UnsupportedOperationException("Error: could not register audio policy");
+ }
+
AudioRecord record = audioPolicy.createAudioRecordSink(audioMix);
+ if (record == null) {
+ throw new UnsupportedOperationException("Cannot create AudioRecord");
+ }
record.unregisterAudioPolicyOnRelease(audioPolicy);
return record;
}
diff --git a/media/java/android/media/AudioRecordingConfiguration.java b/media/java/android/media/AudioRecordingConfiguration.java
index 0af47e8..82bcbc1 100644
--- a/media/java/android/media/AudioRecordingConfiguration.java
+++ b/media/java/android/media/AudioRecordingConfiguration.java
@@ -317,7 +317,7 @@
return new ArrayList<AudioEffect.Descriptor>(Arrays.asList(mDeviceEffects));
}
- public static final Parcelable.Creator<AudioRecordingConfiguration> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioRecordingConfiguration> CREATOR
= new Parcelable.Creator<AudioRecordingConfiguration>() {
/**
* Rebuilds an AudioRecordingConfiguration previously stored with writeToParcel().
diff --git a/media/java/android/media/AudioRoutesInfo.java b/media/java/android/media/AudioRoutesInfo.java
index 83cd797..46df388 100644
--- a/media/java/android/media/AudioRoutesInfo.java
+++ b/media/java/android/media/AudioRoutesInfo.java
@@ -76,7 +76,7 @@
dest.writeInt(mainType);
}
- public static final Parcelable.Creator<AudioRoutesInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioRoutesInfo> CREATOR
= new Parcelable.Creator<AudioRoutesInfo>() {
public AudioRoutesInfo createFromParcel(Parcel in) {
return new AudioRoutesInfo(in);
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index b2f970a..a976d70 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -920,6 +920,41 @@
@UnsupportedAppUsage
private static native int setStreamVolumeIndex(int stream, int index, int device);
public static native int getStreamVolumeIndex(int stream, int device);
+ /**
+ * @hide
+ * set a volume for the given {@link AudioAttributes} and for all other stream that belong to
+ * the same volume group.
+ * @param attributes the {@link AudioAttributes} to be considered
+ * @param index to be applied
+ * @param device the volume device to be considered
+ * @return command completion status.
+ */
+ public static native int setVolumeIndexForAttributes(@NonNull AudioAttributes attributes,
+ int index, int device);
+ /**
+ * @hide
+ * get the volume index for the given {@link AudioAttributes}.
+ * @param attributes the {@link AudioAttributes} to be considered
+ * @param device the volume device to be considered
+ * @return volume index for the given {@link AudioAttributes} and volume device.
+ */
+ public static native int getVolumeIndexForAttributes(@NonNull AudioAttributes attributes,
+ int device);
+ /**
+ * @hide
+ * get the minimum volume index for the given {@link AudioAttributes}.
+ * @param attributes the {@link AudioAttributes} to be considered
+ * @return minimum volume index for the given {@link AudioAttributes}.
+ */
+ public static native int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attributes);
+ /**
+ * @hide
+ * get the maximum volume index for the given {@link AudioAttributes}.
+ * @param attributes the {@link AudioAttributes} to be considered
+ * @return maximum volume index for the given {@link AudioAttributes}.
+ */
+ public static native int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attributes);
+
public static native int setMasterVolume(float value);
public static native float getMasterVolume();
@UnsupportedAppUsage
diff --git a/media/java/android/media/IAudioFocusDispatcher.aidl b/media/java/android/media/IAudioFocusDispatcher.aidl
index 3b33c5b..e3512fa 100644
--- a/media/java/android/media/IAudioFocusDispatcher.aidl
+++ b/media/java/android/media/IAudioFocusDispatcher.aidl
@@ -23,6 +23,7 @@
*/
oneway interface IAudioFocusDispatcher {
+ @UnsupportedAppUsage
void dispatchAudioFocusChange(int focusChange, String clientId);
void dispatchFocusResultFromExtPolicy(int requestResult, String clientId);
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index abdc3c9..1b82fcc 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -34,6 +34,7 @@
import android.media.VolumePolicy;
import android.media.audiopolicy.AudioPolicyConfig;
import android.media.audiopolicy.AudioProductStrategies;
+import android.media.audiopolicy.AudioVolumeGroups;
import android.media.audiopolicy.IAudioPolicyCallback;
import android.media.projection.IMediaProjection;
@@ -65,6 +66,7 @@
void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage);
+ @UnsupportedAppUsage
void setStreamVolume(int streamType, int index, int flags, String callingPackage);
boolean isStreamMute(int streamType);
@@ -75,12 +77,24 @@
void setMasterMute(boolean mute, int flags, String callingPackage, int userId);
+ @UnsupportedAppUsage
int getStreamVolume(int streamType);
int getStreamMinVolume(int streamType);
+ @UnsupportedAppUsage
int getStreamMaxVolume(int streamType);
+ AudioVolumeGroups listAudioVolumeGroups();
+
+ void setVolumeIndexForAttributes(in AudioAttributes aa, int index, int flags, String callingPackage);
+
+ int getVolumeIndexForAttributes(in AudioAttributes aa);
+
+ int getMaxVolumeIndexForAttributes(in AudioAttributes aa);
+
+ int getMinVolumeIndexForAttributes(in AudioAttributes aa);
+
int getLastAudibleStreamVolume(int streamType);
AudioProductStrategies getAudioProductStrategies();
@@ -160,6 +174,7 @@
int handleBluetoothA2dpActiveDeviceChange(in BluetoothDevice device,
int state, int profile, boolean suppressNoisyIntent, int a2dpVolume);
+ @UnsupportedAppUsage
AudioRoutesInfo startWatchingRoutes(in IAudioRoutesObserver observer);
boolean isCameraSoundForced();
diff --git a/media/java/android/media/IMediaScannerService.aidl b/media/java/android/media/IMediaScannerService.aidl
index c531646..24b5595 100644
--- a/media/java/android/media/IMediaScannerService.aidl
+++ b/media/java/android/media/IMediaScannerService.aidl
@@ -31,6 +31,7 @@
* @param listener an optional IMediaScannerListener.
* If specified, the caller will be notified when scanning is complete via the listener.
*/
+ @UnsupportedAppUsage
void requestScanFile(String path, String mimeType, in IMediaScannerListener listener);
/**
@@ -40,5 +41,6 @@
* @param mimeType an optional mimeType for the file.
* If mimeType is null, then the mimeType will be inferred from the file extension.
*/
+ @UnsupportedAppUsage
void scanFile(String path, String mimeType);
}
diff --git a/media/java/android/media/IRemoteDisplayCallback.aidl b/media/java/android/media/IRemoteDisplayCallback.aidl
index 19cf070..584417d 100644
--- a/media/java/android/media/IRemoteDisplayCallback.aidl
+++ b/media/java/android/media/IRemoteDisplayCallback.aidl
@@ -22,5 +22,6 @@
* {@hide}
*/
oneway interface IRemoteDisplayCallback {
+ @UnsupportedAppUsage
void onStateChanged(in RemoteDisplayState state);
}
diff --git a/media/java/android/media/MediaDescription.java b/media/java/android/media/MediaDescription.java
index 39eeb3e..458562a 100644
--- a/media/java/android/media/MediaDescription.java
+++ b/media/java/android/media/MediaDescription.java
@@ -268,7 +268,7 @@
return mTitle + ", " + mSubtitle + ", " + mDescription;
}
- public static final Parcelable.Creator<MediaDescription> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaDescription> CREATOR =
new Parcelable.Creator<MediaDescription>() {
@Override
public MediaDescription createFromParcel(Parcel in) {
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
index 5f324f7..d724762 100644
--- a/media/java/android/media/MediaHTTPConnection.java
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -37,7 +37,6 @@
import java.net.UnknownServiceException;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
/** @hide */
public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
@@ -67,7 +66,6 @@
// from com.squareup.okhttp.internal.http
private final static int HTTP_TEMP_REDIRECT = 307;
private final static int MAX_REDIRECTS = 20;
- private AtomicBoolean mIsConnected = new AtomicBoolean(false);
@UnsupportedAppUsage
public MediaHTTPConnection() {
@@ -91,7 +89,6 @@
mAllowCrossDomainRedirect = true;
mURL = new URL(uri);
mHeaders = convertHeaderStringToMap(headers);
- mIsConnected.set(true);
} catch (MalformedURLException e) {
return null;
}
@@ -142,14 +139,7 @@
@Override
@UnsupportedAppUsage
public void disconnect() {
- if (mIsConnected.getAndSet(false)) {
- (new Thread() {
- @Override
- public void run() {
- teardownConnection();
- }
- }).start();
- }
+ teardownConnection();
mHeaders = null;
mURL = null;
}
@@ -334,14 +324,7 @@
@Override
@UnsupportedAppUsage
public int readAt(long offset, int size) {
- if (!mIsConnected.get()) {
- return -1;
- }
- int result = native_readAt(offset, size);
- if (!mIsConnected.get()) {
- return -1;
- }
- return result;
+ return native_readAt(offset, size);
}
private int readAt(long offset, byte[] data, int size) {
diff --git a/media/java/android/media/MediaMetadata.java b/media/java/android/media/MediaMetadata.java
index dea98d5..8512dbe 100644
--- a/media/java/android/media/MediaMetadata.java
+++ b/media/java/android/media/MediaMetadata.java
@@ -632,7 +632,7 @@
return EDITOR_KEY_MAPPING.get(editorKey, null);
}
- public static final Parcelable.Creator<MediaMetadata> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaMetadata> CREATOR =
new Parcelable.Creator<MediaMetadata>() {
@Override
public MediaMetadata createFromParcel(Parcel in) {
diff --git a/media/java/android/media/MediaParceledListSlice.java b/media/java/android/media/MediaParceledListSlice.java
index 16a37d9..e90d9a4 100644
--- a/media/java/android/media/MediaParceledListSlice.java
+++ b/media/java/android/media/MediaParceledListSlice.java
@@ -185,7 +185,7 @@
return contents;
}
- public static final Parcelable.Creator<MediaParceledListSlice> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaParceledListSlice> CREATOR =
new Parcelable.Creator<MediaParceledListSlice>() {
@Override
public MediaParceledListSlice createFromParcel(Parcel in) {
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 08ce9fc..abbfa88 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -1103,7 +1103,7 @@
setDataSource(afd);
return true;
} catch (NullPointerException | SecurityException | IOException ex) {
- Log.w(TAG, "Couldn't open " + uri + ": " + ex);
+ Log.w(TAG, "Couldn't open " + uri == null ? "null uri" : uri.toSafeString(), ex);
return false;
}
}
@@ -2519,7 +2519,7 @@
* Used to read a TrackInfo from a Parcel.
*/
@UnsupportedAppUsage
- static final Parcelable.Creator<TrackInfo> CREATOR
+ static final @android.annotation.NonNull Parcelable.Creator<TrackInfo> CREATOR
= new Parcelable.Creator<TrackInfo>() {
@Override
public TrackInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/MediaRouterClientState.java b/media/java/android/media/MediaRouterClientState.java
index 7643924..1fe4eef 100644
--- a/media/java/android/media/MediaRouterClientState.java
+++ b/media/java/android/media/MediaRouterClientState.java
@@ -68,7 +68,7 @@
return "MediaRouterClientState{ routes=" + routes.toString() + " }";
}
- public static final Parcelable.Creator<MediaRouterClientState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaRouterClientState> CREATOR =
new Parcelable.Creator<MediaRouterClientState>() {
@Override
public MediaRouterClientState createFromParcel(Parcel in) {
@@ -180,7 +180,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<RouteInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RouteInfo> CREATOR =
new Parcelable.Creator<RouteInfo>() {
@Override
public RouteInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/PlaybackParams.java b/media/java/android/media/PlaybackParams.java
index 3fe1a32..b4325b6 100644
--- a/media/java/android/media/PlaybackParams.java
+++ b/media/java/android/media/PlaybackParams.java
@@ -234,7 +234,7 @@
return mSpeed;
}
- public static final Parcelable.Creator<PlaybackParams> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PlaybackParams> CREATOR =
new Parcelable.Creator<PlaybackParams>() {
@Override
public PlaybackParams createFromParcel(Parcel in) {
diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java
index 7c6367e..34d56ed 100644
--- a/media/java/android/media/PlayerBase.java
+++ b/media/java/android/media/PlayerBase.java
@@ -535,7 +535,7 @@
dest.writeStrongBinder(mIPlayer == null ? null : mIPlayer.asBinder());
}
- public static final Parcelable.Creator<PlayerIdCard> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PlayerIdCard> CREATOR
= new Parcelable.Creator<PlayerIdCard>() {
/**
* Rebuilds an PlayerIdCard previously stored with writeToParcel().
diff --git a/media/java/android/media/Rating.java b/media/java/android/media/Rating.java
index ffe7e48..be75258 100644
--- a/media/java/android/media/Rating.java
+++ b/media/java/android/media/Rating.java
@@ -116,7 +116,7 @@
dest.writeFloat(mRatingValue);
}
- public static final Parcelable.Creator<Rating> CREATOR = new Parcelable.Creator<Rating>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<Rating> CREATOR = new Parcelable.Creator<Rating>() {
/**
* Rebuilds a Rating previously stored with writeToParcel().
* @param p Parcel object to read the Rating from
diff --git a/media/java/android/media/RemoteDisplayState.java b/media/java/android/media/RemoteDisplayState.java
index f8a4605..2f4ace0 100644
--- a/media/java/android/media/RemoteDisplayState.java
+++ b/media/java/android/media/RemoteDisplayState.java
@@ -76,7 +76,7 @@
dest.writeTypedList(displays);
}
- public static final Parcelable.Creator<RemoteDisplayState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RemoteDisplayState> CREATOR =
new Parcelable.Creator<RemoteDisplayState>() {
@Override
public RemoteDisplayState createFromParcel(Parcel in) {
@@ -176,7 +176,7 @@
}
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<RemoteDisplayInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RemoteDisplayInfo> CREATOR =
new Parcelable.Creator<RemoteDisplayInfo>() {
@Override
public RemoteDisplayInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/VolumePolicy.java b/media/java/android/media/VolumePolicy.java
index bd6667f..b193b70 100644
--- a/media/java/android/media/VolumePolicy.java
+++ b/media/java/android/media/VolumePolicy.java
@@ -95,7 +95,7 @@
dest.writeInt(vibrateToSilentDebounce);
}
- public static final Parcelable.Creator<VolumePolicy> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VolumePolicy> CREATOR
= new Parcelable.Creator<VolumePolicy>() {
@Override
public VolumePolicy createFromParcel(Parcel p) {
diff --git a/media/java/android/media/VolumeShaper.java b/media/java/android/media/VolumeShaper.java
index 2f33e75..663d564 100644
--- a/media/java/android/media/VolumeShaper.java
+++ b/media/java/android/media/VolumeShaper.java
@@ -501,7 +501,7 @@
}
}
- public static final Parcelable.Creator<VolumeShaper.Configuration> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VolumeShaper.Configuration> CREATOR
= new Parcelable.Creator<VolumeShaper.Configuration>() {
@Override
public VolumeShaper.Configuration createFromParcel(Parcel p) {
@@ -1178,7 +1178,7 @@
dest.writeFloat(mXOffset);
}
- public static final Parcelable.Creator<VolumeShaper.Operation> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VolumeShaper.Operation> CREATOR
= new Parcelable.Creator<VolumeShaper.Operation>() {
@Override
public VolumeShaper.Operation createFromParcel(Parcel p) {
@@ -1397,7 +1397,7 @@
dest.writeFloat(mXOffset);
}
- public static final Parcelable.Creator<VolumeShaper.State> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<VolumeShaper.State> CREATOR
= new Parcelable.Creator<VolumeShaper.State>() {
@Override
public VolumeShaper.State createFromParcel(Parcel p) {
diff --git a/media/java/android/media/audiopolicy/AudioPolicyConfig.java b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
index a56fd31..a6e63c7 100644
--- a/media/java/android/media/audiopolicy/AudioPolicyConfig.java
+++ b/media/java/android/media/audiopolicy/AudioPolicyConfig.java
@@ -136,7 +136,7 @@
}
}
- public static final Parcelable.Creator<AudioPolicyConfig> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioPolicyConfig> CREATOR
= new Parcelable.Creator<AudioPolicyConfig>() {
/**
* Rebuilds an AudioPolicyConfig previously stored with writeToParcel().
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategies.java b/media/java/android/media/audiopolicy/AudioProductStrategies.java
index 6a2375f..98b6d97 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategies.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategies.java
@@ -177,7 +177,50 @@
@Nullable
public AudioProductStrategy getProductStrategyForAudioAttributes(@NonNull AudioAttributes aa) {
Preconditions.checkNotNull(aa, "attributes must not be null");
- return getById(native_get_product_strategies_from_audio_attributes(aa));
+ int productStrategyId = native_get_product_strategies_from_audio_attributes(aa);
+ if (productStrategyId < 0) {
+ Log.w(TAG, "no strategy found for Attributes " + aa.toString());
+ return null;
+ }
+ return getById(productStrategyId);
+ }
+
+ /**
+ * @hide
+ * @param attributes the {@link AudioAttributes} to be considered
+ * @return volume group associated to the given {@link AudioAttributes}.
+ * If no group supports the given {@link AudioAttributes}, it returns the volume group
+ * for the default attributes.
+ * If no group supports the default attributes, it returns {@link #DEFAULT_VOLUME_GROUP}
+ */
+ @SystemApi
+ public int getVolumeGroupIdForAttributes(@NonNull AudioAttributes attributes) {
+ Preconditions.checkNotNull(attributes, "attributes must not be null");
+ int volumeGroupId = getVolumeGroupIdForAttributesInt(attributes);
+ if (volumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
+ return volumeGroupId;
+ }
+ // The default volume group is the one hosted by default product strategy, i.e.
+ // supporting Default Attributes
+ return getVolumeGroupIdForAttributesInt(AudioProductStrategy.sDefaultAttributes);
+ }
+
+ /**
+ * @hide
+ * @param streamType to be considered
+ * @return volume group associated to the given stream type.
+ */
+ @SystemApi
+ public int getVolumeGroupIdForLegacyStreamType(int streamType) {
+ for (final AudioProductStrategy productStrategy : this) {
+ int volumeGroupId = productStrategy.getVolumeGroupIdForLegacyStreamType(streamType);
+ if (volumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
+ return volumeGroupId;
+ }
+ }
+ // The default volume group is the one hosted by default product strategy, i.e.
+ // supporting Default Attributes
+ return getVolumeGroupIdForAttributesInt(AudioProductStrategy.sDefaultAttributes);
}
@Override
@@ -193,7 +236,22 @@
}
}
- public static final Parcelable.Creator<AudioProductStrategies> CREATOR =
+ /**
+ * @param attributes to be considered
+ * @return volume group associated to the given {@link AudioAttributes}.
+ */
+ private int getVolumeGroupIdForAttributesInt(@NonNull AudioAttributes attributes) {
+ Preconditions.checkNotNull(attributes, "attributes must not be null");
+ for (final AudioProductStrategy productStrategy : this) {
+ int volumeGroupId = productStrategy.getVolumeGroupIdForAudioAttributes(attributes);
+ if (volumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
+ return volumeGroupId;
+ }
+ }
+ return AudioVolumeGroups.DEFAULT_VOLUME_GROUP;
+ }
+
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioProductStrategies> CREATOR =
new Parcelable.Creator<AudioProductStrategies>() {
@Override
public AudioProductStrategies createFromParcel(@NonNull Parcel in) {
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java
index af6e8bf..48500e01 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategy.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java
@@ -157,32 +157,32 @@
/**
* @hide
* @param streamType legacy stream type used for volume operation only
- * @return the {@link AudioAttributes} relevant for the given streamType.
- * If none is found, it builds the default attributes.
+ * @return the volume group id relevant for the given streamType.
+ * If none is found, {@link AudioVolumeGroups#DEFAULT_VOLUME_GROUP} is returned.
*/
- public int getGroupIdForLegacyStreamType(int streamType) {
+ public int getVolumeGroupIdForLegacyStreamType(int streamType) {
for (final AudioAttributesGroup aag : mAudioAttributesGroups) {
if (aag.supportsStreamType(streamType)) {
- return aag.getGroupId();
+ return aag.getVolumeGroupId();
}
}
- return DEFAULT_GROUP;
+ return AudioVolumeGroups.DEFAULT_VOLUME_GROUP;
}
/**
* @hide
* @param aa the {@link AudioAttributes} to be considered
- * @return the group id associated with the given audio attributes if found,
- * default value otherwise.
+ * @return the volume group id associated with the given audio attributes if found,
+ * {@link AudioVolumeGroups#DEFAULT_VOLUME_GROUP} otherwise.
*/
- public int getGroupIdForAudioAttributes(@NonNull AudioAttributes aa) {
+ public int getVolumeGroupIdForAudioAttributes(@NonNull AudioAttributes aa) {
Preconditions.checkNotNull(aa, "AudioAttributes must not be null");
for (final AudioAttributesGroup aag : mAudioAttributesGroups) {
if (aag.supportsAttributes(aa)) {
- return aag.getGroupId();
+ return aag.getVolumeGroupId();
}
}
- return DEFAULT_GROUP;
+ return AudioVolumeGroups.DEFAULT_VOLUME_GROUP;
}
@Override
@@ -200,7 +200,7 @@
}
}
- public static final Parcelable.Creator<AudioProductStrategy> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioProductStrategy> CREATOR =
new Parcelable.Creator<AudioProductStrategy>() {
@Override
public AudioProductStrategy createFromParcel(@NonNull Parcel in) {
@@ -266,15 +266,14 @@
&& ((refFormattedTags.length() == 0) || refFormattedTags.equals(cliFormattedTags));
}
-
private static final class AudioAttributesGroup implements Parcelable {
- private int mGroupId;
+ private int mVolumeGroupId;
private int mLegacyStreamType;
private final AudioAttributes[] mAudioAttributes;
- AudioAttributesGroup(int groupId, int streamType,
+ AudioAttributesGroup(int volumeGroupId, int streamType,
@NonNull AudioAttributes[] audioAttributes) {
- mGroupId = groupId;
+ mVolumeGroupId = volumeGroupId;
mLegacyStreamType = streamType;
mAudioAttributes = audioAttributes;
}
@@ -286,7 +285,7 @@
AudioAttributesGroup thatAag = (AudioAttributesGroup) o;
- return mGroupId == thatAag.mGroupId
+ return mVolumeGroupId == thatAag.mVolumeGroupId
&& mLegacyStreamType == thatAag.mLegacyStreamType
&& mAudioAttributes.equals(thatAag.mAudioAttributes);
}
@@ -295,8 +294,8 @@
return mLegacyStreamType;
}
- public int getGroupId() {
- return mGroupId;
+ public int getVolumeGroupId() {
+ return mVolumeGroupId;
}
public @NonNull AudioAttributes getAudioAttributes() {
@@ -331,7 +330,7 @@
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
- dest.writeInt(mGroupId);
+ dest.writeInt(mVolumeGroupId);
dest.writeInt(mLegacyStreamType);
dest.writeInt(mAudioAttributes.length);
for (AudioAttributes attributes : mAudioAttributes) {
@@ -339,18 +338,18 @@
}
}
- public static final Parcelable.Creator<AudioAttributesGroup> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioAttributesGroup> CREATOR =
new Parcelable.Creator<AudioAttributesGroup>() {
@Override
public AudioAttributesGroup createFromParcel(@NonNull Parcel in) {
- int groupId = in.readInt();
+ int volumeGroupId = in.readInt();
int streamType = in.readInt();
int nbAttributes = in.readInt();
AudioAttributes[] aa = new AudioAttributes[nbAttributes];
for (int index = 0; index < nbAttributes; index++) {
aa[index] = AudioAttributes.CREATOR.createFromParcel(in);
}
- return new AudioAttributesGroup(groupId, streamType, aa);
+ return new AudioAttributesGroup(volumeGroupId, streamType, aa);
}
@Override
@@ -365,8 +364,8 @@
StringBuilder s = new StringBuilder();
s.append("\n Legacy Stream Type: ");
s.append(Integer.toString(mLegacyStreamType));
- s.append(" Group Id: ");
- s.append(Integer.toString(mGroupId));
+ s.append(" Volume Group Id: ");
+ s.append(Integer.toString(mVolumeGroupId));
for (AudioAttributes attribute : mAudioAttributes) {
s.append("\n -");
diff --git a/media/java/android/media/audiopolicy/AudioVolumeGroup.aidl b/media/java/android/media/audiopolicy/AudioVolumeGroup.aidl
new file mode 100644
index 0000000..caf1e0d
--- /dev/null
+++ b/media/java/android/media/audiopolicy/AudioVolumeGroup.aidl
@@ -0,0 +1,18 @@
+/* Copyright 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.
+*/
+
+package android.media.audiopolicy;
+
+parcelable AudioVolumeGroup;
diff --git a/media/java/android/media/audiopolicy/AudioVolumeGroup.java b/media/java/android/media/audiopolicy/AudioVolumeGroup.java
new file mode 100644
index 0000000..0b4ba93
--- /dev/null
+++ b/media/java/android/media/audiopolicy/AudioVolumeGroup.java
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ */
+
+package android.media.audiopolicy;
+
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.media.AudioAttributes;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A class to create the association between different playback attributes
+ * (e.g. media, mapping direction) to a single volume control.
+ * @hide
+ */
+@SystemApi
+public final class AudioVolumeGroup implements Parcelable {
+ /**
+ * Unique identifier of a volume group.
+ */
+ private int mId;
+ /**
+ * human-readable name of this volume group.
+ */
+ private final String mName;
+
+ private final AudioAttributes[] mAudioAttributes;
+ private int[] mLegacyStreamTypes;
+
+ /**
+ * @param name of the volume group
+ * @param id of the volume group
+ * @param followers {@link AudioProductStrategies} strategy following this volume group
+ */
+ AudioVolumeGroup(@NonNull String name, int id,
+ @NonNull AudioAttributes[] audioAttributes,
+ @NonNull int[] legacyStreamTypes) {
+ Preconditions.checkNotNull(name, "name must not be null");
+ Preconditions.checkNotNull(audioAttributes, "audioAttributes must not be null");
+ Preconditions.checkNotNull(legacyStreamTypes, "legacyStreamTypes must not be null");
+ mName = name;
+ mId = id;
+ mAudioAttributes = audioAttributes;
+ mLegacyStreamTypes = legacyStreamTypes;
+ }
+
+ @Override
+ public boolean equals(@NonNull Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ AudioVolumeGroup thatAvg = (AudioVolumeGroup) o;
+
+ return mName == thatAvg.mName && mId == thatAvg.mId
+ && mAudioAttributes.equals(thatAvg.mAudioAttributes);
+ }
+
+ /**
+ * @return List of {@link AudioAttributes} involved in this {@link AudioVolumeGroup}.
+ */
+ public List<AudioAttributes> getAudioAttributes() {
+ return Arrays.asList(mAudioAttributes);
+ }
+
+ /**
+ * @return the stream types involved in this {@link AudioVolumeGroup}.
+ */
+ public @NonNull int[] getLegacyStreamTypes() {
+ return mLegacyStreamTypes;
+ }
+
+ /**
+ * @return human-readable name of this volume group.
+ */
+ public @NonNull String name() {
+ return mName;
+ }
+
+ /**
+ * @return the volume group unique identifier id.
+ */
+ public int getId() {
+ return mId;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ dest.writeString(mName);
+ dest.writeInt(mId);
+ dest.writeInt(mAudioAttributes.length);
+ for (AudioAttributes attributes : mAudioAttributes) {
+ attributes.writeToParcel(dest, flags | AudioAttributes.FLATTEN_TAGS/*flags*/);
+ }
+ dest.writeInt(mLegacyStreamTypes.length);
+ for (int streamType : mLegacyStreamTypes) {
+ dest.writeInt(streamType);
+ }
+ }
+
+ public static final Parcelable.Creator<AudioVolumeGroup> CREATOR =
+ new Parcelable.Creator<AudioVolumeGroup>() {
+ @Override
+ public @NonNull AudioVolumeGroup createFromParcel(@NonNull Parcel in) {
+ Preconditions.checkNotNull(in, "in Parcel must not be null");
+ String name = in.readString();
+ int id = in.readInt();
+ int nbAttributes = in.readInt();
+ AudioAttributes[] audioAttributes = new AudioAttributes[nbAttributes];
+ for (int index = 0; index < nbAttributes; index++) {
+ audioAttributes[index] = AudioAttributes.CREATOR.createFromParcel(in);
+ }
+ int nbStreamTypes = in.readInt();
+ int[] streamTypes = new int[nbStreamTypes];
+ for (int index = 0; index < nbStreamTypes; index++) {
+ streamTypes[index] = in.readInt();
+ }
+ return new AudioVolumeGroup(name, id, audioAttributes, streamTypes);
+ }
+
+ @Override
+ public @NonNull AudioVolumeGroup[] newArray(int size) {
+ return new AudioVolumeGroup[size];
+ }
+ };
+
+ @Override
+ public @NonNull String toString() {
+ StringBuilder s = new StringBuilder();
+ s.append("\n Name: ");
+ s.append(mName);
+ s.append(" Id: ");
+ s.append(Integer.toString(mId));
+
+ s.append("\n Supported Audio Attributes:");
+ for (AudioAttributes attribute : mAudioAttributes) {
+ s.append("\n -");
+ s.append(attribute.toString());
+ }
+ s.append("\n Supported Legacy Stream Types: { ");
+ for (int legacyStreamType : mLegacyStreamTypes) {
+ s.append(Integer.toString(legacyStreamType));
+ s.append(" ");
+ }
+ s.append("}");
+ return s.toString();
+ }
+}
diff --git a/media/java/android/media/audiopolicy/AudioVolumeGroupChangeHandler.java b/media/java/android/media/audiopolicy/AudioVolumeGroupChangeHandler.java
new file mode 100644
index 0000000..074188e
--- /dev/null
+++ b/media/java/android/media/audiopolicy/AudioVolumeGroupChangeHandler.java
@@ -0,0 +1,167 @@
+/*
+ * 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.
+ */
+
+package android.media.audiopolicy;
+
+import android.annotation.NonNull;
+import android.media.AudioManager;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+
+import com.android.internal.util.Preconditions;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+/**
+ * The AudioVolumeGroupChangeHandler handles AudioManager.OnAudioVolumeGroupChangedListener
+ * callbacks posted from JNI
+ *
+ * TODO: Make use of Executor of callbacks.
+ * @hide
+ */
+public class AudioVolumeGroupChangeHandler {
+ private Handler mHandler;
+ private HandlerThread mHandlerThread;
+ private final ArrayList<AudioManager.VolumeGroupCallback> mListeners =
+ new ArrayList<AudioManager.VolumeGroupCallback>();
+
+ private static final String TAG = "AudioVolumeGroupChangeHandler";
+
+ private static final int AUDIOVOLUMEGROUP_EVENT_VOLUME_CHANGED = 1000;
+ private static final int AUDIOVOLUMEGROUP_EVENT_NEW_LISTENER = 4;
+
+ /**
+ * Accessed by native methods: JNI Callback context.
+ */
+ @SuppressWarnings("unused")
+ private long mJniCallback;
+
+ /**
+ * Initialization
+ */
+ public void init() {
+ synchronized (this) {
+ if (mHandler != null) {
+ return;
+ }
+ // create a new thread for our new event handler
+ mHandlerThread = new HandlerThread(TAG);
+ mHandlerThread.start();
+
+ if (mHandlerThread.getLooper() == null) {
+ mHandler = null;
+ return;
+ }
+ mHandler = new Handler(mHandlerThread.getLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ ArrayList<AudioManager.VolumeGroupCallback> listeners;
+ synchronized (this) {
+ if (msg.what == AUDIOVOLUMEGROUP_EVENT_NEW_LISTENER) {
+ listeners =
+ new ArrayList<AudioManager.VolumeGroupCallback>();
+ if (mListeners.contains(msg.obj)) {
+ listeners.add(
+ (AudioManager.VolumeGroupCallback) msg.obj);
+ }
+ } else {
+ listeners = mListeners;
+ }
+ }
+ if (listeners.isEmpty()) {
+ return;
+ }
+
+ switch (msg.what) {
+ case AUDIOVOLUMEGROUP_EVENT_VOLUME_CHANGED:
+ for (int i = 0; i < listeners.size(); i++) {
+ listeners.get(i).onAudioVolumeGroupChanged((int) msg.arg1,
+ (int) msg.arg2);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ };
+ native_setup(new WeakReference<AudioVolumeGroupChangeHandler>(this));
+ }
+ }
+
+ private native void native_setup(Object moduleThis);
+
+ @Override
+ protected void finalize() {
+ native_finalize();
+ if (mHandlerThread.isAlive()) {
+ mHandlerThread.quit();
+ }
+ }
+ private native void native_finalize();
+
+ /**
+ * @param cb the {@link AudioManager.VolumeGroupCallback} to register
+ */
+ public void registerListener(@NonNull AudioManager.VolumeGroupCallback cb) {
+ Preconditions.checkNotNull(cb, "volume group callback shall not be null");
+ synchronized (this) {
+ mListeners.add(cb);
+ }
+ if (mHandler != null) {
+ Message m = mHandler.obtainMessage(
+ AUDIOVOLUMEGROUP_EVENT_NEW_LISTENER, 0, 0, cb);
+ mHandler.sendMessage(m);
+ }
+ }
+
+ /**
+ * @param cb the {@link AudioManager.VolumeGroupCallback} to unregister
+ */
+ public void unregisterListener(@NonNull AudioManager.VolumeGroupCallback cb) {
+ Preconditions.checkNotNull(cb, "volume group callback shall not be null");
+ synchronized (this) {
+ mListeners.remove(cb);
+ }
+ }
+
+ Handler handler() {
+ return mHandler;
+ }
+
+ @SuppressWarnings("unused")
+ private static void postEventFromNative(Object moduleRef,
+ int what, int arg1, int arg2, Object obj) {
+ AudioVolumeGroupChangeHandler eventHandler =
+ (AudioVolumeGroupChangeHandler) ((WeakReference) moduleRef).get();
+ if (eventHandler == null) {
+ return;
+ }
+
+ if (eventHandler != null) {
+ Handler handler = eventHandler.handler();
+ if (handler != null) {
+ Message m = handler.obtainMessage(what, arg1, arg2, obj);
+ if (what != AUDIOVOLUMEGROUP_EVENT_NEW_LISTENER) {
+ handler.removeMessages(what);
+ }
+ handler.sendMessage(m);
+ }
+ }
+ }
+}
diff --git a/media/java/android/media/audiopolicy/AudioVolumeGroups.aidl b/media/java/android/media/audiopolicy/AudioVolumeGroups.aidl
new file mode 100644
index 0000000..918cac3
--- /dev/null
+++ b/media/java/android/media/audiopolicy/AudioVolumeGroups.aidl
@@ -0,0 +1,18 @@
+/* Copyright 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.
+*/
+
+package android.media.audiopolicy;
+
+parcelable AudioVolumeGroups;
diff --git a/media/java/android/media/audiopolicy/AudioVolumeGroups.java b/media/java/android/media/audiopolicy/AudioVolumeGroups.java
new file mode 100644
index 0000000..301bec7
--- /dev/null
+++ b/media/java/android/media/audiopolicy/AudioVolumeGroups.java
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+package android.media.audiopolicy;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.media.AudioSystem;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * @hide
+ * A class to encapsulate a collection of {@link AudioVolumeGroup}.
+ */
+@SystemApi
+public final class AudioVolumeGroups implements Iterable<AudioVolumeGroup>, Parcelable {
+
+ private final ArrayList<AudioVolumeGroup> mAudioVolumeGroupList;
+
+ private static final String TAG = "AudioVolumeGroups";
+
+ /**
+ * Volume group value to use when introspection API fails.
+ */
+ public static final int DEFAULT_VOLUME_GROUP = -1;
+
+ public AudioVolumeGroups() {
+ ArrayList<AudioVolumeGroup> avgList = new ArrayList<AudioVolumeGroup>();
+ int status = native_list_audio_volume_groups(avgList);
+ if (status != AudioSystem.SUCCESS) {
+ Log.w(TAG, ": listAudioVolumeGroups failed");
+ }
+ mAudioVolumeGroupList = avgList;
+ }
+
+ private AudioVolumeGroups(@NonNull ArrayList<AudioVolumeGroup> audioVolumeGroupList) {
+ Preconditions.checkNotNull(audioVolumeGroupList, "audioVolumeGroupList must not be null");
+ mAudioVolumeGroupList = audioVolumeGroupList;
+ }
+
+ /**
+ * @return number of {@link AudioProductStrategy} objects
+ */
+ public int size() {
+ return mAudioVolumeGroupList.size();
+ }
+
+ /**
+ * Returns an {@link Iterator}
+ */
+ @Override
+ public Iterator<AudioVolumeGroup> iterator() {
+ return mAudioVolumeGroupList.iterator();
+ }
+
+ @Override
+ public boolean equals(@NonNull Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ AudioVolumeGroups that = (AudioVolumeGroups) o;
+
+ return mAudioVolumeGroupList.equals(that.mAudioVolumeGroupList);
+ }
+
+ /**
+ * @return the matching {@link AudioVolumeGroup} objects with the given id,
+ * null object if not found.
+ */
+ public @Nullable AudioVolumeGroup getById(int volumeGroupId) {
+ for (final AudioVolumeGroup avg : this) {
+ if (avg.getId() == volumeGroupId) {
+ return avg;
+ }
+ }
+ Log.e(TAG, ": invalid volume group id: " + volumeGroupId + " requested");
+ return null;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ dest.writeInt(size());
+ for (final AudioVolumeGroup volumeGroup : this) {
+ volumeGroup.writeToParcel(dest, flags);
+ }
+ }
+
+ private static native int native_list_audio_volume_groups(
+ ArrayList<AudioVolumeGroup> groups);
+
+ public static final Parcelable.Creator<AudioVolumeGroups> CREATOR =
+ new Parcelable.Creator<AudioVolumeGroups>() {
+ @Override
+ public @NonNull AudioVolumeGroups createFromParcel(@NonNull Parcel in) {
+ Preconditions.checkNotNull(in, "in Parcel must not be null");
+ ArrayList<AudioVolumeGroup> avgList = new ArrayList<AudioVolumeGroup>();
+ int size = in.readInt();
+ for (int index = 0; index < size; index++) {
+ avgList.add(AudioVolumeGroup.CREATOR.createFromParcel(in));
+ }
+ return new AudioVolumeGroups(avgList);
+ }
+
+ @Override
+ public @NonNull AudioVolumeGroups[] newArray(int size) {
+ return new AudioVolumeGroups[size];
+ }
+ };
+}
diff --git a/media/java/android/media/browse/MediaBrowser.java b/media/java/android/media/browse/MediaBrowser.java
index 2dffef9..65255a1 100644
--- a/media/java/android/media/browse/MediaBrowser.java
+++ b/media/java/android/media/browse/MediaBrowser.java
@@ -808,7 +808,7 @@
return sb.toString();
}
- public static final Parcelable.Creator<MediaItem> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaItem> CREATOR =
new Parcelable.Creator<MediaItem>() {
@Override
public MediaItem createFromParcel(Parcel in) {
diff --git a/media/java/android/media/midi/MidiDeviceInfo.java b/media/java/android/media/midi/MidiDeviceInfo.java
index ab8af2a..c222985 100644
--- a/media/java/android/media/midi/MidiDeviceInfo.java
+++ b/media/java/android/media/midi/MidiDeviceInfo.java
@@ -325,7 +325,7 @@
",mIsPrivate=" + mIsPrivate);
}
- public static final Parcelable.Creator<MidiDeviceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MidiDeviceInfo> CREATOR =
new Parcelable.Creator<MidiDeviceInfo>() {
public MidiDeviceInfo createFromParcel(Parcel in) {
// Needs to be kept in sync with code in MidiDeviceInfo.cpp
diff --git a/media/java/android/media/midi/MidiDeviceStatus.java b/media/java/android/media/midi/MidiDeviceStatus.java
index acb54de..b118279 100644
--- a/media/java/android/media/midi/MidiDeviceStatus.java
+++ b/media/java/android/media/midi/MidiDeviceStatus.java
@@ -111,7 +111,7 @@
return builder.toString();
}
- public static final Parcelable.Creator<MidiDeviceStatus> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MidiDeviceStatus> CREATOR =
new Parcelable.Creator<MidiDeviceStatus>() {
public MidiDeviceStatus createFromParcel(Parcel in) {
ClassLoader classLoader = MidiDeviceInfo.class.getClassLoader();
diff --git a/media/java/android/media/projection/IMediaProjectionManager.aidl b/media/java/android/media/projection/IMediaProjectionManager.aidl
index 7e10c51..d190fce 100644
--- a/media/java/android/media/projection/IMediaProjectionManager.aidl
+++ b/media/java/android/media/projection/IMediaProjectionManager.aidl
@@ -24,6 +24,7 @@
/** {@hide} */
interface IMediaProjectionManager {
+ @UnsupportedAppUsage
boolean hasProjectionPermission(int uid, String packageName);
IMediaProjection createProjection(int uid, String packageName, int type,
boolean permanentGrant);
diff --git a/media/java/android/media/projection/MediaProjection.java b/media/java/android/media/projection/MediaProjection.java
index f9c5b8d..632cfb0 100644
--- a/media/java/android/media/projection/MediaProjection.java
+++ b/media/java/android/media/projection/MediaProjection.java
@@ -21,7 +21,6 @@
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
-import android.media.AudioRecord;
import android.media.projection.IMediaProjection;
import android.media.projection.IMediaProjectionCallback;
import android.os.Handler;
@@ -140,16 +139,6 @@
}
/**
- * Creates an AudioRecord to capture audio played back by the system.
- * @hide
- */
- public AudioRecord createAudioRecord(
- int sampleRateInHz, int channelConfig,
- int audioFormat, int bufferSizeInBytes) {
- return null;
- }
-
- /**
* Stops projection.
*/
public void stop() {
diff --git a/media/java/android/media/projection/MediaProjectionInfo.java b/media/java/android/media/projection/MediaProjectionInfo.java
index 5a65e65..ff60856 100644
--- a/media/java/android/media/projection/MediaProjectionInfo.java
+++ b/media/java/android/media/projection/MediaProjectionInfo.java
@@ -78,7 +78,7 @@
UserHandle.writeToParcel(mUserHandle, out);
}
- public static final Parcelable.Creator<MediaProjectionInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<MediaProjectionInfo> CREATOR =
new Parcelable.Creator<MediaProjectionInfo>() {
@Override
public MediaProjectionInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/session/ControllerCallbackLink.java b/media/java/android/media/session/ControllerCallbackLink.java
index 428be0d..67d849a 100644
--- a/media/java/android/media/session/ControllerCallbackLink.java
+++ b/media/java/android/media/session/ControllerCallbackLink.java
@@ -191,7 +191,7 @@
dest.writeStrongBinder(mIControllerCallback.asBinder());
}
- public static final Parcelable.Creator<ControllerCallbackLink> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ControllerCallbackLink> CREATOR =
new Parcelable.Creator<ControllerCallbackLink>() {
@Override
public ControllerCallbackLink createFromParcel(Parcel in) {
diff --git a/media/java/android/media/session/ControllerLink.java b/media/java/android/media/session/ControllerLink.java
index 5828fbd..d4ea2a3 100644
--- a/media/java/android/media/session/ControllerLink.java
+++ b/media/java/android/media/session/ControllerLink.java
@@ -40,7 +40,7 @@
* @hide
*/
public final class ControllerLink implements Parcelable {
- public static final Parcelable.Creator<ControllerLink> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ControllerLink> CREATOR =
new Parcelable.Creator<ControllerLink>() {
@Override
public ControllerLink createFromParcel(Parcel in) {
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index fb21f69..5ee52ce 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -1050,7 +1050,7 @@
dest.writeParcelable(mAudioAttrs, flags);
}
- public static final Parcelable.Creator<PlaybackInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PlaybackInfo> CREATOR =
new Parcelable.Creator<PlaybackInfo>() {
@Override
public PlaybackInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index 9fdefa6..e0cb86e 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -511,7 +511,7 @@
return mControllerLink;
}
- public static final Parcelable.Creator<Token> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Token> CREATOR =
new Parcelable.Creator<Token>() {
@Override
public Token createFromParcel(Parcel in) {
@@ -789,7 +789,7 @@
return 0;
}
- public static final Creator<MediaSession.QueueItem> CREATOR =
+ public static final @android.annotation.NonNull Creator<MediaSession.QueueItem> CREATOR =
new Creator<MediaSession.QueueItem>() {
@Override
diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java
index 6b28c97..8dd6127 100644
--- a/media/java/android/media/session/PlaybackState.java
+++ b/media/java/android/media/session/PlaybackState.java
@@ -480,7 +480,7 @@
return mExtras;
}
- public static final Parcelable.Creator<PlaybackState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PlaybackState> CREATOR =
new Parcelable.Creator<PlaybackState>() {
@Override
public PlaybackState createFromParcel(Parcel in) {
@@ -534,7 +534,7 @@
return 0;
}
- public static final Parcelable.Creator<PlaybackState.CustomAction> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PlaybackState.CustomAction> CREATOR =
new Parcelable.Creator<PlaybackState.CustomAction>() {
@Override
diff --git a/media/java/android/media/session/SessionCallbackLink.java b/media/java/android/media/session/SessionCallbackLink.java
index f9fa45a..6ffdc2b 100644
--- a/media/java/android/media/session/SessionCallbackLink.java
+++ b/media/java/android/media/session/SessionCallbackLink.java
@@ -554,7 +554,7 @@
dest.writeStrongBinder(mISessionCallback.asBinder());
}
- public static final Parcelable.Creator<SessionCallbackLink> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SessionCallbackLink> CREATOR =
new Parcelable.Creator<SessionCallbackLink>() {
@Override
public SessionCallbackLink createFromParcel(Parcel in) {
diff --git a/media/java/android/media/session/SessionLink.java b/media/java/android/media/session/SessionLink.java
index 2331a4a..2b42a2d 100644
--- a/media/java/android/media/session/SessionLink.java
+++ b/media/java/android/media/session/SessionLink.java
@@ -36,7 +36,7 @@
* @hide
*/
public final class SessionLink implements Parcelable {
- public static final Parcelable.Creator<SessionLink> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SessionLink> CREATOR =
new Parcelable.Creator<SessionLink>() {
@Override
public SessionLink createFromParcel(Parcel in) {
diff --git a/media/java/android/media/tv/DvbDeviceInfo.java b/media/java/android/media/tv/DvbDeviceInfo.java
index e07f3a6..a574fe1 100644
--- a/media/java/android/media/tv/DvbDeviceInfo.java
+++ b/media/java/android/media/tv/DvbDeviceInfo.java
@@ -29,7 +29,7 @@
public final class DvbDeviceInfo implements Parcelable {
static final String TAG = "DvbDeviceInfo";
- public static final Parcelable.Creator<DvbDeviceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DvbDeviceInfo> CREATOR =
new Parcelable.Creator<DvbDeviceInfo>() {
@Override
public DvbDeviceInfo createFromParcel(Parcel source) {
diff --git a/media/java/android/media/tv/ITvRemoteServiceInput.aidl b/media/java/android/media/tv/ITvRemoteServiceInput.aidl
index df39299..a0b6c9b 100644
--- a/media/java/android/media/tv/ITvRemoteServiceInput.aidl
+++ b/media/java/android/media/tv/ITvRemoteServiceInput.aidl
@@ -21,13 +21,22 @@
*/
oneway interface ITvRemoteServiceInput {
// InputBridge related
+ @UnsupportedAppUsage
void openInputBridge(IBinder token, String name, int width, int height, int maxPointers);
+ @UnsupportedAppUsage
void closeInputBridge(IBinder token);
+ @UnsupportedAppUsage
void clearInputBridge(IBinder token);
+ @UnsupportedAppUsage
void sendTimestamp(IBinder token, long timestamp);
+ @UnsupportedAppUsage
void sendKeyDown(IBinder token, int keyCode);
+ @UnsupportedAppUsage
void sendKeyUp(IBinder token, int keyCode);
+ @UnsupportedAppUsage
void sendPointerDown(IBinder token, int pointerId, int x, int y);
+ @UnsupportedAppUsage
void sendPointerUp(IBinder token, int pointerId);
+ @UnsupportedAppUsage
void sendPointerSync(IBinder token);
}
\ No newline at end of file
diff --git a/media/java/android/media/tv/TvContentRatingSystemInfo.java b/media/java/android/media/tv/TvContentRatingSystemInfo.java
index f2e5b08..f44ded3 100644
--- a/media/java/android/media/tv/TvContentRatingSystemInfo.java
+++ b/media/java/android/media/tv/TvContentRatingSystemInfo.java
@@ -80,7 +80,7 @@
* Used to make this class parcelable.
* @hide
*/
- public static final Parcelable.Creator<TvContentRatingSystemInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TvContentRatingSystemInfo> CREATOR =
new Parcelable.Creator<TvContentRatingSystemInfo>() {
@Override
public TvContentRatingSystemInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/tv/TvInputHardwareInfo.java b/media/java/android/media/tv/TvInputHardwareInfo.java
index 762f0c0..5b316be 100644
--- a/media/java/android/media/tv/TvInputHardwareInfo.java
+++ b/media/java/android/media/tv/TvInputHardwareInfo.java
@@ -74,7 +74,7 @@
public static final int CABLE_CONNECTION_STATUS_DISCONNECTED =
Constants.CABLE_CONNECTION_STATUS_DISCONNECTED;
- public static final Parcelable.Creator<TvInputHardwareInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TvInputHardwareInfo> CREATOR =
new Parcelable.Creator<TvInputHardwareInfo>() {
@Override
public TvInputHardwareInfo createFromParcel(Parcel source) {
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index 30907a5..1b9cac0 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -621,7 +621,7 @@
return mService.serviceInfo.loadIcon(context.getPackageManager());
}
- public static final Parcelable.Creator<TvInputInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TvInputInfo> CREATOR =
new Parcelable.Creator<TvInputInfo>() {
@Override
public TvInputInfo createFromParcel(Parcel in) {
diff --git a/media/java/android/media/tv/TvStreamConfig.java b/media/java/android/media/tv/TvStreamConfig.java
index 0c2f3fe..f012b46 100644
--- a/media/java/android/media/tv/TvStreamConfig.java
+++ b/media/java/android/media/tv/TvStreamConfig.java
@@ -42,7 +42,7 @@
*/
private int mGeneration;
- public static final Parcelable.Creator<TvStreamConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TvStreamConfig> CREATOR =
new Parcelable.Creator<TvStreamConfig>() {
@Override
public TvStreamConfig createFromParcel(Parcel source) {
diff --git a/media/java/android/media/tv/TvTrackInfo.java b/media/java/android/media/tv/TvTrackInfo.java
index c9c881c..8142979 100644
--- a/media/java/android/media/tv/TvTrackInfo.java
+++ b/media/java/android/media/tv/TvTrackInfo.java
@@ -289,7 +289,7 @@
return Objects.hashCode(mId);
}
- public static final Parcelable.Creator<TvTrackInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TvTrackInfo> CREATOR =
new Parcelable.Creator<TvTrackInfo>() {
@Override
public TvTrackInfo createFromParcel(Parcel in) {
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index 031e373..cfcba76 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -18,8 +18,11 @@
#define LOG_TAG "ImageWriter_JNI"
#include "android_media_Utils.h"
+#include <utils/Condition.h>
#include <utils/Log.h>
+#include <utils/Mutex.h>
#include <utils/String8.h>
+#include <utils/Thread.h>
#include <gui/IProducerListener.h>
#include <gui/Surface.h>
@@ -34,6 +37,8 @@
#include <inttypes.h>
#include <android/hardware_buffer_jni.h>
+#include <deque>
+
#define IMAGE_BUFFER_JNI_ID "mNativeBuffer"
#define IMAGE_FORMAT_UNKNOWN 0 // This is the same value as ImageFormat#UNKNOWN.
// ----------------------------------------------------------------------------
@@ -90,14 +95,124 @@
int mFormat;
int mWidth;
int mHeight;
+
+ // Class for a shared thread used to detach buffers from buffer queues
+ // to discard buffers after consumers are done using them.
+ // This is needed because detaching buffers in onBufferReleased callback
+ // can lead to deadlock when consumer/producer are on the same process.
+ class BufferDetacher {
+ public:
+ // Called by JNIImageWriterContext ctor. Will start the thread for first ref.
+ void addRef();
+ // Called by JNIImageWriterContext dtor. Will stop the thread after ref goes to 0.
+ void removeRef();
+ // Called by onBufferReleased to signal this thread to detach a buffer
+ void detach(wp<Surface>);
+
+ private:
+
+ class DetachThread : public Thread {
+ public:
+ DetachThread() : Thread(/*canCallJava*/false) {};
+
+ void detach(wp<Surface>);
+
+ virtual void requestExit() override;
+
+ private:
+ virtual bool threadLoop() override;
+
+ Mutex mLock;
+ Condition mCondition;
+ std::deque<wp<Surface>> mQueue;
+
+ static const nsecs_t kWaitDuration = 20000000; // 20 ms
+ };
+ sp<DetachThread> mThread;
+
+ Mutex mLock;
+ int mRefCount = 0;
+ };
+
+ static BufferDetacher sBufferDetacher;
};
+JNIImageWriterContext::BufferDetacher JNIImageWriterContext::sBufferDetacher;
+
+void JNIImageWriterContext::BufferDetacher::addRef() {
+ Mutex::Autolock l(mLock);
+ mRefCount++;
+ if (mRefCount == 1) {
+ mThread = new DetachThread();
+ mThread->run("BufDtchThrd");
+ }
+}
+
+void JNIImageWriterContext::BufferDetacher::removeRef() {
+ Mutex::Autolock l(mLock);
+ mRefCount--;
+ if (mRefCount == 0) {
+ mThread->requestExit();
+ mThread->join();
+ mThread.clear();
+ }
+}
+
+void JNIImageWriterContext::BufferDetacher::detach(wp<Surface> bq) {
+ Mutex::Autolock l(mLock);
+ if (mThread == nullptr) {
+ ALOGE("%s: buffer detach thread is gone!", __FUNCTION__);
+ return;
+ }
+ mThread->detach(bq);
+}
+
+void JNIImageWriterContext::BufferDetacher::DetachThread::detach(wp<Surface> bq) {
+ Mutex::Autolock l(mLock);
+ mQueue.push_back(bq);
+ mCondition.signal();
+}
+
+void JNIImageWriterContext::BufferDetacher::DetachThread::requestExit() {
+ Thread::requestExit();
+ {
+ Mutex::Autolock l(mLock);
+ mQueue.clear();
+ }
+ mCondition.signal();
+}
+
+bool JNIImageWriterContext::BufferDetacher::DetachThread::threadLoop() {
+ Mutex::Autolock l(mLock);
+ mCondition.waitRelative(mLock, kWaitDuration);
+
+ while (!mQueue.empty()) {
+ if (exitPending()) {
+ return false;
+ }
+
+ wp<Surface> wbq = mQueue.front();
+ mQueue.pop_front();
+ sp<Surface> bq = wbq.promote();
+ if (bq != nullptr) {
+ sp<Fence> fence;
+ sp<GraphicBuffer> buffer;
+ ALOGV("%s: One buffer is detached", __FUNCTION__);
+ mLock.unlock();
+ bq->detachNextBuffer(&buffer, &fence);
+ mLock.lock();
+ }
+ }
+ return !exitPending();
+}
+
JNIImageWriterContext::JNIImageWriterContext(JNIEnv* env, jobject weakThiz, jclass clazz) :
- mWeakThiz(env->NewGlobalRef(weakThiz)),
- mClazz((jclass)env->NewGlobalRef(clazz)),
- mFormat(0),
- mWidth(-1),
- mHeight(-1) {
+ mWeakThiz(env->NewGlobalRef(weakThiz)),
+ mClazz((jclass)env->NewGlobalRef(clazz)),
+ mFormat(0),
+ mWidth(-1),
+ mHeight(-1) {
+ sBufferDetacher.addRef();
}
JNIImageWriterContext::~JNIImageWriterContext() {
@@ -115,6 +230,7 @@
}
mProducer.clear();
+ sBufferDetacher.removeRef();
}
JNIEnv* JNIImageWriterContext::getJNIEnv(bool* needsDetach) {
@@ -153,10 +269,7 @@
// need let this callback give a BufferItem, then only detach if it was attached to this
// Writer. Do the detach unconditionally for opaque format now. see b/19977520
if (mFormat == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
- sp<Fence> fence;
- sp<GraphicBuffer> buffer;
- ALOGV("%s: One buffer is detached", __FUNCTION__);
- mProducer->detachNextBuffer(&buffer, &fence);
+ sBufferDetacher.detach(mProducer);
}
env->CallStaticVoidMethod(mClazz, gImageWriterClassInfo.postEventFromNative, mWeakThiz);
diff --git a/packages/CaptivePortalLogin/AndroidManifest.xml b/packages/CaptivePortalLogin/AndroidManifest.xml
index 0894ee5..a5f3b88fe 100644
--- a/packages/CaptivePortalLogin/AndroidManifest.xml
+++ b/packages/CaptivePortalLogin/AndroidManifest.xml
@@ -17,8 +17,11 @@
*/
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.captiveportallogin" >
+ package="com.android.captiveportallogin"
+ android:versionCode="10"
+ android:versionName="Q-initial">
+ <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
diff --git a/packages/CarSystemUI/res/drawable/car_ic_selection_bg.xml b/packages/CarSystemUI/res/drawable/car_ic_selection_bg.xml
index 781beaf..12993f5 100644
--- a/packages/CarSystemUI/res/drawable/car_ic_selection_bg.xml
+++ b/packages/CarSystemUI/res/drawable/car_ic_selection_bg.xml
@@ -20,7 +20,7 @@
android:viewportHeight="70.0"
android:viewportWidth="70.0">
<path
- android:fillColor="@color/car_accent"
+ android:fillColor="?android:attr/colorAccent"
android:fillType="evenOdd"
android:pathData="M4,0L66,0A4,4 0,0 1,70 4L70,66A4,4 0,0 1,66 70L4,70A4,4 0,0 1,0 66L0,4A4,4 0,0 1,4 0z"
android:strokeColor="#00000000"
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 369bb9f..bd0e0b8 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -92,6 +92,10 @@
@Override
public void start() {
+ // get the provisioned state before calling the parent class since it's that flow that
+ // builds the nav bar
+ mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
+ mDeviceIsProvisioned = mDeviceProvisionedController.isDeviceProvisioned();
super.start();
mTaskStackListener = new TaskStackListenerImpl();
mActivityManagerWrapper = ActivityManagerWrapper.getInstance();
@@ -105,8 +109,6 @@
mHvacController.connectToCarService();
CarSystemUIFactory factory = SystemUIFactory.getInstance();
- mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
- mDeviceIsProvisioned = mDeviceProvisionedController.isDeviceProvisioned();
if (!mDeviceIsProvisioned) {
mDeviceProvisionedController.addCallback(
new DeviceProvisionedController.DeviceProvisionedListener() {
diff --git a/packages/ExtServices/tests/Android.bp b/packages/ExtServices/tests/Android.bp
index 930b783..ae60d4e 100644
--- a/packages/ExtServices/tests/Android.bp
+++ b/packages/ExtServices/tests/Android.bp
@@ -14,14 +14,14 @@
static_libs: [
"ExtServices-core",
- "android-support-test",
- "compatibility-device-util",
+ "androidx.test.rules",
+ "compatibility-device-util-axt",
"mockito-target-minus-junit4",
- "espresso-core",
+ "androidx.test.espresso.core",
"truth-prebuilt",
"testables",
"testng",
],
platform_apis: true,
-}
\ No newline at end of file
+}
diff --git a/packages/ExtServices/tests/AndroidManifest.xml b/packages/ExtServices/tests/AndroidManifest.xml
index 3cf1527..a08a10e 100644
--- a/packages/ExtServices/tests/AndroidManifest.xml
+++ b/packages/ExtServices/tests/AndroidManifest.xml
@@ -23,7 +23,7 @@
<uses-library android:name="android.test.runner" />
</application>
- <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
android:targetPackage="android.ext.services.tests.unit"
android:label="ExtServices Test Cases">
</instrumentation>
diff --git a/packages/ExtServices/tests/AndroidTest.xml b/packages/ExtServices/tests/AndroidTest.xml
index c3d32de..cd26ebc 100644
--- a/packages/ExtServices/tests/AndroidTest.xml
+++ b/packages/ExtServices/tests/AndroidTest.xml
@@ -23,7 +23,7 @@
<option name="test-tag" value="ExtServicesUnitTests" />
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.ext.services.tests.unit" />
- <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+ <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
</test>
</configuration>
\ No newline at end of file
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java
index 90018e5f..3db275a 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/AgingHelperTest.java
@@ -39,10 +39,11 @@
import android.os.Process;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.testing.TestableContext;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java
index 851e2f2..eeabb86 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java
@@ -31,11 +31,12 @@
import android.os.Looper;
import android.provider.DeviceConfig;
import android.provider.Settings;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.UiDevice;
import android.testing.TestableContext;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import org.junit.After;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java
index f632814..459cd40 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java
@@ -44,11 +44,12 @@
import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.NotificationStats;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
import android.test.ServiceTestCase;
import android.testing.TestableContext;
import android.util.AtomicFile;
+import androidx.test.InstrumentationRegistry;
+
import com.android.internal.util.FastXmlSerializer;
import org.junit.Before;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/EntityTypeCounterTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/EntityTypeCounterTest.java
index 2d29c7b..ada61d0 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/EntityTypeCounterTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/EntityTypeCounterTest.java
@@ -17,9 +17,10 @@
import static com.google.common.truth.Truth.assertThat;
-import android.support.test.runner.AndroidJUnit4;
import android.view.textclassifier.TextClassifier;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
index 05af6e7..ea77d31 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
@@ -32,10 +32,11 @@
import android.app.NotificationChannel;
import android.os.Process;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.testing.TestableContext;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java
index 2d44e79..f51e911 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java
@@ -39,10 +39,11 @@
import android.os.Process;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.testing.TestableContext;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/SmartActionsHelperTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/SmartActionsHelperTest.java
index d0b6d00..a1fbc7b 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/SmartActionsHelperTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/SmartActionsHelperTest.java
@@ -39,14 +39,15 @@
import android.os.Process;
import android.service.notification.NotificationAssistantService;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.view.textclassifier.ConversationAction;
import android.view.textclassifier.ConversationActions;
import android.view.textclassifier.TextClassificationManager;
import android.view.textclassifier.TextClassifier;
import android.view.textclassifier.TextClassifierEvent;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import com.google.common.truth.FailureStrategy;
import com.google.common.truth.Subject;
import com.google.common.truth.SubjectFactory;
diff --git a/packages/NetworkStack/AndroidManifest.xml b/packages/NetworkStack/AndroidManifest.xml
index 52c209e..740c573 100644
--- a/packages/NetworkStack/AndroidManifest.xml
+++ b/packages/NetworkStack/AndroidManifest.xml
@@ -18,7 +18,10 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.networkstack"
- android:sharedUserId="android.uid.networkstack">
+ android:sharedUserId="android.uid.networkstack"
+ android:versionCode="10"
+ android:versionName="Q-initial">
+ <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
diff --git a/packages/NetworkStack/tests/Android.bp b/packages/NetworkStack/tests/Android.bp
index 5c7b514..f22b647 100644
--- a/packages/NetworkStack/tests/Android.bp
+++ b/packages/NetworkStack/tests/Android.bp
@@ -21,7 +21,7 @@
test_suites: ["device-tests"],
resource_dirs: ["res"],
static_libs: [
- "android-support-test",
+ "androidx.test.rules",
"frameworks-base-testutils",
"mockito-target-extended-minus-junit4",
"NetworkStackLib",
diff --git a/packages/NetworkStack/tests/AndroidManifest.xml b/packages/NetworkStack/tests/AndroidManifest.xml
index 9cb2c21..5dcf6ff 100644
--- a/packages/NetworkStack/tests/AndroidManifest.xml
+++ b/packages/NetworkStack/tests/AndroidManifest.xml
@@ -47,7 +47,7 @@
<application android:debuggable="true">
<uses-library android:name="android.test.runner" />
</application>
- <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.server.networkstack.tests"
android:label="Networking service tests">
</instrumentation>
diff --git a/packages/NetworkStack/tests/AndroidTest.xml b/packages/NetworkStack/tests/AndroidTest.xml
index 6b08b57..047bc2e 100644
--- a/packages/NetworkStack/tests/AndroidTest.xml
+++ b/packages/NetworkStack/tests/AndroidTest.xml
@@ -23,7 +23,7 @@
<option name="test-tag" value="NetworkStackTests" />
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="com.android.server.networkstack.tests" />
- <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+ <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
</test>
</configuration>
\ No newline at end of file
diff --git a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
index 3414397..88a05d5 100644
--- a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
+++ b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
@@ -53,14 +53,15 @@
import android.os.ConditionVariable;
import android.os.Parcelable;
import android.os.SystemClock;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.system.ErrnoException;
import android.system.Os;
import android.text.format.DateUtils;
import android.util.Log;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.util.HexDump;
import com.android.server.networkstack.tests.R;
import com.android.server.util.NetworkStackConstants;
diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
index 4abd77e..27d7255 100644
--- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
+++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
@@ -31,16 +31,15 @@
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
-import static java.lang.String.format;
-
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.IpPrefix;
import android.net.MacAddress;
import android.net.dhcp.DhcpServer.Clock;
import android.net.util.SharedLog;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
@@ -48,6 +47,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import static java.lang.String.format;
+
import java.net.Inet4Address;
import java.util.Arrays;
import java.util.Collections;
diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java
index 7544e72..4d98403 100644
--- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java
+++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java
@@ -48,8 +48,9 @@
import android.net.LinkAddress;
import android.net.NetworkUtils;
import android.net.metrics.DhcpErrorEvent;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.HexDump;
@@ -324,7 +325,7 @@
@Test
public void testOffer1() throws Exception {
// TODO: Turn all of these into golden files. This will probably require using
- // android.support.test.InstrumentationRegistry for obtaining a Context object
+ // androidx.test.InstrumentationRegistry for obtaining a Context object
// to read such golden files, along with an appropriate Android.mk.
final ByteBuffer packet = ByteBuffer.wrap(HexDump.hexStringToByteArray(
// IP header.
diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java
index d4c1e2e..7d5e9e3 100644
--- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java
+++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java
@@ -51,11 +51,12 @@
import android.net.dhcp.DhcpServer.Dependencies;
import android.net.util.SharedLog;
import android.os.HandlerThread;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java
index 1004382..57a87a4 100644
--- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java
+++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java
@@ -29,8 +29,9 @@
import android.net.LinkAddress;
import android.net.dhcp.DhcpServingParams.InvalidParameterException;
import android.net.shared.Inet4AddressUtils;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java
index aaaff02..1990229 100644
--- a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java
+++ b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java
@@ -47,10 +47,11 @@
import android.net.shared.ProvisioningConfiguration;
import android.net.util.InterfaceParams;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.test.mock.MockContentResolver;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.R;
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.server.NetworkObserver;
diff --git a/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java b/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java
index e3b5ddf..64b168a 100644
--- a/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java
+++ b/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java
@@ -24,8 +24,9 @@
import android.net.util.SharedLog;
import android.os.Handler;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
@@ -33,7 +34,6 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-
/**
* Tests for IpReachabilityMonitor.
*/
diff --git a/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java b/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java
index dfaf52a..71be8b3 100644
--- a/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java
+++ b/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java
@@ -20,8 +20,9 @@
import static org.junit.Assert.assertTrue;
import android.net.MacAddress;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import libcore.util.HexEncoding;
diff --git a/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java b/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java
index 6e11c40..289dcad 100644
--- a/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java
+++ b/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java
@@ -31,12 +31,13 @@
import android.os.Handler;
import android.os.HandlerThread;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.system.ErrnoException;
import android.system.Os;
import android.system.StructTimeval;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java
index ddb7030..04b906b 100644
--- a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java
+++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -60,12 +60,13 @@
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.telephony.CellSignalStrength;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -82,7 +83,6 @@
import javax.net.ssl.SSLHandshakeException;
-
@RunWith(AndroidJUnit4.class)
@SmallTest
public class NetworkMonitorTest {
diff --git a/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java b/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java
index 07ad3123..b1db051 100644
--- a/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java
+++ b/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java
@@ -20,8 +20,9 @@
import static org.junit.Assert.assertTrue;
import android.net.util.SharedLog;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/NetworkStackPermissionStub/AndroidManifest.xml b/packages/NetworkStackPermissionStub/AndroidManifest.xml
index a8742d7..62bf3de 100644
--- a/packages/NetworkStackPermissionStub/AndroidManifest.xml
+++ b/packages/NetworkStackPermissionStub/AndroidManifest.xml
@@ -18,7 +18,10 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.networkstack.permissionstub"
- android:sharedUserId="android.uid.networkstack">
+ android:sharedUserId="android.uid.networkstack"
+ android:versionCode="10"
+ android:versionName="Q-initial">
+ <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />
<!--
This package only exists to define the below permissions, and enforce that they are only
granted to apps sharing the same signature.
@@ -34,4 +37,4 @@
android:protectionLevel="signature"/>
<application android:name="com.android.server.NetworkStackPermissionStub"/>
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/ThemedBatteryDrawable.kt b/packages/SettingsLib/src/com/android/settingslib/graph/ThemedBatteryDrawable.kt
index 337106b..911cfcd 100644
--- a/packages/SettingsLib/src/com/android/settingslib/graph/ThemedBatteryDrawable.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/graph/ThemedBatteryDrawable.kt
@@ -87,7 +87,8 @@
invalidateSelf()
}
- open var criticalLevel: Int = 0
+ open var criticalLevel: Int = context.resources.getInteger(
+ com.android.internal.R.integer.config_criticalBatteryWarningLevel)
var charging = false
set(value) {
@@ -101,46 +102,40 @@
postInvalidate()
}
- private val fillColorStrokePaint: Paint by lazy {
- val p = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val fillColorStrokePaint = Paint(Paint.ANTI_ALIAS_FLAG).also { p ->
p.color = frameColor
p.isDither = true
p.strokeWidth = 5f
p.style = Paint.Style.STROKE
p.blendMode = BlendMode.SRC
p.strokeMiter = 5f
- p
+ p.strokeJoin = Paint.Join.ROUND
}
- private val fillColorStrokeProtection: Paint by lazy {
- val p = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val fillColorStrokeProtection = Paint(Paint.ANTI_ALIAS_FLAG).also { p ->
p.isDither = true
p.strokeWidth = 5f
p.style = Paint.Style.STROKE
p.blendMode = BlendMode.CLEAR
p.strokeMiter = 5f
- p
+ p.strokeJoin = Paint.Join.ROUND
}
- private val fillPaint: Paint by lazy {
- val p = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val fillPaint = Paint(Paint.ANTI_ALIAS_FLAG).also { p ->
p.color = frameColor
p.alpha = 255
p.isDither = true
p.strokeWidth = 0f
p.style = Paint.Style.FILL_AND_STROKE
- p
}
// Only used if dualTone is set to true
- private val dualToneBackgroundFill: Paint by lazy {
- val p = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val dualToneBackgroundFill = Paint(Paint.ANTI_ALIAS_FLAG).also { p ->
p.color = frameColor
p.alpha = 255
p.isDither = true
p.strokeWidth = 0f
p.style = Paint.Style.FILL_AND_STROKE
- p
}
init {
@@ -165,9 +160,6 @@
levels.recycle()
colors.recycle()
- criticalLevel = context.resources.getInteger(
- com.android.internal.R.integer.config_criticalBatteryWarningLevel)
-
loadPaths()
}
@@ -254,7 +246,7 @@
private fun batteryColorForLevel(level: Int): Int {
return when {
- charging || powerSaveEnabled -> fillPaint.color
+ charging || powerSaveEnabled -> fillColor
else -> getColorForLevel(level)
}
}
@@ -347,6 +339,9 @@
backgroundColor = bgColor
dualToneBackgroundFill.color = bgColor
+ // Also update the level color, since fillColor may have changed
+ levelColor = batteryColorForLevel(level)
+
invalidateSelf()
}
@@ -360,7 +355,7 @@
if (b.isEmpty) {
scaleMatrix.setScale(1f, 1f)
} else {
- scaleMatrix.setScale((b.right / Companion.WIDTH), (b.bottom / Companion.HEIGHT))
+ scaleMatrix.setScale((b.right / WIDTH), (b.bottom / HEIGHT))
}
perimeterPath.transform(scaleMatrix, scaledPerimeter)
@@ -368,6 +363,14 @@
scaledFill.computeBounds(fillRect, true)
boltPath.transform(scaleMatrix, scaledBolt)
plusPath.transform(scaleMatrix, scaledPlus)
+
+ // It is expected that this view only ever scale by the same factor in each dimension, so
+ // just pick one to scale the strokeWidths
+ val scaledStrokeWidth =
+ Math.max(b.right / WIDTH * PROTECTION_STROKE_WIDTH, PROTECTION_MIN_STROKE_WIDTH)
+
+ fillColorStrokePaint.strokeWidth = scaledStrokeWidth
+ fillColorStrokeProtection.strokeWidth = scaledStrokeWidth
}
private fun loadPaths() {
@@ -400,5 +403,10 @@
private const val WIDTH = 12f
private const val HEIGHT = 20f
private const val CRITICAL_LEVEL = 15
+ // On a 12x20 grid, how wide to make the fill protection stroke.
+ // Scales when our size changes
+ private const val PROTECTION_STROKE_WIDTH = 1.4f
+ // Arbitrarily chosen for visibility at small sizes
+ private const val PROTECTION_MIN_STROKE_WIDTH = 5f
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 43affcd..3dd3fb6 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -1047,20 +1047,22 @@
* match based on SSID and security.
*/
private boolean isInfoForThisAccessPoint(WifiConfiguration config, WifiInfo info) {
- if (info.isOsuAp()) {
- return (mOsuStatus != null);
+ if (info.isOsuAp() || mOsuStatus != null) {
+ return (info.isOsuAp() && mOsuStatus != null);
+ } else if (info.isPasspointAp() || isPasspoint()) {
+ return (info.isPasspointAp() && isPasspoint()
+ && TextUtils.equals(info.getFqdn(), mConfig.FQDN));
}
- if (isPasspoint() == false && networkId != WifiConfiguration.INVALID_NETWORK_ID) {
+ if (networkId != WifiConfiguration.INVALID_NETWORK_ID) {
return networkId == info.getNetworkId();
} else if (config != null) {
- return matches(config);
- }
- else {
+ return TextUtils.equals(getKey(config), getKey());
+ } else {
// Might be an ephemeral connection with no WifiConfiguration. Try matching on SSID.
// (Note that we only do this if the WifiConfiguration explicitly equals INVALID).
// TODO: Handle hex string SSIDs.
- return ssid.equals(removeDoubleQuotes(info.getSSID()));
+ return TextUtils.equals(removeDoubleQuotes(info.getSSID()), ssid);
}
}
@@ -1207,7 +1209,7 @@
final int oldLevel = getLevel();
if (info != null && isInfoForThisAccessPoint(config, info)) {
updated = (mInfo == null);
- if (mConfig != config) {
+ if (!isPasspoint() && mConfig != config) {
// We do not set updated = true as we do not want to increase the amount of sorting
// and copying performed in WifiTracker at this time. If issues involving refresh
// are still seen, we will investigate further.
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 8ea0f4b..9ce6b34 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -1068,7 +1068,7 @@
}
// Get and cache advanced capabilities
- final boolean isOweSupported = mWifiManager.isOweSupported();
+ final boolean isOweSupported = mWifiManager.isEnhancedOpenSupported();
final boolean isSaeSupported = mWifiManager.isWpa3SaeSupported();
final boolean isSuiteBSupported = mWifiManager.isWpa3SuiteBSupported();
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
index 5e3472b..f5ead0c 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -84,6 +85,7 @@
20 * DateUtils.MINUTE_IN_MILLIS;;
private Context mContext;
+ private WifiInfo mWifiInfo;
@Mock private RssiCurve mockBadgeCurve;
@Mock private WifiNetworkScoreCache mockWifiNetworkScoreCache;
public static final int NETWORK_ID = 123;
@@ -103,6 +105,9 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = InstrumentationRegistry.getTargetContext();
+ mWifiInfo = new WifiInfo();
+ mWifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
+ mWifiInfo.setBSSID(TEST_BSSID);
WifiTracker.sVerboseLogging = false;
}
@@ -1160,4 +1165,56 @@
// Fast should still be returned since cache was updated with recent time
assertThat(ap.getSpeed()).isEqualTo(newSpeed);
}
+
+ /**
+ * Verifies that a Passpoint WifiInfo updates the matching Passpoint AP
+ */
+ @Test
+ public void testUpdate_passpointWifiInfo_updatesPasspointAccessPoint() {
+ mWifiInfo.setFQDN("fqdn");
+ mWifiInfo.setProviderFriendlyName("providerFriendlyName");
+
+ WifiConfiguration spyConfig = spy(new WifiConfiguration());
+ when(spyConfig.isPasspoint()).thenReturn(true);
+ spyConfig.SSID = TEST_SSID;
+ spyConfig.BSSID = TEST_BSSID;
+ spyConfig.FQDN = "fqdn";
+ spyConfig.providerFriendlyName = "providerFriendlyName";
+ AccessPoint passpointAp = new AccessPoint(mContext, spyConfig);
+
+ assertThat(passpointAp.update(null, mWifiInfo, null)).isTrue();
+ }
+
+ /**
+ * Verifies that a Passpoint WifiInfo does not update a non-Passpoint AP with the same SSID.
+ */
+ @Test
+ public void testUpdate_passpointWifiInfo_doesNotUpdateNonPasspointAccessPoint() {
+ mWifiInfo.setFQDN("fqdn");
+ mWifiInfo.setProviderFriendlyName("providerFriendlyName");
+
+ AccessPoint ap = new TestAccessPointBuilder(mContext)
+ .setSsid(TEST_SSID)
+ .setBssid(TEST_BSSID)
+ .setScanResults(SCAN_RESULTS)
+ .build();
+
+ assertThat(ap.update(null, mWifiInfo, null)).isFalse();
+ }
+
+ /**
+ * Verifies that a non-Passpoint WifiInfo does not update a Passpoint AP with the same SSID.
+ */
+ @Test
+ public void testUpdate_nonPasspointWifiInfo_doesNotUpdatePasspointAccessPoint() {
+ WifiConfiguration spyConfig = spy(new WifiConfiguration());
+ when(spyConfig.isPasspoint()).thenReturn(true);
+ spyConfig.SSID = TEST_SSID;
+ spyConfig.BSSID = TEST_BSSID;
+ spyConfig.FQDN = "fqdn";
+ spyConfig.providerFriendlyName = "providerFriendlyName";
+ AccessPoint passpointAp = new AccessPoint(mContext, spyConfig);
+
+ assertThat(passpointAp.update(null, mWifiInfo, null)).isFalse();
+ }
}
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 26ea6ab..65e0c0f 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -40,8 +40,8 @@
<bool name="def_wifi_display_on">false</bool>
<bool name="def_install_non_market_apps">false</bool>
<bool name="def_package_verifier_enable">true</bool>
- <!-- Comma-separated list of location providers -->
- <string name="def_location_providers_allowed" translatable="false">gps,network</string>
+ <!-- 0 == off, 3 == on -->
+ <integer name="def_location_mode">3</integer>
<bool name="assisted_gps_enabled">true</bool>
<bool name="def_netstats_enabled">true</bool>
<bool name="def_usb_mass_storage_enabled">true</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 0ee16a9..5e2b7c8 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2340,9 +2340,6 @@
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");
- loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
- R.string.def_location_providers_allowed);
-
// Don't do this. The SystemServer will initialize ADB_ENABLED from a
// persistent system property instead.
//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index ceafbfa..d6c33a3 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -969,6 +969,11 @@
try {
synchronized (mLock) {
Setting setting = getSecureSetting(
+ Settings.Secure.LOCATION_MODE, userId);
+ updateSecureSetting(Settings.Secure.LOCATION_MODE,
+ setting != null ? setting.getValue() : null, null,
+ true, userId, true);
+ setting = getSecureSetting(
Settings.Secure.LOCATION_PROVIDERS_ALLOWED, userId);
updateSecureSetting(Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
setting != null ? setting.getValue() : null, null,
@@ -4229,23 +4234,18 @@
final Setting locationProvidersAllowed = secureSettings.getSettingLocked(
Secure.LOCATION_PROVIDERS_ALLOWED);
- String defLocationMode = Integer.toString(
- !TextUtils.isEmpty(locationProvidersAllowed.getValue())
- ? Secure.LOCATION_MODE_ON
- : Secure.LOCATION_MODE_OFF);
+ final int defLocationMode;
+ if (locationProvidersAllowed.isNull()) {
+ defLocationMode = getContext().getResources().getInteger(
+ R.integer.def_location_mode);
+ } else {
+ defLocationMode =
+ !TextUtils.isEmpty(locationProvidersAllowed.getValue())
+ ? Secure.LOCATION_MODE_ON
+ : Secure.LOCATION_MODE_OFF;
+ }
secureSettings.insertSettingLocked(
- Secure.LOCATION_MODE, defLocationMode,
- null, true, SettingsState.SYSTEM_PACKAGE_NAME);
-
- // also reset LOCATION_PROVIDERS_ALLOWED back to the default value - this
- // setting is now only for debug/test purposes, and will likely be removed
- // in a later release. LocationManagerService is responsible for adjusting
- // these settings to the proper state.
-
- String defLocationProvidersAllowed = getContext().getResources().getString(
- R.string.def_location_providers_allowed);
- secureSettings.insertSettingLocked(
- Secure.LOCATION_PROVIDERS_ALLOWED, defLocationProvidersAllowed,
+ Secure.LOCATION_MODE, Integer.toString(defLocationMode),
null, true, SettingsState.SYSTEM_PACKAGE_NAME);
}
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 29ae1b2..9425941 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -58,6 +58,7 @@
"androidx.arch.core_core-runtime",
"androidx.lifecycle_lifecycle-extensions",
"androidx.dynamicanimation_dynamicanimation",
+ "iconloader_base",
"SystemUI-tags",
"SystemUI-proto",
"dagger2-2.19",
@@ -113,7 +114,7 @@
"SystemUI-tags",
"SystemUI-proto",
"metrics-helper-lib",
- "android-support-test",
+ "androidx.test.rules", "hamcrest-library",
"mockito-target-inline-minus-junit4",
"testables",
"truth-prebuilt",
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
index 38bf77d..7b7657a 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
@@ -13,6 +13,7 @@
*/
package com.android.systemui.plugins;
+import android.graphics.Bitmap;
import android.graphics.Paint.Style;
import android.view.View;
@@ -21,13 +22,30 @@
import java.util.TimeZone;
/**
- * This plugin is used to replace main clock in keyguard.
+ * Plugin used to replace main clock in keyguard.
*/
@ProvidesInterface(action = ClockPlugin.ACTION, version = ClockPlugin.VERSION)
public interface ClockPlugin extends Plugin {
String ACTION = "com.android.systemui.action.PLUGIN_CLOCK";
- int VERSION = 1;
+ int VERSION = 2;
+
+ /**
+ * Get the name of the clock face.
+ *
+ * This name should not be translated.
+ */
+ String getName();
+
+ /**
+ * Get the title of the clock face to be shown in the picker app.
+ */
+ String getTitle();
+
+ /**
+ * Get thumbnail of clock face to be shown in the picker app.
+ */
+ Bitmap getThumbnail();
/**
* Get clock view.
@@ -62,18 +80,22 @@
default void setColorPalette(boolean supportsDarkText, int[] colors) {}
/**
- * Notifies that time tick alarm from doze service fired.
- */
- default void dozeTimeTick() {}
-
- /**
* Set the amount (ratio) that the device has transitioned to doze.
* @param darkAmount Amount of transition to doze: 1f for doze and 0f for awake.
*/
default void setDarkAmount(float darkAmount) {}
/**
+ * Notifies that time tick alarm from doze service fired.
+ *
+ * Implement this method instead of registering a broadcast listener for TIME_TICK.
+ */
+ default void onTimeTick() {}
+
+ /**
* Notifies that the time zone has changed.
+ *
+ * Implement this method instead of registering a broadcast listener for TIME_ZONE_CHANGED.
*/
default void onTimeZoneChanged(TimeZone timeZone) {}
diff --git a/packages/SystemUI/res-keyguard/drawable/bubble_hour_hand.xml b/packages/SystemUI/res-keyguard/drawable/bubble_hour_hand.xml
index d3c3a51..a2404b0 100644
--- a/packages/SystemUI/res-keyguard/drawable/bubble_hour_hand.xml
+++ b/packages/SystemUI/res-keyguard/drawable/bubble_hour_hand.xml
@@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:height="200dp"
- android:width="200dp"
- android:viewportHeight="100"
- android:viewportWidth="100">
+ android:height="350dp"
+ android:width="350dp"
+ android:viewportHeight="254.66145"
+ android:viewportWidth="254.66145">
<path
android:fillColor="#000000"
- android:pathData="M50.082,14.199m-13.985,0a13.985,13.985 0,1 1,27.97 0a13.985,13.985 0,1 1,-27.97 0"/>
+ android:pathData="M127.331,40.481m-10.914,0a10.914,10.914 0,1 1,21.828 0a10.914,10.914 0,1 1,-21.828 0"/>
</vector>
diff --git a/packages/SystemUI/res-keyguard/drawable/bubble_minute_hand.xml b/packages/SystemUI/res-keyguard/drawable/bubble_minute_hand.xml
index a4417fb..be10b5d 100644
--- a/packages/SystemUI/res-keyguard/drawable/bubble_minute_hand.xml
+++ b/packages/SystemUI/res-keyguard/drawable/bubble_minute_hand.xml
@@ -1,9 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:height="200dp"
- android:width="200dp"
- android:viewportHeight="100"
- android:viewportWidth="100" >
+ android:height="350dp"
+ android:width="350dp"
+ android:viewportHeight="254.66145"
+ android:viewportWidth="254.66145" >
<path
- android:fillColor="#000000"
- android:pathData="M50.082,0.025L50.082,0.025A13.985,15.63 0,0 1,64.067 15.656L64.067,49.029A13.985,15.63 0,0 1,50.082 64.659L50.082,64.659A13.985,15.63 0,0 1,36.097 49.029L36.097,15.656A13.985,15.63 0,0 1,50.082 0.025z"/>
+ android:strokeColor="#000000"
+ android:strokeWidth="5"
+ android:pathData="M125.923,29.692L128.739,29.692A27.108,30.579 0,0 1,155.847 60.271L155.847,125.268A27.108,30.579 0,0 1,128.739 155.847L125.923,155.847A27.108,30.579 0,0 1,98.815 125.268L98.815,60.271A27.108,30.579 0,0 1,125.923 29.692z"/>
</vector>
+
diff --git a/packages/SystemUI/res-keyguard/layout/bubble_clock.xml b/packages/SystemUI/res-keyguard/layout/bubble_clock.xml
index c8dc8e4..f945b10 100644
--- a/packages/SystemUI/res-keyguard/layout/bubble_clock.xml
+++ b/packages/SystemUI/res-keyguard/layout/bubble_clock.xml
@@ -21,9 +21,9 @@
>
<TextClock
android:id="@+id/digital_clock"
- android:layout_marginLeft="20dp"
+ android:paddingStart="20dp"
android:layout_marginTop="72dp"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:textSize="44dp"
@@ -42,15 +42,15 @@
>
<ImageView
android:id="@+id/minute_hand"
- android:layout_width="300dp"
- android:layout_height="300dp"
+ android:layout_width="350dp"
+ android:layout_height="350dp"
android:src="@drawable/bubble_minute_hand"
android:tint="@color/bubbleMinuteHandColor"
/>
<ImageView
android:id="@+id/hour_hand"
- android:layout_width="300dp"
- android:layout_height="300dp"
+ android:layout_width="350dp"
+ android:layout_height="350dp"
android:src="@drawable/bubble_hour_hand"
android:tint="@color/bubbleHourHandColor"
/>
diff --git a/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
new file mode 100644
index 0000000..3e6dd13
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+ <TextClock
+ android:id="@+id/time"
+ style="@style/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_above="@id/date"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="@string/keyguard_widget_12_hours_format"
+ android:format24Hour="@string/keyguard_widget_24_hours_format"
+ />
+
+ <TextClock
+ android:id="@+id/date"
+ style="@stype/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="EEE, MMM d"
+ android:format24Hour="EEE, MMM d"
+ />
+</RelativeLayout>
diff --git a/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml b/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml
index 116a044..dd25df8 100644
--- a/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml
+++ b/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml
@@ -21,9 +21,9 @@
>
<TextClock
android:id="@+id/digital_clock"
- android:layout_marginLeft="20dp"
+ android:paddingStart="20dp"
android:layout_marginTop="72dp"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:textSize="44dp"
diff --git a/packages/SystemUI/res/layout/notification_info.xml b/packages/SystemUI/res/layout/notification_info.xml
index 91353d7..863c1cc 100644
--- a/packages/SystemUI/res/layout/notification_info.xml
+++ b/packages/SystemUI/res/layout/notification_info.xml
@@ -178,6 +178,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
+ android:maxWidth="100dp"
style="@style/TextAppearance.NotificationInfo.Button"/>
<LinearLayout
@@ -186,6 +187,7 @@
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
+ android:maxWidth="200dp"
android:orientation="horizontal">
<TextView
android:id="@+id/deliver_silently"
@@ -195,6 +197,7 @@
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/notification_guts_button_horizontal_spacing"
android:paddingRight="24dp"
+ android:maxWidth="125dp"
style="@style/TextAppearance.NotificationInfo.Button"/>
<TextView
android:id="@+id/block"
@@ -203,6 +206,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
+ android:maxWidth="75dp"
android:layout_marginStart="@dimen/notification_guts_button_horizontal_spacing"
style="@style/TextAppearance.NotificationInfo.Button"/>
<TextView
@@ -212,6 +216,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
+ android:maxWidth="75dp"
android:layout_marginStart="@dimen/notification_guts_button_horizontal_spacing"
style="@style/TextAppearance.NotificationInfo.Button"/>
</LinearLayout>
diff --git a/packages/SystemUI/res/values-sw320dp/dimens.xml b/packages/SystemUI/res/values-sw320dp/dimens.xml
index 0c2b1cc..8f27f45 100644
--- a/packages/SystemUI/res/values-sw320dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw320dp/dimens.xml
@@ -15,9 +15,8 @@
~ limitations under the License
-->
<resources>
-
<!-- Global actions grid -->
- <dimen name="global_actions_grid_container_bottom_margin">16dp</dimen>
+ <dimen name="global_actions_grid_container_bottom_margin">4dp</dimen>
<dimen name="global_actions_grid_vertical_padding">0dp</dimen>
<dimen name="global_actions_grid_horizontal_padding">3dp</dimen>
@@ -29,7 +28,7 @@
<dimen name="global_actions_grid_item_icon_width">18dp</dimen>
<dimen name="global_actions_grid_item_icon_height">18dp</dimen>
- <dimen name="global_actions_grid_item_icon_top_margin">12dp</dimen>
+ <dimen name="global_actions_grid_item_icon_top_margin">10dp</dimen>
<dimen name="global_actions_grid_item_icon_side_margin">22dp</dimen>
<dimen name="global_actions_grid_item_icon_bottom_margin">4dp</dimen>
diff --git a/packages/SystemUI/res/values-sw410dp/dimens.xml b/packages/SystemUI/res/values-sw410dp/dimens.xml
index 4197eb2..73d1857 100644
--- a/packages/SystemUI/res/values-sw410dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw410dp/dimens.xml
@@ -23,7 +23,7 @@
<dimen name="qs_detail_items_padding_top">16dp</dimen>
<!-- Global actions grid -->
- <dimen name="global_actions_grid_container_bottom_margin">16dp</dimen>
+ <dimen name="global_actions_grid_container_bottom_margin">4dp</dimen>
<dimen name="global_actions_grid_vertical_padding">8dp</dimen>
<dimen name="global_actions_grid_horizontal_padding">4dp</dimen>
@@ -35,7 +35,7 @@
<dimen name="global_actions_grid_item_icon_width">24dp</dimen>
<dimen name="global_actions_grid_item_icon_height">24dp</dimen>
- <dimen name="global_actions_grid_item_icon_top_margin">16dp</dimen>
+ <dimen name="global_actions_grid_item_icon_top_margin">14dp</dimen>
<dimen name="global_actions_grid_item_icon_side_margin">24dp</dimen>
<dimen name="global_actions_grid_item_icon_bottom_margin">4dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 4905e57..5338bb4 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -776,7 +776,7 @@
<!-- QuickSettings: Wifi secondary label shown when the wifi is being enabled [CHAR LIMIT=NONE] -->
<string name="quick_settings_wifi_secondary_label_transient">Turning on…</string>
<!-- QuickSettings: Cast title [CHAR LIMIT=NONE] -->
- <string name="quick_settings_cast_title">Cast</string>
+ <string name="quick_settings_cast_title">Screen Cast</string>
<!-- QuickSettings: Cast detail panel, status text when casting [CHAR LIMIT=NONE] -->
<string name="quick_settings_casting">Casting</string>
<!-- QuickSettings: Cast detail panel, default device name [CHAR LIMIT=NONE] -->
@@ -1579,7 +1579,7 @@
<string name="inline_blocking_helper">You usually dismiss these notifications.
\nKeep showing them?</string>
- <!-- Notification Inline controls: button to dismiss the blocking helper [CHAR_LIMIT=25] -->
+ <!-- Notification Inline controls: button to dismiss the blocking helper [CHAR_LIMIT=20] -->
<string name="inline_done_button">Done</string>
<!-- Notification Inline controls: continue receiving notifications prompt, channel level -->
@@ -1588,7 +1588,7 @@
<!-- Notification inline controls: block notifications button [CHAR_LIMIT=25] -->
<string name="inline_stop_button">Stop notifications</string>
- <!-- Notification inline controls: button to deliver notifications silently from this channel [CHAR_LIMIT=35] -->
+ <!-- Notification inline controls: button to deliver notifications silently from this channel [CHAR_LIMIT=30] -->
<string name="inline_deliver_silently_button">Deliver Silently</string>
<!-- Notification inline controls: button to block notifications from this channel [CHAR_LIMIT=20] -->
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
index 078947c..953816e 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
@@ -17,6 +17,7 @@
package com.android.systemui.shared.recents;
import android.graphics.Rect;
+import android.os.Bundle;
import android.view.MotionEvent;
/**
@@ -82,4 +83,13 @@
*/
boolean supportsRoundedCornersOnWindows() = 11;
+ /**
+ * Proxies the assistant gesture's progress started from navigation bar.
+ */
+ void onAssistantProgress(float progress) = 12;
+
+ /**
+ * Start the assistant.
+ */
+ void startAssistant(in Bundle bundle) = 13;
}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java
index 3d2f61e..c54a469 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java
@@ -48,6 +48,21 @@
onActivityLaunchOnSecondaryDisplayFailed();
}
+ /**
+ * @see #onActivityLaunchOnSecondaryDisplayRerouted(RunningTaskInfo taskInfo)
+ */
+ public void onActivityLaunchOnSecondaryDisplayRerouted() { }
+
+ /**
+ * 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
+ */
+ public void onActivityLaunchOnSecondaryDisplayRerouted(RunningTaskInfo taskInfo) {
+ onActivityLaunchOnSecondaryDisplayRerouted();
+ }
+
public void onTaskProfileLocked(int taskId, int userId) { }
public void onTaskCreated(int taskId, ComponentName componentName) { }
public void onTaskRemoved(int taskId) { }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
index a9ac42f..7e4ab85 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java
@@ -141,6 +141,13 @@
}
@Override
+ public void onActivityLaunchOnSecondaryDisplayRerouted(RunningTaskInfo taskInfo,
+ int requestedDisplayId) throws RemoteException {
+ mHandler.obtainMessage(H.ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED,
+ requestedDisplayId, 0 /* unused */, taskInfo).sendToTarget();
+ }
+
+ @Override
public void onTaskProfileLocked(int taskId, int userId) throws RemoteException {
mHandler.obtainMessage(H.ON_TASK_PROFILE_LOCKED, taskId, userId).sendToTarget();
}
@@ -189,6 +196,7 @@
private static final int ON_TASK_REMOVED = 13;
private static final int ON_TASK_MOVED_TO_FRONT = 14;
private static final int ON_ACTIVITY_REQUESTED_ORIENTATION_CHANGE = 15;
+ private static final int ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED = 16;
public H(Looper looper) {
@@ -270,6 +278,14 @@
}
break;
}
+ case ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED: {
+ final RunningTaskInfo info = (RunningTaskInfo) msg.obj;
+ for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
+ mTaskStackListeners.get(i)
+ .onActivityLaunchOnSecondaryDisplayRerouted(info);
+ }
+ break;
+ }
case ON_TASK_PROFILE_LOCKED: {
for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
mTaskStackListeners.get(i).onTaskProfileLocked(msg.arg1, msg.arg2);
diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
index 1539582..64517ba 100644
--- a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
+++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
@@ -52,9 +52,11 @@
private boolean mTelephonyCapable;
private boolean mShowMissingSim;
private boolean mShowAirplaneMode;
- private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @VisibleForTesting
+ protected KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private WifiManager mWifiManager;
- private boolean[] mSimErrorState = new boolean[TelephonyManager.getDefault().getPhoneCount()];
+ private boolean[] mSimErrorState;
+ private final int mSimSlotsNumber;
private CarrierTextCallback mCarrierTextCallback;
private Context mContext;
private CharSequence mSeparator;
@@ -72,7 +74,8 @@
}
};
- private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
+ @VisibleForTesting
+ protected final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
@Override
public void onRefreshCarrierInfo() {
if (DEBUG) {
@@ -93,7 +96,7 @@
}
public void onSimStateChanged(int subId, int slotId, IccCardConstants.State simState) {
- if (slotId < 0) {
+ if (slotId < 0 || slotId >= mSimSlotsNumber) {
Log.d(TAG, "onSimStateChanged() - slotId invalid: " + slotId
+ " mTelephonyCapable: " + Boolean.toString(mTelephonyCapable));
return;
@@ -144,36 +147,48 @@
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mSeparator = separator;
mWakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class);
+ mSimSlotsNumber = ((TelephonyManager) context.getSystemService(
+ Context.TELEPHONY_SERVICE)).getPhoneCount();
+ mSimErrorState = new boolean[mSimSlotsNumber];
}
/**
* Checks if there are faulty cards. Adds the text depending on the slot of the card
*
* @param text: current carrier text based on the sim state
+ * @param carrierNames names order by subscription order
+ * @param subOrderBySlot array containing the sub index for each slot ID
* @param noSims: whether a valid sim card is inserted
* @return text
*/
- private CharSequence updateCarrierTextWithSimIoError(CharSequence text, boolean noSims) {
+ private CharSequence updateCarrierTextWithSimIoError(CharSequence text,
+ CharSequence[] carrierNames, int[] subOrderBySlot, boolean noSims) {
final CharSequence carrier = "";
CharSequence carrierTextForSimIOError = getCarrierTextForSimState(
IccCardConstants.State.CARD_IO_ERROR, carrier);
+ // mSimErrorState has the state of each sim indexed by slotID.
for (int index = 0; index < mSimErrorState.length; index++) {
- if (mSimErrorState[index]) {
- // In the case when no sim cards are detected but a faulty card is inserted
- // overwrite the text and only show "Invalid card"
- if (noSims) {
- return concatenate(carrierTextForSimIOError,
- getContext().getText(
- com.android.internal.R.string.emergency_calls_only),
- mSeparator);
- } else if (index == 0) {
- // prepend "Invalid card" when faulty card is inserted in slot 0
- text = concatenate(carrierTextForSimIOError, text, mSeparator);
- } else {
- // concatenate "Invalid card" when faulty card is inserted in slot 1
- text = concatenate(text, carrierTextForSimIOError, mSeparator);
- }
+ if (!mSimErrorState[index]) {
+ continue;
}
+ // In the case when no sim cards are detected but a faulty card is inserted
+ // overwrite the text and only show "Invalid card"
+ if (noSims) {
+ return concatenate(carrierTextForSimIOError,
+ getContext().getText(
+ com.android.internal.R.string.emergency_calls_only),
+ mSeparator);
+ } else if (subOrderBySlot[index] != -1) {
+ int subIndex = subOrderBySlot[index];
+ // prepend "Invalid card" when faulty card is inserted in slot 0 or 1
+ carrierNames[subIndex] = concatenate(carrierTextForSimIOError,
+ carrierNames[subIndex],
+ mSeparator);
+ } else {
+ // concatenate "Invalid card" when faulty card is inserted in other slot
+ text = concatenate(text, carrierTextForSimIOError, mSeparator);
+ }
+
}
return text;
}
@@ -209,16 +224,25 @@
protected void updateCarrierText() {
boolean allSimsMissing = true;
boolean anySimReadyAndInService = false;
- boolean missingSimsWithSubs = false;
CharSequence displayText = null;
List<SubscriptionInfo> subs = mKeyguardUpdateMonitor.getSubscriptionInfo(false);
final int numSubs = subs.size();
final int[] subsIds = new int[numSubs];
+ // This array will contain in position i, the index of subscription in slot ID i.
+ // -1 if no subscription in that slot
+ final int[] subOrderBySlot = new int[mSimSlotsNumber];
+ for (int i = 0; i < mSimSlotsNumber; i++) {
+ subOrderBySlot[i] = -1;
+ }
+ final CharSequence[] carrierNames = new CharSequence[numSubs];
if (DEBUG) Log.d(TAG, "updateCarrierText(): " + numSubs);
+
for (int i = 0; i < numSubs; i++) {
int subId = subs.get(i).getSubscriptionId();
+ carrierNames[i] = "";
subsIds[i] = subId;
+ subOrderBySlot[subs.get(i).getSimSlotIndex()] = i;
IccCardConstants.State simState = mKeyguardUpdateMonitor.getSimState(subId);
CharSequence carrierName = subs.get(i).getCarrierName();
CharSequence carrierTextForSimState = getCarrierTextForSimState(simState, carrierName);
@@ -227,7 +251,7 @@
}
if (carrierTextForSimState != null) {
allSimsMissing = false;
- displayText = concatenate(displayText, carrierTextForSimState, mSeparator);
+ carrierNames[i] = carrierTextForSimState;
}
if (simState == IccCardConstants.State.READY) {
ServiceState ss = mKeyguardUpdateMonitor.mServiceStates.get(subId);
@@ -256,7 +280,6 @@
// described above.
displayText = makeCarrierStringOnEmergencyCapable(
getMissingSimMessage(), subs.get(0).getCarrierName());
- missingSimsWithSubs = true;
} else {
// We don't have a SubscriptionInfo to get the emergency calls only from.
// Grab it from the old sticky broadcast if possible instead. We can use it
@@ -286,24 +309,32 @@
}
}
- displayText = updateCarrierTextWithSimIoError(displayText, allSimsMissing);
+ displayText = updateCarrierTextWithSimIoError(displayText, carrierNames, subOrderBySlot,
+ allSimsMissing);
// APM (airplane mode) != no carrier state. There are carrier services
// (e.g. WFC = Wi-Fi calling) which may operate in APM.
if (!anySimReadyAndInService && WirelessUtils.isAirplaneModeOn(mContext)) {
displayText = getAirplaneModeMessage();
}
- Handler handler = Dependency.get(Dependency.MAIN_HANDLER);
+ if (TextUtils.isEmpty(displayText)) {
+ displayText = TextUtils.join(mSeparator, carrierNames);
+ }
final CarrierTextCallbackInfo info = new CarrierTextCallbackInfo(
displayText,
- displayText.toString().split(mSeparator.toString()),
- anySimReadyAndInService && !missingSimsWithSubs,
+ carrierNames,
+ !allSimsMissing,
subsIds);
+ postToCallback(info);
+ }
+
+ @VisibleForTesting
+ protected void postToCallback(CarrierTextCallbackInfo info) {
+ Handler handler = Dependency.get(Dependency.MAIN_HANDLER);
final CarrierTextCallback callback = mCarrierTextCallback;
if (callback != null) {
handler.post(() -> callback.updateCarrierInfo(info));
}
-
}
private Context getContext() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index 8de84bf..563b007 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -279,7 +279,7 @@
*/
public void dozeTimeTick() {
if (mClockPlugin != null) {
- mClockPlugin.dozeTimeTick();
+ mClockPlugin.onTimeTick();
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
index b0670fd..17546c5 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
@@ -27,7 +27,6 @@
import android.os.UserHandle;
import android.text.TextUtils;
import android.text.format.DateFormat;
-import android.util.ArraySet;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
@@ -42,8 +41,6 @@
import com.android.systemui.Dependency;
import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.google.android.collect.Sets;
-
import java.util.Locale;
import java.util.TimeZone;
@@ -63,7 +60,6 @@
private Runnable mPendingMarqueeStart;
private Handler mHandler;
- private ArraySet<View> mVisibleInDoze;
private boolean mPulsing;
private float mDarkAmount = 0;
private int mTextColor;
@@ -175,7 +171,6 @@
}
mOwnerInfo = findViewById(R.id.owner_info);
mKeyguardSlice = findViewById(R.id.keyguard_status_area);
- mVisibleInDoze = Sets.newArraySet(mClockView, mKeyguardSlice);
mTextColor = mClockView.getCurrentTextColor();
mKeyguardSlice.setContentChangeListener(this::onSliceContentChanged);
@@ -348,7 +343,6 @@
}
final int blendedTextColor = ColorUtils.blendARGB(mTextColor, Color.WHITE, mDarkAmount);
- updateDozeVisibleViews();
mKeyguardSlice.setDarkAmount(mDarkAmount);
mClockView.setTextColor(blendedTextColor);
}
@@ -372,13 +366,6 @@
return;
}
mPulsing = pulsing;
- updateDozeVisibleViews();
- }
-
- private void updateDozeVisibleViews() {
- for (View child : mVisibleInDoze) {
- child.setAlpha(mDarkAmount == 1 && mPulsing ? 0.8f : 1);
- }
}
private boolean shouldShowLogout() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 3ac7fd4..f208118 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -196,6 +196,7 @@
private static KeyguardUpdateMonitor sInstance;
private final Context mContext;
+ private final boolean mIsPrimaryUser;
HashMap<Integer, SimData> mSimDatas = new HashMap<Integer, SimData>();
HashMap<Integer, ServiceState> mServiceStates = new HashMap<Integer, ServiceState>();
@@ -242,8 +243,6 @@
private boolean mIsDreaming;
private final DevicePolicyManager mDevicePolicyManager;
private boolean mLogoutEnabled;
- private boolean mFingerprintLockedOut;
- private boolean mFaceLockedOut;
/**
* Short delay before restarting biometric authentication after a successful try
@@ -648,11 +647,6 @@
}
}
- if (msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT
- || msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT) {
- mFingerprintLockedOut = true;
- }
-
if (msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT) {
mLockPatternUtils.requireStrongAuth(
LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT,
@@ -668,7 +662,6 @@
}
private void handleFingerprintLockoutReset() {
- mFingerprintLockedOut = false;
updateFingerprintListeningState();
}
@@ -806,11 +799,6 @@
}
}
- if (msgId == FaceManager.FACE_ERROR_LOCKOUT
- || msgId == FaceManager.FACE_ERROR_LOCKOUT_PERMANENT) {
- mFaceLockedOut = true;
- }
-
if (msgId == FaceManager.FACE_ERROR_LOCKOUT_PERMANENT) {
mLockPatternUtils.requireStrongAuth(
LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT,
@@ -827,7 +815,6 @@
}
private void handleFaceLockoutReset() {
- mFaceLockedOut = false;
updateFaceListeningState();
}
@@ -1530,6 +1517,7 @@
ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
mUserManager = context.getSystemService(UserManager.class);
+ mIsPrimaryUser = mUserManager.isPrimaryUser();
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled();
updateAirplaneModeState();
@@ -1608,21 +1596,25 @@
}
private boolean shouldListenForFingerprint() {
- return (mKeyguardIsVisible || !mDeviceInteractive ||
+ // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
+ // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
+ final boolean shouldListen = (mKeyguardIsVisible || !mDeviceInteractive ||
(mBouncer && !mKeyguardGoingAway) || mGoingToSleep ||
shouldListenForFingerprintAssistant() || (mKeyguardOccluded && mIsDreaming))
&& !mSwitchingUser && !isFingerprintDisabled(getCurrentUser())
- && !mKeyguardGoingAway && !mFingerprintLockedOut;
+ && !mKeyguardGoingAway && mIsPrimaryUser;
+ return shouldListen;
}
private boolean shouldListenForFace() {
final boolean awakeKeyguard = mKeyguardIsVisible && mDeviceInteractive && !mGoingToSleep;
final int user = getCurrentUser();
-
+ // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
+ // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
return (mBouncer || mAuthInterruptActive || awakeKeyguard || shouldListenForFaceAssistant())
&& !mSwitchingUser && !getUserCanSkipBouncer(user) && !isFaceDisabled(user)
- && !mKeyguardGoingAway && !mFaceLockedOut && mFaceSettingEnabledForUser
- && mUserManager.isUserUnlocked(user);
+ && !mKeyguardGoingAway && mFaceSettingEnabledForUser
+ && mUserManager.isUserUnlocked(user) && mIsPrimaryUser;
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
index 3114708..870ac87 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +34,16 @@
public class BubbleClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mView;
@@ -48,25 +61,22 @@
*/
private CrossFadeDarkController mDarkController;
- private BubbleClockController() { }
-
/**
* Create a BubbleClockController instance.
*
* @param layoutInflater Inflater used to inflate custom clock views.
*/
- public static BubbleClockController build(LayoutInflater layoutInflater) {
- BubbleClockController controller = new BubbleClockController();
- controller.createViews(layoutInflater);
- return controller;
+ public BubbleClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater layoutInflater) {
- mView = layoutInflater.inflate(R.layout.bubble_clock, null);
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.bubble_clock, null);
mDigitalClock = (TextClock) mView.findViewById(R.id.digital_clock);
mAnalogClock = (ImageClock) mView.findViewById(R.id.analog_clock);
- mLockClockContainer = layoutInflater.inflate(R.layout.digital_clock, null);
+ mLockClockContainer = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClock = (TextClock) mLockClockContainer.findViewById(R.id.lock_screen_clock);
mLockClock.setVisibility(View.GONE);
@@ -74,12 +84,33 @@
}
@Override
+ public String getName() {
+ return "bubble";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_bubble);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.bubble_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mLockClockContainer == null) {
+ createViews();
+ }
return mLockClockContainer;
}
@Override
public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@@ -103,13 +134,13 @@
}
@Override
- public void dozeTimeTick() {
- mAnalogClock.onTimeChanged();
+ public void setDarkAmount(float darkAmount) {
+ mDarkController.setDarkAmount(darkAmount);
}
@Override
- public void setDarkAmount(float darkAmount) {
- mDarkController.setDarkAmount(darkAmount);
+ public void onTimeTick() {
+ mAnalogClock.onTimeChanged();
}
@Override
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index 3827e44..294c725 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -23,7 +23,6 @@
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
@@ -31,6 +30,7 @@
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
@@ -39,17 +39,19 @@
import androidx.annotation.VisibleForTesting;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.keyguard.R;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManager.DockEventListener;
import com.android.systemui.plugins.ClockPlugin;
+import com.android.systemui.plugins.PluginListener;
+import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.InjectionInflationController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.function.Supplier;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -60,26 +62,49 @@
@Singleton
public final class ClockManager {
+ private static final String TAG = "ClockOptsProvider";
+ private static final String DEFAULT_CLOCK_ID = "default";
+
private final List<ClockInfo> mClockInfos = new ArrayList<>();
/**
* Map from expected value stored in settings to supplier of custom clock face.
*/
- private final Map<String, Supplier<ClockPlugin>> mClocks = new ArrayMap<>();
+ private final Map<String, ClockPlugin> mClocks = new ArrayMap<>();
@Nullable private ClockPlugin mCurrentClock;
private final ContentResolver mContentResolver;
private final SettingsWrapper mSettingsWrapper;
+ private final Handler mMainHandler = new Handler(Looper.getMainLooper());
+
/**
* Observe settings changes to know when to switch the clock face.
*/
private final ContentObserver mContentObserver =
- new ContentObserver(new Handler(Looper.getMainLooper())) {
+ new ContentObserver(mMainHandler) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
reload();
}
};
+
+ private final PluginListener<ClockPlugin> mClockPluginListener =
+ new PluginListener<ClockPlugin>() {
+ @Override
+ public void onPluginConnected(ClockPlugin plugin, Context pluginContext) {
+ addClockPlugin(plugin);
+ reload();
+ }
+
+ @Override
+ public void onPluginDisconnected(ClockPlugin plugin) {
+ removeClockPlugin(plugin);
+ reload();
+ }
+ };
+
+ private final PluginManager mPluginManager;
+
/**
* Observe changes to dock state to know when to switch the clock face.
*/
@@ -107,56 +132,29 @@
@Inject
public ClockManager(Context context, InjectionInflationController injectionInflater,
- @Nullable DockManager dockManager, SysuiColorExtractor colorExtractor) {
- this(context, injectionInflater, dockManager, colorExtractor, context.getContentResolver(),
- new SettingsWrapper(context.getContentResolver()));
+ PluginManager pluginManager, @Nullable DockManager dockManager,
+ SysuiColorExtractor colorExtractor) {
+ this(context, injectionInflater, pluginManager, dockManager, colorExtractor,
+ context.getContentResolver(), new SettingsWrapper(context.getContentResolver()));
}
ClockManager(Context context, InjectionInflationController injectionInflater,
- @Nullable DockManager dockManager, SysuiColorExtractor colorExtractor,
- ContentResolver contentResolver, SettingsWrapper settingsWrapper) {
+ PluginManager pluginManager, @Nullable DockManager dockManager,
+ SysuiColorExtractor colorExtractor, ContentResolver contentResolver,
+ SettingsWrapper settingsWrapper) {
+ mPluginManager = pluginManager;
mDockManager = dockManager;
mColorExtractor = colorExtractor;
mContentResolver = contentResolver;
mSettingsWrapper = settingsWrapper;
Resources res = context.getResources();
- mClockInfos.add(ClockInfo.builder()
- .setName("default")
- .setTitle(res.getString(R.string.clock_title_default))
- .setId("default")
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.default_thumbnail))
- .setPreview(() -> BitmapFactory.decodeResource(res, R.drawable.default_preview))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("bubble")
- .setTitle(res.getString(R.string.clock_title_bubble))
- .setId(BubbleClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.bubble_thumbnail))
- .setPreview(() -> getClockPreview(BubbleClockController.class.getName()))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("stretch")
- .setTitle(res.getString(R.string.clock_title_stretch))
- .setId(StretchAnalogClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.stretch_thumbnail))
- .setPreview(() -> getClockPreview(StretchAnalogClockController.class.getName()))
- .build());
- mClockInfos.add(ClockInfo.builder()
- .setName("type")
- .setTitle(res.getString(R.string.clock_title_type))
- .setId(TypeClockController.class.getName())
- .setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.type_thumbnail))
- .setPreview(() -> getClockPreview(TypeClockController.class.getName()))
- .build());
-
LayoutInflater layoutInflater = injectionInflater.injectable(LayoutInflater.from(context));
- mClocks.put(BubbleClockController.class.getName(),
- () -> BubbleClockController.build(layoutInflater));
- mClocks.put(StretchAnalogClockController.class.getName(),
- () -> StretchAnalogClockController.build(layoutInflater));
- mClocks.put(TypeClockController.class.getName(),
- () -> TypeClockController.build(layoutInflater));
+
+ addClockPlugin(new DefaultClockController(res, layoutInflater));
+ addClockPlugin(new BubbleClockController(res, layoutInflater));
+ addClockPlugin(new StretchAnalogClockController(res, layoutInflater));
+ addClockPlugin(new TypeClockController(res, layoutInflater));
// Store the size of the display for generation of clock preview.
DisplayMetrics dm = res.getDisplayMetrics();
@@ -211,6 +209,29 @@
return mContentObserver;
}
+ private void addClockPlugin(ClockPlugin plugin) {
+ final String id = plugin.getClass().getName();
+ mClocks.put(plugin.getClass().getName(), plugin);
+ mClockInfos.add(ClockInfo.builder()
+ .setName(plugin.getName())
+ .setTitle(plugin.getTitle())
+ .setId(id)
+ .setThumbnail(() -> plugin.getThumbnail())
+ .setPreview(() -> getClockPreview(id))
+ .build());
+ }
+
+ private void removeClockPlugin(ClockPlugin plugin) {
+ final String id = plugin.getClass().getName();
+ mClocks.remove(id);
+ for (int i = 0; i < mClockInfos.size(); i++) {
+ if (id.equals(mClockInfos.get(i).getId())) {
+ mClockInfos.remove(i);
+ break;
+ }
+ }
+ }
+
/**
* Generate a realistic preview of a clock face.
* @param clockId ID of clock to use for preview, should be obtained from {@link getClockInfos}.
@@ -218,38 +239,54 @@
*/
@Nullable
private Bitmap getClockPreview(String clockId) {
- Supplier<ClockPlugin> supplier = mClocks.get(clockId);
- if (supplier == null) {
- return null;
- }
- ClockPlugin plugin = supplier.get();
+ FutureTask<Bitmap> task = new FutureTask<>(new Callable<Bitmap>() {
+ @Override
+ public Bitmap call() {
+ Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
+ ClockPlugin plugin = mClocks.get(clockId);
+ if (plugin == null) {
+ return null;
+ }
- // Use the big clock view for the preview
- View clockView = plugin.getBigClockView();
- if (clockView == null) {
- return null;
+ // Use the big clock view for the preview
+ View clockView = plugin.getBigClockView();
+ if (clockView == null) {
+ return null;
+ }
+
+ // Initialize state of plugin before generating preview.
+ plugin.setDarkAmount(1f);
+ plugin.setTextColor(Color.WHITE);
+
+ ColorExtractor.GradientColors colors = mColorExtractor.getColors(
+ WallpaperManager.FLAG_LOCK, true);
+ plugin.setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
+ plugin.onTimeTick();
+
+ // Draw clock view hierarchy to canvas.
+ Canvas canvas = new Canvas(bitmap);
+ canvas.drawColor(Color.BLACK);
+ dispatchVisibilityAggregated(clockView, true);
+ clockView.measure(MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY));
+ clockView.layout(0, 0, mWidth, mHeight);
+ clockView.draw(canvas);
+ return bitmap;
+ }
+ });
+
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ task.run();
+ } else {
+ mMainHandler.post(task);
}
- // Initialize state of plugin before generating preview.
- plugin.setDarkAmount(1f);
- plugin.setTextColor(Color.WHITE);
-
- ColorExtractor.GradientColors colors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
- true);
- plugin.setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
- plugin.dozeTimeTick();
-
- // Draw clock view hierarchy to canvas.
- Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- dispatchVisibilityAggregated(clockView, true);
- clockView.measure(MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY));
- clockView.layout(0, 0, mWidth, mHeight);
- canvas.drawColor(Color.BLACK);
- clockView.draw(canvas);
-
- return bitmap;
+ try {
+ return task.get();
+ } catch (Exception e) {
+ Log.e(TAG, "Error completing task", e);
+ return null;
+ }
}
private void dispatchVisibilityAggregated(View view, boolean isVisible) {
@@ -279,6 +316,7 @@
}
private void register() {
+ mPluginManager.addPluginListener(mClockPluginListener, ClockPlugin.class, true);
mContentResolver.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE),
false, mContentObserver);
@@ -291,6 +329,7 @@
}
private void unregister() {
+ mPluginManager.removePluginListener(mClockPluginListener);
mContentResolver.unregisterContentObserver(mContentObserver);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
@@ -299,7 +338,11 @@
private void reload() {
mCurrentClock = getClockPlugin();
- notifyClockChanged(mCurrentClock);
+ if (mCurrentClock instanceof DefaultClockController) {
+ notifyClockChanged(null);
+ } else {
+ notifyClockChanged(mCurrentClock);
+ }
}
private ClockPlugin getClockPlugin() {
@@ -307,21 +350,15 @@
if (mIsDocked) {
final String name = mSettingsWrapper.getDockedClockFace();
if (name != null) {
- Supplier<ClockPlugin> supplier = mClocks.get(name);
- if (supplier != null) {
- plugin = supplier.get();
- if (plugin != null) {
- return plugin;
- }
+ plugin = mClocks.get(name);
+ if (plugin != null) {
+ return plugin;
}
}
}
final String name = mSettingsWrapper.getLockScreenCustomClockFace();
if (name != null) {
- Supplier<ClockPlugin> supplier = mClocks.get(name);
- if (supplier != null) {
- plugin = supplier.get();
- }
+ plugin = mClocks.get(name);
}
return plugin;
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
new file mode 100644
index 0000000..8a6a4cd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.keyguard.clock;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Paint.Style;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.keyguard.R;
+import com.android.systemui.plugins.ClockPlugin;
+
+import java.util.TimeZone;
+
+/**
+ * Plugin for the default clock face used only to provide a preview.
+ */
+public class DefaultClockController implements ClockPlugin {
+
+ /**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
+ * Root view of preview.
+ */
+ private View mView;
+
+ /**
+ * Text clock in preview view hierarchy.
+ */
+ private TextView mTextTime;
+
+ /**
+ * Date showing below time in preview view hierarchy.
+ */
+ private TextView mTextDate;
+
+ /**
+ * Create a DefaultClockController instance.
+ *
+ * @param inflater Inflater used to inflate custom clock views.
+ */
+ public DefaultClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
+ }
+
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.default_clock_preview, null);
+ mTextTime = mView.findViewById(R.id.time);
+ mTextDate = mView.findViewById(R.id.date);
+ }
+
+ @Override
+ public String getName() {
+ return "default";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_default);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.default_thumbnail);
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+
+ @Override
+ public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
+ return mView;
+ }
+
+ @Override
+ public void setStyle(Style style) {}
+
+ @Override
+ public void setTextColor(int color) {
+ mTextTime.setTextColor(color);
+ mTextDate.setTextColor(color);
+ }
+
+ @Override
+ public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
+
+ @Override
+ public void onTimeTick() {
+ }
+
+ @Override
+ public void setDarkAmount(float darkAmount) {}
+
+ @Override
+ public void onTimeZoneChanged(TimeZone timeZone) {}
+
+ @Override
+ public boolean shouldShowStatusArea() {
+ return true;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
index c465114..7401819 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +34,16 @@
public class StretchAnalogClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mBigClockView;
@@ -48,25 +61,22 @@
*/
private CrossFadeDarkController mDarkController;
- private StretchAnalogClockController() { }
-
/**
* Create a BubbleClockController instance.
*
* @param layoutInflater Inflater used to inflate custom clock views.
*/
- public static StretchAnalogClockController build(LayoutInflater layoutInflater) {
- StretchAnalogClockController controller = new StretchAnalogClockController();
- controller.createViews(layoutInflater);
- return controller;
+ public StretchAnalogClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater layoutInflater) {
- mBigClockView = layoutInflater.inflate(R.layout.stretchanalog_clock, null);
+ private void createViews() {
+ mBigClockView = mLayoutInflater.inflate(R.layout.stretchanalog_clock, null);
mAnalogClock = mBigClockView.findViewById(R.id.analog_clock);
mDigitalClock = mBigClockView.findViewById(R.id.digital_clock);
- mView = layoutInflater.inflate(R.layout.digital_clock, null);
+ mView = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClock = mView.findViewById(R.id.lock_screen_clock);
mLockClock.setVisibility(View.GONE);
@@ -74,12 +84,33 @@
}
@Override
+ public String getName() {
+ return "stretch";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_stretch);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.stretch_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@Override
public View getBigClockView() {
+ if (mBigClockView == null) {
+ createViews();
+ }
return mBigClockView;
}
@@ -103,7 +134,7 @@
}
@Override
- public void dozeTimeTick() {
+ public void onTimeTick() {
mAnalogClock.onTimeChanged();
}
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
index 2ea39c4..69f86c7 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/TypeClockController.java
@@ -15,6 +15,9 @@
*/
package com.android.keyguard.clock;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint.Style;
import android.view.LayoutInflater;
import android.view.View;
@@ -30,6 +33,16 @@
public class TypeClockController implements ClockPlugin {
/**
+ * Resources used to get title and thumbnail.
+ */
+ private final Resources mResources;
+
+ /**
+ * LayoutInflater used to inflate custom clock views.
+ */
+ private final LayoutInflater mLayoutInflater;
+
+ /**
* Custom clock shown on AOD screen and behind stack scroller on lock.
*/
private View mView;
@@ -45,36 +58,54 @@
*/
private CrossFadeDarkController mDarkController;
- private TypeClockController() {}
-
/**
* Create a TypeClockController instance.
*
* @param inflater Inflater used to inflate custom clock views.
*/
- public static TypeClockController build(LayoutInflater inflater) {
- TypeClockController controller = new TypeClockController();
- controller.createViews(inflater);
- return controller;
+ TypeClockController(Resources res, LayoutInflater inflater) {
+ mResources = res;
+ mLayoutInflater = inflater;
}
- private void createViews(LayoutInflater inflater) {
- mView = inflater.inflate(R.layout.type_clock, null);
+ private void createViews() {
+ mView = mLayoutInflater.inflate(R.layout.type_clock, null);
mTypeClock = mView.findViewById(R.id.type_clock);
// For now, this view is used to hide the default digital clock.
// Need better transition to lock screen.
- mLockClockContainer = inflater.inflate(R.layout.digital_clock, null);
+ mLockClockContainer = mLayoutInflater.inflate(R.layout.digital_clock, null);
mLockClockContainer.setVisibility(View.GONE);
}
@Override
+ public String getName() {
+ return "type";
+ }
+
+ @Override
+ public String getTitle() {
+ return mResources.getString(R.string.clock_title_type);
+ }
+
+ @Override
+ public Bitmap getThumbnail() {
+ return BitmapFactory.decodeResource(mResources, R.drawable.type_thumbnail);
+ }
+
+ @Override
public View getView() {
+ if (mLockClockContainer == null) {
+ createViews();
+ }
return mLockClockContainer;
}
@Override
public View getBigClockView() {
+ if (mView == null) {
+ createViews();
+ }
return mView;
}
@@ -96,7 +127,7 @@
}
@Override
- public void dozeTimeTick() {
+ public void onTimeTick() {
mTypeClock.onTimeChanged();
}
diff --git a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
index 2a1d066..f5451e9 100644
--- a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java
@@ -63,6 +63,9 @@
public HardwareUiLayout(Context context, AttributeSet attrs) {
super(context, attrs);
+ // Manually re-initialize mRotation to portrait-mode, since this view must always
+ // be constructed in portrait mode and rotated into the correct initial position.
+ mRotation = ROTATION_NONE;
updateSettings();
}
@@ -172,6 +175,10 @@
mSeparatedView.setBackground(mSeparatedViewBackground);
updateEdgeMargin(mEdgeBleed ? 0 : getEdgePadding());
mOldHeight = mList.getMeasuredHeight();
+
+ // Must be called to initialize view rotation correctly.
+ // Requires LayoutParams, hence why this isn't called during the constructor.
+ updateRotation();
} else {
return;
}
@@ -189,7 +196,18 @@
mSwapOrientation = swapOrientation;
}
- @Override
+ private void updateRotation() {
+ int rotation = RotationUtils.getRotation(getContext());
+ if (rotation != mRotation) {
+ rotate(mRotation, rotation);
+ mRotation = rotation;
+ }
+ }
+
+ /**
+ * Requires LayoutParams to be set to work correctly, and therefore must be run after after
+ * the HardwareUILayout has been added to the view hierarchy.
+ */
protected void rotate(int from, int to) {
super.rotate(from, to);
if (from != ROTATION_NONE && to != ROTATION_NONE) {
@@ -522,4 +540,4 @@
inoutInfo.contentInsets.set(mList.getLeft(), mList.getTop(),
0, getBottom() - mList.getBottom());
};
-}
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java b/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java
index 46e004c..0db5bef 100644
--- a/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java
+++ b/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java
@@ -380,6 +380,20 @@
addEvent(PhoneEvent.ON_NOTIFICATION_START_DRAGGING_DOWN);
}
+ public void onStartExpandingFromPulse() {
+ if (DEBUG) {
+ Log.d(TAG, "onStartExpandingFromPulse");
+ }
+ // TODO: maybe add event
+ }
+
+ public void onExpansionFromPulseStopped() {
+ if (DEBUG) {
+ Log.d(TAG, "onExpansionFromPulseStopped");
+ }
+ // TODO: maybe add event
+ }
+
public void onNotificatonStopDraggingDown() {
if (DEBUG) {
Log.d(TAG, "onNotificationStopDraggingDown");
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
index 165eb1d..c8eebac 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleTouchHandler.java
@@ -81,8 +81,7 @@
// anything, collapse the stack.
if (action == MotionEvent.ACTION_OUTSIDE || mTouchedView == null) {
mStack.collapseStack();
- cleanUpDismissTarget();
- mTouchedView = null;
+ resetForNextGesture();
return false;
}
@@ -135,8 +134,7 @@
break;
case MotionEvent.ACTION_CANCEL:
- mTouchedView = null;
- cleanUpDismissTarget();
+ resetForNextGesture();
break;
case MotionEvent.ACTION_UP:
@@ -144,7 +142,7 @@
if (mInDismissTarget && isStack) {
mController.dismissStack();
} else if (mMovedEnough) {
- mVelocityTracker.computeCurrentVelocity(1000);
+ mVelocityTracker.computeCurrentVelocity(/* maxVelocity */ 1000);
final float velX = mVelocityTracker.getXVelocity();
final float velY = mVelocityTracker.getYVelocity();
if (isStack) {
@@ -157,7 +155,7 @@
mController.removeBubble(((BubbleView) mTouchedView).getKey());
}
}
- } else if (mTouchedView.equals(mStack.getExpandedBubbleView())) {
+ } else if (mTouchedView == mStack.getExpandedBubbleView()) {
mStack.collapseStack();
} else if (isStack) {
if (mStack.isExpanded()) {
@@ -169,17 +167,25 @@
mStack.setExpandedBubble(((BubbleView) mTouchedView).getKey());
}
- cleanUpDismissTarget();
- mVelocityTracker.recycle();
- mVelocityTracker = null;
- mTouchedView = null;
- mMovedEnough = false;
+ resetForNextGesture();
break;
}
return true;
}
+ /** Clears all touch-related state. */
+ private void resetForNextGesture() {
+ cleanUpDismissTarget();
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ mTouchedView = null;
+ mMovedEnough = false;
+ mInDismissTarget = false;
+ }
+
/**
* Removes the dismiss target and cancels any pending callbacks to show it.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/Classifier.java b/packages/SystemUI/src/com/android/systemui/classifier/Classifier.java
index 909896e..f8856ce 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/Classifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/Classifier.java
@@ -32,6 +32,7 @@
public static final int RIGHT_AFFORDANCE = 6;
public static final int GENERIC = 7;
public static final int BOUNCER_UNLOCK = 8;
+ public static final int PULSE_EXPAND = 9;
/**
* Contains all the information about touch events from which the classifier can query
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/DirectionEvaluator.java b/packages/SystemUI/src/com/android/systemui/classifier/DirectionEvaluator.java
index 5f04222..78b4168 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/DirectionEvaluator.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/DirectionEvaluator.java
@@ -22,6 +22,7 @@
boolean vertical = Math.abs(yDiff) >= Math.abs(xDiff);
switch (type) {
case Classifier.QUICK_SETTINGS:
+ case Classifier.PULSE_EXPAND:
case Classifier.NOTIFICATION_DRAG_DOWN:
if (!vertical || yDiff <= 0.0) {
return falsingEvaluation;
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
index 8f215ff..a63fdbd 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
@@ -408,10 +408,22 @@
mDataCollector.onNotificatonStartDraggingDown();
}
+ public void onStartExpandingFromPulse() {
+ if (FalsingLog.ENABLED) {
+ FalsingLog.i("onStartExpandingFromPulse", "");
+ }
+ mHumanInteractionClassifier.setType(Classifier.PULSE_EXPAND);
+ mDataCollector.onStartExpandingFromPulse();
+ }
+
public void onNotificatonStopDraggingDown() {
mDataCollector.onNotificatonStopDraggingDown();
}
+ public void onExpansionFromPulseStopped() {
+ mDataCollector.onExpansionFromPulseStopped();
+ }
+
public void onNotificationDismissed() {
mDataCollector.onNotificationDismissed();
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
index 577d57a..0cc50cd 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
@@ -128,7 +128,8 @@
// sent to the classifiers until the finger moves far enough. When the finger if lifted
// up, the last MotionEvent which was far enough from the finger is set as the final
// MotionEvent and sent to the Classifiers.
- if (mCurrentType == Classifier.NOTIFICATION_DRAG_DOWN) {
+ if (mCurrentType == Classifier.NOTIFICATION_DRAG_DOWN
+ || mCurrentType == Classifier.PULSE_EXPAND) {
mBufferedEvents.add(MotionEvent.obtain(event));
Point pointEnd = new Point(event.getX() / mDpi, event.getY() / mDpi);
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 172746e..0be9e25 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -1787,6 +1787,7 @@
mHideAnimationRun = false;
adjustStatusBarLocked();
userActivity();
+ mUpdateMonitor.setKeyguardGoingAway(false /* away */);
mShowKeyguardWakeLock.release();
}
mKeyguardDisplayManager.show();
@@ -1907,7 +1908,6 @@
mHideAnimationRun = false;
adjustStatusBarLocked();
sendUserPresentBroadcast();
- mUpdateMonitor.setKeyguardGoingAway(false /* goingAway */);
}
Trace.endSection();
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
index f91c9d9..bbd8de3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
@@ -521,16 +521,7 @@
}
}
} else {
- // If there are sims ready but there are not the same number of carrier names as
- // subscription ids, just show the full text in the first slot
- mInfos[0].visible = true;
- mCarrierTexts[0].setText(info.carrierText);
- mCarrierGroups[0].setVisibility(View.VISIBLE);
- for (int i = 1; i < SIM_SLOTS; i++) {
- mInfos[i].visible = false;
- mCarrierTexts[i].setText("");
- mCarrierGroups[i].setVisibility(View.GONE);
- }
+ Log.e(TAG, "Carrier information arrays not of same length");
}
} else {
mInfos[0].visible = false;
@@ -612,8 +603,10 @@
// Only show marquee when visible
if (visibility == VISIBLE) {
setEllipsize(TextUtils.TruncateAt.MARQUEE);
+ setSelected(true);
} else {
setEllipsize(TextUtils.TruncateAt.END);
+ setSelected(false);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index f05ac4c..0b1e9c3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -21,6 +21,7 @@
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
+import android.media.projection.MediaProjectionInfo;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.util.Log;
@@ -125,7 +126,30 @@
});
return;
}
- showDetail(true);
+
+ CastDevice activeProjection = getActiveDeviceMediaProjection();
+ if (activeProjection == null) {
+ showDetail(true);
+ } else {
+ mController.stopCasting(activeProjection);
+ }
+ }
+
+ private CastDevice getActiveDeviceMediaProjection() {
+ CastDevice activeDevice = null;
+ for (CastDevice device : mController.getCastDevices()) {
+ if (device.state == CastDevice.STATE_CONNECTED
+ || device.state == CastDevice.STATE_CONNECTING) {
+ activeDevice = device;
+ break;
+ }
+ }
+
+ if (activeDevice != null && activeDevice.tag instanceof MediaProjectionInfo) {
+ return activeDevice;
+ }
+
+ return null;
}
@Override
@@ -161,21 +185,23 @@
for (CastDevice device : devices) {
if (device.state == CastDevice.STATE_CONNECTED) {
state.value = true;
- state.label = getDeviceName(device);
+ state.secondaryLabel = getDeviceName(device);
state.contentDescription = state.contentDescription + "," +
mContext.getString(R.string.accessibility_cast_name, state.label);
} else if (device.state == CastDevice.STATE_CONNECTING) {
connecting = true;
}
}
- if (!state.value && connecting) {
- state.label = mContext.getString(R.string.quick_settings_connecting);
+ if (connecting && !state.value) {
+ state.secondaryLabel = mContext.getString(R.string.quick_settings_connecting);
}
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_qs_cast_on
: R.drawable.ic_qs_cast_off);
- if (mWifiConnected) {
+ if (mWifiConnected || state.value) {
state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
- state.secondaryLabel = "";
+ if (!state.value) {
+ state.secondaryLabel = "";
+ }
state.contentDescription = state.contentDescription + ","
+ mContext.getString(R.string.accessibility_quick_settings_open_details);
state.expandedAccessibilityClassName = Button.class.getName();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 83c4cfc..b794888 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -29,6 +29,7 @@
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_WINDOW_CORNER_RADIUS;
+import android.annotation.FloatRange;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -269,6 +270,30 @@
}
}
+ public void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {
+ if (!verifyCaller("onAssistantProgress")) {
+ return;
+ }
+ long token = Binder.clearCallingIdentity();
+ try {
+ mHandler.post(() -> notifyAssistantProgress(progress));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ public void startAssistant(Bundle bundle) {
+ if (!verifyCaller("startAssistant")) {
+ return;
+ }
+ long token = Binder.clearCallingIdentity();
+ try {
+ mHandler.post(() -> notifyStartAssistant(bundle));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
private boolean verifyCaller(String reason) {
final int callerId = Binder.getCallingUserHandle().getIdentifier();
if (callerId != mCurrentBoundedUserId) {
@@ -590,6 +615,18 @@
}
}
+ private void notifyAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {
+ for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
+ mConnectionCallbacks.get(i).onAssistantProgress(progress);
+ }
+ }
+
+ private void notifyStartAssistant(Bundle bundle) {
+ for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
+ mConnectionCallbacks.get(i).startAssistant(bundle);
+ }
+ }
+
private void updateEnabledState() {
mIsEnabled = mContext.getPackageManager().resolveServiceAsUser(mQuickStepIntent,
MATCH_DIRECT_BOOT_UNAWARE,
@@ -637,5 +674,7 @@
default void onOverviewShown(boolean fromHome) {}
default void onQuickScrubStarted() {}
default void onBackButtonAlphaChanged(float alpha, boolean animate) {}
+ default void onAssistantProgress(@FloatRange(from = 0.0, to = 1.0) float progress) {}
+ default void startAssistant(Bundle bundle) {}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
index a6af82a..33bcefb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
@@ -237,7 +237,8 @@
*/
protected boolean canRemoveImmediately(String key) {
AlertEntry alertEntry = mAlertEntries.get(key);
- return alertEntry == null || alertEntry.wasShownLongEnough();
+ return alertEntry == null || alertEntry.wasShownLongEnough()
+ || alertEntry.mEntry.isRowDismissed();
}
///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AmbientPulseManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AmbientPulseManager.java
index 57d0588..5f878ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AmbientPulseManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AmbientPulseManager.java
@@ -131,7 +131,7 @@
* @param entry the entry that changed
* @param isPulsing true if the entry is now pulsing, false otherwise
*/
- void onAmbientStateChanged(NotificationEntry entry, boolean isPulsing);
+ void onAmbientStateChanged(@NonNull NotificationEntry entry, boolean isPulsing);
}
private final class AmbientEntry extends AlertEntry {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java
index 2edea78..9f382ea 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java
@@ -110,9 +110,7 @@
* @param display the display to add navigation bar on.
*/
private void createNavigationBar(Display display) {
- if (display == null
- || (display.getDisplayId() != DEFAULT_DISPLAY
- && !display.supportsSystemDecorations())) {
+ if (display == null) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index 490317b..fa22367 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -38,10 +38,12 @@
import android.os.Handler;
import android.os.Trace;
import android.os.UserHandle;
+import android.provider.DeviceConfig;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
@@ -115,6 +117,20 @@
private ImageView mBackdropFront;
private ImageView mBackdropBack;
+ private boolean mShowCompactMediaSeekbar;
+ private final DeviceConfig.OnPropertyChangedListener mPropertyChangedListener =
+ new DeviceConfig.OnPropertyChangedListener() {
+ @Override
+ public void onPropertyChanged(String namespace, String name, String value) {
+ if (SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED.equals(name)) {
+ if (DEBUG_MEDIA) {
+ Log.v(TAG, "DEBUG_MEDIA: compact media seekbar flag updated: " + value);
+ }
+ mShowCompactMediaSeekbar = "true".equals(value);
+ }
+ }
+ };
+
private final MediaController.Callback mMediaListener = new MediaController.Callback() {
@Override
public void onPlaybackStateChanged(PlaybackState state) {
@@ -168,6 +184,14 @@
onNotificationRemoved(entry.key);
}
});
+
+ mShowCompactMediaSeekbar = "true".equals(
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED));
+
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
+ mContext.getMainExecutor(),
+ mPropertyChangedListener);
}
public void setUpWithPresenter(NotificationPresenter presenter) {
@@ -189,6 +213,10 @@
return mMediaMetadata;
}
+ public boolean getShowCompactMediaSeekbar() {
+ return mShowCompactMediaSeekbar;
+ }
+
public Icon getMediaIcon() {
if (mMediaNotificationKey == null) {
return null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 110d515..2cca701 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -232,7 +232,7 @@
openedAmount = Math.min(1.0f, openedAmount);
viewState.openedAmount = openedAmount;
viewState.clipTopAmount = 0;
- viewState.alpha = mAmbientState.hasPulsingNotifications() ? 0 : 1;
+ viewState.alpha = 1;
viewState.belowSpeedBump = mAmbientState.getSpeedBumpIndex() == 0;
viewState.hideSensitive = false;
viewState.xTranslation = getTranslationX();
@@ -290,6 +290,7 @@
&& !mAmbientState.isPanelTracking();
int baseZHeight = mAmbientState.getBaseZHeight();
int backgroundTop = 0;
+ int clipTopAmount = 0;
float firstElementRoundness = 0.0f;
ExpandableNotificationRow previousRow = null;
@@ -319,7 +320,8 @@
rowTranslationY + getNotificationMergeSize());
}
}
- updateNotificationClipHeight(row, notificationClipEnd);
+ int clipTop = updateNotificationClipHeight(row, notificationClipEnd, notGoneIndex);
+ clipTopAmount = Math.max(clipTop, clipTopAmount);
float inShelfAmount = updateIconAppearance(row, expandAmount, scrolling, scrollingFast,
expandingAnimated, isLastChild);
numViewsInShelf += inShelfAmount;
@@ -379,9 +381,9 @@
previousColor = ownColorUntinted;
previousRow = row;
}
-
clipTransientViews();
+ setClipTopAmount(clipTopAmount);
setBackgroundTop(backgroundTop);
setFirstElementRoundness(firstElementRoundness);
mShelfIcons.setSpeedBumpIndex(mAmbientState.getSpeedBumpIndex());
@@ -415,7 +417,7 @@
View transientView = mHostLayout.getTransientView(i);
if (transientView instanceof ExpandableNotificationRow) {
ExpandableNotificationRow transientRow = (ExpandableNotificationRow) transientView;
- updateNotificationClipHeight(transientRow, getTranslationY());
+ updateNotificationClipHeight(transientRow, getTranslationY(), -1);
} else {
Log.e(TAG, "NotificationShelf.clipTransientViews(): "
+ "Trying to clip non-row transient view");
@@ -432,9 +434,13 @@
private void updateIconClipAmount(ExpandableNotificationRow row) {
float maxTop = row.getTranslationY();
+ if (getClipTopAmount() != 0) {
+ // if the shelf is clipped, lets make sure we also clip the icon
+ maxTop = Math.max(maxTop, getTranslationY() + getClipTopAmount());
+ }
StatusBarIconView icon = row.getEntry().expandedIcon;
float shelfIconPosition = getTranslationY() + icon.getTop() + icon.getTranslationY();
- if (shelfIconPosition < maxTop && !mAmbientState.isDark()) {
+ if (shelfIconPosition < maxTop && !mAmbientState.isFullyDark()) {
int top = (int) (maxTop - shelfIconPosition);
Rect clipRect = new Rect(0, top, icon.getWidth(), Math.max(top, icon.getHeight()));
icon.setClipBounds(clipRect);
@@ -485,12 +491,18 @@
}
}
- private void updateNotificationClipHeight(ExpandableNotificationRow row,
- float notificationClipEnd) {
+ /**
+ * Update the clipping of this view.
+ * @return the amount that our own top should be clipped
+ */
+ private int updateNotificationClipHeight(ExpandableNotificationRow row,
+ float notificationClipEnd, int childIndex) {
float viewEnd = row.getTranslationY() + row.getActualHeight();
boolean isPinned = (row.isPinned() || row.isHeadsUpAnimatingAway())
&& !mAmbientState.isDozingAndNotPulsing(row);
- if (viewEnd > notificationClipEnd
+ boolean shouldClipOwnTop = row.showingAmbientPulsing()
+ || (mAmbientState.isPulseExpanding() && childIndex == 0);
+ if (viewEnd > notificationClipEnd && !shouldClipOwnTop
&& (mAmbientState.isShadeExpanded() || !isPinned)) {
int clipBottomAmount = (int) (viewEnd - notificationClipEnd);
if (isPinned) {
@@ -501,6 +513,11 @@
} else {
row.setClipBottomAmount(0);
}
+ if (shouldClipOwnTop) {
+ return (int) (viewEnd - getTranslationY());
+ } else {
+ return 0;
+ }
}
@Override
@@ -653,7 +670,7 @@
? fullTransitionAmount
: transitionAmount;
iconState.clampedAppearAmount = clampedAmount;
- float contentTransformationAmount = !mAmbientState.isAboveShelf(row)
+ float contentTransformationAmount = !row.isAboveShelf()
&& (isLastChild || iconState.translateContent)
? iconTransitionAmount
: 0.0f;
@@ -722,7 +739,7 @@
iconState.scaleY = 1.0f;
iconState.hidden = false;
}
- if (mAmbientState.isAboveShelf(row) || (!row.isInShelf() && (isLastChild && row.areGutsExposed()
+ if (row.isAboveShelf() || (!row.isInShelf() && (isLastChild && row.areGutsExposed()
|| row.getTranslationZ() > mAmbientState.getBaseZHeight()))) {
iconState.hidden = true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
new file mode 100644
index 0000000..e5dbcd3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.ObjectAnimator
+import android.animation.ValueAnimator
+import android.content.Context
+import android.os.PowerManager
+import android.os.PowerManager.WAKE_REASON_GESTURE
+import android.os.SystemClock
+import android.view.MotionEvent
+import android.view.ViewConfiguration
+
+import com.android.systemui.Gefingerpoken
+import com.android.systemui.Interpolators
+import com.android.systemui.R
+import com.android.systemui.classifier.FalsingManager
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
+import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+import com.android.systemui.statusbar.phone.ShadeController
+
+import javax.inject.Inject
+import javax.inject.Singleton
+import kotlin.math.max
+
+/**
+ * A utility class to enable the downward swipe on when pulsing.
+ */
+@Singleton
+class PulseExpansionHandler @Inject
+constructor(context: Context,
+ private val mWakeUpCoordinator: NotificationWakeUpCoordinator) : Gefingerpoken {
+ companion object {
+ private val RUBBERBAND_FACTOR_STATIC = 0.25f
+ private val SPRING_BACK_ANIMATION_LENGTH_MS = 375
+ }
+ private val mPowerManager: PowerManager?
+ private var mShadeController: ShadeController? = null
+
+ private val mMinDragDistance: Int
+ private var mInitialTouchX: Float = 0.0f
+ private var mInitialTouchY: Float = 0.0f
+ var isExpanding: Boolean = false
+ private set
+ private val mTouchSlop: Float
+ private var mExpansionCallback: ExpansionCallback? = null
+ private lateinit var mStackScroller: NotificationStackScrollLayout
+ private val mTemp2 = IntArray(2)
+ private var mDraggedFarEnough: Boolean = false
+ private var mStartingChild: ExpandableView? = null
+ private val mFalsingManager: FalsingManager
+ private var mPulsing: Boolean = false
+ var isWakingToShadeLocked: Boolean = false
+ private set
+ private var mEmptyDragAmount: Float = 0.0f
+ private var mWakeUpHeight: Float = 0.0f
+ private var mReachedWakeUpHeight: Boolean = false
+
+ private val isFalseTouch: Boolean
+ get() = mFalsingManager.isFalseTouch
+
+ init {
+ mMinDragDistance = context.resources.getDimensionPixelSize(
+ R.dimen.keyguard_drag_down_min_distance)
+ mTouchSlop = ViewConfiguration.get(context).scaledTouchSlop.toFloat()
+ mFalsingManager = FalsingManager.getInstance(context)
+ mPowerManager = context.getSystemService(PowerManager::class.java)
+ }
+
+ override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
+ return maybeStartExpansion(event)
+ }
+
+ private fun maybeStartExpansion(event: MotionEvent): Boolean {
+ if (!mPulsing) {
+ return false
+ }
+ val x = event.x
+ val y = event.y
+
+ when (event.actionMasked) {
+ MotionEvent.ACTION_DOWN -> {
+ mDraggedFarEnough = false
+ isExpanding = false
+ mStartingChild = null
+ mInitialTouchY = y
+ mInitialTouchX = x
+ }
+
+ MotionEvent.ACTION_MOVE -> {
+ val h = y - mInitialTouchY
+ if (h > mTouchSlop && h > Math.abs(x - mInitialTouchX)) {
+ mFalsingManager.onStartExpandingFromPulse()
+ isExpanding = true
+ captureStartingChild(mInitialTouchX, mInitialTouchY)
+ mInitialTouchY = y
+ mInitialTouchX = x
+ mWakeUpHeight = mWakeUpCoordinator.getWakeUpHeight()
+ mReachedWakeUpHeight = false
+ return true
+ }
+ }
+ }
+ return false
+ }
+
+ override fun onTouchEvent(event: MotionEvent): Boolean {
+ if (!isExpanding) {
+ return maybeStartExpansion(event)
+ }
+ val y = event.y
+
+ when (event.actionMasked) {
+ MotionEvent.ACTION_MOVE -> updateExpansionHeight(y - mInitialTouchY)
+ MotionEvent.ACTION_UP -> if (!mFalsingManager.isUnlockingDisabled && !isFalseTouch) {
+ finishExpansion()
+ } else {
+ cancelExpansion()
+ }
+ MotionEvent.ACTION_CANCEL -> cancelExpansion()
+ }
+ return isExpanding
+ }
+
+ private fun finishExpansion() {
+ resetClock()
+ if (mStartingChild != null) {
+ setUserLocked(mStartingChild!!, false)
+ mStartingChild = null
+ }
+ isExpanding = false
+ isWakingToShadeLocked = true
+ mPowerManager!!.wakeUp(SystemClock.uptimeMillis(), WAKE_REASON_GESTURE,
+ "com.android.systemui:PULSEDRAG")
+ mShadeController!!.goToLockedShade(mStartingChild)
+ if (mStartingChild is ExpandableNotificationRow) {
+ val row = mStartingChild as ExpandableNotificationRow?
+ row!!.onExpandedByGesture(true /* userExpanded */)
+ }
+ }
+
+ private fun updateExpansionHeight(height: Float) {
+ var expansionHeight = max(height, 0.0f)
+ if (!mReachedWakeUpHeight && height > mWakeUpHeight) {
+ mReachedWakeUpHeight = true;
+ }
+ if (mStartingChild != null) {
+ val child = mStartingChild!!
+ val newHeight = Math.min((child.collapsedHeight + expansionHeight).toInt(),
+ child.maxContentHeight)
+ child.actualHeight = newHeight
+ expansionHeight = max(newHeight.toFloat(), expansionHeight)
+ } else {
+ val target = if (mReachedWakeUpHeight) mWakeUpHeight else 0.0f
+ mWakeUpCoordinator.setNotificationsVisibleForExpansion(height > target,
+ true /* animate */,
+ true /* increaseSpeed */)
+ expansionHeight = max(mWakeUpHeight, expansionHeight)
+ }
+ val emptyDragAmount = mWakeUpCoordinator.setPulseHeight(expansionHeight)
+ setEmptyDragAmount(emptyDragAmount * RUBBERBAND_FACTOR_STATIC)
+ }
+
+ private fun captureStartingChild(x: Float, y: Float) {
+ if (mStartingChild == null) {
+ mStartingChild = findView(x, y)
+ if (mStartingChild != null) {
+ setUserLocked(mStartingChild!!, true)
+ }
+ }
+ }
+
+ private fun setEmptyDragAmount(amount: Float) {
+ mEmptyDragAmount = amount
+ mExpansionCallback!!.setEmptyDragAmount(amount)
+ }
+
+ private fun reset(child: ExpandableView) {
+ if (child.actualHeight == child.collapsedHeight) {
+ setUserLocked(child, false)
+ return
+ }
+ val anim = ObjectAnimator.ofInt(child, "actualHeight",
+ child.actualHeight, child.collapsedHeight)
+ anim.interpolator = Interpolators.FAST_OUT_SLOW_IN
+ anim.duration = SPRING_BACK_ANIMATION_LENGTH_MS.toLong()
+ anim.addListener(object : AnimatorListenerAdapter() {
+ override fun onAnimationEnd(animation: Animator) {
+ setUserLocked(child, false)
+ }
+ })
+ anim.start()
+ }
+
+ private fun setUserLocked(child: ExpandableView, userLocked: Boolean) {
+ if (child is ExpandableNotificationRow) {
+ child.isUserLocked = userLocked
+ }
+ }
+
+ private fun resetClock() {
+ val anim = ValueAnimator.ofFloat(mEmptyDragAmount, 0f)
+ anim.interpolator = Interpolators.FAST_OUT_SLOW_IN
+ anim.duration = SPRING_BACK_ANIMATION_LENGTH_MS.toLong()
+ anim.addUpdateListener { animation -> setEmptyDragAmount(animation.animatedValue as Float) }
+ anim.start()
+ }
+
+ private fun cancelExpansion() {
+ mFalsingManager.onExpansionFromPulseStopped()
+ if (mStartingChild != null) {
+ reset(mStartingChild!!)
+ mStartingChild = null
+ } else {
+ resetClock()
+ }
+ mWakeUpCoordinator.setNotificationsVisibleForExpansion(false /* visible */,
+ true /* animate */,
+ false /* increaseSpeed */)
+ isExpanding = false
+ }
+
+ private fun findView(x: Float, y: Float): ExpandableView? {
+ var totalX = x
+ var totalY = y
+ mStackScroller.getLocationOnScreen(mTemp2)
+ totalX += mTemp2[0].toFloat()
+ totalY += mTemp2[1].toFloat()
+ val childAtRawPosition = mStackScroller.getChildAtRawPosition(totalX, totalY)
+ return if (childAtRawPosition != null && childAtRawPosition.isContentExpandable) {
+ childAtRawPosition
+ } else null
+ }
+
+ fun setUp(notificationStackScroller: NotificationStackScrollLayout,
+ expansionCallback: ExpansionCallback,
+ shadeController: ShadeController) {
+ mExpansionCallback = expansionCallback
+ mShadeController = shadeController
+ mStackScroller = notificationStackScroller
+ }
+
+ fun setPulsing(pulsing: Boolean) {
+ mPulsing = pulsing
+ }
+
+ fun onStartedWakingUp() {
+ isWakingToShadeLocked = false
+ }
+
+ interface ExpansionCallback {
+ fun setEmptyDragAmount(amount: Float)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
new file mode 100644
index 0000000..ccb8d9b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar.notification
+
+import android.animation.ObjectAnimator
+import android.util.FloatProperty
+import com.android.systemui.Interpolators
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.statusbar.AmbientPulseManager
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+import com.android.systemui.statusbar.notification.stack.StackStateAnimator
+
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class NotificationWakeUpCoordinator @Inject constructor(
+ private val mAmbientPulseManager: AmbientPulseManager,
+ private val mStatusBarStateController: StatusBarStateController)
+ : AmbientPulseManager.OnAmbientChangedListener, StatusBarStateController.StateListener {
+
+ private val mNotificationVisibility
+ = object : FloatProperty<NotificationWakeUpCoordinator>("notificationVisibility") {
+
+ override fun setValue(coordinator: NotificationWakeUpCoordinator, value: Float) {
+ coordinator.setVisibilityAmount(value)
+ }
+
+ override fun get(coordinator: NotificationWakeUpCoordinator): Float? {
+ return coordinator.mLinearVisibilityAmount
+ }
+ }
+ private lateinit var mStackScroller: NotificationStackScrollLayout
+ private var mVisibilityInterpolator = Interpolators.FAST_OUT_SLOW_IN_REVERSE
+
+ private var mLinearDozeAmount: Float = 0.0f
+ private var mDozeAmount: Float = 0.0f
+ private var mNotificationVisibleAmount = 0.0f
+ private var mNotificationsVisible = false
+ private var mNotificationsVisibleForExpansion = false
+ private var mDarkAnimator: ObjectAnimator? = null
+ private var mVisibilityAmount = 0.0f
+ private var mLinearVisibilityAmount = 0.0f
+ private var mWakingUp = false
+ private val mEntrySetToClearWhenFinished = mutableSetOf<NotificationEntry>()
+
+ init {
+ mAmbientPulseManager.addListener(this)
+ mStatusBarStateController.addCallback(this)
+ }
+
+ fun setStackScroller(stackScroller: NotificationStackScrollLayout) {
+ mStackScroller = stackScroller
+ }
+
+ /**
+ * @param visible should notifications be visible
+ * @param animate should this change be animated
+ * @param increaseSpeed should the speed be increased of the animation
+ */
+ fun setNotificationsVisibleForExpansion(visible: Boolean, animate: Boolean,
+ increaseSpeed: Boolean) {
+ mNotificationsVisibleForExpansion = visible
+ updateNotificationVisibility(animate, increaseSpeed)
+ if (!visible && mNotificationsVisible) {
+ // If we stopped expanding and we're still visible because we had a pulse that hasn't
+ // times out, let's release them all to make sure were not stuck in a state where
+ // notifications are visible
+ mAmbientPulseManager.releaseAllImmediately()
+ }
+ }
+
+ private fun updateNotificationVisibility(animate: Boolean, increaseSpeed: Boolean) {
+ var visible = mNotificationsVisibleForExpansion || mAmbientPulseManager.hasNotifications()
+ if (!visible && mNotificationsVisible && mWakingUp && mDozeAmount != 0.0f) {
+ // let's not make notifications invisible while waking up, otherwise the animation
+ // is strange
+ return;
+ }
+ setNotificationsVisible(visible, animate, increaseSpeed)
+ }
+
+ private fun setNotificationsVisible(visible: Boolean, animate: Boolean,
+ increaseSpeed: Boolean) {
+ if (mNotificationsVisible == visible) {
+ return
+ }
+ mNotificationsVisible = visible
+ mDarkAnimator?.cancel();
+ if (animate) {
+ notifyAnimationStart(visible)
+ startVisibilityAnimation(increaseSpeed)
+ } else {
+ setVisibilityAmount(if (visible) 1.0f else 0.0f)
+ }
+ }
+
+ override fun onDozeAmountChanged(linear: Float, eased: Float) {
+ if (linear != 1.0f && linear != 0.0f
+ && (mLinearDozeAmount == 0.0f || mLinearDozeAmount == 1.0f)) {
+ // Let's notify the scroller that an animation started
+ notifyAnimationStart(mLinearDozeAmount == 1.0f)
+ }
+ mLinearDozeAmount = linear
+ mDozeAmount = eased
+ mStackScroller.setDozeAmount(mDozeAmount)
+ updateDarkAmount()
+ if (linear == 0.0f) {
+ setNotificationsVisible(visible = false, animate = false, increaseSpeed = false);
+ setNotificationsVisibleForExpansion(visible = false, animate = false,
+ increaseSpeed = false)
+ }
+ }
+
+ private fun startVisibilityAnimation(increaseSpeed: Boolean) {
+ if (mNotificationVisibleAmount == 0f || mNotificationVisibleAmount == 1f) {
+ mVisibilityInterpolator = if (mNotificationsVisible)
+ Interpolators.TOUCH_RESPONSE
+ else
+ Interpolators.FAST_OUT_SLOW_IN_REVERSE
+ }
+ val target = if (mNotificationsVisible) 1.0f else 0.0f
+ val darkAnimator = ObjectAnimator.ofFloat(this, mNotificationVisibility, target)
+ darkAnimator.setInterpolator(Interpolators.LINEAR)
+ var duration = StackStateAnimator.ANIMATION_DURATION_WAKEUP.toLong()
+ if (increaseSpeed) {
+ duration = (duration.toFloat() / 1.5F).toLong();
+ }
+ darkAnimator.setDuration(duration)
+ darkAnimator.start()
+ mDarkAnimator = darkAnimator
+ }
+
+ private fun setVisibilityAmount(visibilityAmount: Float) {
+ mLinearVisibilityAmount = visibilityAmount
+ mVisibilityAmount = mVisibilityInterpolator.getInterpolation(
+ visibilityAmount)
+ handleAnimationFinished();
+ updateDarkAmount()
+ }
+
+ private fun handleAnimationFinished() {
+ if (mLinearDozeAmount == 0.0f || mLinearVisibilityAmount == 0.0f) {
+ mEntrySetToClearWhenFinished.forEach { it.setAmbientGoingAway(false) }
+ }
+ }
+
+ fun getWakeUpHeight() : Float {
+ return mStackScroller.pulseHeight
+ }
+
+ private fun updateDarkAmount() {
+ val linearAmount = Math.min(1.0f - mLinearVisibilityAmount, mLinearDozeAmount)
+ val amount = Math.min(1.0f - mVisibilityAmount, mDozeAmount)
+ mStackScroller.setDarkAmount(linearAmount, amount)
+ }
+
+ private fun notifyAnimationStart(awake: Boolean) {
+ mStackScroller.notifyDarkAnimationStart(!awake)
+ }
+
+ override fun onDozingChanged(isDozing: Boolean) {
+ if (isDozing) {
+ setNotificationsVisible(visible = false, animate = false, increaseSpeed = false)
+ }
+ }
+
+ fun setPulseHeight(height: Float): Float {
+ return mStackScroller.setPulseHeight(height)
+ }
+
+ fun setWakingUp(wakingUp: Boolean) {
+ mWakingUp = wakingUp
+ if (wakingUp && mNotificationsVisible && !mNotificationsVisibleForExpansion) {
+ // We're waking up while pulsing, let's make sure the animation looks nice
+ mStackScroller.wakeUpFromPulse();
+ }
+ }
+
+ override fun onAmbientStateChanged(entry: NotificationEntry, isPulsing: Boolean) {
+ var animate = true
+ if (!isPulsing) {
+ if (mLinearDozeAmount != 0.0f) {
+ if (entry.isRowDismissed) {
+ // if we animate, we see the shelf briefly visible. Instead we fully animate
+ // the notification and its background out
+ animate = false
+ } else {
+ entry.setAmbientGoingAway(true)
+ mEntrySetToClearWhenFinished.add(entry)
+ }
+ }
+ } else if (mEntrySetToClearWhenFinished.contains(entry)) {
+ mEntrySetToClearWhenFinished.remove(entry)
+ entry.setAmbientGoingAway(false)
+ }
+ updateNotificationVisibility(animate, increaseSpeed = false)
+ }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java
index 8b522a2..04ff58b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java
@@ -112,8 +112,8 @@
} else if (isHeadsUp) {
// Provide consistent ranking with headsUpManager
return mHeadsUpManager.compare(a, b);
- } else if (a.getRow().isAmbientPulsing() != b.getRow().isAmbientPulsing()) {
- return a.getRow().isAmbientPulsing() ? -1 : 1;
+ } else if (a.getRow().showingAmbientPulsing() != b.getRow().showingAmbientPulsing()) {
+ return a.getRow().showingAmbientPulsing() ? -1 : 1;
} else if (aMedia != bMedia) {
// Upsort current media notification.
return aMedia ? -1 : 1;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index 3bf4d4b..5cd1210 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -571,6 +571,12 @@
if (row != null) row.setHeadsUp(shouldHeadsUp);
}
+
+ public void setAmbientGoingAway(boolean goingAway) {
+ if (row != null) row.setAmbientGoingAway(goingAway);
+ }
+
+
public boolean mustStayOnScreen() {
return row != null && row.mustStayOnScreen();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 2b643d0..767e14c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -81,6 +81,7 @@
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
import com.android.systemui.shared.plugins.PluginManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.notification.AboveShelfChangedListener;
@@ -90,7 +91,6 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.logging.NotificationCounters;
import com.android.systemui.statusbar.notification.row.NotificationContentInflater.InflationFlag;
-import com.android.systemui.statusbar.notification.row.wrapper.NotificationMediaTemplateViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.notification.stack.AmbientState;
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
@@ -215,6 +215,11 @@
private boolean mIsAmbientPulsing;
/**
+ * Happens when the notification was pulsing before and goes away to ensure smooth animations.
+ */
+ private boolean mAmbientGoingAway;
+
+ /**
* Whether or not the notification should be redacted on the lock screen, i.e has sensitive
* content which should be redacted on the lock screen.
*/
@@ -331,6 +336,7 @@
private boolean mWasChildInGroupWhenRemoved;
private int mNotificationColorAmbient;
private NotificationInlineImageResolver mImageResolver;
+ private NotificationMediaManager mMediaManager;
private SystemNotificationAsyncTask mSystemNotificationAsyncTask =
new SystemNotificationAsyncTask();
@@ -658,10 +664,11 @@
View expandedView = layout.getExpandedChild();
boolean isMediaLayout = expandedView != null
&& expandedView.findViewById(com.android.internal.R.id.media_actions) != null;
+ boolean showCompactMediaSeekbar = mMediaManager.getShowCompactMediaSeekbar();
if (customView && beforeP && !mIsSummaryWithChildren) {
minHeight = beforeN ? mNotificationMinHeightBeforeN : mNotificationMinHeightBeforeP;
- } else if (isMediaLayout && !NotificationMediaTemplateViewWrapper.HIDE_COMPACT_SCRUBBER) {
+ } else if (isMediaLayout && showCompactMediaSeekbar) {
minHeight = mNotificationMinHeightMedia;
} else if (mUseIncreasedCollapsedHeight && layout == mPrivateLayout) {
minHeight = mNotificationMinHeightLarge;
@@ -719,8 +726,9 @@
}
}
- public boolean isAmbientPulsing() {
- return mIsAmbientPulsing;
+ @Override
+ public boolean showingAmbientPulsing() {
+ return mIsAmbientPulsing || mAmbientGoingAway;
}
public void setAmbientPulsing(boolean isAmbientPulsing) {
@@ -1635,6 +1643,7 @@
mMenuRow = new NotificationMenuRow(mContext);
mImageResolver = new NotificationInlineImageResolver(context,
new NotificationInlineImageCache());
+ mMediaManager = Dependency.get(NotificationMediaManager.class);
initDimens();
}
@@ -3001,9 +3010,9 @@
@Override
public boolean isAboveShelf() {
- return !isOnKeyguard()
+ return showingAmbientPulsing() || (!isOnKeyguard()
&& (mIsPinned || mHeadsupDisappearRunning || (mIsHeadsUp && mAboveShelf)
- || mExpandAnimationRunning || mChildIsExpanding);
+ || mExpandAnimationRunning || mChildIsExpanding));
}
public void setOnAmbient(boolean onAmbient) {
@@ -3158,6 +3167,10 @@
}
}
+ public void setAmbientGoingAway(boolean goingAway) {
+ mAmbientGoingAway = goingAway;
+ }
+
@VisibleForTesting
protected void setChildrenContainer(NotificationChildrenContainer childrenContainer) {
mChildrenContainer = childrenContainer;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
index d1a89b4..cac41da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
@@ -527,6 +527,10 @@
public void setHeadsUpIsVisible() {
}
+ public boolean showingAmbientPulsing() {
+ return false;
+ }
+
public boolean isChildInGroup() {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
index b65c4a5..b4dd114 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
@@ -34,12 +34,17 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.ImageMessageConsumer;
+import com.android.systemui.Dependency;
import com.android.systemui.statusbar.InflationTask;
+import com.android.systemui.statusbar.SmartReplyController;
import com.android.systemui.statusbar.notification.InflationException;
import com.android.systemui.statusbar.notification.MediaNotificationProcessor;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.InflatedSmartReplies;
+import com.android.systemui.statusbar.policy.SmartReplyConstants;
import com.android.systemui.util.Assert;
import java.lang.annotation.Retention;
@@ -278,6 +283,8 @@
InflationProgress result = createRemoteViews(reInflateFlags, builder, mIsLowPriority,
mIsChildInGroup, mUsesIncreasedHeight, mUsesIncreasedHeadsUpHeight,
mRedactAmbient, packageContext);
+ result = inflateSmartReplyViews(result, reInflateFlags, mRow.getEntry(),
+ mRow.getContext(), mRow.getHeadsUpManager());
apply(
inflateSynchronously,
result,
@@ -306,6 +313,7 @@
if (mRow.getPrivateLayout().isContentViewInactive(VISIBLE_TYPE_HEADSUP)) {
mRow.getPrivateLayout().setHeadsUpChild(null);
mCachedContentViews.remove(FLAG_CONTENT_VIEW_HEADS_UP);
+ mRow.getPrivateLayout().setHeadsUpInflatedSmartReplies(null);
}
break;
case FLAG_CONTENT_VIEW_AMBIENT:
@@ -336,12 +344,33 @@
}
}
+ private static InflationProgress inflateSmartReplyViews(InflationProgress result,
+ @InflationFlag int reInflateFlags, NotificationEntry entry, Context context,
+ HeadsUpManager headsUpManager) {
+ SmartReplyConstants smartReplyConstants = Dependency.get(SmartReplyConstants.class);
+ SmartReplyController smartReplyController = Dependency.get(SmartReplyController.class);
+ if ((reInflateFlags & FLAG_CONTENT_VIEW_EXPANDED) != 0 && result.newExpandedView != null) {
+ result.expandedInflatedSmartReplies =
+ InflatedSmartReplies.inflate(
+ context, entry, smartReplyConstants, smartReplyController,
+ headsUpManager);
+ }
+ if ((reInflateFlags & FLAG_CONTENT_VIEW_HEADS_UP) != 0 && result.newHeadsUpView != null) {
+ result.headsUpInflatedSmartReplies =
+ InflatedSmartReplies.inflate(
+ context, entry, smartReplyConstants, smartReplyController,
+ headsUpManager);
+ }
+ return result;
+ }
+
private static InflationProgress createRemoteViews(@InflationFlag int reInflateFlags,
Notification.Builder builder, boolean isLowPriority, boolean isChildInGroup,
boolean usesIncreasedHeight, boolean usesIncreasedHeadsUpHeight, boolean redactAmbient,
Context packageContext) {
InflationProgress result = new InflationProgress();
isLowPriority = isLowPriority && !isChildInGroup;
+
if ((reInflateFlags & FLAG_CONTENT_VIEW_CONTRACTED) != 0) {
result.newContentView = createContentView(builder, isLowPriority, usesIncreasedHeight);
}
@@ -661,6 +690,12 @@
} else if (result.newExpandedView == null) {
privateLayout.setExpandedChild(null);
}
+ if (result.newExpandedView != null) {
+ privateLayout.setExpandedInflatedSmartReplies(
+ result.expandedInflatedSmartReplies);
+ } else {
+ privateLayout.setExpandedInflatedSmartReplies(null);
+ }
cachedContentViews.put(FLAG_CONTENT_VIEW_EXPANDED, result.newExpandedView);
row.setExpandable(result.newExpandedView != null);
}
@@ -671,6 +706,12 @@
} else if (result.newHeadsUpView == null) {
privateLayout.setHeadsUpChild(null);
}
+ if (result.newHeadsUpView != null) {
+ privateLayout.setHeadsUpInflatedSmartReplies(
+ result.headsUpInflatedSmartReplies);
+ } else {
+ privateLayout.setHeadsUpInflatedSmartReplies(null);
+ }
cachedContentViews.put(FLAG_CONTENT_VIEW_HEADS_UP, result.newHeadsUpView);
}
@@ -846,9 +887,12 @@
packageContext);
processor.processNotification(notification, recoveredBuilder);
}
- return createRemoteViews(mReInflateFlags, recoveredBuilder, mIsLowPriority,
+ InflationProgress inflationProgress = createRemoteViews(mReInflateFlags,
+ recoveredBuilder, mIsLowPriority,
mIsChildInGroup, mUsesIncreasedHeight, mUsesIncreasedHeadsUpHeight,
mRedactAmbient, packageContext);
+ return inflateSmartReplyViews(inflationProgress, mReInflateFlags, mRow.getEntry(),
+ mRow.getContext(), mRow.getHeadsUpManager());
} catch (Exception e) {
mError = e;
return null;
@@ -927,6 +971,9 @@
private View inflatedPublicView;
private CharSequence headsUpStatusBarText;
private CharSequence headsUpStatusBarTextPublic;
+
+ private InflatedSmartReplies expandedInflatedSmartReplies;
+ private InflatedSmartReplies headsUpInflatedSmartReplies;
}
@VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 1dc48d4..3cc2e83 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -19,7 +19,6 @@
import android.annotation.Nullable;
import android.app.Notification;
import android.app.PendingIntent;
-import android.app.RemoteInput;
import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
@@ -28,7 +27,6 @@
import android.util.ArraySet;
import android.util.AttributeSet;
import android.util.Log;
-import android.util.Pair;
import android.view.MotionEvent;
import android.view.NotificationHeaderView;
import android.view.View;
@@ -39,7 +37,6 @@
import android.widget.LinearLayout;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ContrastColorUtil;
import com.android.systemui.Dependency;
import com.android.systemui.R;
@@ -52,13 +49,14 @@
import com.android.systemui.statusbar.notification.row.wrapper.NotificationCustomViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.phone.NotificationGroupManager;
+import com.android.systemui.statusbar.policy.InflatedSmartReplies;
+import com.android.systemui.statusbar.policy.InflatedSmartReplies.SmartRepliesAndActions;
import com.android.systemui.statusbar.policy.RemoteInputView;
import com.android.systemui.statusbar.policy.SmartReplyConstants;
import com.android.systemui.statusbar.policy.SmartReplyView;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.List;
/**
* A frame layout containing the actual payload of the notification, including the contracted,
@@ -95,6 +93,8 @@
private SmartReplyView mExpandedSmartReplyView;
private SmartReplyView mHeadsUpSmartReplyView;
private SmartReplyController mSmartReplyController;
+ private InflatedSmartReplies mExpandedInflatedSmartReplies;
+ private InflatedSmartReplies mHeadsUpInflatedSmartReplies;
private NotificationViewWrapper mContractedWrapper;
private NotificationViewWrapper mExpandedWrapper;
@@ -793,11 +793,11 @@
}
public int getMaxHeight() {
- if (mContainingNotification.isOnAmbient() && getShowingAmbientView() != null) {
- return getShowingAmbientView().getHeight();
- } else if (mExpandedChild != null) {
+ if (mExpandedChild != null) {
return getViewHeight(VISIBLE_TYPE_EXPANDED)
+ getExtraRemoteInputHeight(mExpandedRemoteInput);
+ } else if (mContainingNotification.isOnAmbient() && getShowingAmbientView() != null) {
+ return getShowingAmbientView().getHeight();
} else if (mIsHeadsUp && mHeadsUpChild != null && !mContainingNotification.isOnKeyguard()) {
return getViewHeight(VISIBLE_TYPE_HEADSUP)
+ getExtraRemoteInputHeight(mHeadsUpRemoteInput);
@@ -1113,15 +1113,6 @@
* @return one of the static enum types in this view, calculated form the current state
*/
public int calculateVisibleType() {
- if (mContainingNotification.isOnAmbient()) {
- if (mIsChildInGroup && mAmbientSingleLineChild != null) {
- return VISIBLE_TYPE_AMBIENT_SINGLELINE;
- } else if (mAmbientChild != null) {
- return VISIBLE_TYPE_AMBIENT;
- } else {
- return VISIBLE_TYPE_CONTRACTED;
- }
- }
if (mUserExpanding) {
int height = !mIsChildInGroup || isGroupExpanded()
|| mContainingNotification.isExpanded(true /* allowOnKeyguard */)
@@ -1152,8 +1143,10 @@
if (!noExpandedChild && viewHeight == getViewHeight(VISIBLE_TYPE_EXPANDED)) {
return VISIBLE_TYPE_EXPANDED;
}
+ boolean onAmbient = mContainingNotification.isOnAmbient();
if (!mUserExpanding && mIsChildInGroup && !isGroupExpanded()) {
- return VISIBLE_TYPE_SINGLELINE;
+ return onAmbient ? VISIBLE_TYPE_AMBIENT_SINGLELINE
+ : VISIBLE_TYPE_SINGLELINE;
}
if ((mIsHeadsUp || mHeadsUpAnimatingAway) && mHeadsUpChild != null
@@ -1164,11 +1157,13 @@
return VISIBLE_TYPE_EXPANDED;
}
} else {
+ int collapsedType = onAmbient && mAmbientChild != null ? VISIBLE_TYPE_AMBIENT :
+ VISIBLE_TYPE_CONTRACTED;
if (noExpandedChild || (mContractedChild != null
- && viewHeight <= getViewHeight(VISIBLE_TYPE_CONTRACTED)
+ && viewHeight <= getViewHeight(collapsedType)
&& (!mIsChildInGroup || isGroupExpanded()
|| !mContainingNotification.isExpanded(true /* allowOnKeyguard */)))) {
- return VISIBLE_TYPE_CONTRACTED;
+ return collapsedType;
} else {
return VISIBLE_TYPE_EXPANDED;
}
@@ -1318,8 +1313,22 @@
return;
}
- SmartRepliesAndActions smartRepliesAndActions =
- chooseSmartRepliesAndActions(mSmartReplyConstants, entry);
+ applyRemoteInput(entry, InflatedSmartReplies.hasFreeformRemoteInput(entry));
+
+ if (mExpandedInflatedSmartReplies == null && mHeadsUpInflatedSmartReplies == null) {
+ if (DEBUG) {
+ Log.d(TAG, "Both expanded, and heads-up InflatedSmartReplies are null, "
+ + "don't add smart replies.");
+ }
+ return;
+ }
+ // The inflated smart-reply objects for the expanded view and the heads-up view both contain
+ // the same SmartRepliesAndActions to avoid discrepancies between the two views. We here
+ // reuse that object for our local SmartRepliesAndActions to avoid discrepancies between
+ // this class and the InflatedSmartReplies classes.
+ SmartRepliesAndActions smartRepliesAndActions = mExpandedInflatedSmartReplies != null
+ ? mExpandedInflatedSmartReplies.getSmartRepliesAndActions()
+ : mHeadsUpInflatedSmartReplies.getSmartRepliesAndActions();
if (DEBUG) {
Log.d(TAG, String.format("Adding suggestions for %s, %d actions, and %d replies.",
entry.notification.getKey(),
@@ -1328,86 +1337,9 @@
smartRepliesAndActions.smartReplies == null ? 0 :
smartRepliesAndActions.smartReplies.choices.length));
}
-
- applyRemoteInput(entry, smartRepliesAndActions.hasFreeformRemoteInput);
applySmartReplyView(smartRepliesAndActions, entry);
}
- /**
- * Chose what smart replies and smart actions to display. App generated suggestions take
- * precedence. So if the app provides any smart replies, we don't show any
- * replies or actions generated by the NotificationAssistantService (NAS), and if the app
- * provides any smart actions we also don't show any NAS-generated replies or actions.
- */
- @VisibleForTesting
- static SmartRepliesAndActions chooseSmartRepliesAndActions(
- SmartReplyConstants smartReplyConstants,
- final NotificationEntry entry) {
- Notification notification = entry.notification.getNotification();
- Pair<RemoteInput, Notification.Action> remoteInputActionPair =
- notification.findRemoteInputActionPair(false /* freeform */);
- Pair<RemoteInput, Notification.Action> freeformRemoteInputActionPair =
- notification.findRemoteInputActionPair(true /* freeform */);
-
- if (!smartReplyConstants.isEnabled()) {
- if (DEBUG) {
- Log.d(TAG, "Smart suggestions not enabled, not adding suggestions for "
- + entry.notification.getKey());
- }
- return new SmartRepliesAndActions(null, null, freeformRemoteInputActionPair != null);
- }
- // Only use smart replies from the app if they target P or above. We have this check because
- // the smart reply API has been used for other things (Wearables) in the past. The API to
- // add smart actions is new in Q so it doesn't require a target-sdk check.
- boolean enableAppGeneratedSmartReplies = (!smartReplyConstants.requiresTargetingP()
- || entry.targetSdk >= Build.VERSION_CODES.P);
-
- boolean appGeneratedSmartRepliesExist =
- enableAppGeneratedSmartReplies
- && remoteInputActionPair != null
- && !ArrayUtils.isEmpty(remoteInputActionPair.first.getChoices())
- && remoteInputActionPair.second.actionIntent != null;
-
- List<Notification.Action> appGeneratedSmartActions = notification.getContextualActions();
- boolean appGeneratedSmartActionsExist = !appGeneratedSmartActions.isEmpty();
-
- SmartReplyView.SmartReplies smartReplies = null;
- SmartReplyView.SmartActions smartActions = null;
- if (appGeneratedSmartRepliesExist) {
- smartReplies = new SmartReplyView.SmartReplies(
- remoteInputActionPair.first.getChoices(),
- remoteInputActionPair.first,
- remoteInputActionPair.second.actionIntent,
- false /* fromAssistant */);
- }
- if (appGeneratedSmartActionsExist) {
- smartActions = new SmartReplyView.SmartActions(appGeneratedSmartActions,
- false /* fromAssistant */);
- }
- // Apps didn't provide any smart replies / actions, use those from NAS (if any).
- if (!appGeneratedSmartRepliesExist && !appGeneratedSmartActionsExist) {
- boolean useGeneratedReplies = !ArrayUtils.isEmpty(entry.systemGeneratedSmartReplies)
- && freeformRemoteInputActionPair != null
- && freeformRemoteInputActionPair.second.getAllowGeneratedReplies()
- && freeformRemoteInputActionPair.second.actionIntent != null;
- if (useGeneratedReplies) {
- smartReplies = new SmartReplyView.SmartReplies(
- entry.systemGeneratedSmartReplies,
- freeformRemoteInputActionPair.first,
- freeformRemoteInputActionPair.second.actionIntent,
- true /* fromAssistant */);
- }
- boolean useSmartActions = !ArrayUtils.isEmpty(entry.systemGeneratedSmartActions)
- && notification.getAllowSystemGeneratedContextualActions();
- if (useSmartActions) {
- smartActions = new SmartReplyView.SmartActions(
- entry.systemGeneratedSmartActions, true /* fromAssistant */);
- }
- }
- return new SmartRepliesAndActions(
- smartReplies, smartActions, freeformRemoteInputActionPair != null);
- }
-
private void applyRemoteInput(NotificationEntry entry, boolean hasFreeformRemoteInput) {
View bigContentView = mExpandedChild;
if (bigContentView != null) {
@@ -1507,11 +1439,12 @@
return null;
}
- private void applySmartReplyView(SmartRepliesAndActions smartRepliesAndActions,
+ private void applySmartReplyView(
+ SmartRepliesAndActions smartRepliesAndActions,
NotificationEntry entry) {
if (mExpandedChild != null) {
- mExpandedSmartReplyView =
- applySmartReplyView(mExpandedChild, smartRepliesAndActions, entry);
+ mExpandedSmartReplyView = applySmartReplyView(mExpandedChild, smartRepliesAndActions,
+ entry, mExpandedInflatedSmartReplies);
if (mExpandedSmartReplyView != null) {
if (smartRepliesAndActions.smartReplies != null
|| smartRepliesAndActions.smartActions != null) {
@@ -1533,65 +1466,79 @@
}
}
if (mHeadsUpChild != null && mSmartReplyConstants.getShowInHeadsUp()) {
- mHeadsUpSmartReplyView =
- applySmartReplyView(mHeadsUpChild, smartRepliesAndActions, entry);
+ mHeadsUpSmartReplyView = applySmartReplyView(mHeadsUpChild, smartRepliesAndActions,
+ entry, mHeadsUpInflatedSmartReplies);
}
}
+ @Nullable
private SmartReplyView applySmartReplyView(View view,
- SmartRepliesAndActions smartRepliesAndActions, NotificationEntry entry) {
+ SmartRepliesAndActions smartRepliesAndActions,
+ NotificationEntry entry, InflatedSmartReplies inflatedSmartReplyView) {
View smartReplyContainerCandidate = view.findViewById(
com.android.internal.R.id.smart_reply_container);
if (!(smartReplyContainerCandidate instanceof LinearLayout)) {
return null;
}
+
LinearLayout smartReplyContainer = (LinearLayout) smartReplyContainerCandidate;
- // If there are no smart replies and no smart actions - early out.
- if (smartRepliesAndActions.smartReplies == null
- && smartRepliesAndActions.smartActions == null) {
+ if (!InflatedSmartReplies.shouldShowSmartReplyView(entry, smartRepliesAndActions)) {
smartReplyContainer.setVisibility(View.GONE);
return null;
}
- // If we are showing the spinner we don't want to add the buttons.
- boolean showingSpinner = entry.notification.getNotification()
- .extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);
- if (showingSpinner) {
- smartReplyContainer.setVisibility(View.GONE);
- return null;
- }
- // If we are keeping the notification around while sending we don't want to add the buttons.
- boolean hideSmartReplies = entry.notification.getNotification()
- .extras.getBoolean(Notification.EXTRA_HIDE_SMART_REPLIES, false);
- if (hideSmartReplies) {
- smartReplyContainer.setVisibility(View.GONE);
- return null;
- }
+
SmartReplyView smartReplyView = null;
- if (smartReplyContainer.getChildCount() == 0) {
- smartReplyView = SmartReplyView.inflate(mContext, smartReplyContainer);
+ if (smartReplyContainer.getChildCount() == 1
+ && smartReplyContainer.getChildAt(0) instanceof SmartReplyView) {
+ // If we already have a SmartReplyView - replace it with the newly inflated one. The
+ // newly inflated one is connected to the new inflated smart reply/action buttons.
+ smartReplyContainer.removeAllViews();
+ }
+ if (smartReplyContainer.getChildCount() == 0
+ && inflatedSmartReplyView != null
+ && inflatedSmartReplyView.getSmartReplyView() != null) {
+ smartReplyView = inflatedSmartReplyView.getSmartReplyView();
smartReplyContainer.addView(smartReplyView);
- } else if (smartReplyContainer.getChildCount() == 1) {
- View child = smartReplyContainer.getChildAt(0);
- if (child instanceof SmartReplyView) {
- smartReplyView = (SmartReplyView) child;
- }
}
if (smartReplyView != null) {
smartReplyView.resetSmartSuggestions(smartReplyContainer);
- if (smartRepliesAndActions.smartReplies != null) {
- smartReplyView.addRepliesFromRemoteInput(
- smartRepliesAndActions.smartReplies, mSmartReplyController, entry);
- }
- if (smartRepliesAndActions.smartActions != null) {
- smartReplyView.addSmartActions(
- smartRepliesAndActions.smartActions, mSmartReplyController, entry,
- mContainingNotification.getHeadsUpManager());
- }
+ smartReplyView.addPreInflatedButtons(
+ inflatedSmartReplyView.getSmartSuggestionButtons());
smartReplyContainer.setVisibility(View.VISIBLE);
}
return smartReplyView;
}
+ /**
+ * Set pre-inflated views necessary to display smart replies and actions in the expanded
+ * notification state.
+ *
+ * @param inflatedSmartReplies the pre-inflated state to add to this view. If null the existing
+ * {@link SmartReplyView} related to the expanded notification state is cleared.
+ */
+ public void setExpandedInflatedSmartReplies(
+ @Nullable InflatedSmartReplies inflatedSmartReplies) {
+ mExpandedInflatedSmartReplies = inflatedSmartReplies;
+ if (inflatedSmartReplies == null) {
+ mExpandedSmartReplyView = null;
+ }
+ }
+
+ /**
+ * Set pre-inflated views necessary to display smart replies and actions in the heads-up
+ * notification state.
+ *
+ * @param inflatedSmartReplies the pre-inflated state to add to this view. If null the existing
+ * {@link SmartReplyView} related to the heads-up notification state is cleared.
+ */
+ public void setHeadsUpInflatedSmartReplies(
+ @Nullable InflatedSmartReplies inflatedSmartReplies) {
+ mHeadsUpInflatedSmartReplies = inflatedSmartReplies;
+ if (inflatedSmartReplies == null) {
+ mHeadsUpSmartReplyView = null;
+ }
+ }
+
public void closeRemoteInput() {
if (mHeadsUpRemoteInput != null) {
mHeadsUpRemoteInput.close();
@@ -2005,22 +1952,4 @@
}
pw.println();
}
-
- @VisibleForTesting
- static class SmartRepliesAndActions {
- @Nullable
- public final SmartReplyView.SmartReplies smartReplies;
- @Nullable
- public final SmartReplyView.SmartActions smartActions;
- public final boolean hasFreeformRemoteInput;
-
- SmartRepliesAndActions(
- @Nullable SmartReplyView.SmartReplies smartReplies,
- @Nullable SmartReplyView.SmartActions smartActions,
- boolean hasFreeformRemoteInput) {
- this.smartReplies = smartReplies;
- this.smartActions = smartActions;
- this.hasFreeformRemoteInput = hasFreeformRemoteInput;
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
index ddda3e5..99f5874 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
@@ -36,6 +36,7 @@
import com.android.internal.R;
import com.android.systemui.Dependency;
+import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -58,12 +59,10 @@
private TextView mSeekBarTotalTime;
private long mDuration = 0;
private MediaController mMediaController;
+ private NotificationMediaManager mMediaManager;
private View mSeekBarView;
private Context mContext;
- // TODO: implement as phenotype flag
- public static final boolean HIDE_COMPACT_SCRUBBER = true;
-
private SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -102,6 +101,7 @@
ExpandableNotificationRow row) {
super(ctx, view, row);
mContext = ctx;
+ mMediaManager = Dependency.get(NotificationMediaManager.class);
}
private void resolveViews() {
@@ -110,7 +110,8 @@
final MediaSession.Token token = mRow.getEntry().notification.getNotification().extras
.getParcelable(Notification.EXTRA_MEDIA_SESSION);
- if (token == null || (COMPACT_MEDIA_TAG.equals(mView.getTag()) && HIDE_COMPACT_SCRUBBER)) {
+ boolean showCompactSeekbar = mMediaManager.getShowCompactMediaSeekbar();
+ if (token == null || (COMPACT_MEDIA_TAG.equals(mView.getTag()) && !showCompactSeekbar)) {
if (mSeekBarView != null) {
mSeekBarView.setVisibility(View.GONE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
index c246af5..ce92280 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
@@ -18,6 +18,7 @@
import android.annotation.Nullable;
import android.content.Context;
+import android.util.MathUtils;
import android.view.View;
import com.android.systemui.Dependency;
@@ -39,6 +40,7 @@
public class AmbientState {
private static final int NO_SECTION_BOUNDARY = -1;
+ private static final float MAX_PULSE_HEIGHT = 100000f;
private ArrayList<ExpandableView> mDraggedViews = new ArrayList<>();
private int mScrollY;
@@ -79,6 +81,8 @@
private ExpandableNotificationRow mExpandingNotification;
private float mDarkAmount;
private boolean mAppearing;
+ private float mPulseHeight = MAX_PULSE_HEIGHT;
+ private float mDozeAmount = 0.0f;
public AmbientState(Context context) {
mSectionBoundaryIndices.add(NO_SECTION_BOUNDARY);
@@ -181,6 +185,10 @@
/** Dark ratio of the status bar **/
public void setDarkAmount(float darkAmount) {
+ if (darkAmount == 1.0f && mDarkAmount != darkAmount) {
+ // Whenever we are fully dark, let's reset the pulseHeight again
+ mPulseHeight = MAX_PULSE_HEIGHT;
+ }
mDarkAmount = darkAmount;
}
@@ -279,7 +287,28 @@
}
public int getInnerHeight() {
- return Math.max(Math.min(mLayoutHeight, mMaxLayoutHeight) - mTopPadding, mLayoutMinHeight);
+ return getInnerHeight(false /* ignorePulseHeight */);
+ }
+
+ /**
+ * @param ignorePulseHeight ignore the pulse height for this request
+ * @return the inner height of the algorithm.
+ */
+ public int getInnerHeight(boolean ignorePulseHeight) {
+ if (mDozeAmount == 1.0f && !isPulseExpanding()) {
+ return mShelf.getHeight();
+ }
+ int height = Math.max(mLayoutMinHeight,
+ Math.min(mLayoutHeight, mMaxLayoutHeight) - mTopPadding);
+ if (ignorePulseHeight) {
+ return height;
+ }
+ float pulseHeight = Math.min(mPulseHeight, (float) height);
+ return (int) MathUtils.lerp(height, pulseHeight, mDozeAmount);
+ }
+
+ public boolean isPulseExpanding() {
+ return mPulseHeight != MAX_PULSE_HEIGHT && mDozeAmount != 0.0f && mDarkAmount != 1.0f;
}
public boolean isShadeExpanded() {
@@ -425,19 +454,6 @@
}
/**
- * Similar to the normal is above shelf logic but doesn't allow it to be above in AOD1.
- *
- * @param expandableView the view to check
- */
- public boolean isAboveShelf(ExpandableView expandableView) {
- if (!(expandableView instanceof ExpandableNotificationRow)) {
- return expandableView.isAboveShelf();
- }
- ExpandableNotificationRow row = (ExpandableNotificationRow) expandableView;
- return row.isAboveShelf() && !isDozingAndNotPulsing(row);
- }
-
- /**
* @return whether a view is dozing and not pulsing right now
*/
public boolean isDozingAndNotPulsing(ExpandableView view) {
@@ -488,4 +504,26 @@
public boolean isAppearing() {
return mAppearing;
}
+
+ public void setPulseHeight(float height) {
+ mPulseHeight = height;
+ }
+
+ public void setDozeAmount(float dozeAmount) {
+ if (dozeAmount != mDozeAmount) {
+ mDozeAmount = dozeAmount;
+ if (dozeAmount == 0.0f || dozeAmount == 1.0f) {
+ // We woke all the way up, let's reset the pulse height
+ mPulseHeight = MAX_PULSE_HEIGHT;
+ }
+ }
+ }
+
+ /**
+ * Is the device fully awake, which is different from not tark at all when there are pulsing
+ * notifications.
+ */
+ public boolean isFullyAwake() {
+ return mDozeAmount == 0.0f;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
index 507cf07..a471d87 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationFilter.java
@@ -132,10 +132,6 @@
// to look nice
customDelay = StackStateAnimator.ANIMATION_DELAY_HEADS_UP_CLICKED
+ StackStateAnimator.ANIMATION_DELAY_HEADS_UP;
- } else if (ev.animationType == NotificationStackScrollLayout.AnimationEvent
- .ANIMATION_TYPE_PULSE_APPEAR || ev.animationType ==
- NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_PULSE_DISAPPEAR) {
- customDelay = StackStateAnimator.ANIMATION_DURATION_PULSE_APPEAR / 2;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
index 40cfd4d..dd6d383 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSection.java
@@ -228,4 +228,67 @@
return (mBottomAnimator == null && mCurrentBounds.bottom == bottom)
|| (mBottomAnimator != null && mEndAnimationRect.bottom == bottom);
}
+
+ /**
+ * Update the bounds of this section based on it's views
+ *
+ * @param minTopPosition the minimum position that the top needs to have
+ * @param minBottomPosition the minimum position that the bottom needs to have
+ * @return the position of the new bottom
+ */
+ public int updateBounds(int minTopPosition, int minBottomPosition,
+ boolean shiftBackgroundWithFirst) {
+ int top = minTopPosition;
+ int bottom = minTopPosition;
+ ActivatableNotificationView firstView = getFirstVisibleChild();
+ if (firstView != null) {
+ // Round Y up to avoid seeing the background during animation
+ int finalTranslationY = (int) Math.ceil(ViewState.getFinalTranslationY(firstView));
+ // TODO: look into the already animating part
+ int newTop;
+ if (isTargetTop(finalTranslationY)) {
+ // we're ending up at the same location as we are now, let's just skip the
+ // animation
+ newTop = finalTranslationY;
+ } else {
+ newTop = (int) Math.ceil(firstView.getTranslationY());
+ }
+ top = Math.max(newTop, top);
+ if (firstView.showingAmbientPulsing()) {
+ // If we're pulsing, the notification can actually go below!
+ bottom = Math.max(bottom, finalTranslationY
+ + ExpandableViewState.getFinalActualHeight(firstView));
+ if (shiftBackgroundWithFirst) {
+ mBounds.left += Math.max(firstView.getTranslation(), 0);
+ }
+ }
+ }
+ top = Math.max(minTopPosition, top);
+ ActivatableNotificationView lastView = getLastVisibleChild();
+ if (lastView != null) {
+ float finalTranslationY = ViewState.getFinalTranslationY(lastView);
+ int finalHeight = ExpandableViewState.getFinalActualHeight(lastView);
+ // Round Y down to avoid seeing the background during animation
+ int finalBottom = (int) Math.floor(
+ finalTranslationY + finalHeight - lastView.getClipBottomAmount());
+ int newBottom;
+ if (isTargetBottom(finalBottom)) {
+ // we're ending up at the same location as we are now, lets just skip the animation
+ newBottom = finalBottom;
+ } else {
+ newBottom = (int) (lastView.getTranslationY() + lastView.getActualHeight()
+ - lastView.getClipBottomAmount());
+ // The background can never be lower than the end of the last view
+ minBottomPosition = (int) Math.min(
+ lastView.getTranslationY() + lastView.getActualHeight(),
+ minBottomPosition);
+ }
+ bottom = Math.max(bottom, Math.max(newBottom, minBottomPosition));
+ }
+ bottom = Math.max(top, bottom);
+ mBounds.top = top;
+ mBounds.bottom = bottom;
+ return bottom;
+ }
+
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index fbf1e31..a54de5f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -88,6 +88,7 @@
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
+import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.DragDownHelper.DragDownCallback;
import com.android.systemui.statusbar.EmptyShadeView;
@@ -167,6 +168,7 @@
* gap is drawn between them). In this case we don't want to round their corners.
*/
private static final int DISTANCE_BETWEEN_ADJACENT_SECTIONS_PX = 1;
+ private final AmbientPulseManager mAmbientPulseManager;
private ExpandHelper mExpandHelper;
private final NotificationSwipeHelper mSwipeHelper;
@@ -363,6 +365,7 @@
};
protected ViewGroup mQsContainer;
private boolean mContinuousShadowUpdate;
+ private boolean mContinuousBackgroundUpdate;
private ViewTreeObserver.OnPreDrawListener mShadowUpdater
= new ViewTreeObserver.OnPreDrawListener() {
@@ -372,6 +375,10 @@
return true;
}
};
+ private ViewTreeObserver.OnPreDrawListener mBackgroundUpdater = () -> {
+ updateBackground();
+ return true;
+ };
private Comparator<ExpandableView> mViewPositionComparator = new Comparator<ExpandableView>() {
@Override
public int compare(ExpandableView view, ExpandableView otherView) {
@@ -392,7 +399,6 @@
private boolean mGroupExpandedForMeasure;
private boolean mScrollable;
private View mForcedScroll;
- private ExpandableView mNeedingPulseAnimation;
/**
* @see #setDarkAmount(float, float)
@@ -481,7 +487,8 @@
@Named(VIEW_CONTEXT) Context context,
AttributeSet attrs,
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
- NotificationRoundnessManager notificationRoundnessManager) {
+ NotificationRoundnessManager notificationRoundnessManager,
+ AmbientPulseManager ambientPulseManager) {
super(context, attrs, 0, 0);
Resources res = getResources();
@@ -491,6 +498,7 @@
mSections[i] = new NotificationSection(this);
}
+ mAmbientPulseManager = ambientPulseManager;
mAmbientState = new AmbientState(context);
mRoundnessManager = notificationRoundnessManager;
mBgColor = context.getColor(R.color.notification_shade_background_color);
@@ -575,6 +583,17 @@
}
}
+ /**
+ * @return the height at which we will wake up when pulsing
+ */
+ public float getPulseHeight() {
+ ActivatableNotificationView firstChild = getFirstChildWithBackground();
+ if (firstChild != null) {
+ return firstChild.getCollapsedHeight();
+ }
+ return 0f;
+ }
+
@Override
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void onDensityOrFontScaleChanged() {
@@ -802,26 +821,32 @@
int backgroundRectTop = top;
int lastSectionBottom =
mSections[0].getCurrentBounds().bottom + animationYOffset;
+ int previousLeft = left;
+ boolean first = true;
for (NotificationSection section : mSections) {
if (section.getFirstVisibleChild() == null) {
continue;
}
int sectionTop = section.getCurrentBounds().top + animationYOffset;
+ int ownLeft = Math.min(Math.max(left, section.getCurrentBounds().left), right);
// If sections are directly adjacent to each other, we don't want to draw them
// as separate roundrects, as the rounded corners right next to each other look
// bad.
- if (sectionTop - lastSectionBottom > DISTANCE_BETWEEN_ADJACENT_SECTIONS_PX) {
- canvas.drawRoundRect(left,
+ if (sectionTop - lastSectionBottom > DISTANCE_BETWEEN_ADJACENT_SECTIONS_PX
+ || (previousLeft != ownLeft && !first)) {
+ canvas.drawRoundRect(ownLeft,
backgroundRectTop,
right,
lastSectionBottom,
mCornerRadius, mCornerRadius, mBackgroundPaint);
backgroundRectTop = sectionTop;
}
+ previousLeft = ownLeft;
lastSectionBottom =
section.getCurrentBounds().bottom + animationYOffset;
+ first = false;
}
- canvas.drawRoundRect(left,
+ canvas.drawRoundRect(previousLeft,
backgroundRectTop,
right,
lastSectionBottom,
@@ -1277,7 +1302,8 @@
mIsClipped = clipped;
}
- if (mPulsing || mAmbientState.isFullyDark() && mShowDarkShelf) {
+ if (!mAmbientPulseManager.hasNotifications()
+ && mAmbientState.isFullyDark() && mShowDarkShelf) {
setClipBounds(null);
} else if (mAmbientState.isDarkAtAll()) {
setClipBounds(mBackgroundAnimationRect);
@@ -1360,7 +1386,7 @@
private boolean isHeadsUpTransition() {
NotificationSection firstVisibleSection = getFirstVisibleSection();
return mTrackingHeadsUp && firstVisibleSection != null
- && mAmbientState.isAboveShelf(firstVisibleSection.getFirstVisibleChild());
+ && firstVisibleSection.getFirstVisibleChild().isAboveShelf();
}
/**
@@ -1514,7 +1540,7 @@
return null;
}
- private ExpandableView getChildAtRawPosition(float touchX, float touchY) {
+ public ExpandableView getChildAtRawPosition(float touchX, float touchY) {
getLocationOnScreen(mTempInt2);
return getChildAtPosition(touchX - mTempInt2[0], touchY - mTempInt2[1]);
}
@@ -2258,9 +2284,7 @@
float previousPaddingAmount = 0.0f;
int numShownItems = 0;
boolean finish = false;
- int maxDisplayedNotifications = mAmbientState.isFullyDark()
- ? (hasPulsingNotifications() ? 1 : 0)
- : mMaxDisplayedNotifications;
+ int maxDisplayedNotifications = mMaxDisplayedNotifications;
for (int i = 0; i < getChildCount(); i++) {
ExpandableView expandableView = (ExpandableView) getChildAt(i);
@@ -2269,11 +2293,7 @@
&& !expandableView.hasNoContentHeight() && !footerViewOnLockScreen) {
boolean limitReached = maxDisplayedNotifications != -1
&& numShownItems >= maxDisplayedNotifications;
- boolean notificationOnAmbientThatIsNotPulsing = mAmbientState.isFullyDark()
- && hasPulsingNotifications()
- && expandableView instanceof ExpandableNotificationRow
- && !isPulsing(((ExpandableNotificationRow) expandableView).getEntry());
- if (limitReached || notificationOnAmbientThatIsNotPulsing) {
+ if (limitReached) {
expandableView = mShelf;
finish = true;
}
@@ -2450,129 +2470,24 @@
}
return;
}
- int top = getSectionTopOrFinalTop(getFirstVisibleSection(), mAnimateNextBackgroundTop);
+ int minTopPosition = 0;
NotificationSection lastSection = getLastVisibleSection();
- ActivatableNotificationView lastView =
- mShelf.hasItemsInStableShelf() && mShelf.getVisibility() != GONE
- ? mShelf
- : lastSection == null ? null : lastSection.getLastVisibleChild();
- int bottom;
- if (lastView != null) {
- bottom = getSectionBottomOrFinalBottom(
- lastSection, lastView, mAnimateNextBackgroundBottom);
- } else {
- top = mTopPadding;
- bottom = top;
- }
if (mStatusBarState != StatusBarState.KEYGUARD) {
- top = (int) Math.max(mTopPadding + mStackTranslation, top);
- } else {
- // otherwise the animation from the shade to the keyguard will jump as it's maxed
- top = Math.max(0, top);
+ minTopPosition = (int) (mTopPadding + mStackTranslation);
+ } else if (lastSection == null) {
+ minTopPosition = mTopPadding;
}
- bottom = Math.max(bottom, top);
-
- setSectionBoundsByPriority(left, right, top, bottom, mSections[0], mSections[1]);
- }
-
- private int getSectionTopOrFinalTop(
- @Nullable NotificationSection section, boolean alreadyAnimating) {
- int top = 0;
- if (section != null) {
- ActivatableNotificationView firstView = section.getFirstVisibleChild();
- if (firstView != null) {
- // Round Y up to avoid seeing the background during animation
- int finalTranslationY = (int) Math.ceil(ViewState.getFinalTranslationY(firstView));
- if (alreadyAnimating || section.isTargetTop(finalTranslationY)) {
- // we're ending up at the same location as we are now, let's just skip the
- // animation
- top = finalTranslationY;
- } else {
- top = (int) Math.ceil(firstView.getTranslationY());
- }
+ boolean shiftPulsingWithFirst = mAmbientPulseManager.getAllEntries().count() <= 1;
+ for (NotificationSection section : mSections) {
+ int minBottomPosition = minTopPosition;
+ if (section == lastSection) {
+ // We need to make sure the section goes all the way to the shelf
+ minBottomPosition = (int) (mShelf.getTranslationY() + mShelf.getIntrinsicHeight());
}
+ minTopPosition = section.updateBounds(minTopPosition, minBottomPosition,
+ shiftPulsingWithFirst);
+ shiftPulsingWithFirst = false;
}
- return top;
- }
-
- private int getSectionBottomOrFinalBottom(
- @Nullable NotificationSection section, boolean alreadyAnimating) {
- return section == null ? 0
- : getSectionBottomOrFinalBottom(
- section, section.getLastVisibleChild(), alreadyAnimating);
- }
-
- private int getSectionBottomOrFinalBottom(
- NotificationSection section,
- ActivatableNotificationView lastView,
- boolean alreadyAnimating) {
- int bottom = 0;
- if (lastView != null) {
- float finalTranslationY;
- if (lastView == mShelf) {
- finalTranslationY = mShelf.getTranslationY();
- } else {
- finalTranslationY = ViewState.getFinalTranslationY(lastView);
- }
- int finalHeight = ExpandableViewState.getFinalActualHeight(lastView);
- // Round Y down to avoid seeing the background during animation
- int finalBottom = (int) Math.floor(
- finalTranslationY + finalHeight - lastView.getClipBottomAmount());
- if (alreadyAnimating || section.isTargetBottom(finalBottom)) {
- // we're ending up at the same location as we are now, lets just skip the animation
- bottom = finalBottom;
- } else {
- bottom = (int) (lastView.getTranslationY() + lastView.getActualHeight()
- - lastView.getClipBottomAmount());
- }
- }
- return bottom;
- }
-
- private void setSectionBoundsByPriority(int left, int right, int top, int bottom,
- NotificationSection highPrioritySection, NotificationSection lowPrioritySection) {
- if (NotificationUtils.useNewInterruptionModel(mContext)) {
- // TODO(kprevas): can we use section boundary indices from mAmbientState instead?
- ActivatableNotificationView lastChildAboveGap = getLastHighPriorityChild();
- ActivatableNotificationView firstChildBelowGap = getFirstLowPriorityChild();
- if (lastChildAboveGap != null && firstChildBelowGap != null) {
- int gapTop = getSectionBottomOrFinalBottom(
- highPrioritySection, mAnimateNextSectionBoundsChange);
- gapTop = Math.max(top, Math.min(gapTop, bottom));
-
- int gapBottom = getSectionTopOrFinalTop(
- lowPrioritySection, mAnimateNextSectionBoundsChange);
- gapBottom = Math.max(top, Math.min(gapBottom, bottom));
-
- highPrioritySection.getBounds().set(left, top, right, gapTop);
- lowPrioritySection.getBounds().set(left, gapBottom, right, bottom);
- } else if (lastChildAboveGap != null) {
- highPrioritySection.getBounds().set(left, top, right, bottom);
- lowPrioritySection.getBounds().set(left, bottom, right, bottom);
- } else {
- highPrioritySection.getBounds().set(left, top, right, top);
- lowPrioritySection.getBounds().set(left, top, right, bottom);
- }
- } else {
- highPrioritySection.getBounds().set(left, top, right, bottom);
- lowPrioritySection.getBounds().set(left, bottom, right, bottom);
- }
- }
-
- @ShadeViewRefactor(RefactorComponent.COORDINATOR)
- private ActivatableNotificationView getFirstPinnedHeadsUp() {
- int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- View child = getChildAt(i);
- if (child.getVisibility() != View.GONE
- && child instanceof ExpandableNotificationRow) {
- ExpandableNotificationRow row = (ExpandableNotificationRow) child;
- if (row.isPinned()) {
- return row;
- }
- }
- }
- return null;
}
private NotificationSection getFirstVisibleSection() {
@@ -3462,7 +3377,6 @@
generateViewResizeEvent();
generateGroupExpansionEvent();
generateAnimateEverythingEvent();
- generatePulsingAnimationEvent();
}
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
@@ -4462,10 +4376,12 @@
}
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
- public void setIsExpanded(boolean isExpanded) {
+ private void setIsExpanded(boolean isExpanded) {
boolean changed = isExpanded != mIsExpanded;
mIsExpanded = isExpanded;
mStackScrollAlgorithm.setIsExpanded(isExpanded);
+ mAmbientState.setShadeExpanded(isExpanded);
+ mStateAnimator.setShadeExpanded(isExpanded);
if (changed) {
if (!mIsExpanded) {
mGroupManager.collapseAllGroups();
@@ -5207,12 +5123,6 @@
}
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void setShadeExpanded(boolean shadeExpanded) {
- mAmbientState.setShadeExpanded(shadeExpanded);
- mStateAnimator.setShadeExpanded(shadeExpanded);
- }
-
/**
* Set the boundary for the bottom heads up position. The heads up will always be above this
* position.
@@ -5274,24 +5184,12 @@
return;
}
mPulsing = pulsing;
- mNeedingPulseAnimation = animated ? getFirstChildNotGone() : null;
mAmbientState.setPulsing(pulsing);
updateNotificationAnimationStates();
updateAlgorithmHeightAndPadding();
updateContentHeight();
requestChildrenUpdate();
notifyHeightChangeListener(null, animated);
- mNeedsAnimation |= animated;
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- private void generatePulsingAnimationEvent() {
- if (mNeedingPulseAnimation != null) {
- int type = mPulsing ? AnimationEvent.ANIMATION_TYPE_PULSE_APPEAR
- : AnimationEvent.ANIMATION_TYPE_PULSE_DISAPPEAR;
- mAnimationEvents.add(new AnimationEvent(mNeedingPulseAnimation, type));
- mNeedingPulseAnimation = null;
- }
}
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@@ -5734,6 +5632,56 @@
}
/**
+ * Set how far the wake up is when waking up from pulsing. This is a height and will adjust the
+ * notification positions accordingly.
+ * @param height the new wake up height
+ * @return the overflow how much the height is further than he lowest notification
+ */
+ public float setPulseHeight(float height) {
+ mAmbientState.setPulseHeight(height);
+ requestChildrenUpdate();
+ return Math.max(0, height - mAmbientState.getInnerHeight(true /* ignorePulseHeight */));
+ }
+
+ /**
+ * Set the amount how much we're dozing. This is different from how dark the shade is, when
+ * the notification is pulsing.
+ */
+ public void setDozeAmount(float dozeAmount) {
+ mAmbientState.setDozeAmount(dozeAmount);
+ updateContinuousBackgroundDrawing();
+ requestChildrenUpdate();
+ }
+
+ public void wakeUpFromPulse() {
+ setPulseHeight(getPulseHeight());
+ // Let's place the hidden views at the end of the pulsing notification to make sure we have
+ // a smooth animation
+ boolean firstVisibleView = true;
+ float wakeUplocation = -1f;
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ ExpandableView view = (ExpandableView) getChildAt(i);
+ if (view.getVisibility() == View.GONE) {
+ continue;
+ }
+ boolean isShelf = view == mShelf;
+ if (!(view instanceof ExpandableNotificationRow) && !isShelf) {
+ continue;
+ }
+ if (view.getVisibility() == View.VISIBLE && !isShelf) {
+ if (firstVisibleView) {
+ firstVisibleView = false;
+ wakeUplocation = view.getTranslationY()
+ + view.getActualHeight() - mShelf.getIntrinsicHeight();
+ }
+ } else if (!firstVisibleView) {
+ view.setTranslationY(wakeUplocation);
+ }
+ }
+ }
+
+ /**
* A listener that is notified when the empty space below the notifications is clicked on
*/
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@@ -5825,6 +5773,19 @@
mAmbientState.setSectionBoundaryIndex(0, gapIndex);
}
+ private void updateContinuousBackgroundDrawing() {
+ boolean continuousBackground = !mAmbientState.isFullyAwake()
+ && !mAmbientState.getDraggedViews().isEmpty();
+ if (continuousBackground != mContinuousBackgroundUpdate) {
+ mContinuousBackgroundUpdate = continuousBackground;
+ if (continuousBackground) {
+ getViewTreeObserver().addOnPreDrawListener(mBackgroundUpdater);
+ } else {
+ getViewTreeObserver().removeOnPreDrawListener(mBackgroundUpdater);
+ }
+ }
+ }
+
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void updateContinuousShadowDrawing() {
boolean continuousShadowUpdate = mAnimationRunning
@@ -5969,18 +5930,6 @@
.animateTopInset()
.animateY()
.animateZ(),
-
- // ANIMATION_TYPE_PULSE_APPEAR
- new AnimationFilter()
- .animateAlpha()
- .hasDelays()
- .animateY(),
-
- // ANIMATION_TYPE_PULSE_DISAPPEAR
- new AnimationFilter()
- .animateAlpha()
- .hasDelays()
- .animateY(),
};
static int[] LENGTHS = new int[]{
@@ -6035,12 +5984,6 @@
// ANIMATION_TYPE_EVERYTHING
StackStateAnimator.ANIMATION_DURATION_STANDARD,
-
- // ANIMATION_TYPE_PULSE_APPEAR
- StackStateAnimator.ANIMATION_DURATION_PULSE_APPEAR,
-
- // ANIMATION_TYPE_PULSE_DISAPPEAR
- StackStateAnimator.ANIMATION_DURATION_PULSE_APPEAR / 2,
};
static final int ANIMATION_TYPE_ADD = 0;
@@ -6060,8 +6003,6 @@
static final int ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK = 14;
static final int ANIMATION_TYPE_HEADS_UP_OTHER = 15;
static final int ANIMATION_TYPE_EVERYTHING = 16;
- static final int ANIMATION_TYPE_PULSE_APPEAR = 17;
- static final int ANIMATION_TYPE_PULSE_DISAPPEAR = 18;
static final int DARK_ANIMATION_ORIGIN_INDEX_ABOVE = -1;
static final int DARK_ANIMATION_ORIGIN_INDEX_BELOW = -2;
@@ -6198,8 +6139,8 @@
}
@Override
- public boolean isExpanded() {
- return NotificationStackScrollLayout.this.isExpanded();
+ public boolean shouldDismissQuickly() {
+ return NotificationStackScrollLayout.this.isExpanded() && mAmbientState.isFullyAwake();
}
@Override
@@ -6299,6 +6240,7 @@
setSwipingInProgress(true);
mAmbientState.onBeginDrag((ExpandableView) v);
updateContinuousShadowDrawing();
+ updateContinuousBackgroundDrawing();
requestChildrenUpdate();
}
@@ -6306,6 +6248,7 @@
public void onChildSnappedBack(View animView, float targetLeft) {
mAmbientState.onDragFinished(animView);
updateContinuousShadowDrawing();
+ updateContinuousBackgroundDrawing();
NotificationMenuRowPlugin menuRow = mSwipeHelper.getCurrentMenuRow();
if (menuRow != null && targetLeft == 0) {
menuRow.resetMenu();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
index 975aee5..478427c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
@@ -231,7 +231,7 @@
public void dismissChild(final View view, float velocity,
boolean useAccelerateInterpolator) {
superDismissChild(view, velocity, useAccelerateInterpolator);
- if (mCallback.isExpanded()) {
+ if (mCallback.shouldDismissQuickly()) {
// We don't want to quick-dismiss when it's a heads up as this might lead to closing
// of the panel early.
mCallback.handleChildViewDismissed(view);
@@ -418,7 +418,11 @@
}
public interface NotificationCallback extends SwipeHelper.Callback{
- boolean isExpanded();
+ /**
+ * @return if the view should be dismissed as soon as the touch is released, otherwise its
+ * removed when the animation finishes.
+ */
+ boolean shouldDismissQuickly();
void handleChildViewDismissed(View view);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
index 7882fd3..f97a7e6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
@@ -101,6 +101,7 @@
updateZValuesForState(algorithmState, ambientState);
updateHeadsUpStates(algorithmState, ambientState);
+ updatePulsingStates(algorithmState, ambientState);
updateDimmedActivatedHideSensitive(ambientState, algorithmState);
updateClipping(algorithmState, ambientState);
@@ -477,6 +478,23 @@
return algorithmState.getPaddingAfterChild(child);
}
+ private void updatePulsingStates(StackScrollAlgorithmState algorithmState,
+ AmbientState ambientState) {
+ int childCount = algorithmState.visibleChildren.size();
+ for (int i = 0; i < childCount; i++) {
+ View child = algorithmState.visibleChildren.get(i);
+ if (!(child instanceof ExpandableNotificationRow)) {
+ continue;
+ }
+ ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+ if (!row.showingAmbientPulsing() || (i == 0 && ambientState.isPulseExpanding())) {
+ continue;
+ }
+ ExpandableViewState viewState = row.getViewState();
+ viewState.hidden = false;
+ }
+ }
+
private void updateHeadsUpStates(StackScrollAlgorithmState algorithmState,
AmbientState ambientState) {
int childCount = algorithmState.visibleChildren.size();
@@ -501,7 +519,7 @@
if (row.mustStayOnScreen() && !childState.headsUpIsVisible) {
// Ensure that the heads up is always visible even when scrolled off
clampHunToTop(ambientState, row, childState);
- if (i == 0 && ambientState.isAboveShelf(row)) {
+ if (i == 0 && row.isAboveShelf()) {
// the first hun can't get off screen.
clampHunToMaxTranslation(ambientState, row, childState);
childState.hidden = false;
@@ -635,7 +653,7 @@
}
childViewState.zTranslation = baseZ
+ childrenOnTop * zDistanceBetweenElements;
- } else if (i == 0 && ambientState.isAboveShelf(child)) {
+ } else if (i == 0 && child.isAboveShelf()) {
// In case this is a new view that has never been measured before, we don't want to
// elevate if we are currently expanded more then the notification
int shelfHeight = ambientState.getShelf() == null ? 0 :
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
index b4c205a..7332b03 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
@@ -419,32 +419,6 @@
ExpandableNotificationRow row = (ExpandableNotificationRow) event.mChangingView;
row.prepareExpansionChanged();
} else if (event.animationType == NotificationStackScrollLayout
- .AnimationEvent.ANIMATION_TYPE_PULSE_APPEAR) {
- ExpandableViewState viewState = changingView.getViewState();
- if (viewState != null) {
- mTmpState.copyFrom(viewState);
- mTmpState.yTranslation += mPulsingAppearingTranslation;
- mTmpState.alpha = 0;
- mTmpState.applyToView(changingView);
-
- mTmpState.copyFrom(mShelf.getViewState());
- mTmpState.applyToView(mShelf);
- }
- } else if (event.animationType == NotificationStackScrollLayout
- .AnimationEvent.ANIMATION_TYPE_PULSE_DISAPPEAR) {
- ExpandableViewState viewState = changingView.getViewState();
- if (viewState != null) {
- viewState.alpha = 0;
- // We want to animate the alpha away before the view starts translating,
- // otherwise everything will overlap and look xtra ugly.
- float originalYTranslation = viewState.yTranslation;
- viewState.yTranslation = changingView.getTranslationY();
- mAnimationFilter.animateAlpha = true;
- mAnimationProperties.duration = ANIMATION_DURATION_PULSE_APPEAR / 2;
- viewState.animateTo(changingView, mAnimationProperties);
- viewState.yTranslation = originalYTranslation;
- }
- } else if (event.animationType == NotificationStackScrollLayout
.AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR) {
// This item is added, initialize it's properties.
ExpandableViewState viewState = changingView.getViewState();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 1eb4990..9be47f7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -185,6 +185,11 @@
}
@Override
+ public void startAssistant(Bundle bundle) {
+ mAssistManager.startAssist(bundle);
+ }
+
+ @Override
public void onBackButtonAlphaChanged(float alpha, boolean animate) {
final ButtonDispatcher backButton = mNavigationBarView.getBackButton();
if (QuickStepController.shouldhideBackButton(getContext())) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index f4fa1e8..a354885 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -18,6 +18,10 @@
import static com.android.systemui.SysUiServiceProvider.getComponent;
import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters;
+import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
+
+
+import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -72,11 +76,13 @@
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationShelf;
+import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.ActivityLaunchAnimator;
import com.android.systemui.statusbar.notification.AnimatableProperty;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.PropertyAnimator;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
@@ -96,12 +102,16 @@
import java.util.List;
import java.util.function.Consumer;
+import javax.inject.Inject;
+import javax.inject.Named;
+
public class NotificationPanelView extends PanelView implements
ExpandableView.OnHeightChangedListener,
View.OnClickListener, NotificationStackScrollLayout.OnOverscrollTopChangedListener,
KeyguardAffordanceHelper.Callback, NotificationStackScrollLayout.OnEmptySpaceClickListener,
OnHeadsUpChangedListener, QS.HeightListener, ZenModeController.Callback,
- ConfigurationController.ConfigurationListener, StateListener {
+ ConfigurationController.ConfigurationListener, StateListener,
+ PulseExpansionHandler.ExpansionCallback {
private static final boolean DEBUG = false;
@@ -136,6 +146,8 @@
private final PowerManager mPowerManager;
private final AccessibilityManager mAccessibilityManager;
+ private final NotificationWakeUpCoordinator mWakeUpCoordinator;
+ private final PulseExpansionHandler mPulseExpansionHandler;
private KeyguardAffordanceHelper mAffordanceHelper;
private KeyguardUserSwitcher mKeyguardUserSwitcher;
@@ -317,17 +329,22 @@
Dependency.get(ShadeController.class);
private int mDisplayId;
- public NotificationPanelView(Context context, AttributeSet attrs) {
+ @Inject
+ public NotificationPanelView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
+ NotificationWakeUpCoordinator coordinator,
+ PulseExpansionHandler pulseExpansionHandler) {
super(context, attrs);
setWillNotDraw(!DEBUG);
mFalsingManager = FalsingManager.getInstance(context);
mPowerManager = context.getSystemService(PowerManager.class);
+ mWakeUpCoordinator = coordinator;
mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
setPanelAlpha(255, false /* animate */);
mCommandQueue = getComponent(context, CommandQueue.class);
mDisplayId = context.getDisplayId();
+ mPulseExpansionHandler = pulseExpansionHandler;
}
/**
@@ -364,7 +381,9 @@
initBottomArea();
+ mWakeUpCoordinator.setStackScroller(mNotificationStackScroller);
mQsFrame = findViewById(R.id.qs_frame);
+ mPulseExpansionHandler.setUp(mNotificationStackScroller, this, mShadeController);
}
@Override
@@ -594,8 +613,7 @@
stackScrollerPadding = mClockPositionResult.stackScrollerPadding;
}
mNotificationStackScroller.setIntrinsicPadding(stackScrollerPadding);
- int burnInXOffset = mPulsing ? 0 : mClockPositionResult.clockX;
- mNotificationStackScroller.setAntiBurnInOffsetX(burnInXOffset);
+ mNotificationStackScroller.setAntiBurnInOffsetX(mClockPositionResult.clockX);
mStackScrollerMeasuringPass++;
requestScrollerTopPaddingUpdate(animate);
@@ -786,6 +804,9 @@
MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1);
return true;
}
+ if (mPulseExpansionHandler.onInterceptTouchEvent(event)) {
+ return true;
+ }
if (!isFullyCollapsed() && onQsIntercept(event)) {
return true;
@@ -945,6 +966,10 @@
return false;
}
initDownStates(event);
+ if (!mIsExpanding && mPulseExpansionHandler.onTouchEvent(event)) {
+ // We're expanding all the other ones shouldn't get this anymore
+ return true;
+ }
if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
&& mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
mIsExpansionFromHeadsUp = true;
@@ -1488,16 +1513,16 @@
int max = mBarState == StatusBarState.KEYGUARD
? Math.max(maxNotificationPadding, maxQsPadding)
: maxQsPadding;
- return (int) interpolate(getExpandedFraction(),
- mQsMinExpansionHeight, max);
+ return (int) MathUtils.lerp((float) mQsMinExpansionHeight, (float) max,
+ getExpandedFraction());
} else if (mQsSizeChangeAnimator != null) {
return (int) mQsSizeChangeAnimator.getAnimatedValue();
} else if (mKeyguardShowing) {
// We can only do the smoother transition on Keyguard when we also are not collapsing
// from a scrolled quick settings.
- return interpolate(getQsExpansionFraction(),
- mNotificationStackScroller.getIntrinsicPadding(),
- mQsMaxExpansionHeight + mQsNotificationTopPadding);
+ return MathUtils.lerp((float) mNotificationStackScroller.getIntrinsicPadding(),
+ (float) (mQsMaxExpansionHeight + mQsNotificationTopPadding),
+ getQsExpansionFraction());
} else {
return mQsExpansionHeight + mQsNotificationTopPadding;
}
@@ -1698,7 +1723,6 @@
updateUnlockIcon();
updateNotificationTranslucency();
updatePanelExpanded();
- mNotificationStackScroller.setShadeExpanded(!isFullyCollapsed());
if (DEBUG) {
invalidate();
}
@@ -2812,9 +2836,6 @@
final float darkAmount = dozing ? 1 : 0;
mStatusBarStateController.setDozeAmount(darkAmount, animate);
- if (animate) {
- mNotificationStackScroller.notifyDarkAnimationStart(mDozing);
- }
}
@Override
@@ -2825,7 +2846,6 @@
mKeyguardStatusView.setDarkAmount(mInterpolatedDarkAmount);
mKeyguardBottomArea.setDarkAmount(mInterpolatedDarkAmount);
positionClockAndNotifications();
- mNotificationStackScroller.setDarkAmount(linearAmount, mInterpolatedDarkAmount);
}
public void setPulsing(boolean pulsing) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 4d0c8c3..2495d22 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -1172,9 +1172,11 @@
}
protected void notifyBarPanelExpansionChanged() {
- mBar.panelExpansionChanged(mExpandedFraction, mExpandedFraction > 0f
- || mPeekAnimator != null || mInstantExpanding || isPanelVisibleBecauseOfHeadsUp()
- || mTracking || mHeightAnimator != null);
+ if (mBar != null) {
+ mBar.panelExpansionChanged(mExpandedFraction, mExpandedFraction > 0f
+ || mPeekAnimator != null || mInstantExpanding
+ || isPanelVisibleBecauseOfHeadsUp() || mTracking || mHeightAnimator != null);
+ }
if (mExpansionListener != null) {
mExpansionListener.accept(mExpandedFraction, mTracking);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 41580f6..d18b419 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -184,6 +184,7 @@
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.NotificationViewHierarchyManager;
+import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -195,6 +196,7 @@
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.notification.NotificationListController;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationRowBinderImpl;
@@ -363,6 +365,10 @@
protected StatusBarIconController mIconController;
@Inject
InjectionInflationController mInjectionInflater;
+ @Inject
+ PulseExpansionHandler mPulseExpansionHandler;
+ @Inject
+ NotificationWakeUpCoordinator mWakeUpCoordinator;
// expanded notifications
protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
@@ -1079,7 +1085,7 @@
@Override
public boolean isDozing() {
- return mDozing && mNotificationPanel.isFullyDark();
+ return mDozing;
}
@Override
@@ -2965,7 +2971,7 @@
mHandler.removeMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
if (mUserSwitcherController != null && mUserSwitcherController.useFullscreenUserSwitcher()) {
mStatusBarStateController.setState(StatusBarState.FULLSCREEN_USER_SWITCHER);
- } else {
+ } else if (!mPulseExpansionHandler.isWakingToShadeLocked()){
mStatusBarStateController.setState(StatusBarState.KEYGUARD);
}
updatePanelExpansionForKeyguard();
@@ -3588,12 +3594,19 @@
@Override
public void onStartedWakingUp() {
mDeviceInteractive = true;
+ mWakeUpCoordinator.setWakingUp(true);
mAmbientPulseManager.releaseAllImmediately();
mVisualStabilityManager.setScreenOn(true);
updateNotificationPanelTouchState();
updateVisibleToUser();
updateIsKeyguard();
mDozeServiceHost.stopDozing();
+ mPulseExpansionHandler.onStartedWakingUp();
+ }
+
+ @Override
+ public void onFinishedWakingUp() {
+ mWakeUpCoordinator.setWakingUp(false);
}
};
@@ -3896,6 +3909,7 @@
mKeyguardUpdateMonitor.onAuthInterruptDetected(pulsing /* active */);
}
updateScrimController();
+ mPulseExpansionHandler.setPulsing(pulsing);
}
}, reason);
// DozeScrimController is in pulse state, now let's ask ScrimController to start
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
index f846036..e0b1846 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -42,6 +42,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
@@ -122,7 +123,7 @@
// Remove all the icons.
for (int i = currentSlots.size() - 1; i >= 0; i--) {
Slot s = currentSlots.get(i);
- slotsToReAdd.put(s, s.getHolderListInViewOrder());
+ slotsToReAdd.put(s, s.getHolderList());
removeAllIconsForSlot(s.getName());
}
@@ -200,6 +201,10 @@
Slot mobileSlot = getSlot(slot);
int slotIndex = getSlotIndex(slot);
+ // Reverse the sort order to show icons with left to right([Slot1][Slot2]..).
+ // StatusBarIconList has UI design that first items go to the right of second items.
+ Collections.reverse(iconStates);
+
for (MobileIconState state : iconStates) {
StatusBarIconHolder holder = mobileSlot.getHolderForTag(state.subId);
if (holder == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
index 2e41617..c876c32 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
@@ -250,6 +250,25 @@
return holders;
}
+ /**
+ * Build a list of the {@link StatusBarIconHolder}s in the same order.
+ * This provides a safe list that can be iterated and inserted into its group.
+ *
+ * @return all holders contained here
+ */
+ public List<StatusBarIconHolder> getHolderList() {
+ ArrayList<StatusBarIconHolder> holders = new ArrayList<>();
+ if (mHolder != null) {
+ holders.add(mHolder);
+ }
+
+ if (mSubSlots != null) {
+ holders.addAll(mSubSlots);
+ }
+
+ return holders;
+ }
+
@Override
public String toString() {
return String.format("(%s) %s", mName, subSlotsString());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
index 50c4fac..a8ae5f6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -388,7 +388,8 @@
if (mNotificationPanel.isFullyExpanded()
&& stackScrollLayout.getVisibility() == View.VISIBLE
&& mStatusBarStateController.getState() == StatusBarState.KEYGUARD
- && !mService.isBouncerShowing()) {
+ && !mService.isBouncerShowing()
+ && !mService.isDozing()) {
intercept = mDragDownHelper.onInterceptTouchEvent(ev);
}
if (!intercept) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java
new file mode 100644
index 0000000..d8ea1f6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/InflatedSmartReplies.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.Notification;
+import android.app.RemoteInput;
+import android.content.Context;
+import android.os.Build;
+import android.util.Log;
+import android.util.Pair;
+import android.widget.Button;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.systemui.statusbar.SmartReplyController;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Holder for inflated smart replies and actions. These objects should be inflated on a background
+ * thread, to later be accessed and modified on the (performance critical) UI thread.
+ */
+public class InflatedSmartReplies {
+ private static final String TAG = "InflatedSmartReplies";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ @Nullable private final SmartReplyView mSmartReplyView;
+ @Nullable private final List<Button> mSmartSuggestionButtons;
+ @NonNull private final SmartRepliesAndActions mSmartRepliesAndActions;
+
+ private InflatedSmartReplies(
+ @Nullable SmartReplyView smartReplyView,
+ @Nullable List<Button> smartSuggestionButtons,
+ @NonNull SmartRepliesAndActions smartRepliesAndActions) {
+ mSmartReplyView = smartReplyView;
+ mSmartSuggestionButtons = smartSuggestionButtons;
+ mSmartRepliesAndActions = smartRepliesAndActions;
+ }
+
+ @Nullable public SmartReplyView getSmartReplyView() {
+ return mSmartReplyView;
+ }
+
+ @Nullable public List<Button> getSmartSuggestionButtons() {
+ return mSmartSuggestionButtons;
+ }
+
+ @NonNull public SmartRepliesAndActions getSmartRepliesAndActions() {
+ return mSmartRepliesAndActions;
+ }
+
+ /**
+ * Inflate a SmartReplyView and its smart suggestions.
+ */
+ public static InflatedSmartReplies inflate(
+ Context context,
+ NotificationEntry entry,
+ SmartReplyConstants smartReplyConstants,
+ SmartReplyController smartReplyController,
+ HeadsUpManager headsUpManager) {
+ SmartRepliesAndActions smartRepliesAndActions =
+ chooseSmartRepliesAndActions(smartReplyConstants, entry);
+ if (!shouldShowSmartReplyView(entry, smartRepliesAndActions)) {
+ return new InflatedSmartReplies(null /* smartReplyView */,
+ null /* smartSuggestionButtons */, smartRepliesAndActions);
+ }
+
+ SmartReplyView smartReplyView = SmartReplyView.inflate(context);
+
+ List<Button> suggestionButtons = new ArrayList<>();
+ if (smartRepliesAndActions.smartReplies != null) {
+ suggestionButtons.addAll(smartReplyView.inflateRepliesFromRemoteInput(
+ smartRepliesAndActions.smartReplies, smartReplyController, entry));
+ }
+ if (smartRepliesAndActions.smartActions != null) {
+ suggestionButtons.addAll(
+ smartReplyView.inflateSmartActions(smartRepliesAndActions.smartActions,
+ smartReplyController, entry, headsUpManager));
+ }
+
+ return new InflatedSmartReplies(smartReplyView, suggestionButtons,
+ smartRepliesAndActions);
+ }
+
+ /**
+ * Returns whether we should show the smart reply view and its smart suggestions.
+ */
+ public static boolean shouldShowSmartReplyView(
+ NotificationEntry entry,
+ SmartRepliesAndActions smartRepliesAndActions) {
+ if (smartRepliesAndActions.smartReplies == null
+ && smartRepliesAndActions.smartActions == null) {
+ // There are no smart replies and no smart actions.
+ return false;
+ }
+ // If we are showing the spinner we don't want to add the buttons.
+ boolean showingSpinner = entry.notification.getNotification()
+ .extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);
+ if (showingSpinner) {
+ return false;
+ }
+ // If we are keeping the notification around while sending we don't want to add the buttons.
+ boolean hideSmartReplies = entry.notification.getNotification()
+ .extras.getBoolean(Notification.EXTRA_HIDE_SMART_REPLIES, false);
+ if (hideSmartReplies) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Chose what smart replies and smart actions to display. App generated suggestions take
+ * precedence. So if the app provides any smart replies, we don't show any
+ * replies or actions generated by the NotificationAssistantService (NAS), and if the app
+ * provides any smart actions we also don't show any NAS-generated replies or actions.
+ */
+ @NonNull
+ public static SmartRepliesAndActions chooseSmartRepliesAndActions(
+ SmartReplyConstants smartReplyConstants,
+ final NotificationEntry entry) {
+ Notification notification = entry.notification.getNotification();
+ Pair<RemoteInput, Notification.Action> remoteInputActionPair =
+ notification.findRemoteInputActionPair(false /* freeform */);
+ Pair<RemoteInput, Notification.Action> freeformRemoteInputActionPair =
+ notification.findRemoteInputActionPair(true /* freeform */);
+
+ if (!smartReplyConstants.isEnabled()) {
+ if (DEBUG) {
+ Log.d(TAG, "Smart suggestions not enabled, not adding suggestions for "
+ + entry.notification.getKey());
+ }
+ return new SmartRepliesAndActions(null, null);
+ }
+ // Only use smart replies from the app if they target P or above. We have this check because
+ // the smart reply API has been used for other things (Wearables) in the past. The API to
+ // add smart actions is new in Q so it doesn't require a target-sdk check.
+ boolean enableAppGeneratedSmartReplies = (!smartReplyConstants.requiresTargetingP()
+ || entry.targetSdk >= Build.VERSION_CODES.P);
+
+ boolean appGeneratedSmartRepliesExist =
+ enableAppGeneratedSmartReplies
+ && remoteInputActionPair != null
+ && !ArrayUtils.isEmpty(remoteInputActionPair.first.getChoices())
+ && remoteInputActionPair.second.actionIntent != null;
+
+ List<Notification.Action> appGeneratedSmartActions = notification.getContextualActions();
+ boolean appGeneratedSmartActionsExist = !appGeneratedSmartActions.isEmpty();
+
+ SmartReplyView.SmartReplies smartReplies = null;
+ SmartReplyView.SmartActions smartActions = null;
+ if (appGeneratedSmartRepliesExist) {
+ smartReplies = new SmartReplyView.SmartReplies(
+ remoteInputActionPair.first.getChoices(),
+ remoteInputActionPair.first,
+ remoteInputActionPair.second.actionIntent,
+ false /* fromAssistant */);
+ }
+ if (appGeneratedSmartActionsExist) {
+ smartActions = new SmartReplyView.SmartActions(appGeneratedSmartActions,
+ false /* fromAssistant */);
+ }
+ // Apps didn't provide any smart replies / actions, use those from NAS (if any).
+ if (!appGeneratedSmartRepliesExist && !appGeneratedSmartActionsExist) {
+ boolean useGeneratedReplies = !ArrayUtils.isEmpty(entry.systemGeneratedSmartReplies)
+ && freeformRemoteInputActionPair != null
+ && freeformRemoteInputActionPair.second.getAllowGeneratedReplies()
+ && freeformRemoteInputActionPair.second.actionIntent != null;
+ if (useGeneratedReplies) {
+ smartReplies = new SmartReplyView.SmartReplies(
+ entry.systemGeneratedSmartReplies,
+ freeformRemoteInputActionPair.first,
+ freeformRemoteInputActionPair.second.actionIntent,
+ true /* fromAssistant */);
+ }
+ boolean useSmartActions = !ArrayUtils.isEmpty(entry.systemGeneratedSmartActions)
+ && notification.getAllowSystemGeneratedContextualActions();
+ if (useSmartActions) {
+ smartActions = new SmartReplyView.SmartActions(
+ entry.systemGeneratedSmartActions, true /* fromAssistant */);
+ }
+ }
+ return new SmartRepliesAndActions(smartReplies, smartActions);
+ }
+
+ /**
+ * Returns whether the {@link Notification} represented by entry has a free-form remote input.
+ * Such an input can be used e.g. to implement smart reply buttons - by passing the replies
+ * through the remote input.
+ */
+ public static boolean hasFreeformRemoteInput(NotificationEntry entry) {
+ Notification notification = entry.notification.getNotification();
+ return null != notification.findRemoteInputActionPair(true /* freeform */);
+ }
+
+ /**
+ * A storage for smart replies and smart action.
+ */
+ public static class SmartRepliesAndActions {
+ @Nullable public final SmartReplyView.SmartReplies smartReplies;
+ @Nullable public final SmartReplyView.SmartActions smartActions;
+
+ SmartRepliesAndActions(
+ @Nullable SmartReplyView.SmartReplies smartReplies,
+ @Nullable SmartReplyView.SmartActions smartActions) {
+ this.smartReplies = smartReplies;
+ this.smartActions = smartActions;
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
index 8b81585..72f4fc7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyConstants.java
@@ -21,13 +21,14 @@
import android.app.RemoteInput;
import android.content.Context;
import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.net.Uri;
import android.os.Handler;
-import android.provider.Settings;
+import android.provider.DeviceConfig;
+import android.text.TextUtils;
import android.util.KeyValueListParser;
import android.util.Log;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.R;
import javax.inject.Inject;
@@ -35,20 +36,10 @@
import javax.inject.Singleton;
@Singleton
-public final class SmartReplyConstants extends ContentObserver {
+public final class SmartReplyConstants {
private static final String TAG = "SmartReplyConstants";
- private static final String KEY_ENABLED = "enabled";
- private static final String KEY_REQUIRES_TARGETING_P = "requires_targeting_p";
- private static final String KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS =
- "max_squeeze_remeasure_attempts";
- private static final String KEY_EDIT_CHOICES_BEFORE_SENDING =
- "edit_choices_before_sending";
- private static final String KEY_SHOW_IN_HEADS_UP = "show_in_heads_up";
- private static final String KEY_MIN_NUM_REPLIES = "min_num_system_generated_replies";
- private static final String KEY_MAX_NUM_ACTIONS = "max_num_actions";
-
private final boolean mDefaultEnabled;
private final boolean mDefaultRequiresP;
private final int mDefaultMaxSqueezeRemeasureAttempts;
@@ -69,13 +60,13 @@
private volatile int mMinNumSystemGeneratedReplies;
private volatile int mMaxNumActions;
+ private final Handler mHandler;
private final Context mContext;
private final KeyValueListParser mParser = new KeyValueListParser(',');
@Inject
public SmartReplyConstants(@Named(MAIN_HANDLER_NAME) Handler handler, Context context) {
- super(handler);
-
+ mHandler = handler;
mContext = context;
final Resources resources = mContext.getResources();
mDefaultEnabled = resources.getBoolean(
@@ -93,35 +84,86 @@
mDefaultMaxNumActions = resources.getInteger(
R.integer.config_smart_replies_in_notifications_max_num_actions);
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS),
- false, this);
+ registerDeviceConfigListener();
updateConstants();
}
- @Override
- public void onChange(boolean selfChange, Uri uri) {
+ private void registerDeviceConfigListener() {
+ DeviceConfig.addOnPropertyChangedListener(
+ DeviceConfig.NAMESPACE_SYSTEMUI,
+ this::postToHandler,
+ this::onDeviceConfigPropertyChanged);
+ }
+
+ private void postToHandler(Runnable r) {
+ this.mHandler.post(r);
+ }
+
+ @VisibleForTesting
+ void onDeviceConfigPropertyChanged(String namespace, String name, String value) {
+ if (!DeviceConfig.NAMESPACE_SYSTEMUI.equals(namespace)) {
+ Log.e(TAG, "Received update from DeviceConfig for unrelated namespace: "
+ + namespace + " " + name + "=" + value);
+ return;
+ }
+
updateConstants();
}
private void updateConstants() {
synchronized (SmartReplyConstants.this) {
- try {
- mParser.setString(Settings.Global.getString(mContext.getContentResolver(),
- Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS));
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Bad smart reply constants", e);
- }
- mEnabled = mParser.getBoolean(KEY_ENABLED, mDefaultEnabled);
- mRequiresTargetingP = mParser.getBoolean(KEY_REQUIRES_TARGETING_P, mDefaultRequiresP);
- mMaxSqueezeRemeasureAttempts = mParser.getInt(
- KEY_MAX_SQUEEZE_REMEASURE_ATTEMPTS, mDefaultMaxSqueezeRemeasureAttempts);
- mEditChoicesBeforeSending = mParser.getBoolean(
- KEY_EDIT_CHOICES_BEFORE_SENDING, mDefaultEditChoicesBeforeSending);
- mShowInHeadsUp = mParser.getBoolean(KEY_SHOW_IN_HEADS_UP, mDefaultShowInHeadsUp);
- mMinNumSystemGeneratedReplies =
- mParser.getInt(KEY_MIN_NUM_REPLIES, mDefaultMinNumSystemGeneratedReplies);
- mMaxNumActions = mParser.getInt(KEY_MAX_NUM_ACTIONS, mDefaultMaxNumActions);
+ mEnabled = readDeviceConfigBooleanOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_ENABLED,
+ mDefaultEnabled);
+ mRequiresTargetingP = readDeviceConfigBooleanOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P,
+ mDefaultRequiresP);
+ mMaxSqueezeRemeasureAttempts = readDeviceConfigIntegerOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS,
+ mDefaultMaxSqueezeRemeasureAttempts);
+ mEditChoicesBeforeSending = readDeviceConfigBooleanOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING,
+ mDefaultEditChoicesBeforeSending);
+ mShowInHeadsUp = readDeviceConfigBooleanOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP,
+ mDefaultShowInHeadsUp);
+ mMinNumSystemGeneratedReplies = readDeviceConfigIntegerOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES,
+ mDefaultMinNumSystemGeneratedReplies);
+ mMaxNumActions = readDeviceConfigIntegerOrDefaultIfEmpty(
+ SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS,
+ mDefaultMaxNumActions);
+ }
+ }
+
+ private static boolean readDeviceConfigBooleanOrDefaultIfEmpty(String propertyName,
+ boolean defaultValue) {
+ String value = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI, propertyName);
+ if (TextUtils.isEmpty(value)) {
+ return defaultValue;
+ }
+ if ("true".equals(value)) {
+ return true;
+ }
+ if ("false".equals(value)) {
+ return false;
+ }
+ // For invalid configs we return the default value.
+ return defaultValue;
+ }
+
+ private static int readDeviceConfigIntegerOrDefaultIfEmpty(String propertyName,
+ int defaultValue) {
+ String value = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI, propertyName);
+ if (TextUtils.isEmpty(value)) {
+ return defaultValue;
+ }
+ try {
+ return Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "Tried to read an integer flag, property name="
+ + propertyName + ", value=" + value);
+ return defaultValue;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
index 45d215e..ed5487f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SmartReplyView.java
@@ -196,66 +196,81 @@
}
/**
+ * Add buttons to the {@link SmartReplyView} - these buttons must have been preinflated using
+ * one of the methods in this class.
+ */
+ public void addPreInflatedButtons(List<Button> smartSuggestionButtons) {
+ for (Button button : smartSuggestionButtons) {
+ addView(button);
+ }
+ reallocateCandidateButtonQueueForSqueezing();
+ }
+
+ /**
* Add smart replies to this view, using the provided {@link RemoteInput} and
* {@link PendingIntent} to respond when the user taps a smart reply. Only the replies that fit
* into the notification are shown.
*/
- public void addRepliesFromRemoteInput(
- SmartReplies smartReplies,
+ public List<Button> inflateRepliesFromRemoteInput(
+ @NonNull SmartReplies smartReplies,
SmartReplyController smartReplyController, NotificationEntry entry) {
+ List<Button> buttons = new ArrayList<>();
+
if (smartReplies.remoteInput != null && smartReplies.pendingIntent != null) {
if (smartReplies.choices != null) {
for (int i = 0; i < smartReplies.choices.length; ++i) {
- Button replyButton = inflateReplyButton(
- getContext(), this, i, smartReplies, smartReplyController, entry);
- addView(replyButton);
+ buttons.add(inflateReplyButton(
+ this, getContext(), i, smartReplies, smartReplyController, entry));
}
this.mSmartRepliesGeneratedByAssistant = smartReplies.fromAssistant;
}
}
- reallocateCandidateButtonQueueForSqueezing();
+ return buttons;
}
/**
* Add smart actions to be shown next to smart replies. Only the actions that fit into the
* notification are shown.
*/
- public void addSmartActions(SmartActions smartActions,
+ public List<Button> inflateSmartActions(@NonNull SmartActions smartActions,
SmartReplyController smartReplyController, NotificationEntry entry,
HeadsUpManager headsUpManager) {
+ List<Button> buttons = new ArrayList<>();
int numSmartActions = smartActions.actions.size();
for (int n = 0; n < numSmartActions; n++) {
Notification.Action action = smartActions.actions.get(n);
if (action.actionIntent != null) {
- Button actionButton = inflateActionButton(
- getContext(), this, n, smartActions, smartReplyController, entry,
- headsUpManager);
- addView(actionButton);
+ buttons.add(inflateActionButton(
+ this, getContext(), n, smartActions, smartReplyController, entry,
+ headsUpManager));
}
}
- reallocateCandidateButtonQueueForSqueezing();
+ return buttons;
}
- public static SmartReplyView inflate(Context context, ViewGroup root) {
- return (SmartReplyView)
- LayoutInflater.from(context).inflate(R.layout.smart_reply_view, root, false);
+ /**
+ * Inflate an instance of this class.
+ */
+ public static SmartReplyView inflate(Context context) {
+ return (SmartReplyView) LayoutInflater.from(context).inflate(
+ R.layout.smart_reply_view, null /* root */);
}
@VisibleForTesting
- Button inflateReplyButton(Context context, ViewGroup root, int replyIndex,
- SmartReplies smartReplies, SmartReplyController smartReplyController,
+ static Button inflateReplyButton(SmartReplyView smartReplyView, Context context,
+ int replyIndex, SmartReplies smartReplies, SmartReplyController smartReplyController,
NotificationEntry entry) {
Button b = (Button) LayoutInflater.from(context).inflate(
- R.layout.smart_reply_button, root, false);
+ R.layout.smart_reply_button, smartReplyView, false);
CharSequence choice = smartReplies.choices[replyIndex];
b.setText(choice);
OnDismissAction action = () -> {
- if (mConstants.getEffectiveEditChoicesBeforeSending(
+ if (smartReplyView.mConstants.getEffectiveEditChoicesBeforeSending(
smartReplies.remoteInput.getEditChoicesBeforeSending())) {
EditedSuggestionInfo editedSuggestionInfo =
new EditedSuggestionInfo(choice, replyIndex);
- mRemoteInputManager.activateRemoteInput(b,
+ smartReplyView.mRemoteInputManager.activateRemoteInput(b,
new RemoteInput[] { smartReplies.remoteInput }, smartReplies.remoteInput,
smartReplies.pendingIntent, editedSuggestionInfo);
return false;
@@ -276,33 +291,41 @@
} catch (PendingIntent.CanceledException e) {
Log.w(TAG, "Unable to send smart reply", e);
}
- mSmartReplyContainer.setVisibility(View.GONE);
+ // Note that as inflateReplyButton is called mSmartReplyContainer is null, but when the
+ // reply Button is added to the SmartReplyView mSmartReplyContainer will be set. So, it
+ // will not be possible for a user to trigger this on-click-listener without
+ // mSmartReplyContainer being set.
+ smartReplyView.mSmartReplyContainer.setVisibility(View.GONE);
return false; // do not defer
};
b.setOnClickListener(view -> {
- mKeyguardDismissUtil.executeWhenUnlocked(action);
+ smartReplyView.mKeyguardDismissUtil.executeWhenUnlocked(action);
});
b.setAccessibilityDelegate(new AccessibilityDelegate() {
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
- String label = getResources().getString(R.string.accessibility_send_smart_reply);
+ String label = smartReplyView.getResources().getString(
+ R.string.accessibility_send_smart_reply);
info.addAction(new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK, label));
}
});
- setColors(b, mCurrentBackgroundColor, mDefaultStrokeColor, mDefaultTextColor, mRippleColor);
+ SmartReplyView.setButtonColors(b, smartReplyView.mCurrentBackgroundColor,
+ smartReplyView.mDefaultStrokeColor, smartReplyView.mDefaultTextColor,
+ smartReplyView.mRippleColor, smartReplyView.mStrokeWidth);
return b;
}
@VisibleForTesting
- Button inflateActionButton(Context context, ViewGroup root, int actionIndex,
- SmartActions smartActions, SmartReplyController smartReplyController,
- NotificationEntry entry, HeadsUpManager headsUpManager) {
+ static Button inflateActionButton(SmartReplyView smartReplyView, Context context,
+ int actionIndex, SmartActions smartActions,
+ SmartReplyController smartReplyController, NotificationEntry entry,
+ HeadsUpManager headsUpManager) {
Notification.Action action = smartActions.actions.get(actionIndex);
Button button = (Button) LayoutInflater.from(context).inflate(
- R.layout.smart_action_button, root, false);
+ R.layout.smart_action_button, smartReplyView, false);
button.setText(action.title);
Drawable iconDrawable = action.getIcon().loadDrawable(context);
@@ -313,7 +336,7 @@
button.setCompoundDrawables(iconDrawable, null, null, null);
button.setOnClickListener(view ->
- getActivityStarter().startPendingIntentDismissingKeyguard(
+ smartReplyView.getActivityStarter().startPendingIntentDismissingKeyguard(
action.actionIntent,
() -> {
smartReplyController.smartActionClicked(
@@ -803,12 +826,13 @@
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final Button child = (Button) getChildAt(i);
- setColors(child, backgroundColor, strokeColor, textColor, rippleColor);
+ setButtonColors(child, backgroundColor, strokeColor, textColor, rippleColor,
+ mStrokeWidth);
}
}
- private void setColors(Button button, int backgroundColor, int strokeColor, int textColor,
- int rippleColor) {
+ private static void setButtonColors(Button button, int backgroundColor, int strokeColor,
+ int textColor, int rippleColor, int strokeWidth) {
Drawable drawable = button.getBackground();
if (drawable instanceof RippleDrawable) {
// Mutate in case other notifications are using this drawable.
@@ -821,7 +845,7 @@
if (background instanceof GradientDrawable) {
GradientDrawable gradientDrawable = (GradientDrawable) background;
gradientDrawable.setColor(backgroundColor);
- gradientDrawable.setStroke(mStrokeWidth, strokeColor);
+ gradientDrawable.setStroke(strokeWidth, strokeColor);
}
}
button.setBackground(drawable);
diff --git a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
index faebf60..c6636b4 100644
--- a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
+++ b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
@@ -27,6 +27,7 @@
import com.android.systemui.qs.QSFooterImpl;
import com.android.systemui.qs.QuickStatusBarHeader;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.phone.NotificationPanelView;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -118,6 +119,11 @@
* Creates the NotificationStackScrollLayout.
*/
NotificationStackScrollLayout createNotificationStackScrollLayout();
+
+ /**
+ * Creates the NotificationPanelView.
+ */
+ NotificationPanelView createPanelView();
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
index 7f83ed6..b97f55c 100644
--- a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
+++ b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
@@ -16,20 +16,20 @@
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import android.content.pm.PackageManager;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SmallTest;
-import android.support.test.internal.runner.ClassPathScanner;
-import android.support.test.internal.runner.ClassPathScanner.ChainedClassNameFilter;
-import android.support.test.internal.runner.ClassPathScanner.ExternalClassNameFilter;
import android.testing.AndroidTestingRunner;
import android.text.TextUtils;
import android.util.Log;
+import androidx.test.filters.LargeTest;
+import androidx.test.filters.MediumTest;
+import androidx.test.filters.SmallTest;
+import androidx.test.internal.runner.ClassPathScanner;
+import androidx.test.internal.runner.ClassPathScanner.ChainedClassNameFilter;
+import androidx.test.internal.runner.ClassPathScanner.ExternalClassNameFilter;
+
import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java
new file mode 100644
index 0000000..8e061cc
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.keyguard;
+
+
+import static android.telephony.SubscriptionManager.DATA_ROAMING_DISABLE;
+import static android.telephony.SubscriptionManager.DATA_ROAMING_ENABLE;
+import static android.telephony.SubscriptionManager.NAME_SOURCE_DEFAULT_SOURCE;
+
+import static junit.framework.Assert.assertTrue;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import com.android.internal.telephony.IccCardConstants;
+import com.android.systemui.Dependency;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.keyguard.WakefulnessLifecycle;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class CarrierTextControllerTest extends SysuiTestCase {
+
+ private static final CharSequence SEPARATOR = " \u2014 ";
+ private static final String TEST_CARRIER = "TEST_CARRIER";
+ private static final SubscriptionInfo TEST_SUBSCRIPTION = new SubscriptionInfo(0, "", 0,
+ TEST_CARRIER, TEST_CARRIER, NAME_SOURCE_DEFAULT_SOURCE, 0xFFFFFF, "",
+ DATA_ROAMING_DISABLE, null, null, null, null, false, null, "");
+ private static final SubscriptionInfo TEST_SUBSCRIPTION_ROAMING = new SubscriptionInfo(0, "", 0,
+ TEST_CARRIER, TEST_CARRIER, NAME_SOURCE_DEFAULT_SOURCE, 0xFFFFFF, "",
+ DATA_ROAMING_ENABLE, null, null, null, null, false, null, "");
+ @Mock
+ private WifiManager mWifiManager;
+ @Mock
+ private CarrierTextController.CarrierTextCallback mCarrierTextCallback;
+ @Mock
+ private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @Mock
+ private ConnectivityManager mConnectivityManager;
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ private CarrierTextController.CarrierTextCallbackInfo mCarrierTextCallbackInfo;
+
+ private CarrierTextController mCarrierTextController;
+ private TestableLooper mTestableLooper;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mTestableLooper = TestableLooper.get(this);
+
+ mContext.addMockSystemService(WifiManager.class, mWifiManager);
+ mContext.addMockSystemService(ConnectivityManager.class, mConnectivityManager);
+ mContext.addMockSystemService(TelephonyManager.class, mTelephonyManager);
+ mDependency.injectMockDependency(WakefulnessLifecycle.class);
+ mDependency.injectTestDependency(Dependency.MAIN_HANDLER,
+ new Handler(mTestableLooper.getLooper()));
+
+ mCarrierTextCallbackInfo = new CarrierTextController.CarrierTextCallbackInfo("",
+ new CharSequence[]{}, false, new int[]{});
+ when(mTelephonyManager.getPhoneCount()).thenReturn(2);
+ mCarrierTextController = new TestCarrierTextController(mContext, SEPARATOR, true, true,
+ mKeyguardUpdateMonitor);
+ // This should not start listening on any of the real dependencies
+ mCarrierTextController.setListening(mCarrierTextCallback);
+ }
+
+ @Test
+ public void testWrongSlots() {
+ reset(mCarrierTextCallback);
+ when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(
+ new ArrayList<>());
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ IccCardConstants.State.CARD_IO_ERROR);
+ // This should not produce an out of bounds error, even though there are no subscriptions
+ mCarrierTextController.mCallback.onSimStateChanged(0, -3,
+ IccCardConstants.State.CARD_IO_ERROR);
+ mCarrierTextController.mCallback.onSimStateChanged(0, 3, IccCardConstants.State.READY);
+ verify(mCarrierTextCallback, never()).updateCarrierInfo(any());
+ }
+
+ @Test
+ public void testMoreSlotsThanSubs() {
+ reset(mCarrierTextCallback);
+ when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(
+ new ArrayList<>());
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ IccCardConstants.State.CARD_IO_ERROR);
+ // This should not produce an out of bounds error, even though there are no subscriptions
+ mCarrierTextController.mCallback.onSimStateChanged(0, 1,
+ IccCardConstants.State.CARD_IO_ERROR);
+
+ mTestableLooper.processAllMessages();
+ verify(mCarrierTextCallback).updateCarrierInfo(
+ any(CarrierTextController.CarrierTextCallbackInfo.class));
+ }
+
+ @Test
+ public void testCallback() {
+ reset(mCarrierTextCallback);
+ mCarrierTextController.postToCallback(mCarrierTextCallbackInfo);
+ mTestableLooper.processAllMessages();
+
+ ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextController.CarrierTextCallbackInfo.class);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ assertEquals(mCarrierTextCallbackInfo, captor.getValue());
+ }
+
+ @Test
+ public void testNullingCallback() {
+ reset(mCarrierTextCallback);
+
+ mCarrierTextController.postToCallback(mCarrierTextCallbackInfo);
+ mCarrierTextController.setListening(null);
+
+ // This shouldn't produce NPE
+ mTestableLooper.processAllMessages();
+ verify(mCarrierTextCallback).updateCarrierInfo(any());
+ }
+
+ @Test
+ public void testCreateInfo_OneValidSubscription() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(IccCardConstants.State.READY);
+ when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(list);
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextController.CarrierTextCallbackInfo.class);
+
+ mCarrierTextController.updateCarrierText();
+ mTestableLooper.processAllMessages();
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+
+ CarrierTextController.CarrierTextCallbackInfo info = captor.getValue();
+ assertEquals(1, info.listOfCarriers.length);
+ assertEquals(TEST_CARRIER, info.listOfCarriers[0]);
+ assertEquals(1, info.subscriptionIds.length);
+ }
+
+ @Test
+ public void testCreateInfo_OneValidSubscriptionWithRoaming() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION_ROAMING);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(IccCardConstants.State.READY);
+ when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(list);
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextController.CarrierTextCallbackInfo.class);
+
+ mCarrierTextController.updateCarrierText();
+ mTestableLooper.processAllMessages();
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+
+ CarrierTextController.CarrierTextCallbackInfo info = captor.getValue();
+ assertEquals(1, info.listOfCarriers.length);
+ assertTrue(info.listOfCarriers[0].toString().contains(TEST_CARRIER));
+ assertEquals(1, info.subscriptionIds.length);
+ }
+
+ @Test
+ public void testCreateInfo_noSubscriptions() {
+ reset(mCarrierTextCallback);
+ when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(
+ new ArrayList<>());
+ ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextController.CarrierTextCallbackInfo.class);
+
+ mCarrierTextController.updateCarrierText();
+ mTestableLooper.processAllMessages();
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+
+ CarrierTextController.CarrierTextCallbackInfo info = captor.getValue();
+ assertEquals(0, info.listOfCarriers.length);
+ assertEquals(0, info.subscriptionIds.length);
+
+ }
+
+ public static class TestCarrierTextController extends CarrierTextController {
+ private KeyguardUpdateMonitor mKUM;
+
+ public TestCarrierTextController(Context context, CharSequence separator,
+ boolean showAirplaneMode, boolean showMissingSim, KeyguardUpdateMonitor kum) {
+ super(context, separator, showAirplaneMode, showMissingSim);
+ mKUM = kum;
+ }
+
+ @Override
+ public void setListening(CarrierTextCallback callback) {
+ super.setListening(callback);
+ mKeyguardUpdateMonitor = mKUM;
+ }
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java
index e37ea95..dcafa72 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java
@@ -20,12 +20,13 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import android.support.test.filters.SmallTest;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.TextView;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewTest.kt
index ab3a3e1..e7469c3 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewTest.kt
@@ -16,7 +16,7 @@
package com.android.keyguard
-import android.support.test.filters.SmallTest
+import androidx.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.LayoutInflater
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java
index 58870e4..eadb1b6 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java
@@ -21,12 +21,13 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.KeyEvent;
import android.view.LayoutInflater;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index fcf327b..8db195a 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -16,19 +16,18 @@
package com.android.keyguard;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
import android.content.Context;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.test.UiThreadTest;
-import android.util.Log;
import android.view.LayoutInflater;
-import android.view.View;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
@SmallTest
@RunWith(AndroidJUnit4.class)
public class KeyguardSecurityContainerTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index d5a275e..ffe3ece 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -106,6 +106,7 @@
when(mFaceManager.hasEnrolledTemplates()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
when(mUserManager.isUserUnlocked(anyInt())).thenReturn(true);
+ when(mUserManager.isPrimaryUser()).thenReturn(true);
when(mStrongAuthTracker.isUnlockingWithBiometricAllowed()).thenReturn(true);
context.addMockSystemService(TrustManager.class, mTrustManager);
context.addMockSystemService(FingerprintManager.class, mFingerprintManager);
@@ -320,16 +321,6 @@
}
@Test
- public void testNeverAuthenticates_whenFaceLockout() {
- mKeyguardUpdateMonitor.mFaceAuthenticationCallback
- .onAuthenticationError(FaceManager.FACE_ERROR_LOCKOUT, "lockout");
- mKeyguardUpdateMonitor.sendKeyguardBouncerChanged(true);
- mTestableLooper.processAllMessages();
-
- verify(mFaceManager, never()).authenticate(any(), any(), anyInt(), any(), any());
- }
-
- @Test
public void testOnFaceAuthenticated_skipsFaceWhenAuthenticated() {
mKeyguardUpdateMonitor.onFaceAuthenticated(KeyguardUpdateMonitor.getCurrentUser());
mKeyguardUpdateMonitor.sendKeyguardBouncerChanged(true);
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
index 9e946fa..267468f 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/BubbleClockControllerTest.java
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.res.Resources;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -40,8 +41,9 @@
@Before
public void setUp() {
+ Resources res = getContext().getResources();
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
- mClockController = BubbleClockController.build(layoutInflater);
+ mClockController = new BubbleClockController(res, layoutInflater);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
index 58701e7..36265d4 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/ClockManagerTest.java
@@ -31,6 +31,7 @@
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
+import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.InjectionInflationController;
import org.junit.After;
@@ -52,6 +53,7 @@
private ContentObserver mContentObserver;
private DockManagerFake mFakeDockManager;
@Mock InjectionInflationController mMockInjectionInflationController;
+ @Mock PluginManager mMockPluginManager;
@Mock SysuiColorExtractor mMockColorExtractor;
@Mock ContentResolver mMockContentResolver;
@Mock SettingsWrapper mMockSettingsWrapper;
@@ -66,7 +68,8 @@
mFakeDockManager = new DockManagerFake();
mClockManager = new ClockManager(getContext(), mMockInjectionInflationController,
- mFakeDockManager, mMockColorExtractor, mMockContentResolver, mMockSettingsWrapper);
+ mMockPluginManager, mFakeDockManager, mMockColorExtractor, mMockContentResolver,
+ mMockSettingsWrapper);
mClockManager.addOnClockChangedListener(mMockListener);
mContentObserver = mClockManager.getContentObserver();
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
index 8de8f3d..0659b4f 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java
@@ -17,6 +17,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.content.res.Resources;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -40,8 +41,9 @@
@Before
public void setUp() {
+ Resources res = getContext().getResources();
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
- mClockController = StretchAnalogClockController.build(layoutInflater);
+ mClockController = new StretchAnalogClockController(res, layoutInflater);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java
index e1f56a47..d1573c3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java
@@ -16,8 +16,6 @@
package com.android.systemui;
-import com.android.settingslib.graph.BatteryMeterDrawableBase;
-
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyFloat;
import static org.mockito.Mockito.anyString;
@@ -30,9 +28,12 @@
import android.content.res.Resources;
import android.graphics.Canvas;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.settingslib.graph.BatteryMeterDrawableBase;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
index 61bfa75..b1ca169 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
@@ -21,7 +21,8 @@
import static org.mockito.Mockito.verify;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.systemui.Dependency.DependencyKey;
import com.android.systemui.statusbar.policy.FlashlightController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
index 948e001..e07d17f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java
@@ -22,12 +22,13 @@
import android.animation.ObjectAnimator;
import android.content.Context;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.util.Assert;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
index 31e8071..8a6ee12 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
@@ -31,10 +31,11 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.widget.RemoteViews;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.messages.nano.SystemMessageProto;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
index e4d56d7..48a5369 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
@@ -16,9 +16,10 @@
package com.android.systemui;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java
index 4d33d43..e0ca87c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java
@@ -19,10 +19,11 @@
import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index 0114075..64ab060 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -39,7 +39,6 @@
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Handler;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -47,6 +46,8 @@
import android.view.View;
import android.view.WindowManager;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R.dimen;
import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;
import com.android.systemui.fragments.FragmentHostManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
index 383db05..c6e85c3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java
@@ -29,9 +29,10 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.settingslib.SliceBroadcastRelay;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java
index b6335f3..256cfb2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java
@@ -19,10 +19,11 @@
import android.app.Fragment;
import android.app.Instrumentation;
-import android.support.test.InstrumentationRegistry;
import android.testing.BaseFragmentTest;
import android.testing.DexmakerShareClassLoaderRule;
+import androidx.test.InstrumentationRegistry;
+
import com.android.systemui.utils.leaks.LeakCheckedTest;
import com.android.systemui.utils.leaks.LeakCheckedTest.SysuiLeakCheck;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
index 9c5a592..8d93f96 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
@@ -23,11 +23,12 @@
import android.os.Looper;
import android.os.MessageQueue;
import android.os.ParcelFileDescriptor;
-import android.support.test.InstrumentationRegistry;
import android.testing.DexmakerShareClassLoaderRule;
import android.testing.LeakCheck;
import android.util.Log;
+import androidx.test.InstrumentationRegistry;
+
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.util.Assert;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/appops/AppOpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/appops/AppOpsControllerTest.java
index 2582946..73ee0bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/appops/AppOpsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/appops/AppOpsControllerTest.java
@@ -28,10 +28,11 @@
import android.app.AppOpsManager;
import android.os.UserHandle;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
index ca72602..0fd7834 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
@@ -25,12 +25,13 @@
import android.app.IActivityManager;
import android.content.Context;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.WindowManager;
import android.widget.FrameLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/ExpandedAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/ExpandedAnimationControllerTest.java
index b4059c5..b8add89 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/ExpandedAnimationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/ExpandedAnimationControllerTest.java
@@ -21,12 +21,12 @@
import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.PointF;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.view.View;
import android.widget.FrameLayout;
import androidx.dynamicanimation.animation.DynamicAnimation;
+import androidx.test.filters.SmallTest;
import com.android.systemui.R;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/PhysicsAnimationLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/PhysicsAnimationLayoutTest.java
index c3214040..a50919b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/PhysicsAnimationLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/PhysicsAnimationLayoutTest.java
@@ -28,13 +28,13 @@
import static org.mockito.Mockito.never;
import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.view.View;
import android.widget.FrameLayout;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.SpringForce;
+import androidx.test.filters.SmallTest;
import com.google.android.collect.Sets;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
index 97935ed..943d927 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/animation/StackAnimationControllerTest.java
@@ -19,13 +19,13 @@
import static org.junit.Assert.assertEquals;
import android.graphics.PointF;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.view.View;
import android.widget.FrameLayout;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.SpringForce;
+import androidx.test.filters.SmallTest;
import com.android.systemui.R;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/chooser/ChooserHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/chooser/ChooserHelperTest.java
index 19ad7ca..ecfb9ee 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/chooser/ChooserHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/chooser/ChooserHelperTest.java
@@ -29,9 +29,10 @@
import android.app.ActivityTaskManager;
import android.content.Intent;
import android.os.Binder;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
index 13dc36d..1649f98 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
@@ -22,8 +22,9 @@
import android.app.WallpaperColors;
import android.app.WallpaperManager;
import android.graphics.Color;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java
index 0bbdeb5..ec9acdf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java
@@ -19,10 +19,11 @@
import static com.google.common.truth.Truth.assertThat;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.text.format.DateUtils;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java
index 6807c22..20756c5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java
@@ -21,8 +21,9 @@
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.UserHandle;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java
index 23ff3d4..4ba2858 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java
@@ -30,12 +30,13 @@
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Handler;
import android.os.Looper;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
index f972508..6dfb19e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
@@ -39,10 +39,11 @@
import static org.mockito.Mockito.when;
import android.hardware.display.AmbientDisplayConfiguration;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.UiThreadTest;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.wakelock.WakeLockFake;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
index 1cf73b0..cde3398 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -28,17 +28,16 @@
import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import android.content.Intent;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.utils.hardware.FakeSensorManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java
index a17a95f..903e4a1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java
@@ -22,9 +22,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.view.Display;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.DozeParameters;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
index b6039b6..bfd448a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
@@ -30,19 +30,16 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.Display;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.DozeParameters;
-import com.android.systemui.util.wakelock.WakeLock;
import com.android.systemui.util.wakelock.WakeLockFake;
import com.android.systemui.utils.os.FakeHandler;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java
index 463a6e6..4467faf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java
@@ -32,11 +32,12 @@
import android.app.AlarmManager;
import android.hardware.display.AmbientDisplayConfiguration;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.statusbar.phone.DozeParameters;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java
index ed93561..fac58a0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java
@@ -22,9 +22,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.view.Display;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.DozeParameters;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
index ca37347..8941182 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
@@ -30,11 +30,12 @@
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Handler;
import android.os.Looper;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
index 0d8d952..25231bc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
@@ -27,19 +27,17 @@
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.AlarmManager;
import android.os.Handler;
import android.os.HandlerThread;
-import android.os.PowerManager;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
@@ -47,7 +45,6 @@
import com.android.systemui.util.wakelock.WakeLockFake;
import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -172,4 +169,4 @@
mDozeUi.transitionTo(UNINITIALIZED, DOZE);
verify(mHost).setAnimateWakeup(eq(false));
}
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java
index 9eb94f4..beba905 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java
@@ -24,7 +24,8 @@
import android.app.IWallpaperManager;
import android.os.RemoteException;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java
index 308670d..d35fc30 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java
@@ -19,12 +19,11 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.UiOffloadThread;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
index e1717be..63d42a7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
@@ -30,7 +30,6 @@
import android.media.MediaMetadata;
import android.net.Uri;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -41,6 +40,7 @@
import androidx.slice.SliceSpecs;
import androidx.slice.builders.ListBuilder;
import androidx.slice.core.SliceQuery;
+import androidx.test.filters.SmallTest;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java
index e0807d6..50914c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java
@@ -19,9 +19,10 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java
index 8c918f6..06e597e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java
@@ -21,9 +21,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java
index 9eba9b8..1dc4150 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java
@@ -22,9 +22,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
index 199c4c2..d26ae6a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java
@@ -16,13 +16,13 @@
package com.android.systemui.keyguard;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.argThat;
import android.app.Activity;
import android.app.ActivityManager;
@@ -36,13 +36,14 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.UserHandle;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.shared.system.ActivityManagerWrapper;
-
import com.android.systemui.shared.system.TaskStackChangeListener;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
index 9f3573f..6e726cf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java
@@ -17,13 +17,11 @@
package com.android.systemui.keyguard;
import static android.app.ActivityManager.TaskDescription;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
import android.annotation.ColorInt;
import android.annotation.UserIdInt;
import android.app.KeyguardManager;
@@ -33,6 +31,9 @@
import android.graphics.Color;
import android.os.Looper;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.WorkLockActivity;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java
index b7c1e8e..3155e57 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java
@@ -26,13 +26,14 @@
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index cd500b4..5876ae1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -30,9 +30,10 @@
import android.app.Notification;
import android.app.NotificationManager;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.NotificationChannels;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt
index b6e0d90..6302f9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyDialogBuilderTest.kt
@@ -16,8 +16,8 @@
package com.android.systemui.privacy
-import android.support.test.filters.SmallTest
-import android.support.test.runner.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.runner.AndroidJUnit4
import com.android.systemui.SysuiTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
index bb384dd..1783d9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt
@@ -24,7 +24,7 @@
import android.os.Handler
import android.os.UserHandle
import android.os.UserManager
-import android.support.test.filters.SmallTest
+import androidx.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java
index dfc1852..0ae9461 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java
@@ -22,10 +22,11 @@
import static org.junit.Assert.assertTrue;
import android.provider.Settings.Secure;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Prefs;
import com.android.systemui.Prefs.Key;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
index f845f3a..8879e83 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
@@ -23,7 +23,6 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -31,6 +30,8 @@
import android.view.LayoutInflater;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
index 374a73c..a8b169c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
@@ -22,7 +22,6 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.telephony.SubscriptionManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -30,6 +29,8 @@
import android.view.LayoutInflater;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.keyguard.CarrierTextController.CarrierTextCallbackInfo;
import com.android.systemui.R;
import com.android.systemui.R.id;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index 823485f..10d1572 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -23,7 +23,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.LayoutInflaterBuilder;
import android.testing.TestableLooper;
@@ -31,6 +30,8 @@
import android.view.View;
import android.widget.FrameLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.keyguard.CarrierText;
import com.android.systemui.Dependency;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
index 12a122a..c6b31d0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
@@ -23,13 +23,14 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.ViewGroup;
import android.widget.FrameLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index 78700b8..a458928 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -19,9 +19,10 @@
import static junit.framework.TestCase.assertFalse;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
index e2159d2..ea8c64a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
@@ -16,26 +16,25 @@
package com.android.systemui.qs;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.support.test.filters.SmallTest;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper.RunWithLooper;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.qs.QSTile.SlashState;
-import com.android.systemui.qs.tileimpl.SlashImageView;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.qs.QSTile.SlashState;
+import com.android.systemui.qs.tileimpl.SlashImageView;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
@SmallTest
@RunWith(AndroidTestingRunner.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
index 2040e75..fef47bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
@@ -27,12 +27,12 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.qs.QSIconView;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.tileimpl.QSIconViewImpl;
import com.android.systemui.qs.tileimpl.QSTileView;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java
index 4cc0e20..c43c3e6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java
@@ -14,17 +14,20 @@
package com.android.systemui.qs;
-import android.support.test.runner.AndroidJUnit4;
+import static junit.framework.Assert.assertEquals;
+
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
-import com.android.systemui.qs.TouchAnimator.Listener;
-import com.android.systemui.SysuiTestCase;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-import org.junit.Test;
-import org.mockito.Mockito;
-import static junit.framework.Assert.assertEquals;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.qs.TouchAnimator.Listener;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
index 0239ab0..25bac7a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
@@ -18,11 +18,12 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.qs.QSTileHost;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
index c3a3e63..12eed78 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
@@ -31,13 +31,14 @@
import android.content.pm.PackageManager;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.text.TextUtils;
import android.util.ArraySet;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java
index ba451e1..ec8552b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java
@@ -15,17 +15,20 @@
*/
package com.android.systemui.qs.external;
+import static junit.framework.Assert.assertEquals;
+
import android.content.res.ColorStateList;
import android.service.quicksettings.Tile;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import com.android.systemui.R;
-
-import static junit.framework.Assert.assertEquals;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
index e5e8ae3..f35295c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java
@@ -40,9 +40,10 @@
import android.service.quicksettings.IQSTileService;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import org.junit.After;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
index cc743245..683e8f4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java
@@ -15,12 +15,19 @@
*/
package com.android.systemui.qs.external;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
import android.content.ComponentName;
import android.os.Handler;
import android.os.HandlerThread;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -28,10 +35,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TileServiceManagerTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
index c5e4043..8a36cfb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java
@@ -21,14 +21,14 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.service.quicksettings.Tile;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.UiThreadTest;
import android.widget.ImageView;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.qs.QSTile.Icon;
import com.android.systemui.plugins.qs.QSTile.State;
@@ -36,7 +36,6 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentMatcher;
@RunWith(AndroidTestingRunner.class)
@UiThreadTest
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
index 86f6cd3..3df8a8a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
@@ -34,15 +34,14 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static java.lang.Thread.sleep;
-
import android.content.Intent;
import android.metrics.LogMaker;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
@@ -61,6 +60,8 @@
import org.mockito.Captor;
import org.mockito.MockitoAnnotations;
+import static java.lang.Thread.sleep;
+
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@SmallTest
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
index efcbb76..ea8d4b2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
@@ -22,11 +22,11 @@
import static org.mockito.Mockito.when;
import android.service.quicksettings.Tile;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import androidx.lifecycle.LifecycleOwner;
+import androidx.test.filters.SmallTest;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
@@ -46,7 +46,6 @@
import java.util.HashSet;
import java.util.Set;
-
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
@SmallTest
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/SensorPrivacyTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/SensorPrivacyTileTest.java
index 751a616..6386c4c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/SensorPrivacyTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/SensorPrivacyTileTest.java
@@ -22,10 +22,11 @@
import static org.mockito.Mockito.when;
import android.hardware.SensorPrivacyManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.ActivityStarter;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
index 17d7a41..4162bc1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java
@@ -17,7 +17,8 @@
package com.android.systemui.settings;
import android.content.Intent;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
index 3415c72..7d95563 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginInstanceManagerTest.java
@@ -41,10 +41,11 @@
import android.content.pm.ServiceInfo;
import android.os.HandlerThread;
import android.os.UserHandle;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.Plugin;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/VersionInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/VersionInfoTest.java
index 9bad78d..218e7db 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/VersionInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/VersionInfoTest.java
@@ -17,15 +17,15 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import android.support.test.filters.SmallTest;
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.OverlayPlugin;
-import com.android.systemui.shared.plugins.VersionInfo.InvalidVersionException;
import com.android.systemui.plugins.annotations.Requires;
-import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.DetailAdapter;
+import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QS.HeightListener;
+import com.android.systemui.shared.plugins.VersionInfo.InvalidVersionException;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
index 7b1253a..5c1f473 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
@@ -32,16 +32,16 @@
import android.os.Looper;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AmbientPulseManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AmbientPulseManagerTest.java
index f0344e6..0b25a7c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AmbientPulseManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AmbientPulseManagerTest.java
@@ -19,10 +19,11 @@
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index 51d94f0..dd26368 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -25,7 +25,8 @@
import android.content.ComponentName;
import android.graphics.Rect;
import android.os.Bundle;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
index aae6d93..18ffbb5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
@@ -33,12 +33,13 @@
import android.graphics.Color;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Looper;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.View;
import android.view.ViewGroup;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
index 8e926848..42f476b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
@@ -19,10 +19,11 @@
import static org.junit.Assert.assertFalse;
import android.os.Handler;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.InitController;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java
index cffa9c7..2a01356 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java
@@ -27,10 +27,11 @@
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
index d7ca5b4..490b2ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java
@@ -35,10 +35,11 @@
import android.os.Looper;
import android.os.UserManager;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
index c159516..b81e048 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
@@ -16,10 +16,11 @@
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationRemoteInputManager.RemoteInputActiveExtender;
import com.android.systemui.statusbar.NotificationRemoteInputManager.RemoteInputHistoryExtender;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java
index 3c919a1..cef78db 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java
@@ -30,11 +30,12 @@
import android.graphics.drawable.Icon;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.widget.RemoteViews;
+import androidx.test.InstrumentationRegistry;
+
import com.android.systemui.R;
import com.android.systemui.bubbles.BubblesTestActivity;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationUiAdjustmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationUiAdjustmentTest.java
index db1e049..f63389c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationUiAdjustmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationUiAdjustmentTest.java
@@ -22,7 +22,8 @@
import android.app.RemoteInput;
import android.content.Intent;
import android.graphics.drawable.Icon;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.internal.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
index 62700c0..6b2e05b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
@@ -26,13 +26,14 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.InitController;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
index c2611e4..2020d4b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
@@ -18,23 +18,17 @@
import static junit.framework.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.ViewUtils;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.colorextraction.drawable.GradientDrawable;
import com.android.systemui.statusbar.policy.ConfigurationController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
index 31cd280..81e373a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
@@ -29,10 +29,11 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.R;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java
index e529e4c..4c20b61 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java
@@ -1,6 +1,7 @@
package com.android.systemui.statusbar;
import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
@@ -8,19 +9,21 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.StatusBarIconHolder;
import com.android.systemui.statusbar.phone.StatusBarIconList;
import com.android.systemui.statusbar.phone.StatusBarIconList.Slot;
-import java.util.ArrayList;
-import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
+import java.util.List;
+
@SmallTest
@RunWith(AndroidJUnit4.class)
public class StatusBarIconListTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
index 8fee107..9971e0c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
@@ -38,8 +38,9 @@
import android.graphics.Color;
import android.graphics.drawable.Icon;
import android.os.UserHandle;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.util.ContrastColorUtil;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java
index 5d3a86d..b03abec 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java
@@ -27,10 +27,11 @@
import android.app.Notification;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.widget.RemoteViews;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
index 0d4328f..5543744 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
@@ -42,13 +42,13 @@
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.ArraySet;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
+import androidx.test.filters.SmallTest;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Dependency;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
index 387475f..91a7ea8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
@@ -31,12 +31,13 @@
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.service.notification.StatusBarNotification;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationListControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationListControllerTest.java
index 4b5037b..311b81c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationListControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationListControllerTest.java
@@ -31,11 +31,12 @@
import android.app.Notification;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.ArraySet;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.R;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
index 813fc9d..b35dcb6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
@@ -24,9 +24,10 @@
import static org.mockito.Mockito.when;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
index 9f36a1e..79a6ac4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
@@ -35,7 +35,6 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -57,12 +56,13 @@
import android.service.notification.NotificationListenerService.Ranking;
import android.service.notification.SnoozeCriterion;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.ArraySet;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.ForegroundServiceController;
import com.android.systemui.InitController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java
index f1d9003..2b343c2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/ExpansionStateLoggerTest.java
@@ -22,10 +22,11 @@
import static org.mockito.Mockito.verify;
import android.os.RemoteException;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
index d47700b..5e587f8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
@@ -30,10 +30,11 @@
import android.os.Looper;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
index f6fb416..0aa103f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
@@ -38,7 +38,6 @@
import android.app.AppOpsManager;
import android.app.NotificationChannel;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -46,6 +45,8 @@
import android.view.NotificationHeaderView;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.NotificationTestHelper;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
index aa7889a..2336958 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
@@ -16,23 +16,18 @@
package com.android.systemui.statusbar.notification.row;
-import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.LayoutInflater;
import android.view.View;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
index 669b98e1..4fe364a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationBlockingHelperManagerTest.java
@@ -30,12 +30,13 @@
import static org.mockito.Mockito.when;
import android.content.Context;
-import android.support.test.filters.FlakyTest;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
+import androidx.test.filters.FlakyTest;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.NotificationTestHelper;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
index 99dc9f8..025296d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentInflaterTest.java
@@ -36,7 +36,6 @@
import android.os.Handler;
import android.os.Looper;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.ArrayMap;
@@ -44,6 +43,8 @@
import android.view.ViewGroup;
import android.widget.RemoteViews;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.InflationTask;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
index c80396d..5cd0ca7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
@@ -16,8 +16,6 @@
package com.android.systemui.statusbar.notification.row;
-import static com.google.common.truth.Truth.assertThat;
-
import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
@@ -31,62 +29,32 @@
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.app.RemoteInput;
-import android.content.Intent;
import android.graphics.drawable.Icon;
-import android.service.notification.StatusBarNotification;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.util.ArraySet;
-import android.util.Pair;
import android.view.NotificationHeaderView;
import android.view.View;
-import com.android.systemui.R;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.policy.SmartReplyConstants;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.List;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class NotificationContentViewTest extends SysuiTestCase {
- private static final String TEST_ACTION = "com.android.SMART_REPLY_VIEW_ACTION";
-
NotificationContentView mView;
- @Mock
- SmartReplyConstants mSmartReplyConstants;
- @Mock
- StatusBarNotification mStatusBarNotification;
- @Mock
- Notification mNotification;
- NotificationEntry mEntry;
- @Mock
- RemoteInput mRemoteInput;
- @Mock
- RemoteInput mFreeFormRemoteInput;
-
private Icon mActionIcon;
-
@Before
@UiThreadTest
public void setup() {
- MockitoAnnotations.initMocks(this);
-
mView = new NotificationContentView(mContext, null);
ExpandableNotificationRow row = new ExpandableNotificationRow(mContext, null);
ExpandableNotificationRow mockRow = spy(row);
@@ -103,13 +71,6 @@
mView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
mView.layout(0, 0, mView.getMeasuredWidth(), mView.getMeasuredHeight());
-
- // Smart replies and actions
- when(mNotification.getAllowSystemGeneratedContextualActions()).thenReturn(true);
- when(mStatusBarNotification.getNotification()).thenReturn(mNotification);
- mEntry = new NotificationEntry(mStatusBarNotification);
- when(mSmartReplyConstants.isEnabled()).thenReturn(true);
- mActionIcon = Icon.createWithResource(mContext, R.drawable.ic_person);
}
private View createViewWithHeight(int height) {
@@ -158,204 +119,4 @@
verify(mockAmbient, never()).showAppOpsIcons(ops);
verify(mockHeadsUp, times(1)).showAppOpsIcons(any());
}
-
- private void setupAppGeneratedReplies(CharSequence[] smartReplies) {
- setupAppGeneratedReplies(smartReplies, true /* allowSystemGeneratedReplies */);
- }
-
- private void setupAppGeneratedReplies(
- CharSequence[] smartReplies, boolean allowSystemGeneratedReplies) {
- PendingIntent pendingIntent =
- PendingIntent.getBroadcast(mContext, 0, new Intent(TEST_ACTION), 0);
- Notification.Action action =
- new Notification.Action.Builder(null, "Test Action", pendingIntent).build();
- when(mRemoteInput.getChoices()).thenReturn(smartReplies);
- Pair<RemoteInput, Notification.Action> remoteInputActionPair =
- Pair.create(mRemoteInput, action);
- when(mNotification.findRemoteInputActionPair(false)).thenReturn(remoteInputActionPair);
-
- Notification.Action freeFormRemoteInputAction =
- createActionBuilder("Freeform Test Action")
- .setAllowGeneratedReplies(allowSystemGeneratedReplies)
- .build();
- Pair<RemoteInput, Notification.Action> freeFormRemoteInputActionPair =
- Pair.create(mFreeFormRemoteInput, freeFormRemoteInputAction);
- when(mNotification.findRemoteInputActionPair(true)).thenReturn(
- freeFormRemoteInputActionPair);
-
- when(mSmartReplyConstants.requiresTargetingP()).thenReturn(false);
- }
-
- private void setupAppGeneratedSuggestions(
- CharSequence[] smartReplies, List<Notification.Action> smartActions) {
- setupAppGeneratedReplies(smartReplies);
- when(mNotification.getContextualActions()).thenReturn(smartActions);
- }
-
- @Test
- public void chooseSmartRepliesAndActions_smartRepliesOff_noAppGeneratedSmartSuggestions() {
- CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
- List<Notification.Action> smartActions =
- createActions(new String[] {"Test Action 1", "Test Action 2"});
- setupAppGeneratedSuggestions(smartReplies, smartActions);
- when(mSmartReplyConstants.isEnabled()).thenReturn(false);
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies).isNull();
- assertThat(repliesAndActions.smartActions).isNull();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_smartRepliesOff_noSystemGeneratedSmartSuggestions() {
- mEntry.systemGeneratedSmartReplies =
- new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
- mEntry.systemGeneratedSmartActions =
- createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
- when(mSmartReplyConstants.isEnabled()).thenReturn(false);
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies).isNull();
- assertThat(repliesAndActions.smartActions).isNull();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_appGeneratedSmartReplies() {
- CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
- setupAppGeneratedReplies(smartReplies);
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies.choices).isEqualTo(smartReplies);
- assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
- assertThat(repliesAndActions.smartActions).isNull();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_appGeneratedSmartRepliesAndActions() {
- CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
- List<Notification.Action> smartActions =
- createActions(new String[] {"Test Action 1", "Test Action 2"});
- setupAppGeneratedSuggestions(smartReplies, smartActions);
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies.choices).isEqualTo(smartReplies);
- assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
- assertThat(repliesAndActions.smartActions.actions).isEqualTo(smartActions);
- assertThat(repliesAndActions.smartActions.fromAssistant).isFalse();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_sysGeneratedSmartReplies() {
- // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
- // replies.
- setupAppGeneratedReplies(null /* smartReplies */);
-
- mEntry.systemGeneratedSmartReplies =
- new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies.choices).isEqualTo(
- mEntry.systemGeneratedSmartReplies);
- assertThat(repliesAndActions.smartReplies.fromAssistant).isTrue();
- assertThat(repliesAndActions.smartActions).isNull();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_noSysGeneratedSmartRepliesIfNotAllowed() {
- // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
- // replies.
- setupAppGeneratedReplies(null /* smartReplies */, false /* allowSystemGeneratedReplies */);
-
- mEntry.systemGeneratedSmartReplies =
- new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies).isNull();
- assertThat(repliesAndActions.smartActions).isNull();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_sysGeneratedSmartActions() {
- // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
- // actions.
- setupAppGeneratedReplies(null /* smartReplies */);
-
- mEntry.systemGeneratedSmartActions =
- createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies).isNull();
- assertThat(repliesAndActions.smartActions.actions)
- .isEqualTo(mEntry.systemGeneratedSmartActions);
- assertThat(repliesAndActions.smartActions.fromAssistant).isTrue();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_appGenPreferredOverSysGen() {
- CharSequence[] appGenSmartReplies = new String[] {"Reply1", "Reply2"};
- // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
- // replies.
- List<Notification.Action> appGenSmartActions =
- createActions(new String[] {"Test Action 1", "Test Action 2"});
- setupAppGeneratedSuggestions(appGenSmartReplies, appGenSmartActions);
-
- mEntry.systemGeneratedSmartReplies =
- new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
- mEntry.systemGeneratedSmartActions =
- createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartReplies.choices).isEqualTo(appGenSmartReplies);
- assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
- assertThat(repliesAndActions.smartActions.actions).isEqualTo(appGenSmartActions);
- assertThat(repliesAndActions.smartActions.fromAssistant).isFalse();
- }
-
- @Test
- public void chooseSmartRepliesAndActions_disallowSysGenSmartActions() {
- // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
- // actions.
- setupAppGeneratedReplies(null /* smartReplies */, false /* allowSystemGeneratedReplies */);
- when(mNotification.getAllowSystemGeneratedContextualActions()).thenReturn(false);
- mEntry.systemGeneratedSmartReplies =
- new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
- mEntry.systemGeneratedSmartActions =
- createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
-
- NotificationContentView.SmartRepliesAndActions repliesAndActions =
- NotificationContentView.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
-
- assertThat(repliesAndActions.smartActions).isNull();
- assertThat(repliesAndActions.smartReplies).isNull();
- }
-
- private Notification.Action.Builder createActionBuilder(String actionTitle) {
- PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0,
- new Intent(TEST_ACTION), 0);
- return new Notification.Action.Builder(mActionIcon, actionTitle, pendingIntent);
- }
-
- private Notification.Action createAction(String actionTitle) {
- return createActionBuilder(actionTitle).build();
- }
-
- private List<Notification.Action> createActions(String[] actionTitles) {
- List<Notification.Action> actions = new ArrayList<>();
- for (String title : actionTitles) {
- actions.add(createAction(title));
- }
- return actions;
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
index 727e9af..785d5b0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
@@ -49,12 +49,13 @@
import android.os.Handler;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.ArraySet;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java
index 04d7509..e6389c4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationMenuRowTest.java
@@ -27,13 +27,14 @@
import android.app.NotificationChannel;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.ViewUtils;
import android.view.ViewGroup;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.utils.leaks.LeakCheckedTest;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
index fed66af..63e18ce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCustomViewWrapperTest.java
@@ -16,13 +16,14 @@
package com.android.systemui.statusbar.notification.row.wrapper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.View;
import android.widget.RemoteViews;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
index 637b30c..5463159 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapperTest.java
@@ -19,7 +19,6 @@
import static org.mockito.Mockito.mock;
import android.content.Context;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -27,6 +26,8 @@
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
index bbafb4e..eb465676 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
@@ -16,13 +16,14 @@
package com.android.systemui.statusbar.notification.stack;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.NotificationHeaderView;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
index ff30a4d..1b4acd7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
@@ -23,16 +23,16 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index d835082..1f57593 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -38,11 +38,12 @@
import android.metrics.LogMaker;
import android.provider.Settings;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.View;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.systemui.Dependency;
@@ -52,6 +53,7 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.EmptyShadeView;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -141,7 +143,8 @@
// holds a copy of the CUT's instances of these classes, so they still refer to the CUT's
// member variables, not the spy's member variables.
mStackScrollerInternal = new NotificationStackScrollLayout(getContext(), null,
- true /* allowLongPress */, mNotificationRoundnessManager);
+ true /* allowLongPress */, mNotificationRoundnessManager,
+ new AmbientPulseManager(mContext));
mStackScroller = spy(mStackScrollerInternal);
mStackScroller.setShelf(notificationShelf);
mStackScroller.setStatusBar(mBar);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
index db39373..b24c3dd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelperTest.java
@@ -31,12 +31,13 @@
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.os.Handler;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.MotionEvent;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SwipeHelper;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
@@ -211,7 +212,7 @@
@Test
public void testDismissChild_notExpanded() {
- when(mCallback.isExpanded()).thenReturn(false);
+ when(mCallback.shouldDismissQuickly()).thenReturn(false);
doNothing().when(mSwipeHelper).superDismissChild(mView, 0, false);
doNothing().when(mSwipeHelper).handleMenuCoveredOrDismissed();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
index 87699b8..1248cbb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
@@ -24,11 +24,12 @@
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.NightDisplayListener;
import android.os.Handler;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
index 3c5425c..33af96f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
@@ -24,12 +24,13 @@
import static org.mockito.Mockito.when;
import android.app.StatusBarManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.View;
import android.view.ViewPropertyAnimator;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt
index 0d13e97..fee3ccb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt
@@ -14,7 +14,7 @@
package com.android.systemui.statusbar.phone
-import android.support.test.filters.SmallTest
+import androidx.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java
index 532019f..f6f4eb48 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java
@@ -16,11 +16,21 @@
package com.android.systemui.statusbar.phone;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+
import android.content.Context;
import android.os.PowerManager;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.doze.DozeScreenState;
import com.android.systemui.statusbar.phone.DozeParameters.IntInOutMatcher;
@@ -29,18 +39,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.fail;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@SmallTest
@RunWith(AndroidJUnit4.class)
public class DozeParametersTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java
index fe36b6d..20c739f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java
@@ -20,10 +20,11 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.doze.DozeHost;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
index 38d9ae7..44df237 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
@@ -22,13 +22,14 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.View;
import android.widget.TextView;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
index 9ceb325..7797cb3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
@@ -21,11 +21,12 @@
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.statusbar.AlertingNotificationManager;
import com.android.systemui.statusbar.AlertingNotificationManagerTest;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
index 96f1976..3010996 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
@@ -1,6 +1,6 @@
package com.android.systemui.statusbar.phone
-import android.support.test.filters.SmallTest
+import androidx.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.LayoutInflater
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index f7a95c5..e84dd68 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -30,13 +30,14 @@
import android.content.res.ColorStateList;
import android.graphics.Color;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardHostView;
import com.android.keyguard.KeyguardSecurityModel;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
index cd52e87..fcf4c71 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
@@ -18,10 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java
index c587555..eec836f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java
@@ -16,11 +16,12 @@
package com.android.systemui.statusbar.phone;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.LayoutInflater;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarTransitionsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarTransitionsControllerTest.java
index 0031c32..93fdce1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarTransitionsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightBarTransitionsControllerTest.java
@@ -22,10 +22,11 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.LightBarTransitionsController.DarkIntensityApplier;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarButtonTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarButtonTest.java
index 5c80718..81e8abf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarButtonTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarButtonTest.java
@@ -25,13 +25,14 @@
import android.hardware.display.VirtualDisplay;
import android.media.ImageReader;
import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.Log;
import android.view.Display;
import android.view.DisplayInfo;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestableContext;
import com.android.systemui.statusbar.CommandQueue;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarContextTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarContextTest.java
index c792459..6293b06 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarContextTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarContextTest.java
@@ -17,26 +17,28 @@
package com.android.systemui.statusbar.phone;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.doReturn;
import android.graphics.drawable.Drawable;
-import android.support.test.filters.SmallTest;
import android.view.View;
-import com.android.systemui.statusbar.policy.KeyButtonDrawable;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.KeyButtonDrawable;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import android.support.test.runner.AndroidJUnit4;
-
/** atest NavigationBarContextTest */
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java
index babd452..6a0d61d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java
@@ -22,7 +22,6 @@
import android.content.Context;
import android.os.Bundle;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.LeakCheck.Tracker;
import android.testing.TestableLooper.RunWithLooper;
@@ -30,6 +29,8 @@
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiBaseFragmentTest;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarInflaterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarInflaterViewTest.java
index 093749a..cec7feb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarInflaterViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarInflaterViewTest.java
@@ -22,13 +22,14 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.SparseArray;
import android.view.View;
import android.widget.FrameLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.CommandQueue;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarRotationContextTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarRotationContextTest.java
index be26d91..28e91ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarRotationContextTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarRotationContextTest.java
@@ -22,13 +22,14 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.View;
-import com.android.systemui.SysuiTestableContext;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.SysuiTestableContext;
import com.android.systemui.TestableDependency;
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
import com.android.systemui.statusbar.policy.RotationLockController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java
index 40d5415..bb109bd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java
@@ -21,11 +21,12 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.IWindowManager;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.CommandQueue;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
index 4dee438..a04bcc0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
@@ -23,12 +23,13 @@
import static org.mockito.Mockito.when;
import android.content.res.Configuration;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.MotionEvent;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelperTest.java
index cefd4ac..337c35c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupAlertTransferHelperTest.java
@@ -26,10 +26,11 @@
import android.app.Notification;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupManagerTest.java
index ecb3e4d..43685f0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationGroupManagerTest.java
@@ -23,10 +23,11 @@
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -40,7 +41,6 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
-
@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
index 120d0b0..7f7a3e7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
@@ -22,10 +22,11 @@
import static org.junit.Assert.assertTrue;
import android.provider.Settings;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationListener;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
index a97fa1f..db8357a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
@@ -21,15 +21,20 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.AmbientPulseManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.PulseExpansionHandler;
+import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -65,7 +70,12 @@
mDependency.injectMockDependency(NotificationLockscreenUserManager.class);
mDependency.injectMockDependency(ConfigurationController.class);
mDependency.injectMockDependency(ZenModeController.class);
- mNotificationPanelView = new TestableNotificationPanelView();
+ NotificationWakeUpCoordinator coordinator =
+ new NotificationWakeUpCoordinator(
+ new AmbientPulseManager(mContext),
+ new StatusBarStateControllerImpl());
+ PulseExpansionHandler expansionHandler = new PulseExpansionHandler(mContext, coordinator);
+ mNotificationPanelView = new TestableNotificationPanelView(coordinator, expansionHandler);
}
@Test
@@ -92,8 +102,9 @@
}
private class TestableNotificationPanelView extends NotificationPanelView {
- TestableNotificationPanelView() {
- super(NotificationPanelViewTest.this.mContext, null);
+ TestableNotificationPanelView(NotificationWakeUpCoordinator coordinator,
+ PulseExpansionHandler expansionHandler) {
+ super(NotificationPanelViewTest.this.mContext, null, coordinator, expansionHandler);
mNotificationStackScroller = mNotificationStackScrollLayout;
mKeyguardStatusView = NotificationPanelViewTest.this.mKeyguardStatusView;
mKeyguardStatusBar = NotificationPanelViewTest.this.mKeyguardStatusBar;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java
index dbf00a3..7829830 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/QuickStepControllerTest.java
@@ -40,12 +40,13 @@
import android.content.Context;
import android.content.res.Resources;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.MotionEvent;
import android.view.View;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.recents.OverviewProxyService;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index f72d411..f88b64a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -38,12 +38,13 @@
import android.graphics.Color;
import android.os.Handler;
import android.os.Looper;
-import android.support.test.filters.FlakyTest;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
+import androidx.test.filters.FlakyTest;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
import com.android.internal.util.function.TriConsumer;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
index 4f95bc5..a27ed1e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
@@ -22,12 +22,13 @@
import static org.mockito.Mockito.mock;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.ViewGroup;
import android.widget.LinearLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.StatusBarIconView;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 93dedfb..1a27765 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -25,11 +25,12 @@
import static org.mockito.Mockito.when;
import android.content.Context;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.ViewGroup;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
index d2b0f7f..e811e1d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
@@ -26,13 +26,14 @@
import android.metrics.LogMaker;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.support.test.metricshelper.MetricsAsserts;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.ViewGroup;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.FakeMetricsLogger;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
index f28757f..a88a595 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
@@ -23,14 +23,13 @@
import static org.mockito.Mockito.when;
import static org.mockito.internal.verification.VerificationModeFactory.times;
-import android.content.BroadcastReceiver;
-import android.content.Context;
import android.content.Intent;
import android.os.UserManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index a95361f..f8bfc54 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -52,7 +52,6 @@
import android.os.UserHandle;
import android.service.dreams.IDreamManager;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.support.test.metricshelper.MetricsAsserts;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -60,6 +59,8 @@
import android.util.SparseArray;
import android.view.ViewGroup.LayoutParams;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.FakeMetricsLogger;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
index 9996a9e..fea41a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java
@@ -25,12 +25,13 @@
import static org.mockito.Mockito.when;
import android.app.IActivityManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.ViewGroup;
import android.view.WindowManager;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
index 11284d6..ca0e1c6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java
@@ -22,10 +22,11 @@
import static org.mockito.Mockito.when;
import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.view.MotionEvent;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
index 090963b..ca64823 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
@@ -23,10 +23,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
@@ -34,7 +35,6 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@SmallTest
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
index b65b0f7..7f3c34e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
@@ -15,8 +15,8 @@
package com.android.systemui.statusbar.policy;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -25,11 +25,11 @@
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
-import android.util.Log;
+
+import androidx.test.filters.SmallTest;
import com.android.settingslib.bluetooth.BluetoothEventManager;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java
index 93c97ec..fa711f1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackControllerTest.java
@@ -20,7 +20,6 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -28,6 +27,7 @@
import androidx.lifecycle.Lifecycle.Event;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
index ed0f9ab..85f6033 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
@@ -15,29 +15,33 @@
*/
package com.android.systemui.statusbar.policy;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Matchers.eq;
+
import android.os.HandlerThread;
-import android.support.test.runner.AndroidJUnit4;
import android.telephony.SubscriptionInfo;
import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
-import java.util.ArrayList;
-import java.util.List;
+
import org.junit.Before;
-import org.junit.runner.RunWith;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.assertEquals;
-
-import static org.mockito.Matchers.eq;
+import java.util.ArrayList;
+import java.util.List;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
index 1ee7094..016e402 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CastControllerImplTest.java
@@ -1,28 +1,29 @@
package com.android.systemui.statusbar.policy;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.junit.Assert.fail;
import android.media.MediaRouter;
import android.media.projection.MediaProjectionInfo;
import android.media.projection.MediaProjectionManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.CastController.Callback;
import org.junit.Before;
+import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.junit.Test;
import java.util.ConcurrentModificationException;
import java.util.concurrent.CountDownLatch;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
index 2553ac1..1240a48 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
@@ -23,11 +23,12 @@
import static org.mockito.Mockito.when;
import android.content.res.Configuration;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.OverlayPlugin;
import com.android.systemui.plugins.Plugin;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java
new file mode 100644
index 0000000..13651a5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/InflatedSmartRepliesTest.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.app.RemoteInput;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.service.notification.StatusBarNotification;
+import android.util.Pair;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.policy.InflatedSmartReplies.SmartRepliesAndActions;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class InflatedSmartRepliesTest extends SysuiTestCase {
+
+ private static final String TEST_ACTION = "com.android.SMART_REPLY_VIEW_ACTION";
+
+ @Mock
+ SmartReplyConstants mSmartReplyConstants;
+ @Mock
+ StatusBarNotification mStatusBarNotification;
+ @Mock
+ Notification mNotification;
+ NotificationEntry mEntry;
+ @Mock
+ RemoteInput mRemoteInput;
+ @Mock
+ RemoteInput mFreeFormRemoteInput;
+
+ private Icon mActionIcon;
+
+ @Before
+ @UiThreadTest
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ when(mNotification.getAllowSystemGeneratedContextualActions()).thenReturn(true);
+ when(mStatusBarNotification.getNotification()).thenReturn(mNotification);
+ mEntry = new NotificationEntry(mStatusBarNotification);
+ when(mSmartReplyConstants.isEnabled()).thenReturn(true);
+ mActionIcon = Icon.createWithResource(mContext, R.drawable.ic_person);
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_smartRepliesOff_noAppGeneratedSmartSuggestions() {
+ CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
+ List<Notification.Action> smartActions =
+ createActions(new String[] {"Test Action 1", "Test Action 2"});
+ setupAppGeneratedSuggestions(smartReplies, smartActions);
+ when(mSmartReplyConstants.isEnabled()).thenReturn(false);
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies).isNull();
+ assertThat(repliesAndActions.smartActions).isNull();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_smartRepliesOff_noSystemGeneratedSmartSuggestions() {
+ mEntry.systemGeneratedSmartReplies =
+ new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
+ mEntry.systemGeneratedSmartActions =
+ createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
+ when(mSmartReplyConstants.isEnabled()).thenReturn(false);
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies).isNull();
+ assertThat(repliesAndActions.smartActions).isNull();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_appGeneratedSmartReplies() {
+ CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
+ setupAppGeneratedReplies(smartReplies);
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies.choices).isEqualTo(smartReplies);
+ assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
+ assertThat(repliesAndActions.smartActions).isNull();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_appGeneratedSmartRepliesAndActions() {
+ CharSequence[] smartReplies = new String[] {"Reply1", "Reply2"};
+ List<Notification.Action> smartActions =
+ createActions(new String[] {"Test Action 1", "Test Action 2"});
+ setupAppGeneratedSuggestions(smartReplies, smartActions);
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies.choices).isEqualTo(smartReplies);
+ assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
+ assertThat(repliesAndActions.smartActions.actions).isEqualTo(smartActions);
+ assertThat(repliesAndActions.smartActions.fromAssistant).isFalse();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_sysGeneratedSmartReplies() {
+ // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
+ // replies.
+ setupAppGeneratedReplies(null /* smartReplies */);
+
+ mEntry.systemGeneratedSmartReplies =
+ new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies.choices).isEqualTo(
+ mEntry.systemGeneratedSmartReplies);
+ assertThat(repliesAndActions.smartReplies.fromAssistant).isTrue();
+ assertThat(repliesAndActions.smartActions).isNull();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_noSysGeneratedSmartRepliesIfNotAllowed() {
+ // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
+ // replies.
+ setupAppGeneratedReplies(null /* smartReplies */, false /* allowSystemGeneratedReplies */);
+
+ mEntry.systemGeneratedSmartReplies =
+ new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies).isNull();
+ assertThat(repliesAndActions.smartActions).isNull();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_sysGeneratedSmartActions() {
+ // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
+ // actions.
+ setupAppGeneratedReplies(null /* smartReplies */);
+
+ mEntry.systemGeneratedSmartActions =
+ createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies).isNull();
+ assertThat(repliesAndActions.smartActions.actions)
+ .isEqualTo(mEntry.systemGeneratedSmartActions);
+ assertThat(repliesAndActions.smartActions.fromAssistant).isTrue();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_appGenPreferredOverSysGen() {
+ CharSequence[] appGenSmartReplies = new String[] {"Reply1", "Reply2"};
+ // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
+ // replies.
+ List<Notification.Action> appGenSmartActions =
+ createActions(new String[] {"Test Action 1", "Test Action 2"});
+ setupAppGeneratedSuggestions(appGenSmartReplies, appGenSmartActions);
+
+ mEntry.systemGeneratedSmartReplies =
+ new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
+ mEntry.systemGeneratedSmartActions =
+ createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartReplies.choices).isEqualTo(appGenSmartReplies);
+ assertThat(repliesAndActions.smartReplies.fromAssistant).isFalse();
+ assertThat(repliesAndActions.smartActions.actions).isEqualTo(appGenSmartActions);
+ assertThat(repliesAndActions.smartActions.fromAssistant).isFalse();
+ }
+
+ @Test
+ public void chooseSmartRepliesAndActions_disallowSysGenSmartActions() {
+ // Pass a null-array as app-generated smart replies, so that we use NAS-generated smart
+ // actions.
+ setupAppGeneratedReplies(null /* smartReplies */, false /* allowSystemGeneratedReplies */);
+ when(mNotification.getAllowSystemGeneratedContextualActions()).thenReturn(false);
+ mEntry.systemGeneratedSmartReplies =
+ new String[] {"Sys Smart Reply 1", "Sys Smart Reply 2"};
+ mEntry.systemGeneratedSmartActions =
+ createActions(new String[] {"Sys Smart Action 1", "Sys Smart Action 2"});
+
+ SmartRepliesAndActions repliesAndActions =
+ InflatedSmartReplies.chooseSmartRepliesAndActions(mSmartReplyConstants, mEntry);
+
+ assertThat(repliesAndActions.smartActions).isNull();
+ assertThat(repliesAndActions.smartReplies).isNull();
+ }
+
+ private void setupAppGeneratedReplies(CharSequence[] smartReplies) {
+ setupAppGeneratedReplies(smartReplies, true /* allowSystemGeneratedReplies */);
+ }
+
+ private void setupAppGeneratedReplies(
+ CharSequence[] smartReplies, boolean allowSystemGeneratedReplies) {
+ PendingIntent pendingIntent =
+ PendingIntent.getBroadcast(mContext, 0, new Intent(TEST_ACTION), 0);
+ Notification.Action action =
+ new Notification.Action.Builder(null, "Test Action", pendingIntent).build();
+ when(mRemoteInput.getChoices()).thenReturn(smartReplies);
+ Pair<RemoteInput, Notification.Action> remoteInputActionPair =
+ Pair.create(mRemoteInput, action);
+ when(mNotification.findRemoteInputActionPair(false)).thenReturn(remoteInputActionPair);
+
+ Notification.Action freeFormRemoteInputAction =
+ createActionBuilder("Freeform Test Action")
+ .setAllowGeneratedReplies(allowSystemGeneratedReplies)
+ .build();
+ Pair<RemoteInput, Notification.Action> freeFormRemoteInputActionPair =
+ Pair.create(mFreeFormRemoteInput, freeFormRemoteInputAction);
+ when(mNotification.findRemoteInputActionPair(true)).thenReturn(
+ freeFormRemoteInputActionPair);
+
+ when(mSmartReplyConstants.requiresTargetingP()).thenReturn(false);
+ }
+
+ private void setupAppGeneratedSuggestions(
+ CharSequence[] smartReplies, List<Notification.Action> smartActions) {
+ setupAppGeneratedReplies(smartReplies);
+ when(mNotification.getContextualActions()).thenReturn(smartActions);
+ }
+
+ private Notification.Action.Builder createActionBuilder(String actionTitle) {
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0,
+ new Intent(TEST_ACTION), 0);
+ return new Notification.Action.Builder(mActionIcon, actionTitle, pendingIntent);
+ }
+
+ private Notification.Action createAction(String actionTitle) {
+ return createActionBuilder(actionTitle).build();
+ }
+
+ private List<Notification.Action> createActions(String[] actionTitles) {
+ List<Notification.Action> actions = new ArrayList<>();
+ for (String title : actionTitles) {
+ actions.add(createAction(title));
+ }
+ return actions;
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java
index f859235..39bdf20 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java
@@ -21,12 +21,13 @@
import static org.mockito.ArgumentMatchers.argThat;
import android.metrics.LogMaker;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.KeyEvent;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
index a0fb330..3dcb34a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java
@@ -20,11 +20,12 @@
import android.content.Intent;
import android.location.LocationManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java
index eefdeee..93cf3e8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java
@@ -1,7 +1,8 @@
package com.android.systemui.statusbar.policy;
+import static junit.framework.Assert.assertEquals;
+
import android.net.NetworkCapabilities;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
@@ -13,8 +14,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
-import static junit.framework.Assert.assertEquals;
-
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index c24336d..bcbba8b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -15,11 +15,16 @@
*/
package com.android.systemui.statusbar.policy;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.mock;
+
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.os.Looper;
-import android.support.test.runner.AndroidJUnit4;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
@@ -42,11 +47,6 @@
import java.util.ArrayList;
import java.util.List;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.assertFalse;
-import static org.mockito.Mockito.mock;
-
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java
index 8b8e3f1..fea3a08 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java
@@ -24,9 +24,10 @@
import static org.mockito.Mockito.verify;
import android.content.res.Configuration;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.policy.ConfigurationController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
index 568ff55f..8bf1606 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
@@ -26,7 +26,6 @@
import android.os.Handler;
import android.os.Process;
import android.os.UserHandle;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
@@ -35,6 +34,8 @@
import android.widget.EditText;
import android.widget.ImageButton;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
index 3ac42de..854cc2f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java
@@ -23,11 +23,9 @@
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -37,30 +35,28 @@
import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
-import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Handler;
import android.os.Looper;
import android.os.UserManager;
import android.security.IKeyChainService;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback;
-import com.android.systemui.SysuiTestCase;
+import androidx.test.runner.AndroidJUnit4;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.List;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
index bc0f742..cd9069a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyConstantsTest.java
@@ -23,15 +23,17 @@
import android.app.RemoteInput;
import android.os.Handler;
import android.os.Looper;
-import android.provider.Settings;
+import android.provider.DeviceConfig;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableResources;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -47,7 +49,7 @@
@Before
public void setUp() {
- overrideSetting(null); // No config.
+ resetAllDeviceConfigFlags();
TestableResources resources = mContext.getOrCreateTestableResources();
resources.addOverride(R.bool.config_smart_replies_in_notifications_enabled, true);
resources.addOverride(
@@ -58,9 +60,16 @@
resources.addOverride(
R.integer.config_smart_replies_in_notifications_min_num_system_generated_replies,
2);
+ resources.addOverride(
+ R.integer.config_smart_replies_in_notifications_max_num_actions, -1);
mConstants = new SmartReplyConstants(Handler.createAsync(Looper.myLooper()), mContext);
}
+ @After
+ public void tearDown() {
+ resetAllDeviceConfigFlags();
+ }
+
@Test
public void testIsEnabledWithNoConfig() {
assertTrue(mConstants.isEnabled());
@@ -68,25 +77,25 @@
@Test
public void testIsEnabledWithInvalidConfig() {
- overrideSetting("invalid config");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "invalid config");
triggerConstantsOnChange();
assertTrue(mConstants.isEnabled());
}
@Test
public void testIsEnabledWithValidConfig() {
- overrideSetting("enabled=false,max_squeeze_remeasure_attempts=5");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "false");
triggerConstantsOnChange();
assertFalse(mConstants.isEnabled());
}
@Test
public void testRequiresTargetingPConfig() {
- overrideSetting("enabled=true,requires_targeting_p=false");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, "false");
triggerConstantsOnChange();
assertEquals(false, mConstants.requiresTargetingP());
- overrideSetting("enabled=true");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, "");
triggerConstantsOnChange();
assertEquals(true, mConstants.requiresTargetingP());
}
@@ -99,21 +108,21 @@
@Test
public void testGetMaxSqueezeRemeasureAttemptsWithInvalidConfig() {
- overrideSetting("invalid config");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS,
+ "invalid config");
triggerConstantsOnChange();
assertEquals(7, mConstants.getMaxSqueezeRemeasureAttempts());
}
@Test
public void testGetMaxSqueezeRemeasureAttemptsWithValidConfig() {
- overrideSetting("enabled=false,max_squeeze_remeasure_attempts=5");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, "5");
triggerConstantsOnChange();
assertEquals(5, mConstants.getMaxSqueezeRemeasureAttempts());
}
@Test
public void testGetEffectiveEditChoicesBeforeSendingWithNoConfig() {
- overrideSetting("enabled=true");
triggerConstantsOnChange();
assertFalse(
mConstants.getEffectiveEditChoicesBeforeSending(
@@ -128,7 +137,7 @@
@Test
public void testGetEffectiveEditChoicesBeforeSendingWithEnabledConfig() {
- overrideSetting("enabled=true,edit_choices_before_sending=true");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "true");
triggerConstantsOnChange();
assertTrue(
mConstants.getEffectiveEditChoicesBeforeSending(
@@ -143,7 +152,7 @@
@Test
public void testGetEffectiveEditChoicesBeforeSendingWithDisabledConfig() {
- overrideSetting("enabled=true,edit_choices_before_sending=false");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "false");
triggerConstantsOnChange();
assertFalse(
mConstants.getEffectiveEditChoicesBeforeSending(
@@ -164,37 +173,19 @@
@Test
public void testShowInHeadsUpEnabled() {
- overrideSetting("enabled=true,show_in_heads_up=true");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "true");
triggerConstantsOnChange();
assertTrue(mConstants.getShowInHeadsUp());
}
@Test
public void testShowInHeadsUpDisabled() {
- overrideSetting("enabled=true,show_in_heads_up=false");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "false");
triggerConstantsOnChange();
assertFalse(mConstants.getShowInHeadsUp());
}
@Test
- public void testMaxNumActionsWithNoConfig() {
- assertTrue(mConstants.isEnabled());
- assertEquals(-1, mConstants.getMaxNumActions());
- }
-
- @Test
- public void testMaxNumActionsSet() {
- overrideSetting("enabled=true,max_num_actions=10");
- triggerConstantsOnChange();
- assertEquals(10, mConstants.getMaxNumActions());
- }
-
- private void overrideSetting(String flags) {
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS, flags);
- }
-
- @Test
public void testGetMinNumSystemGeneratedRepliesWithNoConfig() {
assertTrue(mConstants.isEnabled());
assertEquals(2, mConstants.getMinNumSystemGeneratedReplies());
@@ -202,15 +193,51 @@
@Test
public void testGetMinNumSystemGeneratedRepliesWithValidConfig() {
- overrideSetting("enabled=true,min_num_system_generated_replies=5");
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, "5");
triggerConstantsOnChange();
assertEquals(5, mConstants.getMinNumSystemGeneratedReplies());
}
+ @Test
+ public void testMaxNumActionsWithNoConfig() {
+ assertTrue(mConstants.isEnabled());
+ assertEquals(-1, mConstants.getMaxNumActions());
+ }
+
+ @Test
+ public void testMaxNumActionsSet() {
+ overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, "10");
+ triggerConstantsOnChange();
+ assertEquals(10, mConstants.getMaxNumActions());
+ }
+
+ private void overrideSetting(String propertyName, String value) {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ propertyName, value, false /* makeDefault */);
+ }
+
private void triggerConstantsOnChange() {
- // Since Settings.Global is mocked in TestableContext, we need to manually trigger the
- // content observer.
- mConstants.onChange(false,
- Settings.Global.getUriFor(Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS));
+ mConstants.onDeviceConfigPropertyChanged(DeviceConfig.NAMESPACE_SYSTEMUI,
+ "" /* name */, "" /* value */);
+ }
+
+ private void resetAllDeviceConfigFlags() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_ENABLED, "", false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, "", false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, "",
+ false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "",
+ false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "", false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, "",
+ false /* makeDefault */);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+ SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, "", false /* makeDefault */);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
index 6793eca..0ce1df3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
@@ -37,7 +37,6 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
@@ -45,6 +44,8 @@
import android.widget.Button;
import android.widget.LinearLayout;
+import androidx.test.filters.SmallTest;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -113,7 +114,7 @@
mDependency.injectTestDependency(SmartReplyConstants.class, mConstants);
mContainer = new View(mContext, null);
- mView = SmartReplyView.inflate(mContext, null);
+ mView = SmartReplyView.inflate(mContext);
// Any number of replies are fine.
when(mConstants.getMinNumSystemGeneratedReplies()).thenReturn(0);
@@ -402,17 +403,18 @@
}
private void setSmartReplies(CharSequence[] choices) {
- setSmartReplies(choices, false /* fromAssistant */);
+ mView.resetSmartSuggestions(mContainer);
+ List<Button> replyButtons = inflateSmartReplies(choices, false /* fromAssistant */);
+ mView.addPreInflatedButtons(replyButtons);
}
- private void setSmartReplies(CharSequence[] choices, boolean fromAssistant) {
+ private List<Button> inflateSmartReplies(CharSequence[] choices, boolean fromAssistant) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0,
new Intent(TEST_ACTION), 0);
RemoteInput input = new RemoteInput.Builder(TEST_RESULT_KEY).setChoices(choices).build();
SmartReplyView.SmartReplies smartReplies =
new SmartReplyView.SmartReplies(choices, input, pendingIntent, fromAssistant);
- mView.resetSmartSuggestions(mContainer);
- mView.addRepliesFromRemoteInput(smartReplies, mLogger, mEntry);
+ return mView.inflateRepliesFromRemoteInput(smartReplies, mLogger, mEntry);
}
private Notification.Action createAction(String actionTitle) {
@@ -431,11 +433,12 @@
private void setSmartActions(String[] actionTitles) {
mView.resetSmartSuggestions(mContainer);
- mView.addSmartActions(
+ List<Button> actions = mView.inflateSmartActions(
new SmartReplyView.SmartActions(createActions(actionTitles), false),
mLogger,
mEntry,
mHeadsUpManager);
+ mView.addPreInflatedButtons(actions);
}
private void setSmartRepliesAndActions(CharSequence[] choices, String[] actionTitles) {
@@ -444,12 +447,14 @@
private void setSmartRepliesAndActions(
CharSequence[] choices, String[] actionTitles, boolean fromAssistant) {
- setSmartReplies(choices, fromAssistant);
- mView.addSmartActions(
+ mView.resetSmartSuggestions(mContainer);
+ List<Button> smartSuggestions = inflateSmartReplies(choices, fromAssistant);
+ smartSuggestions.addAll(mView.inflateSmartActions(
new SmartReplyView.SmartActions(createActions(actionTitles), fromAssistant),
mLogger,
mEntry,
- mHeadsUpManager);
+ mHeadsUpManager));
+ mView.addPreInflatedButtons(smartSuggestions);
}
private ViewGroup buildExpectedView(CharSequence[] choices, int lineCount) {
@@ -485,8 +490,8 @@
SmartReplyView.SmartReplies smartReplies =
new SmartReplyView.SmartReplies(choices, null, null, false);
for (int i = 0; i < choices.length; ++i) {
- Button current = mView.inflateReplyButton(mContext, mView, i, smartReplies,
- null, null);
+ Button current = SmartReplyView.inflateReplyButton(mView, mContext, i, smartReplies,
+ null /* SmartReplyController */, null /* NotificationEntry */);
current.setPadding(paddingHorizontal, current.getPaddingTop(), paddingHorizontal,
current.getPaddingBottom());
if (previous != null) {
@@ -752,7 +757,7 @@
}
private Button inflateActionButton(Notification.Action action) {
- return mView.inflateActionButton(getContext(), mView, 0,
+ return SmartReplyView.inflateActionButton(mView, getContext(), 0,
new SmartReplyView.SmartActions(Collections.singletonList(action), false),
mLogger, mEntry, mHeadsUpManager);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
index 8f5f072..47e4492 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java
@@ -27,10 +27,11 @@
import android.os.Looper;
import android.provider.Settings;
import android.service.notification.ZenModeConfig;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.ZenModeController.Callback;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java b/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java
index 1e27915..683397e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java
@@ -20,14 +20,14 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.withSettings;
-import android.support.test.filters.SmallTest;
import android.testing.LeakCheck.Tracker;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.utils.leaks.LeakCheckedTest;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java
index 77df791..4a9b1b3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java
@@ -25,9 +25,10 @@
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.shared.plugins.PluginManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
index 0d398be..f1c9980 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
@@ -15,22 +15,19 @@
package com.android.systemui.util;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
-import android.net.Uri;
import android.provider.Settings;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.ArraySet;
+
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.NotificationChannels;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/LifecycleFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/LifecycleFragmentTest.java
index d4e38d8..0e1c560 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/LifecycleFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/LifecycleFragmentTest.java
@@ -27,12 +27,12 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import androidx.lifecycle.LifecycleEventObserver;
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiBaseFragmentTest;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/SysuiLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/SysuiLifecycleTest.java
index d63bbe6..ce8085a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/SysuiLifecycleTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/SysuiLifecycleTest.java
@@ -29,7 +29,6 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -38,6 +37,7 @@
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java
index c095472..bcc20c2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java
@@ -24,11 +24,12 @@
import android.content.Context;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java
index 11bb398..c68c920 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java
@@ -17,8 +17,8 @@
package com.android.systemui.util.leak;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.leak.ReferenceTestUtils.CollectionWaiter;
@@ -28,8 +28,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java
index 6711ce8..abec80e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java
@@ -24,8 +24,9 @@
import static org.mockito.Mockito.verify;
import android.app.NotificationManager;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java
index b8a3e39..726187d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java
@@ -18,8 +18,8 @@
import static org.junit.Assert.assertEquals;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java
index ce6212e..2b28e2f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java
@@ -20,8 +20,8 @@
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.leak.ReferenceTestUtils.CollectionWaiter;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
index 0792a05..20dcbb7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java
@@ -22,10 +22,11 @@
import android.animation.Animator;
import android.os.Looper;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.Assert;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java
index f739fe6..d0eaaf5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java
@@ -21,8 +21,8 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
index 4425def..66eb299 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
@@ -20,8 +20,9 @@
import static org.junit.Assert.assertTrue;
import android.os.PowerManager;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java
index 6b20a1e..fb82b8f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java
@@ -16,7 +16,8 @@
package com.android.systemui.volume;
import android.media.MediaMetadata;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
index a4ed459..f4d0854 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
@@ -25,7 +25,9 @@
import android.content.Context;
import android.media.AudioManager;
import android.media.session.MediaSession;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.statusbar.phone.StatusBar;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
index 5f02fad..617c17e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
@@ -16,37 +16,26 @@
package com.android.systemui.volume;
-import static android.media.AudioManager.RINGER_MODE_NORMAL;
-import static android.media.AudioManager.RINGER_MODE_SILENT;
-import static android.media.AudioManager.RINGER_MODE_VIBRATE;
-import static android.media.AudioManager.STREAM_RING;
-
-import static com.android.systemui.volume.Events.DISMISS_REASON_UNKNOWN;
-import static com.android.systemui.volume.Events.SHOW_REASON_UNKNOWN;
import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS;
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.app.KeyguardManager;
import android.media.AudioManager;
import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
-import android.text.TextUtils;
import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
-import android.widget.ImageView;
-import com.android.systemui.R;
+import androidx.test.filters.SmallTest;
+
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.VolumeDialogController.State;
diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto
index 8929e82..365c6b4 100644
--- a/proto/src/metrics_constants/metrics_constants.proto
+++ b/proto/src/metrics_constants/metrics_constants.proto
@@ -5434,7 +5434,7 @@
FIELD_END_BATTERY_PERCENT = 1308;
// ACTION: Settings > Display > Night Light
- // SUBTYPE: com.android.server.display.ColorDisplayService.AutoMode value
+ // SUBTYPE: com.android.server.display.color.ColorDisplayService.AutoMode value
// CATEGORY: SETTINGS
// OS: P
ACTION_NIGHT_DISPLAY_AUTO_MODE_CHANGED = 1309;
diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto
index 670e794..f106ced 100644
--- a/proto/src/wifi.proto
+++ b/proto/src/wifi.proto
@@ -524,6 +524,15 @@
// Link Probe metrics
optional LinkProbeStats link_probe_stats = 139;
+
+ // List of NetworkSelectionExperimentDecisions stats for each experiment
+ repeated NetworkSelectionExperimentDecisions network_selection_experiment_decisions_list = 140;
+
+ // Network Request API surface metrics.
+ optional WifiNetworkRequestApiLog wifi_network_request_api_log = 141;
+
+ // Network Suggestion API surface metrics.
+ optional WifiNetworkSuggestionApiLog wifi_network_suggestion_api_log = 142;
}
// Information that gets logged for every WiFi connection.
@@ -651,6 +660,59 @@
HLF_UNWANTED = 4;
}
+ // Level 2 failure reason.
+ enum Level2FailureReason {
+
+ // Unknown default
+ FAILURE_REASON_UNKNOWN = 0;
+
+ // The reason code if there is no error during authentication. It could
+ // also imply that there no authentication in progress.
+ AUTH_FAILURE_NONE = 1;
+
+ // The reason code if there was a timeout authenticating.
+ AUTH_FAILURE_TIMEOUT = 2;
+
+ // The reason code if there was a wrong password while authenticating.
+ AUTH_FAILURE_WRONG_PSWD = 3;
+
+ // The reason code if there was EAP failure while authenticating.
+ AUTH_FAILURE_EAP_FAILURE = 4;
+ }
+
+ // Entity that recommended connecting to this network.
+ enum ConnectionNominator {
+ // Unknown nominator
+ NOMINATOR_UNKNOWN = 0;
+
+ // User selected network manually
+ NOMINATOR_MANUAL = 1;
+
+ // Saved network
+ NOMINATOR_SAVED = 2;
+
+ // Suggestion API
+ NOMINATOR_SUGGESTION = 3;
+
+ // Passpoint
+ NOMINATOR_PASSPOINT = 4;
+
+ // Carrier suggestion
+ NOMINATOR_CARRIER = 5;
+
+ // External scorer
+ NOMINATOR_EXTERNAL_SCORED = 6;
+
+ // Netrec
+ NOMINATOR_NETREC = 7;
+
+ // User connected choice override
+ NOMINATOR_SAVED_USER_CONNECT_CHOICE = 8;
+
+ // Open Network Available Pop-up
+ NOMINATOR_OPEN_NETWORK_AVAILABLE = 9;
+ }
+
// Start time of the connection.
optional int64 start_time_millis = 1;// [(datapol.semantic_type) = ST_TIMESTAMP];
@@ -680,6 +742,16 @@
// Connection is using locally generated random MAC address.
optional bool use_randomized_mac = 10 [default = false];
+
+ // Who chose to connect.
+ optional ConnectionNominator connection_nominator = 11;
+
+ // The currently running network selector when this connection event occurred.
+ optional int32 network_selector_experiment_id = 12;
+
+ // Breakdown of level_2_failure_code with more detailed reason.
+ optional Level2FailureReason level_2_failure_reason = 13
+ [default = FAILURE_REASON_UNKNOWN];
}
// Number of occurrences of a specific RSSI poll rssi value
@@ -2276,3 +2348,62 @@
// Counts the occurrences of error codes for failed link probes.
repeated LinkProbeFailureReasonCount failure_reason_counts = 8;
}
+
+// Stores the decisions that were made by a experiment when compared against another experiment
+message NetworkSelectionExperimentDecisions {
+ // the id of one experiment
+ optional int32 experiment1_id = 1;
+
+ // the id of the other experiment
+ optional int32 experiment2_id = 2;
+
+ // Counts occurrences of the number of network choices there were when experiment1 makes the
+ // same network selection as experiment2.
+ // The keys are the number of network choices, and the values are the number of occurrences of
+ // this number of network choices when exp1 and exp2 make the same network selection.
+ repeated MapEntryInt32Int32 same_selection_num_choices_counter = 3;
+
+ // Counts occurrences of the number of network choices there were when experiment1 makes the
+ // same network selection as experiment2.
+ // The keys are the number of network choices, and the values are the number of occurrences of
+ // this number of network choices when exp1 and exp2 make different network selections.
+ // Note that it is possible for the network selection to be different even when there only exists
+ // a single network choice, since choosing not to connect to that network is a valid choice.
+ repeated MapEntryInt32Int32 different_selection_num_choices_counter = 4;
+}
+
+// NetworkRequest API metrics.
+message WifiNetworkRequestApiLog {
+ // Number of requests via this API surface.
+ optional int32 num_request = 1;
+
+ // Histogram of requests via this API surface to number of networks matched in scan results.
+ repeated HistogramBucketInt32 network_match_size_histogram = 2;
+
+ // Number of successful network connection from this API.
+ optional int32 num_connect_success = 3;
+
+ // Number of requests via this API surface that bypassed user approval.
+ optional int32 num_user_approval_bypass = 4;
+
+ // Number of requests via this API surface that was rejected by the user.
+ optional int32 num_user_reject = 5;
+
+ // Number of unique apps using this API surface.
+ optional int32 num_apps = 6;
+}
+
+// NetworkSuggestion API metrics.
+message WifiNetworkSuggestionApiLog {
+ // Number of modifications to their suggestions by apps.
+ optional int32 num_modification = 1;
+
+ // Number of successful network connection from app suggestions.
+ optional int32 num_connect_success = 2;
+
+ // Number of network connection failures from app suggestions.
+ optional int32 num_connect_failure = 3;
+
+ // Histogram for size of the network lists provided by various apps on the device.
+ repeated HistogramBucketInt32 network_list_size_histogram = 4;
+}
diff --git a/services/art-profile b/services/art-profile
index 7892fcb..6de96e8 100644
--- a/services/art-profile
+++ b/services/art-profile
@@ -1013,7 +1013,7 @@
HPLcom/android/server/display/AutomaticBrightnessController;->weightIntegral(J)F
HPLcom/android/server/display/BrightnessTracker$Injector;->currentTimeMillis()J
HPLcom/android/server/display/BrightnessTracker$Injector;->elapsedRealtimeNanos()J
-HPLcom/android/server/display/ColorDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
+HPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
HPLcom/android/server/display/ColorFade;->draw(F)Z
HPLcom/android/server/display/ColorFade;->drawFaded(FF)V
HPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds()[I
@@ -3413,7 +3413,7 @@
Lcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;
Lcom/android/server/display/-$$Lambda$VirtualDisplayAdapter$PFyqe-aYIEBicSVtuy5lL_bT8B0;
Lcom/android/server/display/AutomaticBrightnessController$Callbacks;
-Lcom/android/server/display/ColorDisplayService;
+Lcom/android/server/display/color/ColorDisplayService;
Lcom/android/server/display/DisplayAdapter$1;
Lcom/android/server/display/DisplayAdapter$2;
Lcom/android/server/display/DisplayAdapter$Listener;
@@ -3433,7 +3433,7 @@
Lcom/android/server/display/DisplayManagerService;
Lcom/android/server/display/DisplayManagerShellCommand;
Lcom/android/server/display/DisplayPowerController;
-Lcom/android/server/display/DisplayTransformManager;
+Lcom/android/server/display/color/DisplayTransformManager;
Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
Lcom/android/server/display/LocalDisplayAdapter$HotplugDisplayEventReceiver;
Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
@@ -10616,39 +10616,39 @@
PLcom/android/server/display/BrightnessTracker;->writeAmbientBrightnessStats()V
PLcom/android/server/display/BrightnessTracker;->writeEvents()V
PLcom/android/server/display/BrightnessTracker;->writeEventsLocked(Ljava/io/OutputStream;)V
-PLcom/android/server/display/ColorDisplayService$2;-><init>(Lcom/android/server/display/ColorDisplayService;Lcom/android/server/display/DisplayTransformManager;)V
-PLcom/android/server/display/ColorDisplayService$2;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
-PLcom/android/server/display/ColorDisplayService$3;-><init>(Lcom/android/server/display/ColorDisplayService;Lcom/android/server/display/DisplayTransformManager;[F)V
-PLcom/android/server/display/ColorDisplayService$3;->onAnimationEnd(Landroid/animation/Animator;)V
-PLcom/android/server/display/ColorDisplayService$AutoMode;-><init>(Lcom/android/server/display/ColorDisplayService;)V
-PLcom/android/server/display/ColorDisplayService$AutoMode;-><init>(Lcom/android/server/display/ColorDisplayService;Lcom/android/server/display/ColorDisplayService$1;)V
-PLcom/android/server/display/ColorDisplayService$ColorMatrixEvaluator;-><init>()V
-PLcom/android/server/display/ColorDisplayService$ColorMatrixEvaluator;-><init>(Lcom/android/server/display/ColorDisplayService$1;)V
-PLcom/android/server/display/ColorDisplayService$ColorMatrixEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode$1;-><init>(Lcom/android/server/display/ColorDisplayService$CustomAutoMode;Lcom/android/server/display/ColorDisplayService;)V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;-><init>(Lcom/android/server/display/ColorDisplayService;)V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;->onActivated(Z)V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;->onAlarm()V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;->onStart()V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;->updateActivated()V
-PLcom/android/server/display/ColorDisplayService$CustomAutoMode;->updateNextAlarm(Ljava/lang/Boolean;Ljava/time/LocalDateTime;)V
-PLcom/android/server/display/ColorDisplayService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/display/ColorDisplayService;->access$1000(Lcom/android/server/display/ColorDisplayService;)Ljava/lang/Boolean;
-PLcom/android/server/display/ColorDisplayService;->access$602(Lcom/android/server/display/ColorDisplayService;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
-PLcom/android/server/display/ColorDisplayService;->applyTint(Z)V
-PLcom/android/server/display/ColorDisplayService;->getDateTimeAfter(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
-PLcom/android/server/display/ColorDisplayService;->getDateTimeBefore(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
-PLcom/android/server/display/ColorDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
-PLcom/android/server/display/ColorDisplayService;->onActivated(Z)V
-PLcom/android/server/display/ColorDisplayService;->onAutoModeChanged(I)V
-PLcom/android/server/display/ColorDisplayService;->onBootPhase(I)V
-PLcom/android/server/display/ColorDisplayService;->onDisplayColorModeChanged(I)V
-PLcom/android/server/display/ColorDisplayService;->onStart()V
-PLcom/android/server/display/ColorDisplayService;->onStartUser(I)V
-PLcom/android/server/display/ColorDisplayService;->onUserChanged(I)V
-PLcom/android/server/display/ColorDisplayService;->setCoefficientMatrix(Landroid/content/Context;Z)V
-PLcom/android/server/display/ColorDisplayService;->setMatrix(I[F)V
-PLcom/android/server/display/ColorDisplayService;->setUp()V
+PLcom/android/server/display/color/ColorDisplayService$2;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/DisplayTransformManager;)V
+PLcom/android/server/display/color/ColorDisplayService$2;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+PLcom/android/server/display/color/ColorDisplayService$3;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/DisplayTransformManager;[F)V
+PLcom/android/server/display/color/ColorDisplayService$3;->onAnimationEnd(Landroid/animation/Animator;)V
+PLcom/android/server/display/color/ColorDisplayService$AutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
+PLcom/android/server/display/color/ColorDisplayService$AutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/ColorDisplayService$1;)V
+PLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;-><init>()V
+PLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;-><init>(Lcom/android/server/display/color/ColorDisplayService$1;)V
+PLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode$1;-><init>(Lcom/android/server/display/color/ColorDisplayService$CustomAutoMode;Lcom/android/server/display/color/ColorDisplayService;)V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;->onActivated(Z)V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;->onAlarm()V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;->onStart()V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;->updateActivated()V
+PLcom/android/server/display/color/ColorDisplayService$CustomAutoMode;->updateNextAlarm(Ljava/lang/Boolean;Ljava/time/LocalDateTime;)V
+PLcom/android/server/display/color/ColorDisplayService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/display/color/ColorDisplayService;->access$1000(Lcom/android/server/display/color/ColorDisplayService;)Ljava/lang/Boolean;
+PLcom/android/server/display/color/ColorDisplayService;->access$602(Lcom/android/server/display/color/ColorDisplayService;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
+PLcom/android/server/display/color/ColorDisplayService;->applyTint(Z)V
+PLcom/android/server/display/color/ColorDisplayService;->getDateTimeAfter(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
+PLcom/android/server/display/color/ColorDisplayService;->getDateTimeBefore(Ljava/time/LocalTime;Ljava/time/LocalDateTime;)Ljava/time/LocalDateTime;
+PLcom/android/server/display/color/ColorDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
+PLcom/android/server/display/color/ColorDisplayService;->onActivated(Z)V
+PLcom/android/server/display/color/ColorDisplayService;->onAutoModeChanged(I)V
+PLcom/android/server/display/color/ColorDisplayService;->onBootPhase(I)V
+PLcom/android/server/display/color/ColorDisplayService;->onDisplayColorModeChanged(I)V
+PLcom/android/server/display/color/ColorDisplayService;->onStart()V
+PLcom/android/server/display/color/ColorDisplayService;->onStartUser(I)V
+PLcom/android/server/display/color/ColorDisplayService;->onUserChanged(I)V
+PLcom/android/server/display/color/ColorDisplayService;->setCoefficientMatrix(Landroid/content/Context;Z)V
+PLcom/android/server/display/color/ColorDisplayService;->setMatrix(I[F)V
+PLcom/android/server/display/color/ColorDisplayService;->setUp()V
PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;-><init>(Landroid/hardware/display/DisplayManagerInternal;ILandroid/view/SurfaceControl;)V
PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->dispose()V
PLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->onDisplayTransaction()V
@@ -10878,17 +10878,17 @@
PLcom/android/server/display/DisplayPowerState;->setScreenBrightness(I)V
PLcom/android/server/display/DisplayPowerState;->setScreenState(I)V
PLcom/android/server/display/DisplayPowerState;->waitUntilClean(Ljava/lang/Runnable;)Z
-PLcom/android/server/display/DisplayTransformManager;->applyColorMatrix([F)V
-PLcom/android/server/display/DisplayTransformManager;->applySaturation(F)V
-PLcom/android/server/display/DisplayTransformManager;->computeColorMatrixLocked()[F
-PLcom/android/server/display/DisplayTransformManager;->getColorMatrix(I)[F
-PLcom/android/server/display/DisplayTransformManager;->needsLinearColorMatrix()Z
-PLcom/android/server/display/DisplayTransformManager;->needsLinearColorMatrix(I)Z
-PLcom/android/server/display/DisplayTransformManager;->setColorMatrix(I[F)V
-PLcom/android/server/display/DisplayTransformManager;->setColorMode(I[F)Z
-PLcom/android/server/display/DisplayTransformManager;->setDaltonizerMode(I)V
-PLcom/android/server/display/DisplayTransformManager;->setDisplayColor(I)V
-PLcom/android/server/display/DisplayTransformManager;->updateConfiguration()V
+PLcom/android/server/display/color/DisplayTransformManager;->applyColorMatrix([F)V
+PLcom/android/server/display/color/DisplayTransformManager;->applySaturation(F)V
+PLcom/android/server/display/color/DisplayTransformManager;->computeColorMatrixLocked()[F
+PLcom/android/server/display/color/DisplayTransformManager;->getColorMatrix(I)[F
+PLcom/android/server/display/color/DisplayTransformManager;->needsLinearColorMatrix()Z
+PLcom/android/server/display/color/DisplayTransformManager;->needsLinearColorMatrix(I)Z
+PLcom/android/server/display/color/DisplayTransformManager;->setColorMatrix(I[F)V
+PLcom/android/server/display/color/DisplayTransformManager;->setColorMode(I[F)Z
+PLcom/android/server/display/color/DisplayTransformManager;->setDaltonizerMode(I)V
+PLcom/android/server/display/color/DisplayTransformManager;->setDisplayColor(I)V
+PLcom/android/server/display/color/DisplayTransformManager;->updateConfiguration()V
PLcom/android/server/display/HysteresisLevels;-><init>([I[I[I)V
PLcom/android/server/display/HysteresisLevels;->getBrighteningThreshold(F)F
PLcom/android/server/display/HysteresisLevels;->getDarkeningThreshold(F)F
@@ -19436,7 +19436,7 @@
SPLcom/android/server/display/DisplayManagerService;->sendDisplayEventLocked(II)V
SPLcom/android/server/display/DisplayManagerService;->updateDisplayStateLocked(Lcom/android/server/display/DisplayDevice;)Ljava/lang/Runnable;
SPLcom/android/server/display/DisplayManagerService;->updateLogicalDisplaysLocked()Z
-SPLcom/android/server/display/DisplayTransformManager;-><init>()V
+SPLcom/android/server/display/color/DisplayTransformManager;-><init>()V
SPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;-><init>(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)V
SPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)Z
SPLcom/android/server/display/LocalDisplayAdapter$HotplugDisplayEventReceiver;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/Looper;)V
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 2b94d10d6..7fbfc42 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -335,7 +335,7 @@
if (mContexts == null) {
mContexts = new ArrayList<>(1);
}
- mContexts.add(new FillContext(requestId, structure));
+ mContexts.add(new FillContext(requestId, structure, mCurrentViewId));
cancelCurrentRequestLocked();
diff --git a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
index 385bc6c..a18686d 100644
--- a/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
+++ b/services/contentsuggestions/java/com/android/server/contentsuggestions/ContentSuggestionsPerUserService.java
@@ -80,12 +80,7 @@
@Override // from PerUserSystemService
protected boolean updateLocked(boolean disabled) {
final boolean enabledChanged = super.updateLocked(disabled);
- if (enabledChanged) {
- if (!isEnabledLocked()) {
- // Clear the remote service for the next call
- mRemoteService = null;
- }
- }
+ updateRemoteServiceLocked();
return enabledChanged;
}
@@ -133,6 +128,15 @@
}
@GuardedBy("mLock")
+ private void updateRemoteServiceLocked() {
+ if (mRemoteService != null) {
+ mRemoteService.destroy();
+ mRemoteService = null;
+ }
+ }
+
+
+ @GuardedBy("mLock")
@Nullable
private RemoteContentSuggestionsService getRemoteServiceLocked() {
if (mRemoteService == null) {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index c37a805..d2c39ea 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -71,6 +71,8 @@
import android.net.INetworkPolicyListener;
import android.net.INetworkPolicyManager;
import android.net.INetworkStatsService;
+import android.net.InetAddresses;
+import android.net.IpPrefix;
import android.net.LinkProperties;
import android.net.LinkProperties.CompareResult;
import android.net.MatchAllNetworkSpecifier;
@@ -1742,6 +1744,12 @@
}
}
}
+
+ @Override
+ public void onNat64PrefixEvent(int netId, boolean added,
+ String prefixString, int prefixLength) {
+ mHandler.post(() -> handleNat64PrefixEvent(netId, added, prefixString, prefixLength));
+ }
};
@VisibleForTesting
@@ -2783,6 +2791,29 @@
handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties));
}
+ private void handleNat64PrefixEvent(int netId, boolean added, String prefixString,
+ int prefixLength) {
+ NetworkAgentInfo nai = mNetworkForNetId.get(netId);
+ if (nai == null) return;
+
+ log(String.format("NAT64 prefix %s on netId %d: %s/%d",
+ (added ? "added" : "removed"), netId, prefixString, prefixLength));
+
+ IpPrefix prefix = null;
+ if (added) {
+ try {
+ prefix = new IpPrefix(InetAddresses.parseNumericAddress(prefixString),
+ prefixLength);
+ } catch (IllegalArgumentException e) {
+ loge("Invalid NAT64 prefix " + prefixString + "/" + prefixLength);
+ return;
+ }
+ }
+
+ nai.clatd.setNat64Prefix(prefix);
+ handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties));
+ }
+
private void updateLingerState(NetworkAgentInfo nai, long now) {
// 1. Update the linger timer. If it's changed, reschedule or cancel the alarm.
// 2. If the network was lingering and there are now requests, unlinger it.
@@ -2910,7 +2941,7 @@
e.rethrowFromSystemServer();
}
mNetworkAgentInfos.remove(nai.messenger);
- nai.maybeStopClat();
+ nai.clatd.update();
synchronized (mNetworkForNetId) {
// Remove the NetworkAgent, but don't mark the netId as
// available until we've told netd to delete it below.
@@ -4099,12 +4130,14 @@
}
/**
- * Return the information of all ongoing VPNs. This method is used by NetworkStatsService
- * and not available in ConnectivityManager.
+ * Return the information of all ongoing VPNs.
+ *
+ * <p>This method is used to update NetworkStatsService.
+ *
+ * <p>Must be called on the handler thread.
*/
- @Override
- public VpnInfo[] getAllVpnInfo() {
- enforceConnectivityInternalPermission();
+ private VpnInfo[] getAllVpnInfo() {
+ ensureRunningOnConnectivityServiceThread();
synchronized (mVpns) {
if (mLockdownEnabled) {
return new VpnInfo[0];
@@ -5256,11 +5289,10 @@
LinkProperties oldLp) {
int netId = networkAgent.network.netId;
- // The NetworkAgentInfo does not know whether clatd is running on its network or not. Before
- // we do anything else, make sure its LinkProperties are accurate.
- if (networkAgent.clatd != null) {
- networkAgent.clatd.fixupLinkProperties(oldLp, newLp);
- }
+ // The NetworkAgentInfo does not know whether clatd is running on its network or not, or
+ // whether there is a NAT64 prefix. Before we do anything else, make sure its LinkProperties
+ // are accurate.
+ networkAgent.clatd.fixupLinkProperties(oldLp, newLp);
updateInterfaces(newLp, oldLp, netId, networkAgent.networkCapabilities);
updateMtu(newLp, oldLp);
@@ -5290,8 +5322,8 @@
synchronized (networkAgent) {
networkAgent.linkProperties = newLp;
}
- // Start or stop clat accordingly to network state.
- networkAgent.updateClat(mNMS);
+ // Start or stop DNS64 detection and 464xlat according to network state.
+ networkAgent.clatd.update();
notifyIfacesChangedForNetworkStats();
if (networkAgent.everConnected) {
try {
@@ -5599,6 +5631,8 @@
}
public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) {
+ ensureRunningOnConnectivityServiceThread();
+
if (getNetworkAgentInfoForNetId(nai.network.netId) != nai) {
// Ignore updates for disconnected networks
return;
@@ -6439,6 +6473,7 @@
* Must be called on the handler thread.
*/
private Network[] getDefaultNetworks() {
+ ensureRunningOnConnectivityServiceThread();
ArrayList<Network> defaultNetworks = new ArrayList<>();
NetworkAgentInfo defaultNetwork = getDefaultNetwork();
for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
@@ -6454,8 +6489,15 @@
* properties tracked by NetworkStatsService on an active iface has changed.
*/
private void notifyIfacesChangedForNetworkStats() {
+ ensureRunningOnConnectivityServiceThread();
+ String activeIface = null;
+ LinkProperties activeLinkProperties = getActiveLinkProperties();
+ if (activeLinkProperties != null) {
+ activeIface = activeLinkProperties.getInterfaceName();
+ }
try {
- mStatsService.forceUpdateIfaces(getDefaultNetworks());
+ mStatsService.forceUpdateIfaces(
+ getDefaultNetworks(), getAllVpnInfo(), getAllNetworkState(), activeIface);
} catch (Exception ignored) {
}
}
diff --git a/services/core/java/com/android/server/ExtconUEventObserver.java b/services/core/java/com/android/server/ExtconUEventObserver.java
index 775e4c8..6b42b3d 100644
--- a/services/core/java/com/android/server/ExtconUEventObserver.java
+++ b/services/core/java/com/android/server/ExtconUEventObserver.java
@@ -162,15 +162,6 @@
/** Does the {@link /sys/class/extcon} directory exist */
public static boolean extconExists() {
File extconDir = new File("/sys/class/extcon");
- boolean retVal = extconDir.exists() && extconDir.isDirectory();
- // TODO(b/124364409): return the correct value after selinux policy is updated.
- if (retVal) {
- Slog.w(TAG, extconDir + " exists " + extconDir.exists() + " isDir "
- + extconDir.isDirectory()
- + " but reporting it does not exist until selinux policies are updated."
- + " see b/124364409"
- );
- }
- return false;
+ return extconDir.exists() && extconDir.isDirectory();
}
}
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index d8b96e4..18e9906 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -22,6 +22,7 @@
import static android.location.LocationManager.NETWORK_PROVIDER;
import static android.location.LocationManager.PASSIVE_PROVIDER;
import static android.location.LocationProvider.AVAILABLE;
+import static android.os.PowerManager.locationPowerSaveModeToString;
import static android.provider.Settings.Global.LOCATION_DISABLE_STATUS_CALLBACKS;
import static com.android.internal.util.Preconditions.checkNotNull;
@@ -69,6 +70,8 @@
import android.os.IBinder;
import android.os.IInterface;
import android.os.PowerManager;
+import android.os.PowerManager.ServiceType;
+import android.os.PowerManagerInternal;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -254,6 +257,10 @@
@GuardedBy("mLock")
private boolean mGnssBatchingInProgress = false;
+ @GuardedBy("mLock")
+ @PowerManager.LocationPowerSaveMode
+ private int mBatterySaverMode;
+
public LocationManagerService(Context context) {
super();
mContext = context;
@@ -337,7 +344,7 @@
@Override
public void onChange(boolean selfChange) {
synchronized (mLock) {
- onProviderAllowedChangedLocked(true);
+ onProviderAllowedChangedLocked();
}
}
}, UserHandle.USER_ALL);
@@ -376,6 +383,14 @@
}
}
}, UserHandle.USER_ALL);
+ PowerManagerInternal localPowerManager =
+ LocalServices.getService(PowerManagerInternal.class);
+ localPowerManager.registerLowPowerModeObserver(ServiceType.LOCATION,
+ state -> {
+ synchronized (mLock) {
+ onBatterySaverModeChangedLocked(state.locationMode);
+ }
+ });
new PackageMonitor() {
@Override
@@ -390,17 +405,29 @@
intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
+ intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ intentFilter.addAction(Intent.ACTION_SCREEN_ON);
mContext.registerReceiverAsUser(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (action == null) {
+ return;
+ }
synchronized (mLock) {
- String action = intent.getAction();
- if (Intent.ACTION_USER_SWITCHED.equals(action)) {
- onUserChangedLocked(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
- } else if (Intent.ACTION_MANAGED_PROFILE_ADDED.equals(action)
- || Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
- onUserProfilesChangedLocked();
+ switch (action) {
+ case Intent.ACTION_USER_SWITCHED:
+ onUserChangedLocked(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
+ break;
+ case Intent.ACTION_MANAGED_PROFILE_ADDED:
+ case Intent.ACTION_MANAGED_PROFILE_REMOVED:
+ onUserProfilesChangedLocked();
+ break;
+ case Intent.ACTION_SCREEN_ON:
+ case Intent.ACTION_SCREEN_OFF:
+ onScreenStateChangedLocked();
+ break;
}
}
}
@@ -415,6 +442,7 @@
// initialize in-memory settings values
onBackgroundThrottleWhitelistChangedLocked();
onIgnoreSettingsWhitelistChangedLocked();
+ onBatterySaverModeChangedLocked(mPowerManager.getLocationPowerSaveMode());
}
@GuardedBy("mLock")
@@ -435,7 +463,39 @@
}
@GuardedBy("mLock")
+ private void onBatterySaverModeChangedLocked(int newLocationMode) {
+ if (D) {
+ Slog.d(TAG,
+ "Battery Saver location mode changed from "
+ + locationPowerSaveModeToString(mBatterySaverMode) + " to "
+ + locationPowerSaveModeToString(newLocationMode));
+ }
+
+ if (mBatterySaverMode == newLocationMode) {
+ return;
+ }
+
+ mBatterySaverMode = newLocationMode;
+ for (LocationProvider p : mProviders) {
+ applyRequirementsLocked(p);
+ }
+ }
+
+ @GuardedBy("mLock")
+ private void onScreenStateChangedLocked() {
+ if (mBatterySaverMode == PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF) {
+ for (LocationProvider p : mProviders) {
+ applyRequirementsLocked(p);
+ }
+ }
+ }
+
+ @GuardedBy("mLock")
private void onLocationModeChangedLocked(boolean broadcast) {
+ if (D) {
+ Log.d(TAG, "location enabled is now " + isLocationEnabled());
+ }
+
for (LocationProvider p : mProviders) {
p.onLocationModeChangedLocked();
}
@@ -448,16 +508,10 @@
}
@GuardedBy("mLock")
- private void onProviderAllowedChangedLocked(boolean broadcast) {
+ private void onProviderAllowedChangedLocked() {
for (LocationProvider p : mProviders) {
p.onAllowedChangedLocked();
}
-
- if (broadcast) {
- mContext.sendBroadcastAsUser(
- new Intent(LocationManager.PROVIDERS_CHANGED_ACTION),
- UserHandle.ALL);
- }
}
@GuardedBy("mLock")
@@ -827,6 +881,10 @@
return;
}
+ if (D) {
+ Log.d(TAG, "foreground user is changing to " + userId);
+ }
+
// let providers know the current user is on the way out before changing the user
for (LocationProvider p : mProviders) {
p.onUserChangingLocked();
@@ -839,7 +897,12 @@
// if the user changes, per-user settings may also have changed
onLocationModeChangedLocked(false);
- onProviderAllowedChangedLocked(false);
+ onProviderAllowedChangedLocked();
+
+ // always force useability to be rechecked, even if no per-user settings have changed
+ for (LocationProvider p : mProviders) {
+ p.onUseableChangedLocked(false);
+ }
}
private class LocationProvider implements AbstractLocationProvider.LocationProviderManager {
@@ -891,9 +954,13 @@
public void attachLocked(AbstractLocationProvider provider) {
checkNotNull(provider);
checkState(mProvider == null);
- mProvider = provider;
- onUseableChangedLocked();
+ if (D) {
+ Log.d(TAG, mName + " provider attached");
+ }
+
+ mProvider = provider;
+ onUseableChangedLocked(false);
}
public String getName() {
@@ -1054,26 +1121,12 @@
return;
}
- mEnabled = enabled;
-
- // update provider allowed settings to reflect enabled status
- if (mIsManagedBySettings) {
- if (mEnabled && !mAllowed) {
- Settings.Secure.putStringForUser(
- mContext.getContentResolver(),
- Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
- "+" + mName,
- mCurrentUserId);
- } else if (!mEnabled && mAllowed) {
- Settings.Secure.putStringForUser(
- mContext.getContentResolver(),
- Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
- "-" + mName,
- mCurrentUserId);
- }
+ if (D) {
+ Log.d(TAG, mName + " provider enabled is now " + mEnabled);
}
- onUseableChangedLocked();
+ mEnabled = enabled;
+ onUseableChangedLocked(false);
}
});
}
@@ -1091,41 +1144,28 @@
@GuardedBy("mLock")
public void onLocationModeChangedLocked() {
- onUseableChangedLocked();
- }
-
- private boolean isAllowed() {
- return isAllowedForUser(mCurrentUserId);
- }
-
- private boolean isAllowedForUser(int userId) {
- String allowedProviders = Settings.Secure.getStringForUser(
- mContext.getContentResolver(),
- Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
- userId);
- return TextUtils.delimitedStringContains(allowedProviders, ',', mName);
+ onUseableChangedLocked(false);
}
@GuardedBy("mLock")
public void onAllowedChangedLocked() {
if (mIsManagedBySettings) {
- boolean allowed = isAllowed();
+ String allowedProviders = Settings.Secure.getStringForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ mCurrentUserId);
+ boolean allowed = TextUtils.delimitedStringContains(allowedProviders, ',', mName);
+
if (allowed == mAllowed) {
return;
}
- mAllowed = allowed;
- // make a best effort to keep the setting matching the real enabled state of the
- // provider so that legacy applications aren't broken.
- if (mAllowed && !mEnabled) {
- Settings.Secure.putStringForUser(
- mContext.getContentResolver(),
- Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
- "-" + mName,
- mCurrentUserId);
+ if (D) {
+ Log.d(TAG, mName + " provider allowed is now " + mAllowed);
}
- onUseableChangedLocked();
+ mAllowed = allowed;
+ onUseableChangedLocked(true);
}
}
@@ -1140,17 +1180,49 @@
}
@GuardedBy("mLock")
- public void onUseableChangedLocked() {
+ private boolean isUseableIgnoringAllowedLocked() {
+ return mProvider != null && mProviders.contains(this) && isLocationEnabled()
+ && mEnabled;
+ }
+
+ @GuardedBy("mLock")
+ public void onUseableChangedLocked(boolean isAllowedChanged) {
// if any property that contributes to "useability" here changes state, it MUST result
// in a direct or indrect call to onUseableChangedLocked. this allows the provider to
// guarantee that it will always eventually reach the correct state.
- boolean useable = mProvider != null
- && mProviders.contains(this) && isLocationEnabled() && mAllowed && mEnabled;
+ boolean useableIgnoringAllowed = isUseableIgnoringAllowedLocked();
+ boolean useable = useableIgnoringAllowed && mAllowed;
+
+ // update deprecated provider allowed settings for backwards compatibility, and do this
+ // even if there is no change in overall useability state. this may result in trying to
+ // overwrite the same value, but Settings handles deduping this.
+ if (mIsManagedBySettings) {
+ // a "-" change derived from the allowed setting should not be overwritten, but a
+ // "+" change should be corrected if necessary
+ if (useableIgnoringAllowed && !isAllowedChanged) {
+ Settings.Secure.putStringForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ "+" + mName,
+ mCurrentUserId);
+ } else if (!useableIgnoringAllowed) {
+ Settings.Secure.putStringForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ "-" + mName,
+ mCurrentUserId);
+ }
+ }
+
if (useable == mUseable) {
return;
}
mUseable = useable;
+ if (D) {
+ Log.d(TAG, mName + " provider useable is now " + mUseable);
+ }
+
if (!mUseable) {
// If any provider has been disabled, clear all last locations for all
// providers. This is to be on the safe side in case a provider has location
@@ -1160,6 +1232,10 @@
}
updateProviderUseableLocked(this);
+
+ mContext.sendBroadcastAsUser(
+ new Intent(LocationManager.PROVIDERS_CHANGED_ACTION),
+ UserHandle.ALL);
}
@GuardedBy("mLock")
@@ -1174,6 +1250,8 @@
private class MockLocationProvider extends LocationProvider {
+ private ProviderRequest mCurrentRequest;
+
private MockLocationProvider(String name) {
super(name);
}
@@ -1212,6 +1290,13 @@
}
}
+ @Override
+ @GuardedBy("mLock")
+ public void setRequestLocked(ProviderRequest request, WorkSource workSource) {
+ super.setRequestLocked(request, workSource);
+ mCurrentRequest = request;
+ }
+
@GuardedBy("mLock")
public void setStatusLocked(int status, Bundle extras, long updateTime) {
if (mProvider != null) {
@@ -1720,7 +1805,7 @@
mProviders.add(provider);
provider.onAllowedChangedLocked(); // allowed state may change while provider was inactive
- provider.onUseableChangedLocked();
+ provider.onUseableChangedLocked(false);
}
@GuardedBy("mLock")
@@ -1728,7 +1813,7 @@
if (mProviders.remove(provider)) {
long identity = Binder.clearCallingIdentity();
try {
- provider.onUseableChangedLocked();
+ provider.onUseableChangedLocked(false);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -2024,8 +2109,11 @@
}
final boolean isForegroundOnlyMode =
- mPowerManager.getLocationPowerSaveMode()
- == PowerManager.LOCATION_MODE_FOREGROUND_ONLY;
+ mBatterySaverMode == PowerManager.LOCATION_MODE_FOREGROUND_ONLY;
+ final boolean shouldThrottleRequests =
+ mBatterySaverMode
+ == PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF
+ && !mPowerManager.isInteractive();
// initialize the low power mode to true and set to false if any of the records requires
providerRequest.lowPowerMode = true;
for (UpdateRecord record : records) {
@@ -2040,8 +2128,8 @@
record.mReceiver.mAllowedResolutionLevel)) {
continue;
}
- final boolean isBatterySaverDisablingLocation =
- isForegroundOnlyMode && !record.mIsForegroundUid;
+ final boolean isBatterySaverDisablingLocation = shouldThrottleRequests
+ || (isForegroundOnlyMode && !record.mIsForegroundUid);
if (!provider.isUseableLocked() || isBatterySaverDisablingLocation) {
if (isSettingsExemptLocked(record)) {
providerRequest.locationSettingsIgnored = true;
@@ -2113,7 +2201,6 @@
}
}
- if (D) Log.d(TAG, "provider request: " + provider + " " + providerRequest);
provider.setRequestLocked(providerRequest, worksource);
}
@@ -2507,7 +2594,6 @@
@Override
public Location getLastLocation(LocationRequest r, String packageName) {
- if (D) Log.d(TAG, "getLastLocation: " + r);
synchronized (mLock) {
LocationRequest request = r != null ? r : DEFAULT_LOCATION_REQUEST;
int allowedResolutionLevel = getCallerAllowedResolutionLevel();
@@ -2643,33 +2729,33 @@
synchronized (mLock) {
checkResolutionLevelIsSufficientForProviderUseLocked(allowedResolutionLevel,
request.getProvider());
- // Require that caller can manage given document
- boolean callerHasLocationHardwarePermission =
- mContext.checkCallingPermission(android.Manifest.permission.LOCATION_HARDWARE)
- == PERMISSION_GRANTED;
- LocationRequest sanitizedRequest = createSanitizedRequest(request,
+ }
+ // Require that caller can manage given document
+ boolean callerHasLocationHardwarePermission =
+ mContext.checkCallingPermission(android.Manifest.permission.LOCATION_HARDWARE)
+ == PERMISSION_GRANTED;
+ LocationRequest sanitizedRequest = createSanitizedRequest(request,
+ allowedResolutionLevel,
+ callerHasLocationHardwarePermission);
+
+ if (D) {
+ Log.d(TAG, "requestGeofence: " + sanitizedRequest + " " + geofence + " " + intent);
+ }
+
+ // geo-fence manager uses the public location API, need to clear identity
+ int uid = Binder.getCallingUid();
+ if (UserHandle.getUserId(uid) != UserHandle.USER_SYSTEM) {
+ // temporary measure until geofences work for secondary users
+ Log.w(TAG, "proximity alerts are currently available only to the primary user");
+ return;
+ }
+ long identity = Binder.clearCallingIdentity();
+ try {
+ mGeofenceManager.addFence(sanitizedRequest, geofence, intent,
allowedResolutionLevel,
- callerHasLocationHardwarePermission);
-
- if (D) {
- Log.d(TAG, "requestGeofence: " + sanitizedRequest + " " + geofence + " " + intent);
- }
-
- // geo-fence manager uses the public location API, need to clear identity
- int uid = Binder.getCallingUid();
- if (UserHandle.getUserId(uid) != UserHandle.USER_SYSTEM) {
- // temporary measure until geofences work for secondary users
- Log.w(TAG, "proximity alerts are currently available only to the primary user");
- return;
- }
- long identity = Binder.clearCallingIdentity();
- try {
- mGeofenceManager.addFence(sanitizedRequest, geofence, intent,
- allowedResolutionLevel,
- uid, packageName);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
+ uid, packageName);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
}
@@ -3397,6 +3483,32 @@
}
@Override
+ @NonNull
+ public List<LocationRequest> getTestProviderCurrentRequests(String providerName,
+ String opPackageName) {
+ if (!canCallerAccessMockLocation(opPackageName)) {
+ return Collections.emptyList();
+ }
+
+ synchronized (mLock) {
+ LocationProvider testProvider = getLocationProviderLocked(providerName);
+ if (testProvider == null || !testProvider.isMock()) {
+ throw new IllegalArgumentException("Provider \"" + providerName + "\" unknown");
+ }
+
+ MockLocationProvider provider = (MockLocationProvider) testProvider;
+ if (provider.mCurrentRequest == null) {
+ return Collections.emptyList();
+ }
+ List<LocationRequest> requests = new ArrayList<>();
+ for (LocationRequest request : provider.mCurrentRequest.locationRequests) {
+ requests.add(new LocationRequest(request));
+ }
+ return requests;
+ }
+ }
+
+ @Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
@@ -3411,6 +3523,8 @@
pw.println(" Current user: " + mCurrentUserId + " " + Arrays.toString(
mCurrentUserProfiles));
pw.println(" Location mode: " + isLocationEnabled());
+ pw.println(" Battery Saver Location Mode: "
+ + locationPowerSaveModeToString(mBatterySaverMode));
pw.println(" Location Listeners:");
for (Receiver receiver : mReceivers.values()) {
pw.println(" " + receiver);
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index ada3947..c8e8ef8 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -205,6 +205,9 @@
private static final boolean ENABLE_ISOLATED_STORAGE = StorageManager.hasIsolatedStorage();
+ private static final boolean ENABLE_LEGACY_GREYLIST = SystemProperties
+ .getBoolean(StorageManager.PROP_LEGACY_GREYLIST, true);
+
public static class Lifecycle extends SystemService {
private StorageManagerService mStorageManagerService;
@@ -2289,7 +2292,26 @@
refreshIsolatedStorageSettings();
// Perform hard reboot to kick policy into place
- mContext.getSystemService(PowerManager.class).reboot(null);
+ mHandler.post(() -> {
+ mContext.getSystemService(PowerManager.class).reboot(null);
+ });
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ if ((mask & StorageManager.DEBUG_LEGACY_GREYLIST) != 0) {
+ final boolean enabled = (flags & StorageManager.DEBUG_LEGACY_GREYLIST) != 0;
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ SystemProperties.set(StorageManager.PROP_LEGACY_GREYLIST,
+ Boolean.toString(enabled));
+
+ // Perform hard reboot to kick policy into place
+ mHandler.post(() -> {
+ mContext.getSystemService(PowerManager.class).reboot(null);
+ });
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -2639,8 +2661,8 @@
mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
"no permission to access the crypt keeper");
- if (StorageManager.isFileEncryptedNativeOnly()) {
- // Not supported on FBE devices
+ if (!StorageManager.isBlockEncrypted()) {
+ // Only supported on FDE devices
return;
}
@@ -2663,8 +2685,8 @@
mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
"no permission to access the crypt keeper");
- if (StorageManager.isFileEncryptedNativeOnly()) {
- // Not supported on FBE devices
+ if (!StorageManager.isBlockEncrypted()) {
+ // Only supported on FDE devices
return null;
}
@@ -2961,7 +2983,9 @@
@Override
public void mkdirs(String callingPkg, String appPath) {
- final int userId = UserHandle.getUserId(Binder.getCallingUid());
+ final int callingPid = Binder.getCallingPid();
+ final int callingUid = Binder.getCallingUid();
+ final int userId = UserHandle.getUserId(callingUid);
final UserEnvironment userEnv = new UserEnvironment(userId);
final String propertyName = "sys.user." + userId + ".ce_available";
@@ -2979,7 +3003,7 @@
// Validate that reported package name belongs to caller
final AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(
Context.APP_OPS_SERVICE);
- appOps.checkPackage(Binder.getCallingUid(), callingPkg);
+ appOps.checkPackage(callingUid, callingPkg);
File appFile = null;
try {
@@ -2998,11 +3022,13 @@
appPath = appPath + "/";
}
+ final String systemPath = translateAppToSystem(appPath, callingPid, callingUid);
+
try {
- mVold.mkdirs(appPath);
+ mVold.mkdirs(systemPath);
return;
} catch (Exception e) {
- throw new IllegalStateException("Failed to prepare " + appPath + ": " + e);
+ throw new IllegalStateException("Failed to prepare " + systemPath + ": " + e);
}
}
@@ -3675,16 +3701,17 @@
} else if (mPmInternal.isInstantApp(packageName, UserHandle.getUserId(uid))) {
return Zygote.MOUNT_EXTERNAL_NONE;
} else {
- // STOPSHIP: remove this temporary workaround once developers
- // fix bugs where they're opening _data paths in native code
- switch (packageName) {
- case "com.facebook.katana": // b/123996076
- case "jp.naver.line.android": // b/124767356
- case "com.mxtech.videoplayer.ad": // b/124531483
- return Zygote.MOUNT_EXTERNAL_LEGACY;
- default:
- return Zygote.MOUNT_EXTERNAL_WRITE;
+ if (ENABLE_LEGACY_GREYLIST) {
+ // STOPSHIP: remove this temporary workaround once developers
+ // fix bugs where they're opening _data paths in native code
+ switch (packageName) {
+ case "com.facebook.katana": // b/123996076
+ case "jp.naver.line.android": // b/124767356
+ case "com.mxtech.videoplayer.ad": // b/124531483
+ return Zygote.MOUNT_EXTERNAL_LEGACY;
+ }
}
+ return Zygote.MOUNT_EXTERNAL_WRITE;
}
} catch (RemoteException e) {
// Should not happen
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 5633082c..0955cc5 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -1455,7 +1455,7 @@
synchronized (mRecords) {
mPreciseDataConnectionState = new PreciseDataConnectionState(
TelephonyManager.DATA_UNKNOWN,TelephonyManager.NETWORK_TYPE_UNKNOWN,
- ApnSetting.getApnTypesBitmaskFromString(apnType), "", null,
+ ApnSetting.getApnTypesBitmaskFromString(apnType), null, null,
DataFailCause.NONE);
for (Record r : mRecords) {
if (r.matchPhoneStateListenerEvent(
@@ -1471,7 +1471,7 @@
}
broadcastDataConnectionFailed(apnType, subId);
broadcastPreciseDataConnectionStateChanged(TelephonyManager.DATA_UNKNOWN,
- TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, "", null,
+ TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, null, null,
DataFailCause.NONE);
}
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index fb541e0..85ec2dd 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -933,6 +933,27 @@
}
}
+ /**
+ * Return the current foregroundServiceType of the ServiceRecord.
+ * @param className ComponentName of the Service class.
+ * @param token IBinder token.
+ * @return current foreground service type.
+ */
+ public int getForegroundServiceTypeLocked(ComponentName className, IBinder token) {
+ final int userId = UserHandle.getCallingUserId();
+ final long origId = Binder.clearCallingIdentity();
+ int ret = ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE;
+ try {
+ ServiceRecord r = findServiceLocked(className, token, userId);
+ if (r != null) {
+ ret = r.foregroundServiceType;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(origId);
+ }
+ return ret;
+ }
+
boolean foregroundAppShownEnoughLocked(ActiveForegroundApp aa, long nowElapsed) {
if (DEBUG_FOREGROUND_SERVICE) Slog.d(TAG, "Shown enough: pkg=" + aa.mPackageName + ", uid="
+ aa.mUid);
@@ -2190,7 +2211,7 @@
return new ServiceLookupResult(null, r.permission);
} else if (r.permission != null && callingPackage != null) {
final int opCode = AppOpsManager.permissionToOpCode(r.permission);
- if (opCode != AppOpsManager.OP_NONE && mAm.mAppOpsService.noteOperation(
+ if (opCode != AppOpsManager.OP_NONE && mAm.mAppOpsService.checkOperation(
opCode, callingUid, callingPackage) != AppOpsManager.MODE_ALLOWED) {
Slog.w(TAG, "Appop Denial: Accessing service " + r.shortInstanceName
+ " from pid=" + callingPid
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index de41152..415a892 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -16,8 +16,6 @@
package com.android.server.am;
-import static android.provider.DeviceConfig.ActivityManager.KEY_MAX_CACHED_PROCESSES;
-
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
import android.app.ActivityThread;
@@ -105,6 +103,12 @@
private static final long DEFAULT_MEMORY_INFO_THROTTLE_TIME = 5*60*1000;
private static final long DEFAULT_TOP_TO_FGS_GRACE_DURATION = 15 * 1000;
+ // Flag stored in the DeviceConfig API.
+ /**
+ * Maximum number of cached processes.
+ */
+ private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
+
// Maximum number of cached processes we will allow.
public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES;
@@ -292,7 +296,7 @@
updateConstants();
updateActivityStartsLoggingEnabled();
updateBackgroundActivityStartsEnabled();
- DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
ActivityThread.currentApplication().getMainExecutor(),
mOnDeviceConfigChangedListener);
updateMaxCachedProcesses();
@@ -412,7 +416,7 @@
private void updateMaxCachedProcesses() {
String maxCachedProcessesFlag = DeviceConfig.getProperty(
- DeviceConfig.ActivityManager.NAMESPACE, KEY_MAX_CACHED_PROCESSES);
+ DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MAX_CACHED_PROCESSES);
try {
CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0
? (TextUtils.isEmpty(maxCachedProcessesFlag)
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f2902b1..ccb9d82 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -2129,6 +2129,7 @@
private String mExemptionsStr;
private List<String> mExemptions = Collections.emptyList();
private int mLogSampleRate = -1;
+ private int mStatslogSampleRate = -1;
@HiddenApiEnforcementPolicy private int mPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT;
public HiddenApiSettings(Handler handler, Context context) {
@@ -2146,6 +2147,11 @@
false,
this);
mContext.getContentResolver().registerContentObserver(
+ Settings.Global.getUriFor(
+ Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE),
+ false,
+ this);
+ mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.HIDDEN_API_POLICY),
false,
this);
@@ -2181,6 +2187,15 @@
mLogSampleRate = logSampleRate;
ZYGOTE_PROCESS.setHiddenApiAccessLogSampleRate(mLogSampleRate);
}
+ int statslogSampleRate = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.HIDDEN_API_ACCESS_STATSLOG_SAMPLING_RATE, 0);
+ if (statslogSampleRate < 0 || statslogSampleRate > 0x10000) {
+ statslogSampleRate = -1;
+ }
+ if (statslogSampleRate != -1 && statslogSampleRate != mStatslogSampleRate) {
+ mStatslogSampleRate = statslogSampleRate;
+ ZYGOTE_PROCESS.setHiddenApiAccessStatslogSampleRate(mStatslogSampleRate);
+ }
mPolicy = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY);
}
@@ -13586,6 +13601,13 @@
}
@Override
+ public int getForegroundServiceType(ComponentName className, IBinder token) {
+ synchronized (this) {
+ return mServices.getForegroundServiceTypeLocked(className, token);
+ }
+ }
+
+ @Override
public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
boolean requireFull, String name, String callerPackage) {
return mUserController.handleIncomingUser(callingPid, callingUid, userId, allowAll,
diff --git a/services/core/java/com/android/server/am/AppCompactor.java b/services/core/java/com/android/server/am/AppCompactor.java
index 17ffd9c..1f21160 100644
--- a/services/core/java/com/android/server/am/AppCompactor.java
+++ b/services/core/java/com/android/server/am/AppCompactor.java
@@ -17,14 +17,6 @@
package com.android.server.am;
import static android.os.Process.THREAD_PRIORITY_FOREGROUND;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4;
-import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION;
import android.app.ActivityManager;
import android.app.ActivityThread;
@@ -51,6 +43,17 @@
public final class AppCompactor {
+ // Flags stored in the DeviceConfig API.
+ @VisibleForTesting static final String KEY_USE_COMPACTION = "use_compaction";
+ @VisibleForTesting static final String KEY_COMPACT_ACTION_1 = "compact_action_1";
+ @VisibleForTesting static final String KEY_COMPACT_ACTION_2 = "compact_action_2";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_1 = "compact_throttle_1";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_2 = "compact_throttle_2";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_3 = "compact_throttle_3";
+ @VisibleForTesting static final String KEY_COMPACT_THROTTLE_4 = "compact_throttle_4";
+ @VisibleForTesting static final String KEY_COMPACT_STATSD_SAMPLE_RATE =
+ "compact_statsd_sample_rate";
+
// Phenotype sends int configurations and we map them to the strings we'll use on device,
// preventing a weird string value entering the kernel.
private static final int COMPACT_ACTION_FILE_FLAG = 1;
@@ -165,7 +168,7 @@
* starts the background thread if necessary.
*/
public void init() {
- DeviceConfig.addOnPropertyChangedListener(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
ActivityThread.currentApplication().getMainExecutor(), mOnFlagsChangedListener);
synchronized (mPhenotypeFlagLock) {
updateUseCompaction();
@@ -228,7 +231,7 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateUseCompaction() {
String useCompactionFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_USE_COMPACTION);
mUseCompaction = TextUtils.isEmpty(useCompactionFlag)
? DEFAULT_USE_COMPACTION : Boolean.parseBoolean(useCompactionFlag);
@@ -241,10 +244,10 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateCompactionActions() {
String compactAction1Flag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_ACTION_1);
String compactAction2Flag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_ACTION_2);
int compactAction1 = DEFAULT_COMPACT_ACTION_1;
@@ -271,16 +274,16 @@
private void updateCompactionThrottles() {
boolean useThrottleDefaults = false;
String throttleSomeSomeFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_1);
String throttleSomeFullFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_2);
String throttleFullSomeFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_3);
String throttleFullFullFlag =
- DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_THROTTLE_4);
if (TextUtils.isEmpty(throttleSomeSomeFlag) || TextUtils.isEmpty(throttleSomeFullFlag)
@@ -309,7 +312,7 @@
@GuardedBy("mPhenotypeFlagLock")
private void updateStatsdSampleRate() {
- String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.ActivityManager.NAMESPACE,
+ String sampleRateFlag = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
KEY_COMPACT_STATSD_SAMPLE_RATE);
try {
mStatsdSampleRate = TextUtils.isEmpty(sampleRateFlag)
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 30798a8..399b818 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -1783,7 +1783,7 @@
app.processName, uid, uid, gids, runtimeFlags, mountExternal,
app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet,
app.info.dataDir, null, app.info.packageName,
- packageNames, sandboxId, /*useBlastulaPool=*/ false,
+ packageNames, sandboxId, /*useUnspecializedAppProcessPool=*/ false,
new String[] {PROC_START_SEQ_IDENT + app.startSeq});
} else {
startResult = Process.start(entryPoint,
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 5d802a7..6bd412b 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -89,6 +89,8 @@
import android.media.audiopolicy.AudioPolicy;
import android.media.audiopolicy.AudioPolicyConfig;
import android.media.audiopolicy.AudioProductStrategies;
+import android.media.audiopolicy.AudioVolumeGroup;
+import android.media.audiopolicy.AudioVolumeGroups;
import android.media.audiopolicy.IAudioPolicyCallback;
import android.media.projection.IMediaProjection;
import android.media.projection.IMediaProjectionManager;
@@ -128,6 +130,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.DumpUtils;
+import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
@@ -277,6 +280,8 @@
/** @see AudioProductStrategies */
private static AudioProductStrategies sAudioProductStrategies;
+ /** @see AudioVolumeGroups */
+ private static AudioVolumeGroups sAudioVolumeGroups;
private int mMode = AudioSystem.MODE_NORMAL;
// protects mRingerMode
@@ -629,6 +634,7 @@
mHasVibrator = mVibrator == null ? false : mVibrator.hasVibrator();
sAudioProductStrategies = new AudioProductStrategies();
+ sAudioVolumeGroups = new AudioVolumeGroups();
// Initialize volume
int maxCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_steps", -1);
@@ -1002,6 +1008,14 @@
return sAudioProductStrategies;
}
+ /**
+ * @return the {@link android.media.audiopolicy.AudioVolumeGroups} discovered from the
+ * platform configuration file.
+ */
+ public @NonNull AudioVolumeGroups listAudioVolumeGroups() {
+ return sAudioVolumeGroups;
+ }
+
private void checkAllAliasStreamVolumes() {
synchronized (mSettingsLock) {
synchronized (VolumeStreamState.class) {
@@ -1892,6 +1906,62 @@
mStreamStates[stream].mute(index == 0);
}
+ private void enforceModifyAudioRoutingPermission() {
+ if (mContext.checkCallingPermission(
+ android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Missing MODIFY_AUDIO_ROUTING permission");
+ }
+ }
+
+ /** @see AudioManager#setVolumeIndexForAttributes(attr, int, int) */
+ public void setVolumeIndexForAttributes(@NonNull AudioAttributes attr, int index, int flags,
+ String callingPackage) {
+ enforceModifyAudioRoutingPermission();
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ // @todo not hold the caller context, post message
+ int stream = sAudioProductStrategies.getLegacyStreamTypeForAudioAttributes(attr);
+ final int device = getDeviceForStream(stream);
+
+ int oldIndex = AudioSystem.getVolumeIndexForAttributes(attr, device);
+
+ AudioSystem.setVolumeIndexForAttributes(attr, index, device);
+
+ final int volumeGroup = sAudioProductStrategies.getVolumeGroupIdForAttributes(attr);
+ final AudioVolumeGroup avg = sAudioVolumeGroups.getById(volumeGroup);
+ if (avg == null) {
+ return;
+ }
+ for (final int groupedStream : avg.getLegacyStreamTypes()) {
+ setStreamVolume(stream, index, flags, callingPackage, callingPackage,
+ Binder.getCallingUid());
+ }
+ }
+
+ /** @see AudioManager#getVolumeIndexForAttributes(attr) */
+ public int getVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ enforceModifyAudioRoutingPermission();
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ int stream = sAudioProductStrategies.getLegacyStreamTypeForAudioAttributes(attr);
+ final int device = getDeviceForStream(stream);
+
+ return AudioSystem.getVolumeIndexForAttributes(attr, device);
+ }
+
+ /** @see AudioManager#getMaxVolumeIndexForAttributes(attr) */
+ public int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ enforceModifyAudioRoutingPermission();
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ return AudioSystem.getMaxVolumeIndexForAttributes(attr);
+ }
+
+ /** @see AudioManager#getMinVolumeIndexForAttributes(attr) */
+ public int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attr) {
+ enforceModifyAudioRoutingPermission();
+ Preconditions.checkNotNull(attr, "attr must not be null");
+ return AudioSystem.getMinVolumeIndexForAttributes(attr);
+ }
+
/** @see AudioManager#setStreamVolume(int, int, int) */
public void setStreamVolume(int streamType, int index, int flags, String callingPackage) {
if ((streamType == AudioManager.STREAM_ACCESSIBILITY) && !canChangeAccessibilityVolume()) {
diff --git a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
index 92a8d93..d787758 100644
--- a/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
+++ b/services/core/java/com/android/server/biometrics/BiometricServiceBase.java
@@ -542,6 +542,9 @@
+ " failed to respond to cancel, starting client "
+ (mPendingClient != null ? mPendingClient.getOwnerString() : "null"));
+ StatsLog.write(StatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
+ statsModality(), BiometricsProtoEnums.ISSUE_CANCEL_TIMED_OUT);
+
mCurrentClient = null;
startClient(mPendingClient, false);
}
@@ -817,6 +820,7 @@
mHandler.post(() -> {
ClientMonitor client = mCurrentClient;
if (client instanceof EnrollClient && client.getToken() == token) {
+ if (DEBUG) Slog.v(getTag(), "Cancelling enrollment");
client.stop(client.getToken() == token);
}
});
diff --git a/services/core/java/com/android/server/biometrics/ClientMonitor.java b/services/core/java/com/android/server/biometrics/ClientMonitor.java
index 89fa2de..87b9eaa 100644
--- a/services/core/java/com/android/server/biometrics/ClientMonitor.java
+++ b/services/core/java/com/android/server/biometrics/ClientMonitor.java
@@ -158,6 +158,7 @@
*/
public boolean onAcquired(int acquiredInfo, int vendorCode) {
super.logOnAcquired(acquiredInfo, vendorCode, getTargetUserId());
+ if (DEBUG) Slog.v(getLogTag(), "Acquired: " + acquiredInfo + " " + vendorCode);
try {
if (mListener != null) {
mListener.onAcquired(getHalDeviceId(), acquiredInfo, vendorCode);
diff --git a/services/core/java/com/android/server/biometrics/EnrollClient.java b/services/core/java/com/android/server/biometrics/EnrollClient.java
index 882a929..d5e626a 100644
--- a/services/core/java/com/android/server/biometrics/EnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/EnrollClient.java
@@ -76,7 +76,10 @@
}
mMetricsLogger.action(mMetrics.actionBiometricEnroll());
try {
- getListener().onEnrollResult(identifier, remaining);
+ final BiometricServiceBase.ServiceListener listener = getListener();
+ if (listener != null) {
+ listener.onEnrollResult(identifier, remaining);
+ }
return remaining == 0;
} catch (RemoteException e) {
Slog.w(getLogTag(), "Failed to notify EnrollResult:", e);
diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
index 9d9b1cf..2646d76 100644
--- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java
+++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
@@ -18,19 +18,24 @@
import android.net.ConnectivityManager;
import android.net.INetd;
+import android.net.InetAddresses;
import android.net.InterfaceConfiguration;
+import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.RouteInfo;
import android.os.INetworkManagementService;
import android.os.RemoteException;
+import android.os.ServiceSpecificException;
import android.util.Slog;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.server.net.BaseNetworkObserver;
import java.net.Inet4Address;
+import java.net.Inet6Address;
import java.util.Objects;
/**
@@ -67,15 +72,16 @@
private final NetworkAgentInfo mNetwork;
private enum State {
- IDLE, // start() not called. Base iface and stacked iface names are null.
- STARTING, // start() called. Base iface and stacked iface names are known.
- RUNNING, // start() called, and the stacked iface is known to be up.
- STOPPING; // stop() called, this Nat464Xlat is still registered as a network observer for
- // the stacked interface.
+ IDLE, // start() not called. Base iface and stacked iface names are null.
+ DISCOVERING, // same as IDLE, except prefix discovery in progress.
+ STARTING, // start() called. Base iface and stacked iface names are known.
+ RUNNING, // start() called, and the stacked iface is known to be up.
}
+ private IpPrefix mNat64Prefix;
private String mBaseIface;
private String mIface;
+ private Inet6Address mIPv6Address;
private State mState = State.IDLE;
public Nat464Xlat(NetworkAgentInfo nai, INetd netd, INetworkManagementService nmService) {
@@ -85,20 +91,51 @@
}
/**
- * Determines whether a network requires clat.
+ * Whether to attempt 464xlat on this network. This is true for an IPv6-only network that is
+ * currently connected and where the NetworkAgent has not disabled 464xlat. It is the signal to
+ * enable NAT64 prefix discovery.
+ *
* @param network the NetworkAgentInfo corresponding to the network.
* @return true if the network requires clat, false otherwise.
*/
- public static boolean requiresClat(NetworkAgentInfo nai) {
+ @VisibleForTesting
+ protected static boolean requiresClat(NetworkAgentInfo nai) {
// TODO: migrate to NetworkCapabilities.TRANSPORT_*.
final boolean supported = ArrayUtils.contains(NETWORK_TYPES, nai.networkInfo.getType());
final boolean connected = ArrayUtils.contains(NETWORK_STATES, nai.networkInfo.getState());
- // We only run clat on networks that don't have a native IPv4 address.
- final boolean hasIPv4Address =
- (nai.linkProperties != null) && nai.linkProperties.hasIPv4Address();
- final boolean skip464xlat =
- (nai.netMisc() != null) && nai.netMisc().skip464xlat;
- return supported && connected && !hasIPv4Address && !skip464xlat;
+
+ // Only run clat on networks that have a global IPv6 address and don't have a native IPv4
+ // address.
+ LinkProperties lp = nai.linkProperties;
+ final boolean isIpv6OnlyNetwork = (lp != null) && lp.hasGlobalIPv6Address()
+ && !lp.hasIPv4Address();
+
+ // If the network tells us it doesn't use clat, respect that.
+ final boolean skip464xlat = (nai.netMisc() != null) && nai.netMisc().skip464xlat;
+
+ return supported && connected && isIpv6OnlyNetwork && !skip464xlat;
+ }
+
+ /**
+ * Whether the clat demon should be started on this network now. This is true if requiresClat is
+ * true and a NAT64 prefix has been discovered.
+ *
+ * @param nai the NetworkAgentInfo corresponding to the network.
+ * @return true if the network should start clat, false otherwise.
+ */
+ @VisibleForTesting
+ protected static boolean shouldStartClat(NetworkAgentInfo nai) {
+ LinkProperties lp = nai.linkProperties;
+ return requiresClat(nai) && lp != null && lp.getNat64Prefix() != null;
+ }
+
+ /**
+ * @return true if we have started prefix discovery and not yet stopped it (regardless of
+ * whether it is still running or has succeeded).
+ * A true result corresponds to internal states DISCOVERING, STARTING and RUNNING.
+ */
+ public boolean isPrefixDiscoveryStarted() {
+ return mState == State.DISCOVERING || isStarted();
}
/**
@@ -106,7 +143,7 @@
* A true result corresponds to internal states STARTING and RUNNING.
*/
public boolean isStarted() {
- return mState != State.IDLE;
+ return (mState == State.STARTING || mState == State.RUNNING);
}
/**
@@ -124,32 +161,31 @@
}
/**
- * @return true if clatd has been stopped.
- */
- public boolean isStopping() {
- return mState == State.STOPPING;
- }
-
- /**
* Start clatd, register this Nat464Xlat as a network observer for the stacked interface,
* and set internal state.
*/
private void enterStartingState(String baseIface) {
try {
mNMService.registerObserver(this);
- } catch(RemoteException e) {
- Slog.e(TAG,
- "startClat: Can't register interface observer for clat on " + mNetwork.name());
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Can't register interface observer for clat on " + mNetwork.name());
return;
}
+
+ String addrStr = null;
try {
- mNetd.clatdStart(baseIface);
- } catch(RemoteException|IllegalStateException e) {
- Slog.e(TAG, "Error starting clatd on " + baseIface, e);
+ addrStr = mNetd.clatdStart(baseIface, mNat64Prefix.toString());
+ } catch (RemoteException | ServiceSpecificException e) {
+ Slog.e(TAG, "Error starting clatd on " + baseIface + ": " + e);
}
mIface = CLAT_PREFIX + baseIface;
mBaseIface = baseIface;
mState = State.STARTING;
+ try {
+ mIPv6Address = (Inet6Address) InetAddresses.parseNumericAddress(addrStr);
+ } catch (ClassCastException | IllegalArgumentException | NullPointerException e) {
+ Slog.e(TAG, "Invalid IPv6 address " + addrStr);
+ }
}
/**
@@ -161,37 +197,27 @@
}
/**
- * Stop clatd, and turn ND offload on if it had been turned off.
- */
- private void enterStoppingState() {
- try {
- mNetd.clatdStop(mBaseIface);
- } catch(RemoteException|IllegalStateException e) {
- Slog.e(TAG, "Error stopping clatd on " + mBaseIface, e);
- }
-
- mState = State.STOPPING;
- }
-
- /**
* Unregister as a base observer for the stacked interface, and clear internal state.
*/
- private void enterIdleState() {
+ private void leaveStartedState() {
try {
mNMService.unregisterObserver(this);
- } catch(RemoteException|IllegalStateException e) {
- Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface, e);
+ } catch (RemoteException | IllegalStateException e) {
+ Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e);
}
-
mIface = null;
mBaseIface = null;
mState = State.IDLE;
+ if (requiresClat(mNetwork)) {
+ mState = State.DISCOVERING;
+ } else {
+ stopPrefixDiscovery();
+ mState = State.IDLE;
+ }
}
- /**
- * Starts the clat daemon.
- */
- public void start() {
+ @VisibleForTesting
+ protected void start() {
if (isStarted()) {
Slog.e(TAG, "startClat: already started");
return;
@@ -212,20 +238,82 @@
enterStartingState(baseIface);
}
- /**
- * Stops the clat daemon.
- */
- public void stop() {
+ @VisibleForTesting
+ protected void stop() {
if (!isStarted()) {
+ Slog.e(TAG, "stopClat: already stopped");
return;
}
- Slog.i(TAG, "Stopping clatd on " + mBaseIface);
- boolean wasStarting = isStarting();
- enterStoppingState();
- if (wasStarting) {
- enterIdleState();
+ Slog.i(TAG, "Stopping clatd on " + mBaseIface);
+ try {
+ mNetd.clatdStop(mBaseIface);
+ } catch (RemoteException | ServiceSpecificException e) {
+ Slog.e(TAG, "Error stopping clatd on " + mBaseIface + ": " + e);
}
+
+ String iface = mIface;
+ boolean wasRunning = isRunning();
+
+ // Change state before updating LinkProperties. handleUpdateLinkProperties ends up calling
+ // fixupLinkProperties, and if at that time the state is still RUNNING, fixupLinkProperties
+ // would wrongly inform ConnectivityService that there is still a stacked interface.
+ leaveStartedState();
+
+ if (wasRunning) {
+ LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
+ lp.removeStackedLink(iface);
+ mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp);
+ }
+ }
+
+ private void startPrefixDiscovery() {
+ try {
+ mNetd.resolverStartPrefix64Discovery(getNetId());
+ mState = State.DISCOVERING;
+ } catch (RemoteException | ServiceSpecificException e) {
+ Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e);
+ }
+ }
+
+ private void stopPrefixDiscovery() {
+ try {
+ mNetd.resolverStopPrefix64Discovery(getNetId());
+ } catch (RemoteException | ServiceSpecificException e) {
+ Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);
+ }
+ }
+
+ /**
+ * Starts/stops NAT64 prefix discovery and clatd as necessary.
+ */
+ public void update() {
+ // TODO: turn this class into a proper StateMachine. // http://b/126113090
+ if (requiresClat(mNetwork)) {
+ if (!isPrefixDiscoveryStarted()) {
+ startPrefixDiscovery();
+ } else if (shouldStartClat(mNetwork)) {
+ // NAT64 prefix detected. Start clatd.
+ // TODO: support the NAT64 prefix changing after it's been discovered. There is no
+ // need to support this at the moment because it cannot happen without changes to
+ // the Dns64Configuration code in netd.
+ start();
+ } else {
+ // NAT64 prefix removed. Stop clatd and go back into DISCOVERING state.
+ stop();
+ }
+ } else {
+ // Network no longer requires clat. Stop clat and prefix discovery.
+ if (isStarted()) {
+ stop();
+ } else if (isPrefixDiscoveryStarted()) {
+ leaveStartedState();
+ }
+ }
+ }
+
+ public void setNat64Prefix(IpPrefix nat64Prefix) {
+ mNat64Prefix = nat64Prefix;
}
/**
@@ -234,6 +322,8 @@
* has no idea that 464xlat is running on top of it.
*/
public void fixupLinkProperties(LinkProperties oldLp, LinkProperties lp) {
+ lp.setNat64Prefix(mNat64Prefix);
+
if (!isRunning()) {
return;
}
@@ -272,7 +362,7 @@
try {
InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);
return config.getLinkAddress();
- } catch(RemoteException|IllegalStateException e) {
+ } catch (RemoteException | IllegalStateException e) {
Slog.e(TAG, "Error getting link properties: " + e);
return null;
}
@@ -282,6 +372,20 @@
* Adds stacked link on base link and transitions to RUNNING state.
*/
private void handleInterfaceLinkStateChanged(String iface, boolean up) {
+ // TODO: if we call start(), then stop(), then start() again, and the
+ // interfaceLinkStateChanged notification for the first start is delayed past the first
+ // stop, then the code becomes out of sync with system state and will behave incorrectly.
+ //
+ // This is not trivial to fix because:
+ // 1. It is not guaranteed that start() will eventually result in the interface coming up,
+ // because there could be an error starting clat (e.g., if the interface goes down before
+ // the packet socket can be bound).
+ // 2. If start is called multiple times, there is nothing in the interfaceLinkStateChanged
+ // notification that says which start() call the interface was created by.
+ //
+ // Once this code is converted to StateMachine, it will be possible to use deferMessage to
+ // ensure it stays in STARTING state until the interfaceLinkStateChanged notification fires,
+ // and possibly use a timeout (or provide some guarantees at the lower layer) to address #1.
if (!isStarting() || !up || !Objects.equals(mIface, iface)) {
return;
}
@@ -307,20 +411,16 @@
if (!Objects.equals(mIface, iface)) {
return;
}
- if (!isRunning() && !isStopping()) {
+ if (!isRunning()) {
return;
}
Slog.i(TAG, "interface " + iface + " removed");
- if (!isStopping()) {
- // Ensure clatd is stopped if stop() has not been called: this likely means that clatd
- // has crashed.
- enterStoppingState();
- }
- enterIdleState();
- LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
- lp.removeStackedLink(iface);
- mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp);
+ // If we're running, and the interface was removed, then we didn't call stop(), and it's
+ // likely that clatd crashed. Ensure we call stop() so we can start clatd again. Calling
+ // stop() will also update LinkProperties, and if clatd crashed, the LinkProperties update
+ // will cause ConnectivityService to call start() again.
+ stop();
}
@Override
@@ -337,4 +437,9 @@
public String toString() {
return "mBaseIface: " + mBaseIface + ", mIface: " + mIface + ", mState: " + mState;
}
+
+ @VisibleForTesting
+ protected int getNetId() {
+ return mNetwork.network.netId;
+ }
}
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index cd4ce2d..6ef9fbb 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -238,7 +238,7 @@
public final int factorySerialNumber;
// Used by ConnectivityService to keep track of 464xlat.
- public Nat464Xlat clatd;
+ public final Nat464Xlat clatd;
// Set after asynchronous creation of the NetworkMonitor.
private volatile INetworkMonitor mNetworkMonitor;
@@ -246,8 +246,6 @@
private static final String TAG = ConnectivityService.class.getSimpleName();
private static final boolean VDBG = false;
private final ConnectivityService mConnService;
- private final INetd mNetd;
- private final INetworkManagementService mNMS;
private final Context mContext;
private final Handler mHandler;
@@ -262,9 +260,8 @@
linkProperties = lp;
networkCapabilities = nc;
currentScore = score;
+ clatd = new Nat464Xlat(this, netd, nms);
mConnService = connService;
- mNetd = netd;
- mNMS = nms;
mContext = context;
mHandler = handler;
networkMisc = misc;
@@ -598,32 +595,6 @@
for (LingerTimer timer : mLingerTimers) { pw.println(timer); }
}
- public void updateClat(INetworkManagementService netd) {
- if (Nat464Xlat.requiresClat(this)) {
- maybeStartClat();
- } else {
- maybeStopClat();
- }
- }
-
- /** Ensure clat has started for this network. */
- public void maybeStartClat() {
- if (clatd != null && clatd.isStarted()) {
- return;
- }
- clatd = new Nat464Xlat(this, mNetd, mNMS);
- clatd.start();
- }
-
- /** Ensure clat has stopped for this network. */
- public void maybeStopClat() {
- if (clatd == null) {
- return;
- }
- clatd.stop();
- clatd = null;
- }
-
public String toString() {
return "NetworkAgentInfo{ ni{" + networkInfo + "} "
+ "network{" + network + "} nethandle{" + network.getNetworkHandle() + "} "
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 8a208a5..9f80a83 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -1639,13 +1639,12 @@
}
}
- if (syncOperation.isAppStandbyExempted()) {
- final UsageStatsManagerInternal usmi = LocalServices.getService(
- UsageStatsManagerInternal.class);
- if (usmi != null) {
- usmi.reportExemptedSyncScheduled(syncOperation.owningPackage,
- UserHandle.getUserId(syncOperation.owningUid));
- }
+ final UsageStatsManagerInternal usmi =
+ LocalServices.getService(UsageStatsManagerInternal.class);
+ if (usmi != null) {
+ usmi.reportSyncScheduled(syncOperation.owningPackage,
+ UserHandle.getUserId(syncOperation.owningUid),
+ syncOperation.isAppStandbyExempted());
}
getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage,
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index d57431e..1f28a6c 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -288,6 +288,10 @@
return mScreenAutoBrightness;
}
+ public boolean hasValidAmbientLux() {
+ return mAmbientLuxValid;
+ }
+
public float getAutomaticScreenBrightnessAdjustment() {
return mBrightnessMapper.getAutoBrightnessAdjustment();
}
@@ -648,9 +652,9 @@
mLightSensorWarmUpTimeConfig + mLightSensorEnableTime;
if (time < timeWhenSensorWarmedUp) {
if (mLoggingEnabled) {
- Slog.d(TAG, "updateAmbientLux: Sensor not ready yet: " +
- "time=" + time + ", " +
- "timeWhenSensorWarmedUp=" + timeWhenSensorWarmedUp);
+ Slog.d(TAG, "updateAmbientLux: Sensor not ready yet: "
+ + "time=" + time + ", "
+ + "timeWhenSensorWarmedUp=" + timeWhenSensorWarmedUp);
}
mHandler.sendEmptyMessageAtTime(MSG_UPDATE_AMBIENT_LUX,
timeWhenSensorWarmedUp);
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 01d19c0..1aaaf41 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -96,7 +96,6 @@
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.UiThread;
-import com.android.server.display.ColorDisplayService.ColorDisplayServiceInternal;
import com.android.server.wm.SurfaceAnimationThread;
import com.android.server.wm.WindowManagerInternal;
@@ -357,7 +356,6 @@
publishBinderService(Context.DISPLAY_SERVICE, new BinderService(),
true /*allowIsolated*/);
publishLocalService(DisplayManagerInternal.class, new LocalService());
- publishLocalService(DisplayTransformManager.class, new DisplayTransformManager());
}
@Override
@@ -1535,13 +1533,6 @@
pw.println();
mPersistentDataStore.dump(pw);
-
- final ColorDisplayServiceInternal cds = LocalServices.getService(
- ColorDisplayServiceInternal.class);
- if (cds != null) {
- pw.println();
- cds.dump(pw);
- }
}
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 15c7ef7..74cda9d 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -874,7 +874,7 @@
// If the brightness is already set then it's been overridden by something other than the
// user, or is a temporary adjustment.
- final boolean userInitiatedChange = brightness < 0
+ boolean userInitiatedChange = brightness < 0
&& (autoBrightnessAdjustmentChanged || userSetBrightnessChanged);
boolean hadUserBrightnessPoint = false;
@@ -1010,6 +1010,12 @@
}
if (!brightnessIsTemporary) {
+ if (userInitiatedChange && (mAutomaticBrightnessController == null
+ || !mAutomaticBrightnessController.hasValidAmbientLux())) {
+ // If we don't have a valid lux reading we can't report a valid
+ // slider event so notify as if the system changed the brightness.
+ userInitiatedChange = false;
+ }
notifyBrightnessChanged(brightness, userInitiatedChange, hadUserBrightnessPoint);
}
diff --git a/services/core/java/com/android/server/display/OWNERS b/services/core/java/com/android/server/display/OWNERS
index 0d64dbd..25cb5ae 100644
--- a/services/core/java/com/android/server/display/OWNERS
+++ b/services/core/java/com/android/server/display/OWNERS
@@ -2,5 +2,3 @@
dangittik@google.com
hackbod@google.com
ogunwale@google.com
-
-per-file ColorDisplayService.java=christyfranks@google.com
diff --git a/services/core/java/com/android/server/display/AppSaturationController.java b/services/core/java/com/android/server/display/color/AppSaturationController.java
similarity index 98%
rename from services/core/java/com/android/server/display/AppSaturationController.java
rename to services/core/java/com/android/server/display/color/AppSaturationController.java
index 5d5e4f7..e42be02 100644
--- a/services/core/java/com/android/server/display/AppSaturationController.java
+++ b/services/core/java/com/android/server/display/color/AppSaturationController.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.android.server.display;
+package com.android.server.display.color;
import android.annotation.UserIdInt;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.display.ColorDisplayService.ColorTransformController;
+import com.android.server.display.color.ColorDisplayService.ColorTransformController;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
diff --git a/services/core/java/com/android/server/display/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java
similarity index 96%
rename from services/core/java/com/android/server/display/ColorDisplayService.java
rename to services/core/java/com/android/server/display/color/ColorDisplayService.java
index 7dd3b36..b1e5510 100644
--- a/services/core/java/com/android/server/display/ColorDisplayService.java
+++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.display;
+package com.android.server.display.color;
import static android.hardware.display.ColorDisplayManager.AUTO_MODE_CUSTOM_TIME;
import static android.hardware.display.ColorDisplayManager.AUTO_MODE_DISABLED;
@@ -24,9 +24,9 @@
import static android.hardware.display.ColorDisplayManager.COLOR_MODE_NATURAL;
import static android.hardware.display.ColorDisplayManager.COLOR_MODE_SATURATED;
-import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
-import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY;
-import static com.android.server.display.DisplayTransformManager.LEVEL_COLOR_MATRIX_SATURATION;
+import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
+import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY;
+import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_SATURATION;
import android.Manifest;
import android.animation.Animator;
@@ -233,6 +233,7 @@
public void onStart() {
publishBinderService(Context.COLOR_DISPLAY_SERVICE, new BinderService());
publishLocalService(ColorDisplayServiceInternal.class, new ColorDisplayServiceInternal());
+ publishLocalService(DisplayTransformManager.class, new DisplayTransformManager());
}
@Override
@@ -632,9 +633,9 @@
@VisibleForTesting
void updateDisplayWhiteBalanceStatus() {
boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated();
- mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled() &&
- !mNightDisplayTintController.isActivated() &&
- DisplayTransformManager.needsLinearColorMatrix());
+ mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled()
+ && !mNightDisplayTintController.isActivated()
+ && DisplayTransformManager.needsLinearColorMatrix());
boolean activated = mDisplayWhiteBalanceTintController.isActivated();
if (mDisplayWhiteBalanceListener != null && oldActivated != activated) {
@@ -819,7 +820,7 @@
/**
* Get the current color mode from system properties, or return -1 if invalid.
*
- * See {@link com.android.server.display.DisplayTransformManager}
+ * See {@link DisplayTransformManager}
*/
private @ColorMode int getCurrentColorModeFromSystemProperties() {
final int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0);
@@ -851,7 +852,7 @@
private void dumpInternal(PrintWriter pw) {
pw.println("COLOR DISPLAY MANAGER dumpsys (color_display)");
- pw.println("Night Display:");
+ pw.println("Night display:");
if (mNightDisplayTintController.isAvailable(getContext())) {
pw.println(" Activated: " + mNightDisplayTintController.isActivated());
pw.println(" Color temp: " + mNightDisplayTintController.getColorTemperature());
@@ -923,14 +924,15 @@
if (mLastActivatedTime != null) {
// Maintain the existing activated state if within the current period.
- if (mLastActivatedTime.isBefore(now) && mLastActivatedTime.isAfter(start)
+ if (mLastActivatedTime.isBefore(now)
+ && mLastActivatedTime.isAfter(start)
&& (mLastActivatedTime.isAfter(end) || now.isBefore(end))) {
activate = mNightDisplayTintController.isActivatedSetting();
}
}
- if (mNightDisplayTintController.isActivatedStateNotSet() || (
- mNightDisplayTintController.isActivated() != activate)) {
+ if (mNightDisplayTintController.isActivatedStateNotSet()
+ || (mNightDisplayTintController.isActivated() != activate)) {
mNightDisplayTintController.setActivated(activate);
}
@@ -1305,10 +1307,11 @@
}
final class DisplayWhiteBalanceTintController extends TintController {
+
// Three chromaticity coordinates per color: X, Y, and Z
- private final int NUM_VALUES_PER_PRIMARY = 3;
+ private static final int NUM_VALUES_PER_PRIMARY = 3;
// Four colors: red, green, blue, and white
- private final int NUM_DISPLAY_PRIMARIES_VALS = 4 * NUM_VALUES_PER_PRIMARY;
+ private static final int NUM_DISPLAY_PRIMARIES_VALS = 4 * NUM_VALUES_PER_PRIMARY;
private final Object mLock = new Object();
@VisibleForTesting
@@ -1478,25 +1481,25 @@
pw.println(" mTemperatureMax = " + mTemperatureMax);
pw.println(" mTemperatureDefault = " + mTemperatureDefault);
pw.println(" mCurrentColorTemperature = " + mCurrentColorTemperature);
- pw.println(" mCurrentColorTemperatureXYZ = " +
- matrixToString(mCurrentColorTemperatureXYZ, 3));
- pw.println(" mDisplayColorSpaceRGB RGB-to-XYZ = " +
- matrixToString(mDisplayColorSpaceRGB.getTransform(), 3));
- pw.println(" mChromaticAdaptationMatrix = " +
- matrixToString(mChromaticAdaptationMatrix, 3));
- pw.println(" mDisplayColorSpaceRGB XYZ-to-RGB = " +
- matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
- pw.println(" mMatrixDisplayWhiteBalance = " +
- matrixToString(mMatrixDisplayWhiteBalance, 4));
+ pw.println(" mCurrentColorTemperatureXYZ = "
+ + matrixToString(mCurrentColorTemperatureXYZ, 3));
+ pw.println(" mDisplayColorSpaceRGB RGB-to-XYZ = "
+ + matrixToString(mDisplayColorSpaceRGB.getTransform(), 3));
+ pw.println(" mChromaticAdaptationMatrix = "
+ + matrixToString(mChromaticAdaptationMatrix, 3));
+ pw.println(" mDisplayColorSpaceRGB XYZ-to-RGB = "
+ + matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
+ pw.println(" mMatrixDisplayWhiteBalance = "
+ + matrixToString(mMatrixDisplayWhiteBalance, 4));
}
}
private ColorSpace.Rgb makeRgbColorSpaceFromXYZ(float[] redGreenBlueXYZ, float[] whiteXYZ) {
return new ColorSpace.Rgb(
- "Display Color Space",
- redGreenBlueXYZ,
- whiteXYZ,
- 2.2f // gamma, unused for display white balance
+ "Display Color Space",
+ redGreenBlueXYZ,
+ whiteXYZ,
+ 2.2f // gamma, unused for display white balance
);
}
@@ -1507,19 +1510,19 @@
}
DisplayPrimaries primaries = SurfaceControl.getDisplayNativePrimaries(displayToken);
- if (primaries == null || primaries.red == null || primaries.green == null ||
- primaries.blue == null || primaries.white == null) {
+ if (primaries == null || primaries.red == null || primaries.green == null
+ || primaries.blue == null || primaries.white == null) {
return null;
}
return makeRgbColorSpaceFromXYZ(
- new float[] {
- primaries.red.X, primaries.red.Y, primaries.red.Z,
- primaries.green.X, primaries.green.Y, primaries.green.Z,
- primaries.blue.X, primaries.blue.Y, primaries.blue.Z,
+ new float[]{
+ primaries.red.X, primaries.red.Y, primaries.red.Z,
+ primaries.green.X, primaries.green.Y, primaries.green.Z,
+ primaries.blue.X, primaries.blue.Y, primaries.blue.Z,
},
- new float[] { primaries.white.X, primaries.white.Y, primaries.white.Z }
- );
+ new float[]{primaries.white.X, primaries.white.Y, primaries.white.Z}
+ );
}
private ColorSpace.Rgb getDisplayColorSpaceFromResources(Resources res) {
@@ -1540,7 +1543,7 @@
return makeRgbColorSpaceFromXYZ(displayRedGreenBlueXYZ, displayWhiteXYZ);
}
- };
+ }
/**
* Local service that allows color transforms to be enabled from other system services.
@@ -1572,10 +1575,6 @@
return mDisplayWhiteBalanceTintController.isActivated();
}
- public void dump(PrintWriter pw) {
- mDisplayWhiteBalanceTintController.dump(pw);
- }
-
/**
* Adds a {@link WeakReference<ColorTransformController>} for a newly started activity, and
* invokes {@link ColorTransformController#applyAppSaturation(float[], float[])} if needed.
diff --git a/services/core/java/com/android/server/display/DisplayTransformManager.java b/services/core/java/com/android/server/display/color/DisplayTransformManager.java
similarity index 96%
rename from services/core/java/com/android/server/display/DisplayTransformManager.java
rename to services/core/java/com/android/server/display/color/DisplayTransformManager.java
index ef92401..026837f 100644
--- a/services/core/java/com/android/server/display/DisplayTransformManager.java
+++ b/services/core/java/com/android/server/display/color/DisplayTransformManager.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.display;
+package com.android.server.display.color;
import android.app.ActivityTaskManager;
import android.hardware.display.ColorDisplayManager;
@@ -117,12 +117,12 @@
/**
* Sets and applies a current color transform matrix for a given level.
* <p>
- * Note: all color transforms are first composed to a single matrix in ascending order based
- * on level before being applied to the display.
+ * Note: all color transforms are first composed to a single matrix in ascending order based on
+ * level before being applied to the display.
*
* @param level the level used to identify and compose the color transform (low -> high)
* @param value the 4x4 color transform matrix (in column-major order), or {@code null} to
- * remove the color transform matrix associated with the provided level
+ * remove the color transform matrix associated with the provided level
*/
public void setColorMatrix(int level, float[] value) {
if (value != null && value.length != 16) {
@@ -235,13 +235,15 @@
}
/**
- * Return true when the specified colorMode requires the color matrix to
- * work in linear space.
+ * Return true when the specified colorMode requires the color matrix to work in linear space.
*/
public static boolean needsLinearColorMatrix(int colorMode) {
return colorMode != ColorDisplayManager.COLOR_MODE_SATURATED;
}
+ /**
+ * Sets color mode and updates night display transform values.
+ */
public boolean setColorMode(int colorMode, float[] nightDisplayMatrix) {
if (colorMode == ColorDisplayManager.COLOR_MODE_NATURAL) {
applySaturation(COLOR_SATURATION_NATURAL);
@@ -264,8 +266,8 @@
}
/**
- * Returns whether the screen is color managed via SurfaceFlinger's
- * {@link #SURFACE_FLINGER_TRANSACTION_QUERY_COLOR_MANAGED}.
+ * Returns whether the screen is color managed via SurfaceFlinger's {@link
+ * #SURFACE_FLINGER_TRANSACTION_QUERY_COLOR_MANAGED}.
*/
public boolean isDeviceColorManaged() {
final IBinder flinger = ServiceManager.getService(SURFACE_FLINGER);
diff --git a/services/core/java/com/android/server/display/color/OWNERS b/services/core/java/com/android/server/display/color/OWNERS
new file mode 100644
index 0000000..27adf12
--- /dev/null
+++ b/services/core/java/com/android/server/display/color/OWNERS
@@ -0,0 +1,4 @@
+christyfranks@google.com
+justinklaassen@google.com
+
+per-file DisplayTransformManager.java=michaelwr@google.com
\ No newline at end of file
diff --git a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java
index d95e92b..e7181e2 100644
--- a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java
+++ b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceController.java
@@ -22,7 +22,7 @@
import com.android.internal.util.Preconditions;
import com.android.server.LocalServices;
-import com.android.server.display.ColorDisplayService.ColorDisplayServiceInternal;
+import com.android.server.display.color.ColorDisplayService.ColorDisplayServiceInternal;
import com.android.server.display.utils.History;
import java.io.PrintWriter;
diff --git a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceSettings.java b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceSettings.java
index a53e91c..1b7251c 100644
--- a/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceSettings.java
+++ b/services/core/java/com/android/server/display/whitebalance/DisplayWhiteBalanceSettings.java
@@ -29,8 +29,8 @@
import com.android.internal.util.Preconditions;
import com.android.server.LocalServices;
-import com.android.server.display.ColorDisplayService;
-import com.android.server.display.ColorDisplayService.ColorDisplayServiceInternal;
+import com.android.server.display.color.ColorDisplayService;
+import com.android.server.display.color.ColorDisplayService.ColorDisplayServiceInternal;
import com.android.server.display.whitebalance.DisplayWhiteBalanceController.Callbacks;
import java.io.PrintWriter;
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 96ba084..b4a93d3 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -64,7 +64,6 @@
import android.content.res.TypedArray;
import android.database.ContentObserver;
import android.graphics.drawable.Drawable;
-import android.hardware.display.DisplayManagerInternal;
import android.inputmethodservice.InputMethodService;
import android.net.Uri;
import android.os.Binder;
@@ -99,8 +98,6 @@
import android.util.Printer;
import android.util.Slog;
import android.view.ContextThemeWrapper;
-import android.view.Display;
-import android.view.DisplayInfo;
import android.view.IWindowManager;
import android.view.InputChannel;
import android.view.LayoutInflater;
@@ -1374,13 +1371,7 @@
mIWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
- final DisplayManagerInternal displayManagerInternal = LocalServices.getService(
- DisplayManagerInternal.class);
- mImeDisplayValidator = (displayId) -> {
- final DisplayInfo displayInfo = displayManagerInternal.getDisplayInfo(displayId);
- return displayInfo != null
- && (displayInfo.flags & Display.FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0;
- };
+ mImeDisplayValidator = mWindowManagerInternal::shouldShowSystemDecorOnDisplay;
mCaller = new HandlerCaller(context, null, new HandlerCaller.Callback() {
@Override
public void executeMessage(Message msg) {
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 5156300..8e8477a 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -142,6 +142,7 @@
// these need to match ElapsedRealtimeFlags enum in types.hal
private static final int ELAPSED_REALTIME_HAS_TIMESTAMP_NS = 1;
+ private static final int ELAPSED_REALTIME_HAS_TIME_UNCERTAINTY_NS = 2;
// IMPORTANT - the GPS_DELETE_* symbols here must match GnssAidingData enum in IGnss.hal
private static final int GPS_DELETE_EPHEMERIS = 0x0001;
@@ -687,7 +688,7 @@
}
}
- private void handleRequestLocation(boolean independentFromGnss) {
+ private void handleRequestLocation(boolean independentFromGnss, boolean isUserEmergency) {
if (isRequestLocationRateLimited()) {
if (DEBUG) {
Log.d(TAG, "RequestLocation is denied due to too frequent requests.");
@@ -723,9 +724,17 @@
String.format(
"GNSS HAL Requesting location updates from %s provider for %d millis.",
provider, durationMillis));
+
+ LocationRequest locationRequest = LocationRequest.createFromDeprecatedProvider(provider,
+ LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS, /* minDistance= */ 0,
+ /* singleShot= */ false);
+
+ // Ignore location settings if in emergency mode.
+ if (isUserEmergency && mNIHandler.getInEmergency()) {
+ locationRequest.setLocationSettingsIgnored(true);
+ }
try {
- locationManager.requestLocationUpdates(provider,
- LOCATION_UPDATE_MIN_TIME_INTERVAL_MILLIS, /*minDistance=*/ 0,
+ locationManager.requestLocationUpdates(locationRequest,
locationListener, mHandler.getLooper());
locationListener.mNumLocationUpdateRequest++;
mHandler.postDelayed(() -> {
@@ -761,15 +770,18 @@
float bearingAccuracyDegrees = location.getBearingAccuracyDegrees();
long timestamp = location.getTime();
- int elapsedRealtimeFlags = ELAPSED_REALTIME_HAS_TIMESTAMP_NS;
+ int elapsedRealtimeFlags = ELAPSED_REALTIME_HAS_TIMESTAMP_NS
+ | (location.hasElapsedRealtimeUncertaintyNanos()
+ ? ELAPSED_REALTIME_HAS_TIME_UNCERTAINTY_NS : 0);
long elapsedRealtimeNanos = location.getElapsedRealtimeNanos();
+ long elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos();
native_inject_best_location(
gnssLocationFlags, latitudeDegrees, longitudeDegrees,
altitudeMeters, speedMetersPerSec, bearingDegrees,
horizontalAccuracyMeters, verticalAccuracyMeters,
speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp,
- elapsedRealtimeFlags, elapsedRealtimeNanos);
+ elapsedRealtimeFlags, elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos);
}
/** Returns true if the location request is too frequent. */
@@ -1828,11 +1840,13 @@
}
@NativeEntryPoint
- private void requestLocation(boolean independentFromGnss) {
+ private void requestLocation(boolean independentFromGnss, boolean isUserEmergency) {
if (DEBUG) {
- Log.d(TAG, "requestLocation. independentFromGnss: " + independentFromGnss);
+ Log.d(TAG, "requestLocation. independentFromGnss: " + independentFromGnss
+ + ", isUserEmergency: "
+ + isUserEmergency);
}
- sendMessage(REQUEST_LOCATION, 0, independentFromGnss);
+ sendMessage(REQUEST_LOCATION, independentFromGnss ? 1 : 0, isUserEmergency);
}
@NativeEntryPoint
@@ -1923,7 +1937,7 @@
mNtpTimeHelper.retrieveAndInjectNtpTime();
break;
case REQUEST_LOCATION:
- handleRequestLocation((boolean) msg.obj);
+ handleRequestLocation(msg.arg1 == 1, (boolean) msg.obj);
break;
case DOWNLOAD_XTRA_DATA:
handleDownloadXtraData();
@@ -2161,7 +2175,8 @@
double altitudeMeters, float speedMetersPerSec, float bearingDegrees,
float horizontalAccuracyMeters, float verticalAccuracyMeters,
float speedAccuracyMetersPerSecond, float bearingAccuracyDegrees,
- long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos);
+ long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos,
+ long elapsedRealtimeUncertaintyNanos);
private native void native_inject_location(double latitude, double longitude, float accuracy);
diff --git a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
index fccff57..270fbc6 100644
--- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
+++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
@@ -16,17 +16,15 @@
package com.android.server.media.projection;
-import com.android.server.Watchdog;
-
import android.Manifest;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.display.DisplayManager;
import android.media.MediaRouter;
-import android.media.projection.IMediaProjectionManager;
import android.media.projection.IMediaProjection;
import android.media.projection.IMediaProjectionCallback;
+import android.media.projection.IMediaProjectionManager;
import android.media.projection.IMediaProjectionWatcherCallback;
import android.media.projection.MediaProjectionInfo;
import android.media.projection.MediaProjectionManager;
@@ -41,6 +39,7 @@
import com.android.internal.util.DumpUtils;
import com.android.server.SystemService;
+import com.android.server.Watchdog;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -361,8 +360,9 @@
@Override // Binder call
public boolean canProjectAudio() {
- return mType == MediaProjectionManager.TYPE_MIRRORING ||
- mType == MediaProjectionManager.TYPE_PRESENTATION;
+ return mType == MediaProjectionManager.TYPE_MIRRORING
+ || mType == MediaProjectionManager.TYPE_PRESENTATION
+ || mType == MediaProjectionManager.TYPE_SCREEN_CAPTURE;
}
@Override // Binder call
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index bffd60b..205ddb0 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -82,7 +82,6 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.DataUsageRequest;
-import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
@@ -196,8 +195,6 @@
private final boolean mUseBpfTrafficStats;
- private IConnectivityManager mConnManager;
-
@VisibleForTesting
public static final String ACTION_NETWORK_STATS_POLL =
"com.android.server.action.NETWORK_STATS_POLL";
@@ -259,6 +256,7 @@
private final ArrayMap<String, NetworkIdentitySet> mActiveUidIfaces = new ArrayMap<>();
/** Current default active iface. */
+ @GuardedBy("mStatsLock")
private String mActiveIface;
/** Set of any ifaces associated with mobile networks since boot. */
@@ -269,6 +267,10 @@
@GuardedBy("mStatsLock")
private Network[] mDefaultNetworks = new Network[0];
+ /** Set containing info about active VPNs and their underlying networks. */
+ @GuardedBy("mStatsLock")
+ private VpnInfo[] mVpnInfos = new VpnInfo[0];
+
private final DropBoxNonMonotonicObserver mNonMonotonicObserver =
new DropBoxNonMonotonicObserver();
@@ -382,10 +384,6 @@
mHandlerCallback = callback;
}
- public void bindConnectivityManager(IConnectivityManager connManager) {
- mConnManager = checkNotNull(connManager, "missing IConnectivityManager");
- }
-
public void systemReady() {
mSystemReady = true;
@@ -864,13 +862,17 @@
}
@Override
- public void forceUpdateIfaces(Network[] defaultNetworks) {
+ public void forceUpdateIfaces(
+ Network[] defaultNetworks,
+ VpnInfo[] vpnArray,
+ NetworkState[] networkStates,
+ String activeIface) {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
assertBandwidthControlEnabled();
final long token = Binder.clearCallingIdentity();
try {
- updateIfaces(defaultNetworks);
+ updateIfaces(defaultNetworks, vpnArray, networkStates, activeIface);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -1134,11 +1136,17 @@
}
};
- private void updateIfaces(Network[] defaultNetworks) {
+ private void updateIfaces(
+ Network[] defaultNetworks,
+ VpnInfo[] vpnArray,
+ NetworkState[] networkStates,
+ String activeIface) {
synchronized (mStatsLock) {
mWakeLock.acquire();
try {
- updateIfacesLocked(defaultNetworks);
+ mVpnInfos = vpnArray;
+ mActiveIface = activeIface;
+ updateIfacesLocked(defaultNetworks, networkStates);
} finally {
mWakeLock.release();
}
@@ -1152,7 +1160,7 @@
* {@link NetworkIdentitySet}.
*/
@GuardedBy("mStatsLock")
- private void updateIfacesLocked(Network[] defaultNetworks) {
+ private void updateIfacesLocked(Network[] defaultNetworks, NetworkState[] states) {
if (!mSystemReady) return;
if (LOGV) Slog.v(TAG, "updateIfacesLocked()");
@@ -1164,18 +1172,6 @@
// will be persisted during next alarm poll event.
performPollLocked(FLAG_PERSIST_NETWORK);
- final NetworkState[] states;
- final LinkProperties activeLink;
- try {
- states = mConnManager.getAllNetworkState();
- activeLink = mConnManager.getActiveLinkProperties();
- } catch (RemoteException e) {
- // ignored; service lives in system_server
- return;
- }
-
- mActiveIface = activeLink != null ? activeLink.getInterfaceName() : null;
-
// Rebuild active interfaces based on connected networks
mActiveIfaces.clear();
mActiveUidIfaces.clear();
@@ -1287,7 +1283,7 @@
Trace.traceEnd(TRACE_TAG_NETWORK);
// For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps.
- VpnInfo[] vpnArray = mConnManager.getAllVpnInfo();
+ VpnInfo[] vpnArray = mVpnInfos;
Trace.traceBegin(TRACE_TAG_NETWORK, "recordUid");
mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveUidIfaces, vpnArray, currentTime);
Trace.traceEnd(TRACE_TAG_NETWORK);
diff --git a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java
index f4454ae..64f31cd 100644
--- a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java
+++ b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java
@@ -31,10 +31,12 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserManager;
+import android.util.ArraySet;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
+import com.android.server.SystemConfig;
import java.io.FileDescriptor;
@@ -55,10 +57,13 @@
private final Object mLock = new Object();
private final Context mContext;
private final AppOpsManager mAppOps;
+ private final ArraySet<String> mBugreportWhitelistedPackages;
BugreportManagerServiceImpl(Context context) {
mContext = context;
mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ mBugreportWhitelistedPackages =
+ SystemConfig.getInstance().getBugreportWhitelistedPackages();
}
@Override
@@ -78,11 +83,20 @@
Preconditions.checkNotNull(bugreportFd);
Preconditions.checkNotNull(listener);
validateBugreportMode(bugreportMode);
- ensureIsPrimaryUser();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ ensureIsPrimaryUser();
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
int callingUid = Binder.getCallingUid();
mAppOps.checkPackage(callingUid, callingPackage);
+ if (!mBugreportWhitelistedPackages.contains(callingPackage)) {
+ throw new SecurityException(
+ callingPackage + " is not whitelisted to use Bugreport API");
+ }
synchronized (mLock) {
startBugreportLocked(callingUid, callingPackage, bugreportFd, screenshotFd,
bugreportMode, listener);
diff --git a/services/core/java/com/android/server/pm/DynamicCodeLoggingService.java b/services/core/java/com/android/server/pm/DynamicCodeLoggingService.java
index d53d81c..a1ff76fc 100644
--- a/services/core/java/com/android/server/pm/DynamicCodeLoggingService.java
+++ b/services/core/java/com/android/server/pm/DynamicCodeLoggingService.java
@@ -61,7 +61,7 @@
private static final Pattern EXECUTE_NATIVE_AUDIT_PATTERN =
Pattern.compile(".*\\bavc: granted \\{ execute(?:_no_trans|) \\} .*"
+ "\\bpath=(?:\"([^\" ]*)\"|([0-9A-F]+)) .*"
- + "\\bscontext=u:r:untrusted_app_2(?:5|7):.*"
+ + "\\bscontext=u:r:untrusted_app(?:_25|_27)?:.*"
+ "\\btcontext=u:object_r:app_data_file:.*"
+ "\\btclass=file\\b.*");
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 580137d..4b46374 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -47,10 +47,12 @@
import android.content.pm.dex.DexMetadataHelper;
import android.os.FileUtils;
import android.os.PowerManager;
+import android.os.Process;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.WorkSource;
+import android.os.storage.StorageManager;
import android.util.Log;
import android.util.Slog;
@@ -146,6 +148,51 @@
}
}
+ int performDexOpt(SharedLibraryInfo info, String[] instructionSets, DexoptOptions options) {
+ String classLoaderContext = DexoptUtils.getClassLoaderContext(info);
+ final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
+ String compilerFilter = PackageManagerServiceCompilerMapping.getCompilerFilterForReason(
+ PackageManagerService.REASON_SHARED);
+ int result = DEX_OPT_SKIPPED;
+ for (String instructionSet : dexCodeInstructionSets) {
+ int dexoptNeeded = getDexoptNeeded(
+ info.getPath(), instructionSet, compilerFilter,
+ classLoaderContext, false /* newProfile */,
+ false /* downgrade */);
+ if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) {
+ continue;
+ }
+ // Special string recognized by installd.
+ final String packageName = "*";
+ final String outputPath = null;
+ int dexFlags = DEXOPT_PUBLIC
+ | (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0)
+ | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0);
+ dexFlags = adjustDexoptFlags(dexFlags);
+ final String uuid = StorageManager.UUID_SYSTEM;
+ final String seInfo = null;
+ final int targetSdkVersion = 0; // Builtin libraries targets the system's SDK version
+ try {
+ mInstaller.dexopt(info.getPath(), Process.SYSTEM_UID, packageName,
+ instructionSet, dexoptNeeded, outputPath, dexFlags, compilerFilter,
+ uuid, classLoaderContext, seInfo, false /* downgrade */,
+ targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null,
+ getReasonName(options.getCompilationReason()));
+ // The end result is:
+ // - FAILED if any path failed,
+ // - PERFORMED if at least one path needed compilation,
+ // - SKIPPED when all paths are up to date
+ if (result != DEX_OPT_FAILED) {
+ result = DEX_OPT_PERFORMED;
+ }
+ } catch (InstallerException e) {
+ Slog.w(TAG, "Failed to dexopt", e);
+ result = DEX_OPT_FAILED;
+ }
+ }
+ return result;
+ }
+
/**
* Performs dexopt on all code paths of the given package.
* It assumes the install lock is held.
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 80e794f..15a00d5 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1935,7 +1935,7 @@
final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
if (pkgSetting.getInstallReason(userId)
!= PackageManager.INSTALL_REASON_DEVICE_RESTORE) {
- setDefaultBrowserPackageName(null, userId);
+ setDefaultBrowserAsyncLPw(null, userId);
}
}
@@ -9404,18 +9404,27 @@
// at boot, or background job), the passed 'targetCompilerFilter' stays the same,
// and the first package that uses the library will dexopt it. The
// others will see that the compiled code for the library is up to date.
- Collection<PackageParser.Package> deps = findSharedNonSystemLibraries(p);
+ Collection<SharedLibraryInfo> deps = findSharedLibraries(p);
final String[] instructionSets = getAppDexInstructionSets(p.applicationInfo);
if (!deps.isEmpty()) {
DexoptOptions libraryOptions = new DexoptOptions(options.getPackageName(),
options.getCompilationReason(), options.getCompilerFilter(),
options.getSplitName(),
options.getFlags() | DexoptOptions.DEXOPT_AS_SHARED_LIBRARY);
- for (PackageParser.Package depPackage : deps) {
- // TODO: Analyze and investigate if we (should) profile libraries.
- pdo.performDexOpt(depPackage, instructionSets,
- getOrCreateCompilerPackageStats(depPackage),
- mDexManager.getPackageUseInfoOrDefault(depPackage.packageName), libraryOptions);
+ for (SharedLibraryInfo info : deps) {
+ PackageParser.Package depPackage = null;
+ synchronized (mPackages) {
+ depPackage = mPackages.get(info.getPackageName());
+ }
+ if (depPackage != null) {
+ // TODO: Analyze and investigate if we (should) profile libraries.
+ pdo.performDexOpt(depPackage, instructionSets,
+ getOrCreateCompilerPackageStats(depPackage),
+ mDexManager.getPackageUseInfoOrDefault(depPackage.packageName),
+ libraryOptions);
+ } else {
+ pdo.performDexOpt(info, instructionSets, libraryOptions);
+ }
}
}
return pdo.performDexOpt(p, instructionSets,
@@ -9461,63 +9470,48 @@
}
}
- List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) {
- if (p.usesLibraries != null || p.usesOptionalLibraries != null
- || p.usesStaticLibraries != null) {
- ArrayList<PackageParser.Package> retValue = new ArrayList<>();
+ private static List<SharedLibraryInfo> findSharedLibraries(PackageParser.Package p) {
+ if (p.usesLibraryInfos != null) {
+ ArrayList<SharedLibraryInfo> retValue = new ArrayList<>();
Set<String> collectedNames = new HashSet<>();
- findSharedNonSystemLibrariesRecursive(p, retValue, collectedNames);
-
- retValue.remove(p);
-
+ for (SharedLibraryInfo info : p.usesLibraryInfos) {
+ findSharedLibrariesRecursive(info, retValue, collectedNames);
+ }
return retValue;
} else {
return Collections.emptyList();
}
}
- private void findSharedNonSystemLibrariesRecursive(PackageParser.Package p,
- ArrayList<PackageParser.Package> collected, Set<String> collectedNames) {
- if (!collectedNames.contains(p.packageName)) {
- collectedNames.add(p.packageName);
- collected.add(p);
+ private static void findSharedLibrariesRecursive(SharedLibraryInfo info,
+ ArrayList<SharedLibraryInfo> collected, Set<String> collectedNames) {
+ if (!collectedNames.contains(info.getName())) {
+ collectedNames.add(info.getName());
+ collected.add(info);
- if (p.usesLibraries != null) {
- findSharedNonSystemLibrariesRecursive(p.usesLibraries,
- null, collected, collectedNames);
- }
- if (p.usesOptionalLibraries != null) {
- findSharedNonSystemLibrariesRecursive(p.usesOptionalLibraries,
- null, collected, collectedNames);
- }
- if (p.usesStaticLibraries != null) {
- findSharedNonSystemLibrariesRecursive(p.usesStaticLibraries,
- p.usesStaticLibrariesVersions, collected, collectedNames);
+ if (info.getDependencies() != null) {
+ for (SharedLibraryInfo dep : info.getDependencies()) {
+ findSharedLibrariesRecursive(dep, collected, collectedNames);
+ }
}
}
}
- private void findSharedNonSystemLibrariesRecursive(ArrayList<String> libs, long[] versions,
- ArrayList<PackageParser.Package> collected, Set<String> collectedNames) {
- final int libNameCount = libs.size();
- for (int i = 0; i < libNameCount; i++) {
- String libName = libs.get(i);
- long version = (versions != null && versions.length == libNameCount)
- ? versions[i] : PackageManager.VERSION_CODE_HIGHEST;
- PackageParser.Package libPkg = findSharedNonSystemLibrary(libName, version);
- if (libPkg != null) {
- findSharedNonSystemLibrariesRecursive(libPkg, collected, collectedNames);
+ List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package pkg) {
+ List<SharedLibraryInfo> deps = findSharedLibraries(pkg);
+ if (!deps.isEmpty()) {
+ ArrayList<PackageParser.Package> retValue = new ArrayList<>();
+ synchronized (mPackages) {
+ for (SharedLibraryInfo info : deps) {
+ PackageParser.Package depPackage = mPackages.get(info.getPackageName());
+ if (depPackage != null) {
+ retValue.add(depPackage);
+ }
+ }
}
- }
- }
-
- private PackageParser.Package findSharedNonSystemLibrary(String name, long version) {
- synchronized (mPackages) {
- SharedLibraryInfo libraryInfo = getSharedLibraryInfoLPr(name, version);
- if (libraryInfo != null) {
- return mPackages.get(libraryInfo.getPackageName());
- }
- return null;
+ return retValue;
+ } else {
+ return Collections.emptyList();
}
}
@@ -13687,6 +13681,23 @@
return true;
}
+ private void setDefaultBrowserAsyncLPw(@Nullable String packageName, @UserIdInt int userId) {
+ if (userId == UserHandle.USER_ALL) {
+ return;
+ }
+ if (mDefaultBrowserProvider == null) {
+ Slog.e(TAG, "mDefaultBrowserProvider is null");
+ return;
+ }
+ mDefaultBrowserProvider.setDefaultBrowserAsync(packageName, userId);
+ if (packageName != null) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultBrowser(packageName,
+ userId);
+ }
+ }
+ }
+
@Override
public String getDefaultBrowserPackageName(int userId) {
if (UserHandle.getCallingUserId() != userId) {
@@ -14346,27 +14357,8 @@
}
if (dataOwnerPkg != null) {
- // If installed, the package will get access to data left on the device by its
- // predecessor. As a security measure, this is permited only if this is not a
- // version downgrade or if the predecessor package is marked as debuggable and
- // a downgrade is explicitly requested.
- //
- // On debuggable platform builds, downgrades are permitted even for
- // non-debuggable packages to make testing easier. Debuggable platform builds do
- // not offer security guarantees and thus it's OK to disable some security
- // mechanisms to make debugging/testing easier on those builds. However, even on
- // debuggable builds downgrades of packages are permitted only if requested via
- // installFlags. This is because we aim to keep the behavior of debuggable
- // platform builds as close as possible to the behavior of non-debuggable
- // platform builds.
- final boolean downgradeRequested =
- (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
- final boolean packageDebuggable =
- (dataOwnerPkg.applicationInfo.flags
- & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
- final boolean downgradePermitted =
- (downgradeRequested) && ((Build.IS_DEBUGGABLE) || (packageDebuggable));
- if (!downgradePermitted) {
+ if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
+ dataOwnerPkg.applicationInfo.flags)) {
try {
checkDowngrade(dataOwnerPkg, pkgLite);
} catch (PackageManagerException e) {
@@ -23119,6 +23111,18 @@
}
return 0;
}
+
+ @Override
+ public boolean[] isAudioPlaybackCaptureAllowed(String[] packageNames)
+ throws RemoteException {
+ int callingUser = UserHandle.getUserId(Binder.getCallingUid());
+ boolean[] results = new boolean[packageNames.length];
+ for (int i = results.length - 1; i >= 0; --i) {
+ ApplicationInfo appInfo = getApplicationInfo(packageNames[i], 0, callingUser);
+ results[i] = appInfo == null ? false : appInfo.isAudioPlaybackCaptureAllowed();
+ }
+ return results;
+ }
}
private class PackageManagerInternalImpl extends PackageManagerInternal {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 6134d30..3218c86 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -32,6 +32,7 @@
import android.app.AppGlobals;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfoLite;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
@@ -796,6 +797,36 @@
}
/**
+ * Checks whenever downgrade of an app is permitted.
+ *
+ * @param installFlags flags of the current install.
+ * @param applicationFlags flags of the currently installed version of the app.
+ * @return {@code true} if downgrade is permitted according to the {@code installFlags} and
+ * {@code applicationFlags}.
+ */
+ public static boolean isDowngradePermitted(int installFlags, int applicationFlags) {
+ // If installed, the package will get access to data left on the device by its
+ // predecessor. As a security measure, this is permited only if this is not a
+ // version downgrade or if the predecessor package is marked as debuggable and
+ // a downgrade is explicitly requested.
+ //
+ // On debuggable platform builds, downgrades are permitted even for
+ // non-debuggable packages to make testing easier. Debuggable platform builds do
+ // not offer security guarantees and thus it's OK to disable some security
+ // mechanisms to make debugging/testing easier on those builds. However, even on
+ // debuggable builds downgrades of packages are permitted only if requested via
+ // installFlags. This is because we aim to keep the behavior of debuggable
+ // platform builds as close as possible to the behavior of non-debuggable
+ // platform builds.
+ final boolean downgradeRequested =
+ (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
+ final boolean packageDebuggable =
+ (applicationFlags
+ & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+ return (downgradeRequested) && ((Build.IS_DEBUGGABLE) || (packageDebuggable));
+ }
+
+ /**
* Copy package to the target location.
*
* @param packagePath absolute path to the package to be copied. Can be
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 92fe377..59e5d77 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4372,6 +4372,7 @@
ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE",
ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION",
ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE",
+ ApplicationInfo.PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE, "ALLOW_AUDIO_PLAYBACK_CAPTURE",
ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND, "BACKUP_IN_FOREGROUND",
ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE",
ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE, "DEFAULT_TO_DEVICE_PROTECTED_STORAGE",
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index fac3839..22a85eb 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -144,12 +144,40 @@
private boolean submitSessionToApexService(@NonNull PackageInstallerSession session,
List<PackageInstallerSession> childSessions,
ApexInfoList apexInfoList) {
- return mApexManager.submitStagedSession(
+ boolean submittedToApexd = mApexManager.submitStagedSession(
session.sessionId,
childSessions != null
? childSessions.stream().mapToInt(s -> s.sessionId).toArray() :
new int[]{},
apexInfoList);
+ if (!submittedToApexd) {
+ session.setStagedSessionFailed(
+ SessionInfo.STAGED_SESSION_VERIFICATION_FAILED,
+ "APEX staging failed, check logcat messages from apexd for more details.");
+ return false;
+ }
+ for (ApexInfo newPackage : apexInfoList.apexInfos) {
+ PackageInfo activePackage = mApexManager.getActivePackage(newPackage.packageName);
+ if (activePackage == null) {
+ continue;
+ }
+ long activeVersion = activePackage.applicationInfo.longVersionCode;
+ boolean allowsDowngrade = PackageManagerServiceUtils.isDowngradePermitted(
+ session.params.installFlags, activePackage.applicationInfo.flags);
+ if (activeVersion > newPackage.versionCode && !allowsDowngrade) {
+ session.setStagedSessionFailed(
+ SessionInfo.STAGED_SESSION_VERIFICATION_FAILED,
+ "Downgrade of APEX package " + newPackage.packageName
+ + " is not allowed. Active version: " + activeVersion
+ + " attempted: " + newPackage.versionCode);
+
+ if (!mApexManager.abortActiveSession()) {
+ Slog.e(TAG, "Failed to abort apex session " + session.sessionId);
+ }
+ return false;
+ }
+ }
+ return true;
}
private static boolean isApexSession(@NonNull PackageInstallerSession session) {
@@ -184,9 +212,7 @@
}
if (!success) {
- session.setStagedSessionFailed(
- SessionInfo.STAGED_SESSION_VERIFICATION_FAILED,
- "APEX staging failed, check logcat messages from apexd for more details.");
+ // submitSessionToApexService will populate error.
return;
}
@@ -491,8 +517,10 @@
}
private static boolean isApexSessionFailed(ApexSessionInfo apexSessionInfo) {
+ // isRollbackInProgress is included to cover the scenario, when a device is rebooted in
+ // during the rollback, and apexd fails to resume the rollback after reboot.
return apexSessionInfo.isActivationFailed || apexSessionInfo.isUnknown
- || apexSessionInfo.isRolledBack;
+ || apexSessionInfo.isRolledBack || apexSessionInfo.isRollbackInProgress;
}
@GuardedBy("mStagedSessions")
diff --git a/services/core/java/com/android/server/pm/dex/DexoptUtils.java b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
index 91ad11e..5a473c1 100644
--- a/services/core/java/com/android/server/pm/dex/DexoptUtils.java
+++ b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
@@ -174,6 +174,18 @@
}
/**
+ * Creates the class loader context for the given shared library.
+ */
+ public static String getClassLoaderContext(SharedLibraryInfo info) {
+ String sharedLibrariesContext = "";
+ if (info.getDependencies() != null) {
+ sharedLibrariesContext = encodeSharedLibraries(info.getDependencies());
+ }
+ return encodeClassLoader(
+ "", SHARED_LIBRARY_LOADER_TYPE, sharedLibrariesContext);
+ }
+
+ /**
* Recursive method to generate the class loader context dependencies for the split with the
* given index. {@param classLoaderContexts} acts as an accumulator. Upton return
* {@code classLoaderContexts[index]} will contain the split dependency.
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 447234e..1d6e581 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -1473,6 +1473,13 @@
if (packageExceptions == null) {
// The package must be on the system image
PackageInfo packageInfo = getSystemPackageInfo(packageName);
+
+ if (packageInfo == null) {
+ Log.w(TAG, "No such package:" + packageName);
+ XmlUtils.skipCurrentTag(parser);
+ continue;
+ }
+
if (!isSystemPackage(packageInfo)) {
Log.w(TAG, "Unknown system package:" + packageName);
XmlUtils.skipCurrentTag(parser);
diff --git a/services/core/java/com/android/server/power/AttentionDetector.java b/services/core/java/com/android/server/power/AttentionDetector.java
index 8740256..406cbc1 100644
--- a/services/core/java/com/android/server/power/AttentionDetector.java
+++ b/services/core/java/com/android/server/power/AttentionDetector.java
@@ -19,9 +19,13 @@
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.util.Slog;
import android.util.StatsLog;
@@ -44,6 +48,8 @@
private static final String TAG = "AttentionDetector";
private static final boolean DEBUG = false;
+ private boolean mIsSettingEnabled;
+
/**
* Invoked whenever user attention is detected.
*/
@@ -128,15 +134,35 @@
mWakefulness = PowerManagerInternal.WAKEFULNESS_AWAKE;
}
+ @VisibleForTesting
+ void updateEnabledFromSettings(Context context) {
+ mIsSettingEnabled = Settings.System.getIntForUser(context.getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
+ }
+
public void systemReady(Context context) {
+ updateEnabledFromSettings(context);
mAttentionManager = LocalServices.getService(AttentionManagerInternal.class);
mMaximumExtensionMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionMaximumExtension);
mMaxAttentionApiTimeoutMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionApiTimeout);
+
+ context.getContentResolver().registerContentObserver(Settings.System.getUriFor(
+ Settings.System.ADAPTIVE_SLEEP),
+ false, new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateEnabledFromSettings(context);
+ }
+ }, UserHandle.USER_ALL);
}
public long updateUserActivity(long nextScreenDimming) {
+ if (!mIsSettingEnabled) {
+ return nextScreenDimming;
+ }
+
if (!isAttentionServiceSupported()) {
return nextScreenDimming;
}
@@ -182,7 +208,7 @@
* the activity happened.
*
* @param eventTime Activity time, in uptime millis.
- * @param event Activity type as defined in {@link PowerManager}.
+ * @param event Activity type as defined in {@link PowerManager}.
* @return 0 when activity was ignored, 1 when handled, -1 when invalid.
*/
public int onUserActivity(long eventTime, int event) {
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 89d24b1..bb23bc0 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -715,6 +715,15 @@
NativeWrapper createNativeWrapper() {
return new NativeWrapper();
}
+
+ WirelessChargerDetector createWirelessChargerDetector(
+ SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+ return new WirelessChargerDetector(sensorManager, suspendBlocker, handler);
+ }
+
+ AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+ return new AmbientDisplayConfiguration(context);
+ }
}
final Constants mConstants;
@@ -747,7 +756,7 @@
mHandlerThread.start();
mHandler = new PowerManagerHandler(mHandlerThread.getLooper());
mConstants = new Constants(mHandler);
- mAmbientDisplayConfiguration = new AmbientDisplayConfiguration(mContext);
+ mAmbientDisplayConfiguration = mInjector.createAmbientDisplayConfiguration(context);
mAttentionDetector = new AttentionDetector(this::onUserAttention, mLock);
mBatterySavingStats = new BatterySavingStats(mLock);
@@ -833,7 +842,7 @@
mInjector.createSuspendBlocker(this, "PowerManagerService.Broadcasts"),
mPolicy);
- mWirelessChargerDetector = new WirelessChargerDetector(sensorManager,
+ mWirelessChargerDetector = mInjector.createWirelessChargerDetector(sensorManager,
mInjector.createSuspendBlocker(
this, "PowerManagerService.WirelessChargerDetector"),
mHandler);
@@ -932,7 +941,8 @@
mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);
}
- private void readConfigurationLocked() {
+ @VisibleForTesting
+ void readConfigurationLocked() {
final Resources resources = mContext.getResources();
mDecoupleHalAutoSuspendModeFromDisplayConfig = resources.getBoolean(
@@ -3865,7 +3875,8 @@
return workSource != null ? new WorkSource(workSource) : null;
}
- private final class BatteryReceiver extends BroadcastReceiver {
+ @VisibleForTesting
+ final class BatteryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (mLock) {
@@ -3883,7 +3894,8 @@
}
}
- private final class UserSwitchedReceiver extends BroadcastReceiver {
+ @VisibleForTesting
+ final class UserSwitchedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (mLock) {
diff --git a/services/core/java/com/android/server/power/WirelessChargerDetector.java b/services/core/java/com/android/server/power/WirelessChargerDetector.java
index 18e5ce4..e8e9c67 100644
--- a/services/core/java/com/android/server/power/WirelessChargerDetector.java
+++ b/services/core/java/com/android/server/power/WirelessChargerDetector.java
@@ -28,6 +28,8 @@
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.io.PrintWriter;
/**
@@ -70,7 +72,8 @@
* sensor to detect this case.
* </p>
*/
-final class WirelessChargerDetector {
+@VisibleForTesting
+public class WirelessChargerDetector {
private static final String TAG = "WirelessChargerDetector";
private static final boolean DEBUG = false;
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
index 94bb3ea..5adcf35 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
@@ -384,7 +384,7 @@
* - When battery saver is on and the battery saver policy changes.
* - When adaptive battery saver becomes activated.
* - When adaptive battery saver becomes deactivated.
- * - When adaptive battery saver policy changes.
+ * - When adaptive battery saver is active (and full is off) and the policy changes.
*/
void handleBatterySaverStateChanged(boolean sendBroadcast, int reason) {
final LowPowerModeListener[] listeners;
diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java
index 17d3066..f533ad1 100644
--- a/services/core/java/com/android/server/role/RoleManagerService.java
+++ b/services/core/java/com/android/server/role/RoleManagerService.java
@@ -743,6 +743,25 @@
return false;
}
}
+
+ @Override
+ public void setDefaultBrowserAsync(@Nullable String packageName, @UserIdInt int userId) {
+ IRoleManagerCallback callback = new IRoleManagerCallback.Stub() {
+ @Override
+ public void onSuccess() {}
+ @Override
+ public void onFailure() {
+ Slog.e(LOG_TAG, "Failed to set default browser: " + packageName);
+ }
+ };
+ if (packageName != null) {
+ getOrCreateControllerService(userId).onAddRoleHolder(RoleManager.ROLE_BROWSER,
+ packageName, 0, callback);
+ } else {
+ getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_BROWSER, 0,
+ callback);
+ }
+ }
}
private class DefaultHomeProvider implements PackageManagerInternal.DefaultHomeProvider {
diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
index e9ccea54..56e1d08 100644
--- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
+++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
@@ -18,7 +18,6 @@
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.PackageRollbackInfo.RestoreInfo;
-import android.content.rollback.RollbackInfo;
import android.os.storage.StorageManager;
import android.util.IntArray;
import android.util.Log;
@@ -30,9 +29,11 @@
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Encapsulates the logic for initiating userdata snapshots and rollbacks via installd.
@@ -153,7 +154,7 @@
}
/**
- * Computes the list of pending backups for {@code userId} given lists of available rollbacks.
+ * Computes the list of pending backups for {@code userId} given lists of rollbacks.
* Packages pending backup for the given user are added to {@code pendingBackupPackages} along
* with their corresponding {@code PackageRollbackInfo}.
*
@@ -162,11 +163,11 @@
*/
private static List<RollbackData> computePendingBackups(int userId,
Map<String, PackageRollbackInfo> pendingBackupPackages,
- List<RollbackData> availableRollbacks) {
+ List<RollbackData> rollbacks) {
List<RollbackData> rd = new ArrayList<>();
- for (RollbackData data : availableRollbacks) {
- for (PackageRollbackInfo info : data.packages) {
+ for (RollbackData data : rollbacks) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
final IntArray pendingBackupUsers = info.getPendingBackups();
if (pendingBackupUsers != null) {
final int idx = pendingBackupUsers.indexOf(userId);
@@ -183,20 +184,20 @@
}
/**
- * Computes the list of pending restores for {@code userId} given lists of recent rollbacks.
+ * Computes the list of pending restores for {@code userId} given lists of rollbacks.
* Packages pending restore are added to {@code pendingRestores} along with their corresponding
* {@code PackageRollbackInfo}.
*
- * @return the list of {@code RollbackInfo} that has pending restores. Note that some of the
+ * @return the list of {@code RollbackData} that has pending restores. Note that some of the
* restores won't be performed, because they might be counteracted by pending backups.
*/
- private static List<RollbackInfo> computePendingRestores(int userId,
+ private static List<RollbackData> computePendingRestores(int userId,
Map<String, PackageRollbackInfo> pendingRestorePackages,
- List<RollbackInfo> recentRollbacks) {
- List<RollbackInfo> rd = new ArrayList<>();
+ List<RollbackData> rollbacks) {
+ List<RollbackData> rd = new ArrayList<>();
- for (RollbackInfo data : recentRollbacks) {
- for (PackageRollbackInfo info : data.getPackages()) {
+ for (RollbackData data : rollbacks) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
final RestoreInfo ri = info.getRestoreInfo(userId);
if (ri != null) {
pendingRestorePackages.put(info.getPackageName(), info);
@@ -215,18 +216,18 @@
* backups updates corresponding {@code changedRollbackData} with a mapping from {@code userId}
* to a inode of theirs CE user data snapshot.
*
- * @return a list {@code RollbackData} that have been changed and should be stored on disk.
+ * @return the set of {@code RollbackData} that have been changed and should be stored on disk.
*/
- public List<RollbackData> commitPendingBackupAndRestoreForUser(int userId,
- List<RollbackData> availableRollbacks, List<RollbackInfo> recentlyExecutedRollbacks) {
+ public Set<RollbackData> commitPendingBackupAndRestoreForUser(int userId,
+ List<RollbackData> rollbacks) {
final Map<String, PackageRollbackInfo> pendingBackupPackages = new HashMap<>();
final List<RollbackData> pendingBackups = computePendingBackups(userId,
- pendingBackupPackages, availableRollbacks);
+ pendingBackupPackages, rollbacks);
final Map<String, PackageRollbackInfo> pendingRestorePackages = new HashMap<>();
- final List<RollbackInfo> pendingRestores = computePendingRestores(userId,
- pendingRestorePackages, recentlyExecutedRollbacks);
+ final List<RollbackData> pendingRestores = computePendingRestores(userId,
+ pendingRestorePackages, rollbacks);
// First remove unnecessary backups, i.e. when user did not unlock their phone between the
// request to backup data and the request to restore it.
@@ -246,13 +247,13 @@
if (!pendingBackupPackages.isEmpty()) {
for (RollbackData data : pendingBackups) {
- for (PackageRollbackInfo info : data.packages) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
final IntArray pendingBackupUsers = info.getPendingBackups();
final int idx = pendingBackupUsers.indexOf(userId);
if (idx != -1) {
try {
long ceSnapshotInode = mInstaller.snapshotAppData(info.getPackageName(),
- userId, data.rollbackId, Installer.FLAG_STORAGE_CE);
+ userId, data.info.getRollbackId(), Installer.FLAG_STORAGE_CE);
info.putCeSnapshotInode(userId, ceSnapshotInode);
pendingBackupUsers.remove(idx);
} catch (InstallerException ie) {
@@ -266,13 +267,13 @@
}
if (!pendingRestorePackages.isEmpty()) {
- for (RollbackInfo data : pendingRestores) {
- for (PackageRollbackInfo info : data.getPackages()) {
+ for (RollbackData data : pendingRestores) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
final RestoreInfo ri = info.getRestoreInfo(userId);
if (ri != null) {
try {
mInstaller.restoreAppDataSnapshot(info.getPackageName(), ri.appId,
- ri.seInfo, userId, data.getRollbackId(),
+ ri.seInfo, userId, data.info.getRollbackId(),
Installer.FLAG_STORAGE_CE);
info.removeRestoreInfo(ri);
} catch (InstallerException ie) {
@@ -284,7 +285,9 @@
}
}
- return pendingBackups;
+ final Set<RollbackData> changed = new HashSet<>(pendingBackups);
+ changed.addAll(pendingRestores);
+ return changed;
}
/**
diff --git a/services/core/java/com/android/server/rollback/RollbackData.java b/services/core/java/com/android/server/rollback/RollbackData.java
index fcd5297..8a95877 100644
--- a/services/core/java/com/android/server/rollback/RollbackData.java
+++ b/services/core/java/com/android/server/rollback/RollbackData.java
@@ -16,27 +16,49 @@
package com.android.server.rollback;
-import android.content.rollback.PackageRollbackInfo;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.content.rollback.RollbackInfo;
import java.io.File;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.time.Instant;
import java.util.ArrayList;
-import java.util.List;
/**
* Information about a rollback available for a set of atomically installed
* packages.
*/
class RollbackData {
- /**
- * A unique identifier for this rollback.
- */
- public final int rollbackId;
+ @IntDef(flag = true, prefix = { "ROLLBACK_STATE_" }, value = {
+ ROLLBACK_STATE_ENABLING,
+ ROLLBACK_STATE_AVAILABLE,
+ ROLLBACK_STATE_COMMITTED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @interface RollbackState {}
/**
- * The per-package rollback information.
+ * The rollback is in the process of being enabled. It is not yet
+ * available for use.
*/
- public final List<PackageRollbackInfo> packages = new ArrayList<>();
+ static final int ROLLBACK_STATE_ENABLING = 0;
+
+ /**
+ * The rollback is currently available.
+ */
+ static final int ROLLBACK_STATE_AVAILABLE = 1;
+
+ /**
+ * The rollback has been committed.
+ */
+ static final int ROLLBACK_STATE_COMMITTED = 3;
+
+ /**
+ * The rollback info for this rollback.
+ */
+ public final RollbackInfo info;
/**
* The directory where the rollback data is stored.
@@ -46,22 +68,23 @@
/**
* The time when the upgrade occurred, for purposes of expiring
* rollback data.
+ *
+ * The timestamp is not applicable for all rollback states, but we make
+ * sure to keep it non-null to avoid potential errors there.
*/
- public Instant timestamp;
+ public @NonNull Instant timestamp;
/**
* The session ID for the staged session if this rollback data represents a staged session,
* {@code -1} otherwise.
*/
- public int stagedSessionId;
+ public final int stagedSessionId;
/**
- * A flag to indicate whether the rollback should be considered available
- * for use. This will always be true for rollbacks of non-staged sessions.
- * For rollbacks of staged sessions, this is not set to true until after
- * the staged session has been applied.
+ * The current state of the rollback.
+ * ENABLING, AVAILABLE, or COMMITTED.
*/
- public boolean isAvailable;
+ public @RollbackState int state;
/**
* The id of the post-reboot apk session for a staged install, if any.
@@ -69,24 +92,50 @@
public int apkSessionId = -1;
/**
- * Whether this Rollback is currently in progress. This field is true from the point
- * we commit a {@code PackageInstaller} session containing these packages to the point the
- * {@code PackageInstaller} calls into the {@code onFinished} callback.
+ * True if we are expecting the package manager to call restoreUserData
+ * for this rollback because it has just been committed but the rollback
+ * has not yet been fully applied.
*/
// NOTE: All accesses to this field are from the RollbackManager handler thread.
- public boolean inProgress = false;
+ public boolean restoreUserDataInProgress = false;
- RollbackData(int rollbackId, File backupDir, int stagedSessionId, boolean isAvailable) {
- this.rollbackId = rollbackId;
+ /**
+ * Constructs a new, empty RollbackData instance.
+ *
+ * @param rollbackId the id of the rollback.
+ * @param backupDir the directory where the rollback data is stored.
+ * @param stagedSessionId the session id if this is a staged rollback, -1 otherwise.
+ */
+ RollbackData(int rollbackId, File backupDir, int stagedSessionId) {
+ this.info = new RollbackInfo(rollbackId,
+ /* packages */ new ArrayList<>(),
+ /* isStaged */ stagedSessionId != -1,
+ /* causePackages */ new ArrayList<>(),
+ /* committedSessionId */ -1);
this.backupDir = backupDir;
this.stagedSessionId = stagedSessionId;
- this.isAvailable = isAvailable;
+ this.state = ROLLBACK_STATE_ENABLING;
+ this.timestamp = Instant.now();
+ }
+
+ /**
+ * Constructs a RollbackData instance with full rollback data information.
+ */
+ RollbackData(RollbackInfo info, File backupDir, Instant timestamp, int stagedSessionId,
+ @RollbackState int state, int apkSessionId, boolean restoreUserDataInProgress) {
+ this.info = info;
+ this.backupDir = backupDir;
+ this.timestamp = timestamp;
+ this.stagedSessionId = stagedSessionId;
+ this.state = state;
+ this.apkSessionId = apkSessionId;
+ this.restoreUserDataInProgress = restoreUserDataInProgress;
}
/**
* Whether the rollback is for rollback of a staged install.
*/
public boolean isStaged() {
- return stagedSessionId != -1;
+ return info.isStaged();
}
}
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
index 88a5fb4..f52f3a3 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
@@ -64,6 +64,7 @@
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
@@ -75,7 +76,6 @@
private static final String TAG = "RollbackManager";
// Rollbacks expire after 48 hours.
- // TODO: How to test rollback expiration works properly?
private static final long DEFAULT_ROLLBACK_LIFETIME_DURATION_MILLIS =
TimeUnit.HOURS.toMillis(48);
@@ -106,15 +106,10 @@
@GuardedBy("mLock")
private final Map<Integer, Integer> mChildSessions = new HashMap<>();
- // Package rollback data available to be used for rolling back a package.
+ // The list of all rollbacks, including available and committed rollbacks.
// This list is null until the rollback data has been loaded.
@GuardedBy("mLock")
- private List<RollbackData> mAvailableRollbacks;
-
- // The list of recently executed rollbacks.
- // This list is null until the rollback data has been loaded.
- @GuardedBy("mLock")
- private List<RollbackInfo> mRecentlyExecutedRollbacks;
+ private List<RollbackData> mRollbacks;
private final RollbackStore mRollbackStore;
@@ -176,17 +171,6 @@
}
}, filter, null, getHandler());
- // NOTE: A new intent filter is being created here because this broadcast
- // doesn't use a data scheme ("package") like above.
- IntentFilter sessionUpdatedFilter = new IntentFilter();
- sessionUpdatedFilter.addAction(PackageInstaller.ACTION_SESSION_UPDATED);
- mContext.registerReceiver(new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- onStagedSessionUpdated(intent);
- }
- }, sessionUpdatedFilter, null, getHandler());
-
IntentFilter enableRollbackFilter = new IntentFilter();
enableRollbackFilter.addAction(Intent.ACTION_PACKAGE_ENABLE_ROLLBACK);
try {
@@ -240,11 +224,10 @@
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
List<RollbackInfo> rollbacks = new ArrayList<>();
- for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
- RollbackData data = mAvailableRollbacks.get(i);
- if (data.isAvailable) {
- rollbacks.add(new RollbackInfo(data.rollbackId,
- data.packages, data.isStaged()));
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
+ if (data.state == RollbackData.ROLLBACK_STATE_AVAILABLE) {
+ rollbacks.add(data.info);
}
}
return new ParceledListSlice<>(rollbacks);
@@ -259,7 +242,13 @@
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- List<RollbackInfo> rollbacks = new ArrayList<>(mRecentlyExecutedRollbacks);
+ List<RollbackInfo> rollbacks = new ArrayList<>();
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
+ if (data.state == RollbackData.ROLLBACK_STATE_COMMITTED) {
+ rollbacks.add(data.info);
+ }
+ }
return new ParceledListSlice<>(rollbacks);
}
}
@@ -291,21 +280,12 @@
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- Iterator<RollbackData> iter = mAvailableRollbacks.iterator();
+ Iterator<RollbackData> iter = mRollbacks.iterator();
while (iter.hasNext()) {
RollbackData data = iter.next();
-
data.timestamp = data.timestamp.plusMillis(timeDifference);
- try {
- mRollbackStore.saveAvailableRollback(data);
- } catch (IOException ioe) {
- // TODO: figure out the right way to deal with this, especially if
- // it fails for some data and succeeds for others.
- Log.e(TAG, "Unable to save rollback info for : " + data.rollbackId,
- ioe);
- }
+ saveRollbackData(data);
}
-
}
}
};
@@ -329,18 +309,12 @@
Log.i(TAG, "Initiating rollback");
RollbackData data = getRollbackForId(rollbackId);
- if (data == null) {
+ if (data == null || data.state != RollbackData.ROLLBACK_STATE_AVAILABLE) {
sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE_ROLLBACK_UNAVAILABLE,
"Rollback unavailable");
return;
}
- if (data.inProgress) {
- sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE_ROLLBACK_UNAVAILABLE,
- "Rollback for package is already in progress.");
- return;
- }
-
// Verify the RollbackData is up to date with what's installed on
// device.
// TODO: We assume that between now and the time we commit the
@@ -349,7 +323,7 @@
// rollback racing with a roll-forward fix of a buggy package.
// Figure out how to ensure we don't commit the rollback if
// roll forward happens at the same time.
- for (PackageRollbackInfo info : data.packages) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
VersionedPackage installedVersion = getInstalledPackageVersion(info.getPackageName());
if (installedVersion == null) {
// TODO: Test this case
@@ -391,7 +365,7 @@
int parentSessionId = packageInstaller.createSession(parentParams);
PackageInstaller.Session parentSession = packageInstaller.openSession(parentSessionId);
- for (PackageRollbackInfo info : data.packages) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
// TODO: We can't get the installerPackageName for apex
@@ -439,13 +413,25 @@
final LocalIntentReceiver receiver = new LocalIntentReceiver(
(Intent result) -> {
getHandler().post(() -> {
- // We've now completed the rollback, so we mark it as no longer in
- // progress.
- data.inProgress = false;
int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
PackageInstaller.STATUS_FAILURE);
if (status != PackageInstaller.STATUS_SUCCESS) {
+ // Committing the rollback failed, but we
+ // still have all the info we need to try
+ // rolling back again, so restore the rollback
+ // state to how it was before we tried
+ // committing.
+ // TODO: Should we just kill this rollback if
+ // commit failed? Why would we expect commit
+ // not to fail again?
+ synchronized (mLock) {
+ // TODO: Could this cause a rollback to be
+ // resurrected if it should otherwise have
+ // expired by now?
+ data.state = RollbackData.ROLLBACK_STATE_AVAILABLE;
+ data.restoreUserDataInProgress = false;
+ }
sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE_INSTALL,
"Rollback downgrade install failed: "
+ result.getStringExtra(
@@ -453,9 +439,19 @@
return;
}
- addRecentlyExecutedRollback(new RollbackInfo(
- data.rollbackId, data.packages, data.isStaged(),
- causePackages, parentSessionId));
+ synchronized (mLock) {
+ if (!data.isStaged()) {
+ // All calls to restoreUserData should have
+ // completed by now for a non-staged install.
+ data.restoreUserDataInProgress = false;
+ }
+
+ data.info.setCommittedSessionId(parentSessionId);
+ data.info.getCausePackages().addAll(causePackages);
+ }
+ mRollbackStore.deletePackageCodePaths(data);
+ saveRollbackData(data);
+
sendSuccess(statusReceiver);
Intent broadcast = new Intent(Intent.ACTION_ROLLBACK_COMMITTED);
@@ -469,7 +465,10 @@
}
);
- data.inProgress = true;
+ synchronized (mLock) {
+ data.state = RollbackData.ROLLBACK_STATE_COMMITTED;
+ data.restoreUserDataInProgress = true;
+ }
parentSession.commit(receiver.getIntentSender());
} catch (IOException e) {
Log.e(TAG, "Rollback failed", e);
@@ -486,8 +485,7 @@
"reloadPersistedData");
synchronized (mLock) {
- mAvailableRollbacks = null;
- mRecentlyExecutedRollbacks = null;
+ mRollbacks = null;
}
getHandler().post(() -> {
updateRollbackLifetimeDurationInMillis();
@@ -500,17 +498,12 @@
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.MANAGE_ROLLBACKS,
"expireRollbackForPackage");
-
- // TODO: Should this take a package version number in addition to
- // package name? For now, just remove all rollbacks matching the
- // package name. This method is only currently used to facilitate
- // testing anyway.
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- Iterator<RollbackData> iter = mAvailableRollbacks.iterator();
+ Iterator<RollbackData> iter = mRollbacks.iterator();
while (iter.hasNext()) {
RollbackData data = iter.next();
- for (PackageRollbackInfo info : data.packages) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
if (info.getPackageName().equals(packageName)) {
iter.remove();
deleteRollback(data);
@@ -523,28 +516,16 @@
void onUnlockUser(int userId) {
getHandler().post(() -> {
- final List<RollbackData> availableRollbacks;
- final List<RollbackInfo> recentlyExecutedRollbacks;
+ final List<RollbackData> rollbacks;
synchronized (mLock) {
- ensureRollbackDataLoadedLocked();
- availableRollbacks = new ArrayList<>(mAvailableRollbacks);
- recentlyExecutedRollbacks = new ArrayList<>(mRecentlyExecutedRollbacks);
+ rollbacks = new ArrayList<>(mRollbacks);
}
- final List<RollbackData> changed =
- mAppDataRollbackHelper.commitPendingBackupAndRestoreForUser(userId,
- availableRollbacks, recentlyExecutedRollbacks);
+ final Set<RollbackData> changed =
+ mAppDataRollbackHelper.commitPendingBackupAndRestoreForUser(userId, rollbacks);
for (RollbackData rd : changed) {
- try {
- mRollbackStore.saveAvailableRollback(rd);
- } catch (IOException ioe) {
- Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe);
- }
- }
-
- synchronized (mLock) {
- mRollbackStore.saveRecentlyExecutedRollbacks(mRecentlyExecutedRollbacks);
+ saveRollbackData(rd);
}
});
}
@@ -569,42 +550,55 @@
scheduleExpiration(0);
getHandler().post(() -> {
- // Check to see if any staged sessions with rollback enabled have
- // been applied.
- List<RollbackData> staged = new ArrayList<>();
+ // Check to see if any rollback-enabled staged sessions or staged
+ // rollback sessions been applied.
+ List<RollbackData> enabling = new ArrayList<>();
+ List<RollbackData> restoreInProgress = new ArrayList<>();
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- for (RollbackData data : mAvailableRollbacks) {
- if (data.stagedSessionId != -1) {
- staged.add(data);
+ for (RollbackData data : mRollbacks) {
+ if (data.isStaged()) {
+ if (data.state == RollbackData.ROLLBACK_STATE_ENABLING) {
+ enabling.add(data);
+ } else if (data.restoreUserDataInProgress) {
+ restoreInProgress.add(data);
+ }
}
}
}
- for (RollbackData data : staged) {
+ for (RollbackData data : enabling) {
PackageInstaller installer = mContext.getPackageManager().getPackageInstaller();
PackageInstaller.SessionInfo session = installer.getSessionInfo(
data.stagedSessionId);
+ // TODO: What if session is null?
if (session != null) {
if (session.isStagedSessionApplied()) {
- synchronized (mLock) {
- data.isAvailable = true;
- }
- try {
- mRollbackStore.saveAvailableRollback(data);
- } catch (IOException ioe) {
- Log.e(TAG, "Unable to save rollback info for : "
- + data.rollbackId, ioe);
- }
+ makeRollbackAvailable(data);
} else if (session.isStagedSessionFailed()) {
// TODO: Do we need to remove this from
- // mAvailableRollbacks, or is it okay to leave as
+ // mRollbacks, or is it okay to leave as
// unavailable until the next reboot when it will go
// away on its own?
deleteRollback(data);
}
}
}
+
+ for (RollbackData data : restoreInProgress) {
+ PackageInstaller installer = mContext.getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionInfo session = installer.getSessionInfo(
+ data.stagedSessionId);
+ // TODO: What if session is null?
+ if (session != null) {
+ if (session.isStagedSessionApplied() || session.isStagedSessionFailed()) {
+ synchronized (mLock) {
+ data.restoreUserDataInProgress = false;
+ }
+ saveRollbackData(data);
+ }
+ }
+ }
});
}
@@ -621,12 +615,11 @@
/**
* Load rollback data from storage if it has not already been loaded.
- * After calling this function, mAvailableRollbacks and
- * mRecentlyExecutedRollbacks will be non-null.
+ * After calling this function, mRollbacks will be non-null.
*/
@GuardedBy("mLock")
private void ensureRollbackDataLoadedLocked() {
- if (mAvailableRollbacks == null) {
+ if (mRollbacks == null) {
loadAllRollbackDataLocked();
}
}
@@ -639,14 +632,9 @@
*/
@GuardedBy("mLock")
private void loadAllRollbackDataLocked() {
- mAvailableRollbacks = mRollbackStore.loadAvailableRollbacks();
- for (RollbackData data : mAvailableRollbacks) {
- mAllocatedRollbackIds.put(data.rollbackId, true);
- }
-
- mRecentlyExecutedRollbacks = mRollbackStore.loadRecentlyExecutedRollbacks();
- for (RollbackInfo info : mRecentlyExecutedRollbacks) {
- mAllocatedRollbackIds.put(info.getRollbackId(), true);
+ mRollbacks = mRollbackStore.loadAllRollbackData();
+ for (RollbackData data : mRollbacks) {
+ mAllocatedRollbackIds.put(data.info.getRollbackId(), true);
}
}
@@ -662,17 +650,21 @@
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- Iterator<RollbackData> iter = mAvailableRollbacks.iterator();
+ Iterator<RollbackData> iter = mRollbacks.iterator();
while (iter.hasNext()) {
RollbackData data = iter.next();
- for (PackageRollbackInfo info : data.packages) {
- if (info.getPackageName().equals(packageName)
- && !packageVersionsEqual(
- info.getVersionRolledBackFrom(),
- installedVersion)) {
- iter.remove();
- deleteRollback(data);
- break;
+ // TODO: Should we remove rollbacks in the ENABLING state here?
+ if (data.state == RollbackData.ROLLBACK_STATE_AVAILABLE
+ || data.state == RollbackData.ROLLBACK_STATE_ENABLING) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
+ if (info.getPackageName().equals(packageName)
+ && !packageVersionsEqual(
+ info.getVersionRolledBackFrom(),
+ installedVersion)) {
+ iter.remove();
+ deleteRollback(data);
+ break;
+ }
}
}
}
@@ -685,53 +677,6 @@
*/
private void onPackageFullyRemoved(String packageName) {
expireRollbackForPackage(packageName);
-
- synchronized (mLock) {
- ensureRollbackDataLoadedLocked();
- Iterator<RollbackInfo> iter = mRecentlyExecutedRollbacks.iterator();
- boolean changed = false;
- while (iter.hasNext()) {
- RollbackInfo rollback = iter.next();
- for (PackageRollbackInfo info : rollback.getPackages()) {
- if (packageName.equals(info.getPackageName())) {
- iter.remove();
- changed = true;
- break;
- }
- }
- }
-
- if (changed) {
- mRollbackStore.saveRecentlyExecutedRollbacks(mRecentlyExecutedRollbacks);
- }
- }
- }
-
- /**
- * Records that the given package has been recently rolled back.
- */
- private void addRecentlyExecutedRollback(RollbackInfo rollback) {
- // TODO: if the list of rollbacks gets too big, trim it to only those
- // that are necessary to keep track of.
- synchronized (mLock) {
- ensureRollbackDataLoadedLocked();
-
- // This should never happen because we can't have any pending backups left after
- // a rollback has been executed. See AppDataRollbackHelper#restoreAppData where we
- // clear all pending backups at the point of restore because they're guaranteed to be
- // no-ops.
- //
- // We may, however, have one or more pending restores left to handle.
- for (PackageRollbackInfo target : rollback.getPackages()) {
- if (target.getPendingBackups().size() > 0) {
- Log.e(TAG, "No backups allowed to be pending for: " + target);
- target.getPendingBackups().clear();
- }
- }
-
- mRecentlyExecutedRollbacks.add(rollback);
- mRollbackStore.saveRecentlyExecutedRollbacks(mRecentlyExecutedRollbacks);
- }
}
/**
@@ -768,17 +713,16 @@
// Check to see if anything needs expiration, and if so, expire it.
// Schedules future expiration as appropriate.
- // TODO: Handle cases where the user changes time on the device.
private void runExpiration() {
Instant now = Instant.now();
Instant oldest = null;
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- Iterator<RollbackData> iter = mAvailableRollbacks.iterator();
+ Iterator<RollbackData> iter = mRollbacks.iterator();
while (iter.hasNext()) {
RollbackData data = iter.next();
- if (!data.isAvailable) {
+ if (data.state != RollbackData.ROLLBACK_STATE_AVAILABLE) {
continue;
}
if (!now.isBefore(data.timestamp.plusMillis(mRollbackLifetimeDurationInMillis))) {
@@ -876,8 +820,8 @@
RollbackData rd = null;
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
- RollbackData data = mAvailableRollbacks.get(i);
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
if (data.apkSessionId == parentSessionId) {
rd = data;
break;
@@ -897,19 +841,11 @@
return false;
}
String packageName = newPackage.packageName;
- for (PackageRollbackInfo info : rd.packages) {
+ for (PackageRollbackInfo info : rd.info.getPackages()) {
if (info.getPackageName().equals(packageName)) {
info.getInstalledUsers().addAll(IntArray.wrap(installedUsers));
- mAppDataRollbackHelper.snapshotAppData(rd.rollbackId, info);
- try {
- mRollbackStore.saveAvailableRollback(rd);
- } catch (IOException ioe) {
- // TODO: Hopefully this is okay because we will try
- // again to save the rollback when the staged session
- // is applied. Just so long as the device doesn't
- // reboot before then.
- Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe);
- }
+ mAppDataRollbackHelper.snapshotAppData(rd.info.getRollbackId(), info);
+ saveRollbackData(rd);
return true;
}
}
@@ -989,14 +925,13 @@
if (data == null) {
int rollbackId = allocateRollbackIdLocked();
if (session.isStaged()) {
- data = mRollbackStore.createPendingStagedRollback(rollbackId,
- parentSessionId);
+ data = mRollbackStore.createStagedRollback(rollbackId, parentSessionId);
} else {
- data = mRollbackStore.createAvailableRollback(rollbackId);
+ data = mRollbackStore.createNonStagedRollback(rollbackId);
}
mPendingRollbacks.put(parentSessionId, data);
}
- data.packages.add(info);
+ data.info.getPackages().add(info);
}
} catch (IOException e) {
Log.e(TAG, "Unable to create rollback for " + packageName, e);
@@ -1004,7 +939,7 @@
}
if (snapshotUserData && !isApex) {
- mAppDataRollbackHelper.snapshotAppData(data.rollbackId, info);
+ mAppDataRollbackHelper.snapshotAppData(data.info.getRollbackId(), info);
}
try {
@@ -1039,32 +974,33 @@
private void restoreUserDataInternal(String packageName, int[] userIds, int appId,
long ceDataInode, String seInfo, int token) {
- final RollbackData rollbackData = getRollbackForPackage(packageName);
+ PackageRollbackInfo info = null;
+ RollbackData rollbackData = null;
+ synchronized (mLock) {
+ ensureRollbackDataLoadedLocked();
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
+ if (data.restoreUserDataInProgress) {
+ info = getPackageRollbackInfo(data, packageName);
+ if (info != null) {
+ rollbackData = data;
+ break;
+ }
+ }
+ }
+ }
+
if (rollbackData == null) {
return;
}
- if (!rollbackData.inProgress) {
- Log.e(TAG, "Request to restore userData for: " + packageName
- + ", but no rollback in progress.");
- return;
- }
-
for (int userId : userIds) {
- final PackageRollbackInfo info = getPackageRollbackInfo(rollbackData, packageName);
final boolean changedRollbackData = mAppDataRollbackHelper.restoreAppData(
- rollbackData.rollbackId, info, userId, appId, seInfo);
+ rollbackData.info.getRollbackId(), info, userId, appId, seInfo);
// We've updated metadata about this rollback, so save it to flash.
if (changedRollbackData) {
- try {
- mRollbackStore.saveAvailableRollback(rollbackData);
- } catch (IOException ioe) {
- // TODO(narayan): What is the right thing to do here ? This isn't a fatal
- // error, since it will only result in us trying to restore data again,
- // which will be a no-op if there's no data available.
- Log.e(TAG, "Unable to save available rollback: " + packageName, ioe);
- }
+ saveRollbackData(rollbackData);
}
}
}
@@ -1108,6 +1044,7 @@
}
}
+ completeEnableRollback(sessionId, true);
result.offer(true);
});
@@ -1125,8 +1062,8 @@
RollbackData rd = null;
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
- RollbackData data = mAvailableRollbacks.get(i);
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
if (data.stagedSessionId == originalSessionId) {
data.apkSessionId = apkSessionId;
rd = data;
@@ -1136,11 +1073,7 @@
}
if (rd != null) {
- try {
- mRollbackStore.saveAvailableRollback(rd);
- } catch (IOException ioe) {
- Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe);
- }
+ saveRollbackData(rd);
}
});
}
@@ -1182,21 +1115,21 @@
@Override
public void onFinished(int sessionId, boolean success) {
- // If sessionId refers to a staged session, we can't deal with it here since the
- // session might take an unbounded amount of time to become "ready" after the package
- // installer session is committed. In those cases, we respond to it in response to
- // a session ready broadcast.
- PackageInstaller packageInstaller = mContext.getPackageManager().getPackageInstaller();
- PackageInstaller.SessionInfo si = packageInstaller.getSessionInfo(sessionId);
- if (si != null && si.isStaged()) {
- return;
+ RollbackData rollback = completeEnableRollback(sessionId, success);
+ if (rollback != null && !rollback.isStaged()) {
+ makeRollbackAvailable(rollback);
}
-
- completeEnableRollback(sessionId, success);
}
}
- private void completeEnableRollback(int sessionId, boolean success) {
+ /**
+ * Add a rollback to the list of rollbacks.
+ * This should be called after rollback has been enabled for all packages
+ * in the rollback. It does not make the rollback available yet.
+ *
+ * @return the rollback data for a successfully enable-completed rollback.
+ */
+ private RollbackData completeEnableRollback(int sessionId, boolean success) {
RollbackData data = null;
synchronized (mLock) {
Integer parentSessionId = mChildSessions.remove(sessionId);
@@ -1207,107 +1140,71 @@
data = mPendingRollbacks.remove(sessionId);
}
- if (data != null) {
- if (success) {
- try {
- data.timestamp = Instant.now();
-
- mRollbackStore.saveAvailableRollback(data);
- synchronized (mLock) {
- // Note: There is a small window of time between when
- // the session has been committed by the package
- // manager and when we make the rollback available
- // here. Presumably the window is small enough that
- // nobody will want to roll back the newly installed
- // package before we make the rollback available.
- // TODO: We'll lose the rollback data if the
- // device reboots between when the session is
- // committed and this point. Revisit this after
- // adding support for rollback of staged installs.
- ensureRollbackDataLoadedLocked();
- mAvailableRollbacks.add(data);
- }
- // TODO(zezeozue): Provide API to explicitly start observing instead
- // of doing this for all rollbacks. If we do this for all rollbacks,
- // should document in PackageInstaller.SessionParams#setEnableRollback
- // After enabling and commiting any rollback, observe packages and
- // prepare to rollback if packages crashes too frequently.
- List<String> packages = new ArrayList<>();
- for (int i = 0; i < data.packages.size(); i++) {
- packages.add(data.packages.get(i).getPackageName());
- }
- mPackageHealthObserver.startObservingHealth(packages,
- mRollbackLifetimeDurationInMillis);
- scheduleExpiration(mRollbackLifetimeDurationInMillis);
- } catch (IOException e) {
- Log.e(TAG, "Unable to enable rollback", e);
- deleteRollback(data);
- }
- } else {
- // The install session was aborted, clean up the pending
- // install.
- deleteRollback(data);
- }
- }
- }
-
- private void onStagedSessionUpdated(Intent intent) {
- PackageInstaller.SessionInfo pi = intent.getParcelableExtra(PackageInstaller.EXTRA_SESSION);
- if (pi == null) {
- Log.e(TAG, "Missing intent extra: " + PackageInstaller.EXTRA_SESSION);
- return;
+ if (data == null) {
+ return null;
}
- if (pi.isStaged()) {
- if (!pi.isStagedSessionFailed()) {
- // TODO: The session really isn't "enabled" at this point, since more work might
- // be required post reboot.
- // TODO: We need to make this case consistent with the call from onFinished.
- // Ideally, we'd call completeEnableRollback excatly once per multi-package session
- // with the parentSessionId only.
- completeEnableRollback(pi.sessionId, pi.isStagedSessionReady());
- } else {
- // TODO: Clean up the saved rollback when the session fails. This may need to be
- // unified with the case where things fail post reboot.
- }
- } else {
- Log.e(TAG, "Received onStagedSessionUpdated for: " + pi.sessionId
- + ", which isn't staged");
+ if (!success) {
+ // The install session was aborted, clean up the pending install.
+ deleteRollback(data);
+ return null;
}
- }
- /*
- * Returns the RollbackData, if any, for an available rollback that would
- * roll back the given package. Note: This assumes we have at most one
- * available rollback for a given package at any one time.
- */
- private RollbackData getRollbackForPackage(String packageName) {
+ saveRollbackData(data);
synchronized (mLock) {
- // TODO: Have ensureRollbackDataLoadedLocked return the list of
- // available rollbacks, to hopefully avoid forgetting to call it?
+ // Note: There is a small window of time between when
+ // the session has been committed by the package
+ // manager and when we make the rollback available
+ // here. Presumably the window is small enough that
+ // nobody will want to roll back the newly installed
+ // package before we make the rollback available.
+ // TODO: We'll lose the rollback data if the
+ // device reboots between when the session is
+ // committed and this point. Revisit this after
+ // adding support for rollback of staged installs.
ensureRollbackDataLoadedLocked();
- for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
- RollbackData data = mAvailableRollbacks.get(i);
- if (data.isAvailable && getPackageRollbackInfo(data, packageName) != null) {
- return data;
- }
- }
+ mRollbacks.add(data);
}
- return null;
+
+ return data;
+ }
+
+ private void makeRollbackAvailable(RollbackData data) {
+ // TODO: What if the rollback has since been expired, for example due
+ // to a new package being installed. Won't this revive an expired
+ // rollback? Consider adding a ROLLBACK_STATE_EXPIRED to address this.
+ synchronized (mLock) {
+ data.state = RollbackData.ROLLBACK_STATE_AVAILABLE;
+ data.timestamp = Instant.now();
+ }
+ saveRollbackData(data);
+
+ // TODO(zezeozue): Provide API to explicitly start observing instead
+ // of doing this for all rollbacks. If we do this for all rollbacks,
+ // should document in PackageInstaller.SessionParams#setEnableRollback
+ // After enabling and commiting any rollback, observe packages and
+ // prepare to rollback if packages crashes too frequently.
+ List<String> packages = new ArrayList<>();
+ for (int i = 0; i < data.info.getPackages().size(); i++) {
+ packages.add(data.info.getPackages().get(i).getPackageName());
+ }
+ mPackageHealthObserver.startObservingHealth(packages,
+ mRollbackLifetimeDurationInMillis);
+ scheduleExpiration(mRollbackLifetimeDurationInMillis);
}
/*
- * Returns the RollbackData, if any, for an available rollback with the
- * given rollbackId.
+ * Returns the RollbackData, if any, for a rollback with the given
+ * rollbackId.
*/
private RollbackData getRollbackForId(int rollbackId) {
synchronized (mLock) {
// TODO: Have ensureRollbackDataLoadedLocked return the list of
// available rollbacks, to hopefully avoid forgetting to call it?
ensureRollbackDataLoadedLocked();
- for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
- RollbackData data = mAvailableRollbacks.get(i);
- if (data.isAvailable && data.rollbackId == rollbackId) {
+ for (int i = 0; i < mRollbacks.size(); ++i) {
+ RollbackData data = mRollbacks.get(i);
+ if (data.info.getRollbackId() == rollbackId) {
return data;
}
}
@@ -1322,7 +1219,7 @@
*/
private static PackageRollbackInfo getPackageRollbackInfo(RollbackData data,
String packageName) {
- for (PackageRollbackInfo info : data.packages) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
if (info.getPackageName().equals(packageName)) {
return info;
}
@@ -1347,14 +1244,29 @@
}
private void deleteRollback(RollbackData rollbackData) {
- for (PackageRollbackInfo info : rollbackData.packages) {
+ for (PackageRollbackInfo info : rollbackData.info.getPackages()) {
IntArray installedUsers = info.getInstalledUsers();
for (int i = 0; i < installedUsers.size(); i++) {
int userId = installedUsers.get(i);
- mAppDataRollbackHelper.destroyAppDataSnapshot(rollbackData.rollbackId, info,
- userId);
+ mAppDataRollbackHelper.destroyAppDataSnapshot(rollbackData.info.getRollbackId(),
+ info, userId);
}
}
- mRollbackStore.deleteAvailableRollback(rollbackData);
+ mRollbackStore.deleteRollbackData(rollbackData);
+ }
+
+ /**
+ * Saves rollback data, swallowing any IOExceptions.
+ * For those times when it's not obvious what to do about the IOException.
+ * TODO: Double check we can't do a better job handling the IOException in
+ * a cases where this method is called.
+ */
+ private void saveRollbackData(RollbackData rollbackData) {
+ try {
+ mRollbackStore.saveRollbackData(rollbackData);
+ } catch (IOException ioe) {
+ Log.e(TAG, "Unable to save rollback info for: "
+ + rollbackData.info.getRollbackId(), ioe);
+ }
}
}
diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java
index bb4e89e..4f8f685 100644
--- a/services/core/java/com/android/server/rollback/RollbackStore.java
+++ b/services/core/java/com/android/server/rollback/RollbackStore.java
@@ -35,6 +35,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
+import java.text.ParseException;
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
@@ -47,60 +48,44 @@
private static final String TAG = "RollbackManager";
// Assuming the rollback data directory is /data/rollback, we use the
- // following directory structure to store persisted data for available and
- // recently executed rollbacks:
+ // following directory structure to store persisted data for rollbacks:
// /data/rollback/
- // available/
- // XXX/
- // rollback.json
- // com.package.A/
- // base.apk
- // com.package.B/
- // base.apk
- // YYY/
- // rollback.json
- // com.package.C/
- // base.apk
- // recently_executed.json
+ // XXX/
+ // rollback.json
+ // com.package.A/
+ // base.apk
+ // com.package.B/
+ // base.apk
+ // YYY/
+ // rollback.json
//
// * XXX, YYY are the rollbackIds for the corresponding rollbacks.
- // * rollback.json contains all relevant metadata for the rollback. This
- // file is not written until the rollback is made available.
+ // * rollback.json contains all relevant metadata for the rollback.
//
// TODO: Use AtomicFile for all the .json files?
private final File mRollbackDataDir;
- private final File mAvailableRollbacksDir;
- private final File mRecentlyExecutedRollbacksFile;
RollbackStore(File rollbackDataDir) {
mRollbackDataDir = rollbackDataDir;
- mAvailableRollbacksDir = new File(mRollbackDataDir, "available");
- mRecentlyExecutedRollbacksFile = new File(mRollbackDataDir, "recently_executed.json");
}
/**
- * Reads the list of available rollbacks from persistent storage.
+ * Reads the rollback data from persistent storage.
*/
- List<RollbackData> loadAvailableRollbacks() {
- List<RollbackData> availableRollbacks = new ArrayList<>();
- mAvailableRollbacksDir.mkdirs();
- for (File rollbackDir : mAvailableRollbacksDir.listFiles()) {
+ List<RollbackData> loadAllRollbackData() {
+ List<RollbackData> rollbacks = new ArrayList<>();
+ mRollbackDataDir.mkdirs();
+ for (File rollbackDir : mRollbackDataDir.listFiles()) {
if (rollbackDir.isDirectory()) {
try {
- RollbackData data = loadRollbackData(rollbackDir);
- availableRollbacks.add(data);
+ rollbacks.add(loadRollbackData(rollbackDir));
} catch (IOException e) {
- // Note: Deleting the rollbackDir here will cause pending
- // rollbacks to be deleted. This should only ever happen
- // if reloadPersistedData is called while there are
- // pending rollbacks. The reloadPersistedData method is
- // currently only for testing, so that should be okay.
Log.e(TAG, "Unable to read rollback data at " + rollbackDir, e);
removeFile(rollbackDir);
}
}
}
- return availableRollbacks;
+ return rollbacks;
}
/**
@@ -183,54 +168,42 @@
return ceSnapshotInodes;
}
- /**
- * Reads the list of recently executed rollbacks from persistent storage.
- */
- List<RollbackInfo> loadRecentlyExecutedRollbacks() {
- List<RollbackInfo> recentlyExecutedRollbacks = new ArrayList<>();
- if (mRecentlyExecutedRollbacksFile.exists()) {
- try {
- // TODO: How to cope with changes to the format of this file from
- // when RollbackStore is updated in the future?
- String jsonString = IoUtils.readFileAsString(
- mRecentlyExecutedRollbacksFile.getAbsolutePath());
- JSONObject object = new JSONObject(jsonString);
- JSONArray array = object.getJSONArray("recentlyExecuted");
- for (int i = 0; i < array.length(); ++i) {
- JSONObject element = array.getJSONObject(i);
- int rollbackId = element.getInt("rollbackId");
- List<PackageRollbackInfo> packages = packageRollbackInfosFromJson(
- element.getJSONArray("packages"));
- boolean isStaged = element.getBoolean("isStaged");
- List<VersionedPackage> causePackages = versionedPackagesFromJson(
- element.getJSONArray("causePackages"));
- int committedSessionId = element.getInt("committedSessionId");
- RollbackInfo rollback = new RollbackInfo(rollbackId, packages, isStaged,
- causePackages, committedSessionId);
- recentlyExecutedRollbacks.add(rollback);
- }
- } catch (IOException | JSONException e) {
- // TODO: What to do here? Surely we shouldn't just forget about
- // everything after the point of exception?
- Log.e(TAG, "Failed to read recently executed rollbacks", e);
- }
- }
+ private static JSONObject rollbackInfoToJson(RollbackInfo rollback) throws JSONException {
+ JSONObject json = new JSONObject();
+ json.put("rollbackId", rollback.getRollbackId());
+ json.put("packages", toJson(rollback.getPackages()));
+ json.put("isStaged", rollback.isStaged());
+ json.put("causePackages", versionedPackagesToJson(rollback.getCausePackages()));
+ json.put("committedSessionId", rollback.getCommittedSessionId());
+ return json;
+ }
- return recentlyExecutedRollbacks;
+ private static RollbackInfo rollbackInfoFromJson(JSONObject json) throws JSONException {
+ return new RollbackInfo(
+ json.getInt("rollbackId"),
+ packageRollbackInfosFromJson(json.getJSONArray("packages")),
+ json.getBoolean("isStaged"),
+ versionedPackagesFromJson(json.getJSONArray("causePackages")),
+ json.getInt("committedSessionId"));
}
/**
- * Creates a new RollbackData instance with backupDir assigned.
+ * Creates a new RollbackData instance for a non-staged rollback with
+ * backupDir assigned.
*/
- RollbackData createAvailableRollback(int rollbackId) throws IOException {
- File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId));
- return new RollbackData(rollbackId, backupDir, -1, true);
+ RollbackData createNonStagedRollback(int rollbackId) throws IOException {
+ File backupDir = new File(mRollbackDataDir, Integer.toString(rollbackId));
+ return new RollbackData(rollbackId, backupDir, -1);
}
- RollbackData createPendingStagedRollback(int rollbackId, int stagedSessionId)
+ /**
+ * Creates a new RollbackData instance for a staged rollback with
+ * backupDir assigned.
+ */
+ RollbackData createStagedRollback(int rollbackId, int stagedSessionId)
throws IOException {
- File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId));
- return new RollbackData(rollbackId, backupDir, stagedSessionId, false);
+ File backupDir = new File(mRollbackDataDir, Integer.toString(rollbackId));
+ return new RollbackData(rollbackId, backupDir, stagedSessionId);
}
/**
@@ -263,17 +236,28 @@
}
/**
- * Writes the metadata for an available rollback to persistent storage.
+ * Deletes all backed up apks and apex files associated with the given
+ * rollback.
*/
- void saveAvailableRollback(RollbackData data) throws IOException {
+ static void deletePackageCodePaths(RollbackData data) {
+ for (PackageRollbackInfo info : data.info.getPackages()) {
+ File targetDir = new File(data.backupDir, info.getPackageName());
+ removeFile(targetDir);
+ }
+ }
+
+ /**
+ * Saves the rollback data to persistent storage.
+ */
+ void saveRollbackData(RollbackData data) throws IOException {
try {
JSONObject dataJson = new JSONObject();
- dataJson.put("rollbackId", data.rollbackId);
- dataJson.put("packages", toJson(data.packages));
+ dataJson.put("info", rollbackInfoToJson(data.info));
dataJson.put("timestamp", data.timestamp.toString());
dataJson.put("stagedSessionId", data.stagedSessionId);
- dataJson.put("isAvailable", data.isAvailable);
+ dataJson.put("state", rollbackStateToString(data.state));
dataJson.put("apkSessionId", data.apkSessionId);
+ dataJson.put("restoreUserDataInProgress", data.restoreUserDataInProgress);
PrintWriter pw = new PrintWriter(new File(data.backupDir, "rollback.json"));
pw.println(dataJson.toString());
@@ -284,80 +268,49 @@
}
/**
- * Removes all persistant storage associated with the given available
- * rollback.
+ * Removes all persistant storage associated with the given rollback data.
*/
- void deleteAvailableRollback(RollbackData data) {
+ void deleteRollbackData(RollbackData data) {
removeFile(data.backupDir);
}
/**
- * Writes the list of recently executed rollbacks to storage.
- */
- void saveRecentlyExecutedRollbacks(List<RollbackInfo> recentlyExecutedRollbacks) {
- try {
- JSONObject json = new JSONObject();
- JSONArray array = new JSONArray();
- json.put("recentlyExecuted", array);
-
- for (int i = 0; i < recentlyExecutedRollbacks.size(); ++i) {
- RollbackInfo rollback = recentlyExecutedRollbacks.get(i);
- JSONObject element = new JSONObject();
- element.put("rollbackId", rollback.getRollbackId());
- element.put("packages", toJson(rollback.getPackages()));
- element.put("isStaged", rollback.isStaged());
- element.put("causePackages", versionedPackagesToJson(rollback.getCausePackages()));
- element.put("committedSessionId", rollback.getCommittedSessionId());
- array.put(element);
- }
-
- PrintWriter pw = new PrintWriter(mRecentlyExecutedRollbacksFile);
- pw.println(json.toString());
- pw.close();
- } catch (IOException | JSONException e) {
- // TODO: What to do here?
- Log.e(TAG, "Failed to save recently executed rollbacks", e);
- }
- }
-
- /**
* Reads the metadata for a rollback from the given directory.
* @throws IOException in case of error reading the data.
*/
- private RollbackData loadRollbackData(File backupDir) throws IOException {
+ private static RollbackData loadRollbackData(File backupDir) throws IOException {
try {
File rollbackJsonFile = new File(backupDir, "rollback.json");
JSONObject dataJson = new JSONObject(
IoUtils.readFileAsString(rollbackJsonFile.getAbsolutePath()));
- int rollbackId = dataJson.getInt("rollbackId");
- int stagedSessionId = dataJson.getInt("stagedSessionId");
- boolean isAvailable = dataJson.getBoolean("isAvailable");
- RollbackData data = new RollbackData(rollbackId, backupDir,
- stagedSessionId, isAvailable);
- data.packages.addAll(packageRollbackInfosFromJson(dataJson.getJSONArray("packages")));
- data.timestamp = Instant.parse(dataJson.getString("timestamp"));
- data.apkSessionId = dataJson.getInt("apkSessionId");
- return data;
- } catch (JSONException | DateTimeParseException e) {
+ return new RollbackData(
+ rollbackInfoFromJson(dataJson.getJSONObject("info")),
+ backupDir,
+ Instant.parse(dataJson.getString("timestamp")),
+ dataJson.getInt("stagedSessionId"),
+ rollbackStateFromString(dataJson.getString("state")),
+ dataJson.getInt("apkSessionId"),
+ dataJson.getBoolean("restoreUserDataInProgress"));
+ } catch (JSONException | DateTimeParseException | ParseException e) {
throw new IOException(e);
}
}
- private JSONObject toJson(VersionedPackage pkg) throws JSONException {
+ private static JSONObject toJson(VersionedPackage pkg) throws JSONException {
JSONObject json = new JSONObject();
json.put("packageName", pkg.getPackageName());
json.put("longVersionCode", pkg.getLongVersionCode());
return json;
}
- private VersionedPackage versionedPackageFromJson(JSONObject json) throws JSONException {
+ private static VersionedPackage versionedPackageFromJson(JSONObject json) throws JSONException {
String packageName = json.getString("packageName");
long longVersionCode = json.getLong("longVersionCode");
return new VersionedPackage(packageName, longVersionCode);
}
- private JSONObject toJson(PackageRollbackInfo info) throws JSONException {
+ private static JSONObject toJson(PackageRollbackInfo info) throws JSONException {
JSONObject json = new JSONObject();
json.put("versionRolledBackFrom", toJson(info.getVersionRolledBackFrom()));
json.put("versionRolledBackTo", toJson(info.getVersionRolledBackTo()));
@@ -376,7 +329,8 @@
return json;
}
- private PackageRollbackInfo packageRollbackInfoFromJson(JSONObject json) throws JSONException {
+ private static PackageRollbackInfo packageRollbackInfoFromJson(JSONObject json)
+ throws JSONException {
VersionedPackage versionRolledBackFrom = versionedPackageFromJson(
json.getJSONObject("versionRolledBackFrom"));
VersionedPackage versionRolledBackTo = versionedPackageFromJson(
@@ -397,7 +351,7 @@
pendingBackups, pendingRestores, isApex, installedUsers, ceSnapshotInodes);
}
- private JSONArray versionedPackagesToJson(List<VersionedPackage> packages)
+ private static JSONArray versionedPackagesToJson(List<VersionedPackage> packages)
throws JSONException {
JSONArray json = new JSONArray();
for (VersionedPackage pkg : packages) {
@@ -406,7 +360,8 @@
return json;
}
- private List<VersionedPackage> versionedPackagesFromJson(JSONArray json) throws JSONException {
+ private static List<VersionedPackage> versionedPackagesFromJson(JSONArray json)
+ throws JSONException {
List<VersionedPackage> packages = new ArrayList<>();
for (int i = 0; i < json.length(); ++i) {
packages.add(versionedPackageFromJson(json.getJSONObject(i)));
@@ -414,7 +369,7 @@
return packages;
}
- private JSONArray toJson(List<PackageRollbackInfo> infos) throws JSONException {
+ private static JSONArray toJson(List<PackageRollbackInfo> infos) throws JSONException {
JSONArray json = new JSONArray();
for (PackageRollbackInfo info : infos) {
json.put(toJson(info));
@@ -422,7 +377,7 @@
return json;
}
- private List<PackageRollbackInfo> packageRollbackInfosFromJson(JSONArray json)
+ private static List<PackageRollbackInfo> packageRollbackInfosFromJson(JSONArray json)
throws JSONException {
List<PackageRollbackInfo> infos = new ArrayList<>();
for (int i = 0; i < json.length(); ++i) {
@@ -436,7 +391,7 @@
* If the file is a directory, its contents are deleted as well.
* Has no effect if the directory does not exist.
*/
- private void removeFile(File file) {
+ private static void removeFile(File file) {
if (file.isDirectory()) {
for (File child : file.listFiles()) {
removeFile(child);
@@ -446,4 +401,23 @@
file.delete();
}
}
+
+ private static String rollbackStateToString(@RollbackData.RollbackState int state) {
+ switch (state) {
+ case RollbackData.ROLLBACK_STATE_ENABLING: return "enabling";
+ case RollbackData.ROLLBACK_STATE_AVAILABLE: return "available";
+ case RollbackData.ROLLBACK_STATE_COMMITTED: return "committed";
+ }
+ throw new AssertionError("Invalid rollback state: " + state);
+ }
+
+ private static @RollbackData.RollbackState int rollbackStateFromString(String state)
+ throws ParseException {
+ switch (state) {
+ case "enabling": return RollbackData.ROLLBACK_STATE_ENABLING;
+ case "available": return RollbackData.ROLLBACK_STATE_AVAILABLE;
+ case "committed": return RollbackData.ROLLBACK_STATE_COMMITTED;
+ }
+ throw new ParseException("Invalid rollback state: " + state, 0);
+ }
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
new file mode 100644
index 0000000..584fbdd
--- /dev/null
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wallpaper;
+
+/**
+ * Wallpaper manager local system service interface.
+ *
+ * @hide Only for use within the system server.
+ */
+public abstract class WallpaperManagerInternal {
+
+ /**
+ * Notifies the display is ready for adding wallpaper on it.
+ */
+ public abstract void onDisplayReady(int displayId);
+}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 4aeba153..bb1e001 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -100,7 +100,9 @@
import com.android.internal.util.JournaledFile;
import com.android.server.EventLogTags;
import com.android.server.FgThread;
+import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.wm.WindowManagerInternal;
import libcore.io.IoUtils;
@@ -743,6 +745,7 @@
private final Context mContext;
private final IWindowManager mIWindowManager;
+ private final WindowManagerInternal mWindowManagerInternal;
private final IPackageManager mIPackageManager;
private final MyPackageMonitor mMonitor;
private final AppOpsManager mAppOpsManager;
@@ -753,27 +756,6 @@
@Override
public void onDisplayAdded(int displayId) {
- synchronized (mLock) {
- if (mLastWallpaper != null) {
- if (supportsMultiDisplay(mLastWallpaper.connection)) {
- final WallpaperConnection.DisplayConnector connector =
- mLastWallpaper.connection.getDisplayConnectorOrCreate(displayId);
- if (connector == null) return;
- connector.connectLocked(mLastWallpaper.connection, mLastWallpaper);
- return;
- }
- // System wallpaper does not support multiple displays, attach this display to
- // the fallback wallpaper.
- if (mFallbackWallpaper != null) {
- final WallpaperConnection.DisplayConnector connector = mFallbackWallpaper
- .connection.getDisplayConnectorOrCreate(displayId);
- if (connector == null) return;
- connector.connectLocked(mFallbackWallpaper.connection, mFallbackWallpaper);
- } else {
- Slog.w(TAG, "No wallpaper can be added to the new display");
- }
- }
- }
}
@Override
@@ -1185,9 +1167,12 @@
}
private boolean isUsableDisplay(Display display) {
- return display != null && display.hasAccess(mClientUid)
- && (display.supportsSystemDecorations()
- || display.getDisplayId() == DEFAULT_DISPLAY);
+ if (display == null || !display.hasAccess(mClientUid)) {
+ return false;
+ }
+ final int displayId = display.getDisplayId();
+ return displayId == DEFAULT_DISPLAY
+ || mWindowManagerInternal.shouldShowSystemDecorOnDisplay(displayId);
}
void forEachDisplayConnector(Consumer<DisplayConnector> action) {
@@ -1577,12 +1562,22 @@
mDefaultWallpaperComponent = WallpaperManager.getDefaultWallpaperComponent(context);
mIWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
+ mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mIPackageManager = AppGlobals.getPackageManager();
mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
mDisplayManager = mContext.getSystemService(DisplayManager.class);
mDisplayManager.registerDisplayListener(mDisplayListener, null /* handler */);
mMonitor = new MyPackageMonitor();
mColorsChangedListeners = new SparseArray<>();
+
+ LocalServices.addService(WallpaperManagerInternal.class, new LocalService());
+ }
+
+ private final class LocalService extends WallpaperManagerInternal {
+ @Override
+ public void onDisplayReady(int displayId) {
+ onDisplayReadyInternal(displayId);
+ }
}
void initialize() {
@@ -2768,6 +2763,31 @@
return (wallpaper != null) ? wallpaper.allowBackup : false;
}
+ private void onDisplayReadyInternal(int displayId) {
+ synchronized (mLock) {
+ if (mLastWallpaper == null) {
+ return;
+ }
+ if (supportsMultiDisplay(mLastWallpaper.connection)) {
+ final WallpaperConnection.DisplayConnector connector =
+ mLastWallpaper.connection.getDisplayConnectorOrCreate(displayId);
+ if (connector == null) return;
+ connector.connectLocked(mLastWallpaper.connection, mLastWallpaper);
+ return;
+ }
+ // System wallpaper does not support multiple displays, attach this display to
+ // the fallback wallpaper.
+ if (mFallbackWallpaper != null) {
+ final WallpaperConnection.DisplayConnector connector = mFallbackWallpaper
+ .connection.getDisplayConnectorOrCreate(displayId);
+ if (connector == null) return;
+ connector.connectLocked(mFallbackWallpaper.connection, mFallbackWallpaper);
+ } else {
+ Slog.w(TAG, "No wallpaper can be added to the new display");
+ }
+ }
+ }
+
private static JournaledFile makeJournaledFile(int userId) {
final String base = new File(getWallpaperDir(userId), WALLPAPER_INFO).getAbsolutePath();
return new JournaledFile(new File(base), new File(base + ".tmp"));
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index e976975..f70adef 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -289,10 +289,11 @@
private int windowFlags; // custom window flags for preview window.
private TaskRecord task; // the task this is in.
private long createTime = System.currentTimeMillis();
- long lastVisibleTime; // last time this activity became visible
- long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
- long pauseTime; // last time we started pausing the activity
- long launchTickTime; // base time for launch tick messages
+ long lastVisibleTime; // last time this activity became visible
+ long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
+ long pauseTime; // last time we started pausing the activity
+ long launchTickTime; // base time for launch tick messages
+ long topResumedStateLossTime; // last time we reported top resumed state loss to an activity
// Last configuration reported to the activity in the client process.
private MergedConfiguration mLastReportedConfiguration;
private int mLastReportedDisplayId;
@@ -694,14 +695,14 @@
void scheduleTopResumedActivityChanged(boolean onTop) {
if (!attachedToProcess()) {
- if (DEBUG_CONFIGURATION) {
+ if (DEBUG_STATES) {
Slog.w(TAG, "Can't report activity position update - client not running"
+ ", activityRecord=" + this);
}
return;
}
try {
- if (DEBUG_CONFIGURATION) {
+ if (DEBUG_STATES) {
Slog.v(TAG, "Sending position change to " + this + ", onTop: " + onTop);
}
@@ -3285,7 +3286,7 @@
transaction.addCallback(callbackItem);
transaction.setLifecycleStateRequest(lifecycleItem);
mAtmService.getLifecycleManager().scheduleTransaction(transaction);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
// Note: don't need to call pauseIfSleepingLocked() here, because the caller will only
// request resume if this activity is currently resumed, which implies we aren't
// sleeping.
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index a4457e2..ea2aff2 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -1491,6 +1491,7 @@
+ " callers=" + Debug.getCallers(5));
r.setState(RESUMED, "minimalResumeActivityLocked");
r.completeResumeLocked();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
if (DEBUG_SAVED_STATE) Slog.i(TAG_SAVED_STATE,
"Launch completed; removing icicle of " + r.icicle);
}
@@ -2575,7 +2576,7 @@
// Protect against recursion.
mInResumeTopActivity = true;
result = resumeTopActivityInnerLocked(prev, options);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
// When resuming the top activity, it may be necessary to pause the top activity (for
// example, returning to the lock screen. We suppress the normal pause logic in
diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
index df76030..758a765 100644
--- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java
@@ -170,6 +170,9 @@
// How long we can hold the launch wake lock before giving up.
static final int LAUNCH_TIMEOUT = 10 * 1000;
+ /** How long we wait until giving up on the activity telling us it released the top state. */
+ static final int TOP_RESUMED_STATE_LOSS_TIMEOUT = 500;
+
static final int IDLE_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG;
static final int IDLE_NOW_MSG = FIRST_SUPERVISOR_STACK_MSG + 1;
static final int RESUME_TOP_ACTIVITY_MSG = FIRST_SUPERVISOR_STACK_MSG + 2;
@@ -179,6 +182,7 @@
static final int REPORT_MULTI_WINDOW_MODE_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 14;
static final int REPORT_PIP_MODE_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 15;
static final int REPORT_HOME_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 16;
+ static final int TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG = FIRST_SUPERVISOR_STACK_MSG + 17;
// Used to indicate that windows of activities should be preserved during the resize.
static final boolean PRESERVE_WINDOWS = true;
@@ -300,6 +304,18 @@
*/
final ArrayList<ActivityRecord> mNoAnimActivities = new ArrayList<>();
+ /**
+ * Cached value of the topmost resumed activity in the system. Updated when new activity is
+ * resumed.
+ */
+ private ActivityRecord mTopResumedActivity;
+
+ /**
+ * Flag indicating whether we're currently waiting for the previous top activity to handle the
+ * loss of the state and report back before making new activity top resumed.
+ */
+ private boolean mTopResumedActivityWaitingForPrev;
+
/** The target stack bounds for the picture-in-picture mode changed that we need to report to
* the application */
Rect mPipModeChangedTargetStackBounds;
@@ -844,7 +860,7 @@
// Schedule transaction.
mService.getLifecycleManager().scheduleTransaction(clientTransaction);
- mRootActivityContainer.updateTopResumedActivityIfNeeded();
+ updateTopResumedActivityIfNeeded();
if ((proc.mInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0
&& mService.mHasHeavyWeightFeature) {
@@ -2296,6 +2312,73 @@
mHandler.sendEmptyMessage(IDLE_NOW_MSG);
}
+ /**
+ * Updates the record of top resumed activity when it changes and handles reporting of the
+ * state changes to previous and new top activities. It will immediately dispatch top resumed
+ * state loss message to previous top activity (if haven't done it already). After the previous
+ * activity releases the top state and reports back, message about acquiring top state will be
+ * sent to the new top resumed activity.
+ */
+ void updateTopResumedActivityIfNeeded() {
+ final ActivityRecord prevTopActivity = mTopResumedActivity;
+ final ActivityStack topStack = mRootActivityContainer.getTopDisplayFocusedStack();
+ if (topStack == null || topStack.mResumedActivity == prevTopActivity) {
+ return;
+ }
+
+ // Ask previous activity to release the top state.
+ final boolean prevActivityReceivedTopState =
+ prevTopActivity != null && !mTopResumedActivityWaitingForPrev;
+ // mTopResumedActivityWaitingForPrev == true at this point would mean that an activity
+ // before the prevTopActivity one hasn't reported back yet. So server never sent the top
+ // resumed state change message to prevTopActivity.
+ if (prevActivityReceivedTopState) {
+ prevTopActivity.scheduleTopResumedActivityChanged(false /* onTop */);
+ scheduleTopResumedStateLossTimeout(prevTopActivity);
+ mTopResumedActivityWaitingForPrev = true;
+ }
+
+ // Update the current top activity.
+ mTopResumedActivity = topStack.mResumedActivity;
+ scheduleTopResumedActivityStateIfNeeded();
+ }
+
+ /** Schedule top resumed state change if previous top activity already reported back. */
+ private void scheduleTopResumedActivityStateIfNeeded() {
+ if (mTopResumedActivity != null && !mTopResumedActivityWaitingForPrev) {
+ mTopResumedActivity.scheduleTopResumedActivityChanged(true /* onTop */);
+ }
+ }
+
+ /**
+ * Limit the time given to the app to report handling of the state loss.
+ */
+ private void scheduleTopResumedStateLossTimeout(ActivityRecord r) {
+ final Message msg = mHandler.obtainMessage(TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG);
+ msg.obj = r;
+ r.topResumedStateLossTime = SystemClock.uptimeMillis();
+ mHandler.sendMessageDelayed(msg, TOP_RESUMED_STATE_LOSS_TIMEOUT);
+ if (DEBUG_STATES) Slog.v(TAG_STATES, "Waiting for top state to be released by " + r);
+ }
+
+ /**
+ * Handle a loss of top resumed state by an activity - update internal state and inform next top
+ * activity if needed.
+ */
+ void handleTopResumedStateReleased(boolean timeout) {
+ if (DEBUG_STATES) {
+ Slog.v(TAG_STATES, "Top resumed state released "
+ + (timeout ? " (due to timeout)" : " (transition complete)"));
+ }
+ mHandler.removeMessages(TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG);
+ if (!mTopResumedActivityWaitingForPrev) {
+ // Top resumed activity state loss already handled.
+ return;
+ }
+ mTopResumedActivityWaitingForPrev = false;
+ scheduleTopResumedActivityStateIfNeeded();
+ }
+
void removeTimeoutsForActivityLocked(ActivityRecord r) {
if (DEBUG_IDLE) Slog.d(TAG_IDLE, "removeTimeoutsForActivity: Callers="
+ Debug.getCallers(4));
@@ -2351,6 +2434,9 @@
// Suppress the warning toast if the preferredDisplay was set to singleTask.
// The singleTaskInstance displays will only contain one task and any attempt to
// launch new task will re-route to the default display.
+ mService.getTaskChangeNotificationController()
+ .notifyActivityLaunchOnSecondaryDisplayRerouted(task.getTaskInfo(),
+ preferredDisplayId);
return;
}
@@ -2587,8 +2673,18 @@
// Start home activities on displays with no activities.
mRootActivityContainer.startHomeOnEmptyDisplays("homeChanged");
}
- }
- break;
+ } break;
+ case TOP_RESUMED_STATE_LOSS_TIMEOUT_MSG: {
+ ActivityRecord r = (ActivityRecord) msg.obj;
+ Slog.w(TAG, "Activity top resumed state loss timeout for " + r);
+ synchronized (mService.mGlobalLock) {
+ if (r.hasProcess()) {
+ mService.logAppTooSlow(r.app, r.topResumedStateLossTime,
+ "top state loss for " + r);
+ }
+ }
+ handleTopResumedStateReleased(true /* timeout */);
+ } break;
}
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 486a4ea..d747198 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -1634,6 +1634,15 @@
}
@Override
+ public final void activityTopResumedStateLost() {
+ final long origId = Binder.clearCallingIdentity();
+ synchronized (mGlobalLock) {
+ mStackSupervisor.handleTopResumedStateReleased(false /* timeout */);
+ }
+ Binder.restoreCallingIdentity(origId);
+ }
+
+ @Override
public final void activityPaused(IBinder token) {
final long origId = Binder.clearCallingIdentity();
synchronized (mGlobalLock) {
diff --git a/services/core/java/com/android/server/wm/AppWindowThumbnail.java b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
index 5519729..bbbf11d 100644
--- a/services/core/java/com/android/server/wm/AppWindowThumbnail.java
+++ b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
@@ -118,7 +118,8 @@
anim.scaleCurrentDuration(mAppToken.mWmService.getTransitionAnimationScaleLocked());
mSurfaceAnimator.startAnimation(t, new LocalAnimationAdapter(
new WindowAnimationSpec(anim, position,
- mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame()),
+ mAppToken.getDisplayContent().mAppTransition.canSkipFirstFrame(),
+ mAppToken.mWmService.mWindowCornerRadius),
mAppToken.mWmService.mSurfaceAnimationRunner), false /* hidden */);
}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 88c8b95..78199d44 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -118,7 +118,7 @@
import com.android.internal.util.ToBooleanFunction;
import com.android.server.AttributeCache;
import com.android.server.LocalServices;
-import com.android.server.display.ColorDisplayService;
+import com.android.server.display.color.ColorDisplayService;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.policy.WindowManagerPolicy.StartingSurface;
import com.android.server.wm.RemoteAnimationController.RemoteAnimationRecord;
@@ -582,6 +582,8 @@
}
}
}
+ // Changes in opening apps and closing apps may cause orientation change.
+ reportDescendantOrientationChangeIfNeeded();
return;
}
@@ -729,11 +731,31 @@
}
SurfaceControl.closeTransaction();
}
+
+ // Visibility changes may cause orientation request change.
+ reportDescendantOrientationChangeIfNeeded();
}
return delayed;
}
+ private void reportDescendantOrientationChangeIfNeeded() {
+ // Orientation request is exposed only when we're visible. Therefore visibility change
+ // will change requested orientation. Notify upward the hierarchy ladder to adjust
+ // configuration. This is important to cases where activities with incompatible
+ // orientations launch, or user goes back from an activity of bi-orientation to an
+ // activity with specified orientation.
+ if (mActivityRecord.getRequestedConfigurationOrientation() == getConfiguration().orientation
+ || getOrientationIgnoreVisibility() == SCREEN_ORIENTATION_UNSET) {
+ return;
+ }
+
+ final IBinder freezeToken =
+ mActivityRecord.mayFreezeScreenLocked(mActivityRecord.app)
+ ? mActivityRecord.appToken : null;
+ onDescendantOrientationChanged(freezeToken, mActivityRecord);
+ }
+
/**
* @return The to top most child window for which {@link LayoutParams#isFullscreen()} returns
* true.
@@ -2526,7 +2548,8 @@
new WindowAnimationSpec(a, mTmpPoint, mTmpRect,
getDisplayContent().mAppTransition.canSkipFirstFrame(),
appStackClipMode,
- true /* isAppAnimation */),
+ true /* isAppAnimation */,
+ mWmService.mWindowCornerRadius),
mWmService.mSurfaceAnimationRunner);
if (a.getZAdjustment() == Animation.ZORDER_TOP) {
mNeedsZBoost = true;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index ae76740..515ac52 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -30,6 +30,7 @@
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.FLAG_PRIVATE;
+import static android.view.Display.FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.InsetsState.TYPE_IME;
import static android.view.Surface.ROTATION_0;
@@ -4904,10 +4905,10 @@
* @see Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS
*/
boolean supportsSystemDecorations() {
- // TODO(b/114338689): Read the setting from DisplaySettings.
- return mDisplay.supportsSystemDecorations()
+ return mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
+ || (mDisplay.getFlags() & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0
// TODO (b/111363427): Remove this and set the new FLAG_SHOULD_SHOW_LAUNCHER flag
- // (b/114338689) whenever vr 2d display id is set.
+ // whenever vr 2d display id is set.
|| mDisplayId == mWmService.mVr2dDisplayId
|| mWmService.mForceDesktopModeOnExternalDisplays;
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index b028569..5862d43 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -158,6 +158,7 @@
import com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs;
import com.android.server.policy.WindowOrientationListener;
import com.android.server.statusbar.StatusBarManagerInternal;
+import com.android.server.wallpaper.WallpaperManagerInternal;
import com.android.server.wm.utils.InsetUtils;
import java.io.PrintWriter;
@@ -535,7 +536,7 @@
}
} else {
mHasStatusBar = false;
- mHasNavigationBar = mDisplayContent.getDisplay().supportsSystemDecorations();
+ mHasNavigationBar = mDisplayContent.supportsSystemDecorations();
}
}
@@ -1944,10 +1945,6 @@
} else {
vf.set(cf);
}
-
- // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
- mExperiments.offsetWindowFramesForNavBar(mNavigationBarPosition, win);
- // EXPERIMENT END
}
} else if (layoutInScreen || (sysUiFl
& (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
@@ -2605,7 +2602,11 @@
}
void notifyDisplayReady() {
- mHandler.post(() -> getStatusBarManagerInternal().onDisplayReady(getDisplayId()));
+ mHandler.post(() -> {
+ final int displayId = getDisplayId();
+ getStatusBarManagerInternal().onDisplayReady(displayId);
+ LocalServices.getService(WallpaperManagerInternal.class).onDisplayReady(displayId);
+ });
}
/**
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index feb711a..8c8b05f 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -29,6 +29,7 @@
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE;
import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
+import static com.android.server.am.KeyguardControllerProto.AOD_SHOWING;
import static com.android.server.am.KeyguardControllerProto.KEYGUARD_OCCLUDED_STATES;
import static com.android.server.am.KeyguardControllerProto.KEYGUARD_SHOWING;
import static com.android.server.am.KeyguardOccludedProto.DISPLAY_ID;
@@ -86,7 +87,7 @@
/**
* @return true if either Keyguard or AOD are showing, not going away, and not being occluded
- * on the given display, false otherwise
+ * on the given display, false otherwise.
*/
boolean isKeyguardOrAodShowing(int displayId) {
return (mKeyguardShowing || mAodShowing) && !mKeyguardGoingAway
@@ -94,6 +95,16 @@
}
/**
+ * @return {@code true} if 1) Keyguard is showing, not going away, and not being occluded on the
+ * given display, or 2) AOD is showing, {@code false} otherwise.
+ * TODO(b/125198167): Replace isKeyguardOrAodShowing() by this logic.
+ */
+ boolean isKeyguardUnoccludedOrAodShowing(int displayId) {
+ return (mKeyguardShowing && !mKeyguardGoingAway && !isDisplayOccluded(displayId))
+ || mAodShowing;
+ }
+
+ /**
* @return true if Keyguard is showing, not going away, and not being occluded on the given
* display, false otherwise
*/
@@ -380,10 +391,11 @@
for (int displayNdx = mRootActivityContainer.getChildCount() - 1;
displayNdx >= 0; displayNdx--) {
final ActivityDisplay display = mRootActivityContainer.getChildAt(displayNdx);
- final KeyguardDisplayState state = getDisplay(display.mDisplayId);
- if (isKeyguardOrAodShowing(display.mDisplayId) && state.mSleepToken == null) {
+ final int displayId = display.mDisplayId;
+ final KeyguardDisplayState state = getDisplay(displayId);
+ if (isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken == null) {
state.acquiredSleepToken();
- } else if (!isKeyguardOrAodShowing(display.mDisplayId) && state.mSleepToken != null) {
+ } else if (!isKeyguardUnoccludedOrAodShowing(displayId) && state.mSleepToken != null) {
state.releaseSleepToken();
}
}
@@ -528,6 +540,7 @@
void writeToProto(ProtoOutputStream proto, long fieldId) {
final long token = proto.start(fieldId);
+ proto.write(AOD_SHOWING, mAodShowing);
proto.write(KEYGUARD_SHOWING, mKeyguardShowing);
writeDisplayStatesToProto(proto, KEYGUARD_OCCLUDED_STATES);
proto.end(token);
diff --git a/services/core/java/com/android/server/wm/RootActivityContainer.java b/services/core/java/com/android/server/wm/RootActivityContainer.java
index 6988357..e3beb19 100644
--- a/services/core/java/com/android/server/wm/RootActivityContainer.java
+++ b/services/core/java/com/android/server/wm/RootActivityContainer.java
@@ -175,12 +175,6 @@
private ActivityDisplay mDefaultDisplay;
private final SparseArray<IntArray> mDisplayAccessUIDs = new SparseArray<>();
- /**
- * Cached value of the topmost resumed activity in the system. Updated when new activity is
- * resumed.
- */
- private ActivityRecord mTopResumedActivity;
-
/** The current user */
int mCurrentUser;
/** Stack id of the front stack when user switched, indexed by userId. */
@@ -1155,23 +1149,6 @@
return result;
}
- void updateTopResumedActivityIfNeeded() {
- final ActivityRecord prevTopActivity = mTopResumedActivity;
- final ActivityStack topStack = getTopDisplayFocusedStack();
- if (topStack == null || topStack.mResumedActivity == prevTopActivity) {
- return;
- }
- // Clear previous top state
- if (prevTopActivity != null) {
- prevTopActivity.scheduleTopResumedActivityChanged(false /* onTop */);
- }
- // Update the current top activity
- mTopResumedActivity = topStack.mResumedActivity;
- if (mTopResumedActivity != null) {
- mTopResumedActivity.scheduleTopResumedActivityChanged(true /* onTop */);
- }
- }
-
void applySleepTokens(boolean applyToStacks) {
for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
// Set the sleeping state of the display.
@@ -1434,7 +1411,7 @@
mActivityDisplays.remove(display);
mActivityDisplays.add(position, display);
}
- updateTopResumedActivityIfNeeded();
+ mStackSupervisor.updateTopResumedActivityIfNeeded();
}
@VisibleForTesting
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 888d741..499cbaf 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -330,7 +330,7 @@
// No one in higher hierarchy handles this request, let's adjust our bounds to fulfill
// it if possible.
// TODO: Move to TaskRecord after unification is done.
- if (mTaskRecord != null) {
+ if (mTaskRecord != null && mTaskRecord.getParent() != null) {
mTaskRecord.onConfigurationChanged(mTaskRecord.getParent().getConfiguration());
return true;
}
diff --git a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
index 789f987..42d2583 100644
--- a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java
@@ -50,6 +50,7 @@
private static final int NOTIFY_PINNED_STACK_ANIMATION_STARTED_LISTENERS_MSG = 16;
private static final int NOTIFY_ACTIVITY_UNPINNED_LISTENERS_MSG = 17;
private static final int NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED_MSG = 18;
+ private static final int NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED_MSG = 19;
// Delay in notifying task stack change listeners (in millis)
private static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 100;
@@ -130,6 +131,10 @@
l.onActivityLaunchOnSecondaryDisplayFailed((RunningTaskInfo) m.obj, m.arg1);
};
+ private final TaskStackConsumer mNotifyActivityLaunchOnSecondaryDisplayRerouted = (l, m) -> {
+ l.onActivityLaunchOnSecondaryDisplayRerouted((RunningTaskInfo) m.obj, m.arg1);
+ };
+
private final TaskStackConsumer mNotifyTaskProfileLocked = (l, m) -> {
l.onTaskProfileLocked(m.arg1, m.arg2);
};
@@ -202,6 +207,9 @@
case NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED_MSG:
forAllRemoteListeners(mNotifyActivityLaunchOnSecondaryDisplayFailed, msg);
break;
+ case NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED_MSG:
+ forAllRemoteListeners(mNotifyActivityLaunchOnSecondaryDisplayRerouted, msg);
+ break;
case NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG:
forAllRemoteListeners(mNotifyTaskProfileLocked, msg);
break;
@@ -355,6 +363,15 @@
msg.sendToTarget();
}
+ void notifyActivityLaunchOnSecondaryDisplayRerouted(TaskInfo ti, int requestedDisplayId) {
+ mHandler.removeMessages(NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED_MSG);
+ final Message msg = mHandler.obtainMessage(
+ NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_REROUTED_MSG, requestedDisplayId,
+ 0 /* unused */, ti);
+ forAllLocalListeners(mNotifyActivityLaunchOnSecondaryDisplayRerouted, msg);
+ msg.sendToTarget();
+ }
+
void notifyTaskCreated(int taskId, ComponentName componentName) {
final Message msg = mHandler.obtainMessage(NOTIFY_TASK_ADDED_LISTENERS_MSG,
taskId, 0 /* unused */, componentName);
diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java
index b88e581..4a0831e 100644
--- a/services/core/java/com/android/server/wm/TaskPositioner.java
+++ b/services/core/java/com/android/server/wm/TaskPositioner.java
@@ -43,16 +43,15 @@
import android.view.BatchedInputEventReceiver;
import android.view.Choreographer;
import android.view.Display;
+import android.view.InputApplicationHandle;
import android.view.InputChannel;
import android.view.InputDevice;
import android.view.InputEvent;
+import android.view.InputWindowHandle;
import android.view.MotionEvent;
import android.view.WindowManager;
import com.android.internal.annotations.VisibleForTesting;
-import android.view.InputApplicationHandle;
-import android.view.InputWindowHandle;
-import com.android.server.wm.WindowManagerService.H;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -356,12 +355,10 @@
+ startY + "}");
}
mTask = win.getTask();
- // Use the dim bounds, not the original task bounds. The cursor
- // movement should be calculated relative to the visible bounds.
- // Also, use the dim bounds of the task which accounts for
+ // Use the bounds of the task which accounts for
// multiple app windows. Don't use any bounds from win itself as it
// may not be the same size as the task.
- mTask.getDimBounds(mTmpRect);
+ mTask.getBounds(mTmpRect);
startDrag(resize, preserveOrientation, startX, startY, mTmpRect);
}
diff --git a/services/core/java/com/android/server/wm/WindowAnimationSpec.java b/services/core/java/com/android/server/wm/WindowAnimationSpec.java
index 98c77ac..57311e1 100644
--- a/services/core/java/com/android/server/wm/WindowAnimationSpec.java
+++ b/services/core/java/com/android/server/wm/WindowAnimationSpec.java
@@ -17,10 +17,10 @@
package com.android.server.wm;
import static com.android.server.wm.AnimationAdapter.STATUS_BAR_TRANSITION_DURATION;
-import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
-import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
import static com.android.server.wm.AnimationSpecProto.WINDOW;
import static com.android.server.wm.WindowAnimationSpecProto.ANIMATION;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
import android.graphics.Point;
import android.graphics.Rect;
@@ -51,18 +51,22 @@
private final Rect mStackBounds = new Rect();
private int mStackClipMode;
private final Rect mTmpRect = new Rect();
+ private final float mWindowCornerRadius;
- public WindowAnimationSpec(Animation animation, Point position, boolean canSkipFirstFrame) {
+ public WindowAnimationSpec(Animation animation, Point position, boolean canSkipFirstFrame,
+ float windowCornerRadius) {
this(animation, position, null /* stackBounds */, canSkipFirstFrame, STACK_CLIP_NONE,
- false /* isAppAnimation */);
+ false /* isAppAnimation */, windowCornerRadius);
}
public WindowAnimationSpec(Animation animation, Point position, Rect stackBounds,
- boolean canSkipFirstFrame, int stackClipMode, boolean isAppAnimation) {
+ boolean canSkipFirstFrame, int stackClipMode, boolean isAppAnimation,
+ float windowCornerRadius) {
mAnimation = animation;
if (position != null) {
mPosition.set(position.x, position.y);
}
+ mWindowCornerRadius = windowCornerRadius;
mCanSkipFirstFrame = canSkipFirstFrame;
mIsAppAnimation = isAppAnimation;
mStackClipMode = stackClipMode;
@@ -101,6 +105,9 @@
mTmpRect.intersect(tmp.transformation.getClipRect());
t.setWindowCrop(leash, mTmpRect);
}
+ if (mAnimation.hasRoundedCorners() && mWindowCornerRadius > 0) {
+ t.setCornerRadius(leash, mWindowCornerRadius);
+ }
}
@Override
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 33e46f4..d3f3711 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -474,4 +474,9 @@
* Return the display Id for given window.
*/
public abstract int getDisplayIdForWindow(IBinder windowToken);
+
+ /**
+ * Checks whether this display should support showing system decorations.
+ */
+ public abstract boolean shouldShowSystemDecorOnDisplay(int displayId);
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 474a9da..d58e204 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -145,6 +145,7 @@
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerInternal;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -234,6 +235,7 @@
import com.android.internal.os.IResultReceiver;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.policy.IShortcutService;
+import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.LatencyTracker;
@@ -753,24 +755,27 @@
final DisplayManager mDisplayManager;
final ActivityTaskManagerService mAtmService;
- // Indicates whether this device supports wide color gamut / HDR rendering
+ /** Corner radius that windows should have in order to match the display. */
+ final float mWindowCornerRadius;
+
+ /** Indicates whether this device supports wide color gamut / HDR rendering */
private boolean mHasWideColorGamutSupport;
private boolean mHasHdrSupport;
- // Who is holding the screen on.
+ /** Who is holding the screen on. */
private Session mHoldingScreenOn;
private PowerManager.WakeLock mHoldingScreenWakeLock;
- // Whether or not a layout can cause a wake up when theater mode is enabled.
+ /** Whether or not a layout can cause a wake up when theater mode is enabled. */
boolean mAllowTheaterModeWakeFromLayout;
final TaskPositioningController mTaskPositioningController;
final DragDropController mDragDropController;
- // For frozen screen animations.
+ /** For frozen screen animations. */
private int mExitAnimId, mEnterAnimId;
- // The display that the rotation animation is applying to.
+ /** The display that the rotation animation is applying to. */
private int mFrozenDisplayId;
/** Skip repeated AppWindowTokens initialization. Note that AppWindowsToken's version of this
@@ -977,7 +982,7 @@
mInputManager = inputManager; // Must be before createDisplayContentLocked.
mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
mDisplayWindowSettings = new DisplayWindowSettings(this);
-
+ mWindowCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context.getResources());
mTransactionFactory = transactionFactory;
mTransaction = mTransactionFactory.make();
@@ -6771,7 +6776,7 @@
+ "not exist: " + displayId);
return false;
}
- return mDisplayWindowSettings.shouldShowSystemDecorsLocked(displayContent);
+ return displayContent.supportsSystemDecorations();
}
}
@@ -7240,6 +7245,13 @@
return Display.INVALID_DISPLAY;
}
}
+
+ @Override
+ public boolean shouldShowSystemDecorOnDisplay(int displayId) {
+ synchronized (mGlobalLock) {
+ return WindowManagerService.this.shouldShowSystemDecors(displayId);
+ }
+ }
}
void registerAppFreezeListener(AppFreezeListener listener) {
@@ -7434,7 +7446,7 @@
new SurfaceControl.Transaction().syncInputWindows().apply(true);
- return mInputManager.injectInputEvent(ev, mode);
+ return LocalServices.getService(InputManagerInternal.class).injectInputEvent(ev, mode);
}
private void waitForAnimationsToComplete() {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a13086d..d5a6f00 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -842,6 +842,9 @@
// The offset from the layout containing frame to the actual containing frame.
final int layoutXDiff;
final int layoutYDiff;
+ final WindowState imeWin = mWmService.mRoot.getCurrentInputMethodWindow();
+ final boolean isImeTarget =
+ imeWin != null && imeWin.isVisibleNow() && isInputMethodTarget();
if (inFullscreenContainer || layoutInParentFrame()) {
// We use the parent frame as the containing frame for fullscreen and child windows
mWindowFrames.mContainingFrame.set(mWindowFrames.mParentFrame);
@@ -861,15 +864,19 @@
mWindowFrames.mContainingFrame.bottom =
mWindowFrames.mContainingFrame.top + frozen.height();
}
- final WindowState imeWin = mWmService.mRoot.getCurrentInputMethodWindow();
// IME is up and obscuring this window. Adjust the window position so it is visible.
- if (imeWin != null && imeWin.isVisibleNow() && isInputMethodTarget()) {
- if (inFreeformWindowingMode() && mWindowFrames.mContainingFrame.bottom
- > mWindowFrames.mContentFrame.bottom) {
- // In freeform we want to move the top up directly.
- // TODO: Investigate why this is contentFrame not parentFrame.
- mWindowFrames.mContainingFrame.top -= mWindowFrames.mContainingFrame.bottom
- - mWindowFrames.mContentFrame.bottom;
+ if (isImeTarget) {
+ if (inFreeformWindowingMode()) {
+ // Push the freeform window up to make room for the IME. However, don't push
+ // it up past the top of the screen.
+ final int bottomOverlap = mWindowFrames.mContainingFrame.bottom
+ - mWindowFrames.mVisibleFrame.bottom;
+ if (bottomOverlap > 0) {
+ final int distanceToTop = Math.max(mWindowFrames.mContainingFrame.top
+ - mWindowFrames.mDisplayFrame.top, 0);
+ int offs = Math.min(bottomOverlap, distanceToTop);
+ mWindowFrames.mContainingFrame.top -= offs;
+ }
} else if (!inPinnedWindowingMode() && mWindowFrames.mContainingFrame.bottom
> mWindowFrames.mParentFrame.bottom) {
// But in docked we want to behave like fullscreen and behave as if the task
@@ -955,9 +962,21 @@
final int left = Math.max(limitFrame.left + minVisibleWidth - width,
Math.min( mWindowFrames.mFrame.left, limitFrame.right - minVisibleWidth));
mWindowFrames.mFrame.set(left, top, left + width, top + height);
+ final int visBottom = mWindowFrames.mVisibleFrame.bottom;
+ final int contentBottom = mWindowFrames.mContentFrame.bottom;
mWindowFrames.mContentFrame.set( mWindowFrames.mFrame);
mWindowFrames.mVisibleFrame.set(mWindowFrames.mContentFrame);
mWindowFrames.mStableFrame.set(mWindowFrames.mContentFrame);
+ if (isImeTarget && inFreeformWindowingMode()) {
+ // After displacing a freeform window to make room for the ime, any part of
+ // the window still covered by IME should be inset.
+ if (contentBottom + layoutYDiff < mWindowFrames.mContentFrame.bottom) {
+ mWindowFrames.mContentFrame.bottom = contentBottom + layoutYDiff;
+ }
+ if (visBottom + layoutYDiff < mWindowFrames.mVisibleFrame.bottom) {
+ mWindowFrames.mVisibleFrame.bottom = visBottom + layoutYDiff;
+ }
+ }
} else if (mAttrs.type == TYPE_DOCK_DIVIDER) {
dc.getDockedDividerController().positionDockedStackedDivider(mWindowFrames.mFrame);
mWindowFrames.mContentFrame.set(mWindowFrames.mFrame);
@@ -4458,7 +4477,8 @@
anim.restrictDuration(MAX_ANIMATION_DURATION);
anim.scaleCurrentDuration(mWmService.getWindowAnimationScaleLocked());
final AnimationAdapter adapter = new LocalAnimationAdapter(
- new WindowAnimationSpec(anim, mSurfacePosition, false /* canSkipFirstFrame */),
+ new WindowAnimationSpec(anim, mSurfacePosition, false /* canSkipFirstFrame */,
+ mWmService.mWindowCornerRadius),
mWmService.mSurfaceAnimationRunner);
startAnimation(mPendingTransaction, adapter);
commitPendingTransaction();
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 03240c0..e8882ec 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -491,6 +491,10 @@
SET(ElapsedRealtimeNanos, location.elapsedRealtime.timestampNs);
}
+ if (flags & ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS) {
+ SET(ElapsedUncertaintyRealtimeNanos, location.elapsedRealtime.timeUncertaintyNs);
+ }
+
return object.get();
}
@@ -521,7 +525,8 @@
jdouble altitudeMeters, jfloat speedMetersPerSec, jfloat bearingDegrees,
jfloat horizontalAccuracyMeters, jfloat verticalAccuracyMeters,
jfloat speedAccuracyMetersPerSecond, jfloat bearingAccuracyDegrees,
- jlong timestamp, jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos) {
+ jlong timestamp, jint elapsedRealtimeFlags, jlong elapsedRealtimeNanos,
+ jlong elapsedRealtimeUncertaintyNanos) {
GnssLocation_V2_0 location;
location.v1_0 = createGnssLocation_V1_0(
gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters,
@@ -531,6 +536,7 @@
location.elapsedRealtime.flags = static_cast<uint16_t>(elapsedRealtimeFlags);
location.elapsedRealtime.timestampNs = static_cast<uint64_t>(elapsedRealtimeNanos);
+ location.elapsedRealtime.timeUncertaintyNs = static_cast<uint64_t>(elapsedRealtimeUncertaintyNanos);
return location;
}
@@ -548,12 +554,15 @@
Return<void> gnssReleaseWakelockCb() override;
Return<void> gnssRequestTimeCb() override;
Return<void> gnssRequestLocationCb(const bool independentFromGnss) override;
+
Return<void> gnssSetSystemInfoCb(const IGnssCallback::GnssSystemInfo& info) override;
// New in 1.1
Return<void> gnssNameCb(const android::hardware::hidl_string& name) override;
// New in 2.0
+ Return<void> gnssRequestLocationCb_2_0(const bool independentFromGnss, const bool isUserEmergency)
+ override;
Return<void> gnssSetCapabilitiesCb_2_0(uint32_t capabilities) override;
Return<void> gnssLocationCb_2_0(const GnssLocation_V2_0& location) override;
@@ -713,8 +722,15 @@
}
Return<void> GnssCallback::gnssRequestLocationCb(const bool independentFromGnss) {
+ return GnssCallback::gnssRequestLocationCb_2_0(independentFromGnss, /* isUserEmergency= */
+ false);
+}
+
+Return<void> GnssCallback::gnssRequestLocationCb_2_0(const bool independentFromGnss, const bool
+ isUserEmergency) {
JNIEnv* env = getJniEnv();
- env->CallVoidMethod(mCallbacksObj, method_requestLocation, boolToJbool(independentFromGnss));
+ env->CallVoidMethod(mCallbacksObj, method_requestLocation, boolToJbool(independentFromGnss),
+ boolToJbool(isUserEmergency));
checkAndClearExceptionFromCallback(env, __FUNCTION__);
return Void();
}
@@ -1422,7 +1438,7 @@
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
method_reportNiNotification = env->GetMethodID(clazz, "reportNiNotification",
"(IIIIILjava/lang/String;Ljava/lang/String;II)V");
- method_requestLocation = env->GetMethodID(clazz, "requestLocation", "(Z)V");
+ method_requestLocation = env->GetMethodID(clazz, "requestLocation", "(ZZ)V");
method_requestRefLocation = env->GetMethodID(clazz, "requestRefLocation", "()V");
method_requestSetID = env->GetMethodID(clazz, "requestSetID", "(I)V");
method_requestUtcTime = env->GetMethodID(clazz, "requestUtcTime", "()V");
@@ -1877,7 +1893,8 @@
jfloat bearingAccuracyDegrees,
jlong timestamp,
jint elapsedRealtimeFlags,
- jlong elapsedRealtimeNanos) {
+ jlong elapsedRealtimeNanos,
+ jlong elapsedRealtimeUncertaintyNanos) {
if (gnssHal_V2_0 != nullptr) {
GnssLocation_V2_0 location = createGnssLocation_V2_0(
gnssLocationFlags,
@@ -1892,7 +1909,8 @@
bearingAccuracyDegrees,
timestamp,
elapsedRealtimeFlags,
- elapsedRealtimeNanos);
+ elapsedRealtimeNanos,
+ elapsedRealtimeUncertaintyNanos);
auto result = gnssHal_V2_0->injectBestLocation_2_0(location);
if (!result.isOk() || !result) {
@@ -2803,7 +2821,7 @@
android_location_GnssLocationProvider_read_nmea)},
{"native_inject_time", "(JJI)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_time)},
- {"native_inject_best_location", "(IDDDFFFFFFJIJ)V", reinterpret_cast<void *>(
+ {"native_inject_best_location", "(IDDDFFFFFFJIJJ)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_best_location)},
{"native_inject_location", "(DDF)V", reinterpret_cast<void *>(
android_location_GnssLocationProvider_inject_location)},
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 8d88c5a..a19d5d5 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -89,8 +89,8 @@
import com.android.server.connectivity.IpConnectivityMetrics;
import com.android.server.coverage.CoverageService;
import com.android.server.devicepolicy.DevicePolicyManagerService;
-import com.android.server.display.ColorDisplayService;
import com.android.server.display.DisplayManagerService;
+import com.android.server.display.color.ColorDisplayService;
import com.android.server.dreams.DreamManagerService;
import com.android.server.emergency.EmergencyAffordanceService;
import com.android.server.gpu.GpuService;
@@ -1366,7 +1366,6 @@
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity,
/* allowIsolated= */ false,
DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL);
- networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
} catch (Throwable e) {
reportWtf("starting Connectivity Service", e);
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java b/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
index d32f1f7..e100d16 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/AppCompactorTest.java
@@ -16,15 +16,6 @@
package com.android.server.am;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_ACTION_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_STATSD_SAMPLE_RATE;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_1;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_2;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_3;
-import static android.provider.DeviceConfig.ActivityManager.KEY_COMPACT_THROTTLE_4;
-import static android.provider.DeviceConfig.ActivityManager.KEY_USE_COMPACTION;
-
import static com.android.server.am.ActivityManagerService.Injector;
import static com.android.server.am.AppCompactor.compactActionIntToString;
@@ -117,28 +108,28 @@
// When the DeviceConfig already has a flag value stored (note this test will need to
// change if the default value changes from false).
assertThat(AppCompactor.DEFAULT_USE_COMPACTION).isFalse();
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "true", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "true", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1,
Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_1 + 1 % 4) + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2,
Integer.toString((AppCompactor.DEFAULT_COMPACT_ACTION_2 + 1 % 4) + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
// Then calling init will read and set that flag.
@@ -169,8 +160,8 @@
// When we call init and change some the flag value...
mCompactorUnderTest.init();
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "true", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "true", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then that new flag value is updated in the implementation.
@@ -179,8 +170,8 @@
// And again, setting the flag the other way.
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "false", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "false", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.useCompaction()).isFalse();
}
@@ -193,8 +184,8 @@
// When we push an invalid flag value...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_USE_COMPACTION, "foobar", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_USE_COMPACTION, "foobar", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then we set the default.
@@ -212,11 +203,11 @@
for (int i = 1; i < 5; i++) {
mCountDown = new CountDownLatch(2);
int expectedSome = (AppCompactor.DEFAULT_COMPACT_ACTION_1 + i) % 4 + 1;
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, Integer.toString(expectedSome), false);
int expectedFull = (AppCompactor.DEFAULT_COMPACT_ACTION_2 + i) % 4 + 1;
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, Integer.toString(expectedFull), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then the updates are reflected in the flags.
@@ -233,10 +224,10 @@
// When we override new values for the compaction action with bad values ...
mCountDown = new CountDownLatch(2);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, "foo", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then the default values are reflected in the flag
@@ -246,10 +237,10 @@
compactActionIntToString(AppCompactor.DEFAULT_COMPACT_ACTION_2));
mCountDown = new CountDownLatch(2);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_1, "", false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_ACTION_2, "", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_1, "", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_ACTION_2, "", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactActionSome).isEqualTo(
@@ -264,17 +255,17 @@
// When we override new reasonable throttle values after init...
mCountDown = new CountDownLatch(4);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_1 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_2 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_3 + 1), false);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4,
Long.toString(AppCompactor.DEFAULT_COMPACT_THROTTLE_4 + 1), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -296,8 +287,8 @@
// When one of the throttles is overridden with a bad value...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_1, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_1, "foo", false);
// Then all the throttles have the defaults set.
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
@@ -311,8 +302,8 @@
// Repeat for each of the throttle keys.
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_2, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_2, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -324,8 +315,8 @@
AppCompactor.DEFAULT_COMPACT_THROTTLE_4);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_3, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_3, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -337,8 +328,8 @@
AppCompactor.DEFAULT_COMPACT_THROTTLE_4);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_THROTTLE_4, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_THROTTLE_4, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
assertThat(mCompactorUnderTest.mCompactThrottleSomeSome).isEqualTo(
AppCompactor.DEFAULT_COMPACT_THROTTLE_1);
@@ -356,8 +347,8 @@
// When we override mStatsdSampleRate with a reasonable values ...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(AppCompactor.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -373,8 +364,8 @@
// When we override mStatsdSampleRate with a reasonable values ...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false);
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE, "foo", false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
// Then that override is reflected in the compactor.
@@ -389,8 +380,8 @@
// When we override mStatsdSampleRate with an value outside of [0..1]...
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(-1.0f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
@@ -398,8 +389,8 @@
assertThat(mCompactorUnderTest.mStatsdSampleRate).isEqualTo(0.0f);
mCountDown = new CountDownLatch(1);
- DeviceConfig.setProperty(DeviceConfig.ActivityManager.NAMESPACE,
- KEY_COMPACT_STATSD_SAMPLE_RATE,
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ AppCompactor.KEY_COMPACT_STATSD_SAMPLE_RATE,
Float.toString(1.01f), false);
assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
diff --git a/services/tests/servicestests/src/com/android/server/display/AppSaturationControllerTest.java b/services/tests/servicestests/src/com/android/server/display/color/AppSaturationControllerTest.java
similarity index 95%
rename from services/tests/servicestests/src/com/android/server/display/AppSaturationControllerTest.java
rename to services/tests/servicestests/src/com/android/server/display/color/AppSaturationControllerTest.java
index e518844..7c9a81d 100644
--- a/services/tests/servicestests/src/com/android/server/display/AppSaturationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/color/AppSaturationControllerTest.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.android.server.display;
+package com.android.server.display.color;
-import static com.android.server.display.AppSaturationController.TRANSLATION_VECTOR;
+import static com.android.server.display.color.AppSaturationController.TRANSLATION_VECTOR;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -29,7 +29,7 @@
import androidx.test.runner.AndroidJUnit4;
-import com.android.server.display.ColorDisplayService.ColorTransformController;
+import com.android.server.display.color.ColorDisplayService.ColorTransformController;
import org.junit.After;
import org.junit.Before;
diff --git a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
similarity index 95%
rename from services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java
rename to services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
index 01759d2..2f427b0 100644
--- a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.server.display;
+package com.android.server.display.color;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -70,7 +70,7 @@
private MockTwilightManager mTwilightManager;
- private ColorDisplayService mColorDisplayService;
+ private ColorDisplayService mCds;
private ColorDisplayService.BinderService mBinderService;
@BeforeClass
@@ -96,17 +96,17 @@
mTwilightManager = new MockTwilightManager();
LocalServices.addService(TwilightManager.class, mTwilightManager);
- mColorDisplayService = new ColorDisplayService(mContext);
- mBinderService = mColorDisplayService.new BinderService();
+ mCds = new ColorDisplayService(mContext);
+ mBinderService = mCds.new BinderService();
LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class,
- mColorDisplayService.new ColorDisplayServiceInternal());
+ mCds.new ColorDisplayServiceInternal());
}
@After
public void tearDown() {
LocalServices.removeServiceForTest(TwilightManager.class);
- mColorDisplayService = null;
+ mCds = null;
mTwilightManager = null;
@@ -1003,7 +1003,7 @@
/* Since we are using FakeSettingsProvider which could not trigger observer change,
* force an update here.*/
- mColorDisplayService.updateDisplayWhiteBalanceStatus();
+ mCds.updateDisplayWhiteBalanceStatus();
assertDwbActive(false);
}
@@ -1015,12 +1015,12 @@
setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
- mColorDisplayService.updateDisplayWhiteBalanceStatus();
+ mCds.updateDisplayWhiteBalanceStatus();
assertDwbActive(false);
/* Disable nightlight */
setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
- mColorDisplayService.updateDisplayWhiteBalanceStatus();
+ mCds.updateDisplayWhiteBalanceStatus();
assertDwbActive(true);
}
@@ -1031,48 +1031,48 @@
startService();
mBinderService.setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
- mColorDisplayService.updateDisplayWhiteBalanceStatus();
+ mCds.updateDisplayWhiteBalanceStatus();
assertDwbActive(true);
}
@Test
public void displayWhiteBalance_setTemperatureOverMax() {
- int max = mColorDisplayService.mDisplayWhiteBalanceTintController.mTemperatureMax;
+ int max = mCds.mDisplayWhiteBalanceTintController.mTemperatureMax;
ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
- ColorDisplayService.ColorDisplayServiceInternal.class);
- cdsInternal.setDisplayWhiteBalanceColorTemperature(max+1);
+ ColorDisplayService.ColorDisplayServiceInternal.class);
+ cdsInternal.setDisplayWhiteBalanceColorTemperature(max + 1);
assertWithMessage("Unexpected temperature set")
- .that(mColorDisplayService.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+ .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
.isEqualTo(max);
}
@Test
public void displayWhiteBalance_setTemperatureBelowMin() {
- int min = mColorDisplayService.mDisplayWhiteBalanceTintController.mTemperatureMin;
+ int min = mCds.mDisplayWhiteBalanceTintController.mTemperatureMin;
ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
- ColorDisplayService.ColorDisplayServiceInternal.class);
+ ColorDisplayService.ColorDisplayServiceInternal.class);
cdsInternal.setDisplayWhiteBalanceColorTemperature(min - 1);
assertWithMessage("Unexpected temperature set")
- .that(mColorDisplayService.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+ .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
.isEqualTo(min);
}
@Test
public void displayWhiteBalance_setValidTemperature() {
- int min = mColorDisplayService.mDisplayWhiteBalanceTintController.mTemperatureMin;
- int max = mColorDisplayService.mDisplayWhiteBalanceTintController.mTemperatureMax;
+ int min = mCds.mDisplayWhiteBalanceTintController.mTemperatureMin;
+ int max = mCds.mDisplayWhiteBalanceTintController.mTemperatureMax;
int valToSet = (min + max) / 2;
ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
- ColorDisplayService.ColorDisplayServiceInternal.class);
+ ColorDisplayService.ColorDisplayServiceInternal.class);
cdsInternal.setDisplayWhiteBalanceColorTemperature(valToSet);
assertWithMessage("Unexpected temperature set")
- .that(mColorDisplayService.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+ .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
.isEqualTo(valToSet);
}
@@ -1171,14 +1171,14 @@
}
/**
- * Convenience method to start {@link #mColorDisplayService}.
+ * Convenience method to start {@link #mCds}.
*/
private void startService() {
Secure.putIntForUser(mContext.getContentResolver(), Secure.USER_SETUP_COMPLETE, 1, mUserId);
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
- mColorDisplayService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
- mColorDisplayService.onStartUser(mUserId);
+ mCds.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+ mCds.onStartUser(mUserId);
});
}
@@ -1224,7 +1224,7 @@
*/
private void assertDwbActive(boolean enabled) {
assertWithMessage("Incorrect Display White Balance state")
- .that(mColorDisplayService.mDisplayWhiteBalanceTintController.isActivated())
+ .that(mCds.mDisplayWhiteBalanceTintController.isActivated())
.isEqualTo(enabled);
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
index d9faaa4..3a55c22 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
@@ -333,6 +333,20 @@
}
@Test
+ public void testSharedLibraryContext() {
+ SharedLibraryInfo sharedLibrary =
+ createMockSharedLibrary(new String[] {"a.dex", "b.dex"}).get(0);
+ String context = DexoptUtils.getClassLoaderContext(sharedLibrary);
+ assertEquals("PCL[]", context);
+
+ SharedLibraryInfo otherSharedLibrary =
+ createMockSharedLibrary(new String[] {"c.dex"}).get(0);
+ otherSharedLibrary.addDependency(sharedLibrary);
+ context = DexoptUtils.getClassLoaderContext(otherSharedLibrary);
+ assertEquals("PCL[]{PCL[a.dex:b.dex]}", context);
+ }
+
+ @Test
public void testProcessContextForDexLoad() {
List<String> classLoaders = Arrays.asList(
DELEGATE_LAST_CLASS_LOADER_NAME,
diff --git a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
index 6a937fa..a2f1f01 100644
--- a/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/AttentionDetectorTest.java
@@ -32,10 +32,13 @@
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.service.attention.AttentionService;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -49,6 +52,7 @@
private TestableAttentionDetector mAttentionDetector;
private long mAttentionTimeout;
private long mNextDimming;
+ private int mIsSettingEnabled;
@Before
public void setUp() {
@@ -59,6 +63,20 @@
mAttentionDetector.onWakefulnessChangeStarted(PowerManagerInternal.WAKEFULNESS_AWAKE);
mAttentionDetector.setAttentionServiceSupported(true);
mNextDimming = SystemClock.uptimeMillis() + 3000L;
+
+ // Save the existing state.
+ mIsSettingEnabled = Settings.System.getIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 1, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ }
+
+ @After
+ public void tearDown() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, mIsSettingEnabled, UserHandle.USER_CURRENT);
}
@Test
@@ -69,6 +87,16 @@
}
@Test
+ public void testOnUserActivity_doesntCheckIfNotEnabled() {
+ Settings.System.putIntForUser(getContext().getContentResolver(),
+ Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT);
+ mAttentionDetector.updateEnabledFromSettings(getContext());
+ long when = registerAttention();
+ verify(mAttentionManagerInternal, never()).checkAttention(anyInt(), anyLong(), any());
+ assertThat(mNextDimming).isEqualTo(when);
+ }
+
+ @Test
public void testOnUserActivity_doesntCheckIfNotSupported() {
mAttentionDetector.setAttentionServiceSupported(false);
long when = registerAttention();
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 911c4a2..1bda412 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -18,44 +18,67 @@
import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.ActivityManagerInternal;
import android.attention.AttentionManagerInternal;
import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.hardware.SensorManager;
+import android.hardware.display.AmbientDisplayConfiguration;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
+import android.os.BatteryManager;
import android.os.BatteryManagerInternal;
import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.os.SystemClock;
import android.os.SystemProperties;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import androidx.test.InstrumentationRegistry;
import com.android.internal.app.IBatteryStats;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.lights.LightsManager;
import com.android.server.policy.WindowManagerPolicy;
+import com.android.server.power.PowerManagerService.BatteryReceiver;
import com.android.server.power.PowerManagerService.Injector;
import com.android.server.power.PowerManagerService.NativeWrapper;
+import com.android.server.power.PowerManagerService.UserSwitchedReceiver;
import com.android.server.power.batterysaver.BatterySaverPolicy;
import com.android.server.power.batterysaver.BatterySavingStats;
-import org.junit.Rule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -65,29 +88,54 @@
/**
* Tests for {@link com.android.server.power.PowerManagerService}
*/
-public class PowerManagerServiceTest extends AndroidTestCase {
+public class PowerManagerServiceTest {
private static final float PRECISION = 0.001f;
private static final float BRIGHTNESS_FACTOR = 0.7f;
private static final boolean BATTERY_SAVER_ENABLED = true;
private static final String TEST_LAST_REBOOT_PROPERTY = "test.sys.boot.reason";
- private @Mock BatterySaverPolicy mBatterySaverPolicyMock;
- private @Mock LightsManager mLightsManagerMock;
- private @Mock DisplayManagerInternal mDisplayManagerInternalMock;
- private @Mock BatteryManagerInternal mBatteryManagerInternalMock;
- private @Mock ActivityManagerInternal mActivityManagerInternalMock;
- private @Mock AttentionManagerInternal mAttentionManagerInternalMock;
- private @Mock PowerManagerService.NativeWrapper mNativeWrapperMock;
- private @Mock Notifier mNotifierMock;
+ @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
+ @Mock private LightsManager mLightsManagerMock;
+ @Mock private DisplayManagerInternal mDisplayManagerInternalMock;
+ @Mock private BatteryManagerInternal mBatteryManagerInternalMock;
+ @Mock private ActivityManagerInternal mActivityManagerInternalMock;
+ @Mock private AttentionManagerInternal mAttentionManagerInternalMock;
+ @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
+ @Mock private Notifier mNotifierMock;
+ @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
+ @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
+
private PowerManagerService mService;
private PowerSaveState mPowerSaveState;
private DisplayPowerRequest mDisplayPowerRequest;
+ private ContextWrapper mContextSpy;
+ private BatteryReceiver mBatteryReceiver;
+ private UserSwitchedReceiver mUserSwitchedReceiver;
+ private Resources mResourcesSpy;
+ private class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> {
+ private final IntentFilter mFilter;
+ IntentFilterMatcher(IntentFilter filter) {
+ mFilter = filter;
+ }
- @Rule
+ @Override
+ public boolean matches(IntentFilter other) {
+ if (other.countActions() != mFilter.countActions()) {
+ return false;
+ }
+ for (int i = 0; i < mFilter.countActions(); i++) {
+ if (!mFilter.getAction(i).equals(other.getAction(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ @Before
public void setUp() throws Exception {
- super.setUp();
MockitoAnnotations.initMocks(this);
mPowerSaveState = new PowerSaveState.Builder()
@@ -105,33 +153,54 @@
addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
addLocalServiceMock(AttentionManagerInternal.class, mAttentionManagerInternalMock);
- mService = new PowerManagerService(getContext(), new Injector() {
+ mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+ mResourcesSpy = spy(mContextSpy.getResources());
+ when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
+
+ mService = new PowerManagerService(mContextSpy, new Injector() {
+ @Override
Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
SuspendBlocker suspendBlocker, WindowManagerPolicy policy) {
return mNotifierMock;
}
+ @Override
SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
return mock(SuspendBlocker.class);
}
+ @Override
BatterySaverPolicy createBatterySaverPolicy(
Object lock, Context context, BatterySavingStats batterySavingStats) {
return mBatterySaverPolicyMock;
}
+ @Override
NativeWrapper createNativeWrapper() {
return mNativeWrapperMock;
}
+
+ @Override
+ WirelessChargerDetector createWirelessChargerDetector(
+ SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+ return mWirelessChargerDetectorMock;
+ }
+
+ @Override
+ AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+ return mAmbientDisplayConfigurationMock;
+ }
});
}
- @Override
+ @After
public void tearDown() throws Exception {
LocalServices.removeServiceForTest(LightsManager.class);
LocalServices.removeServiceForTest(DisplayManagerInternal.class);
LocalServices.removeServiceForTest(BatteryManagerInternal.class);
LocalServices.removeServiceForTest(ActivityManagerInternal.class);
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
}
/**
@@ -142,7 +211,56 @@
LocalServices.addService(clazz, mock);
}
- @SmallTest
+ private void startSystem() throws Exception {
+ mService.systemReady(null);
+
+ // Grab the BatteryReceiver
+ ArgumentCaptor<BatteryReceiver> batCaptor = ArgumentCaptor.forClass(BatteryReceiver.class);
+ IntentFilter batFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ batFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ verify(mContextSpy).registerReceiver(batCaptor.capture(),
+ argThat(new IntentFilterMatcher(batFilter)), isNull(), isA(Handler.class));
+ mBatteryReceiver = batCaptor.getValue();
+
+ // Grab the UserSwitchedReceiver
+ ArgumentCaptor<UserSwitchedReceiver> userSwitchedCaptor =
+ ArgumentCaptor.forClass(UserSwitchedReceiver.class);
+ IntentFilter usFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
+ verify(mContextSpy).registerReceiver(userSwitchedCaptor.capture(),
+ argThat(new IntentFilterMatcher(usFilter)), isNull(), isA(Handler.class));
+ mUserSwitchedReceiver = userSwitchedCaptor.getValue();
+
+ mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+ }
+
+ private void forceSleep() {
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+ }
+
+ private void forceDream() {
+ mService.getBinderServiceInstance().nap(SystemClock.uptimeMillis());
+ }
+
+ private void forceAwake() {
+ mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(),
+ PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+ }
+
+ private void forceDozing() {
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+ }
+
+ private void setPluggedIn(boolean isPluggedIn) {
+ // Set the callback to return the new state
+ when(mBatteryManagerInternalMock.isPowered(BatteryManager.BATTERY_PLUGGED_ANY))
+ .thenReturn(isPluggedIn);
+ // Trigger PowerManager to reread the plug-in state
+ mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
+ }
+
+ @Test
public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() {
mService.updatePowerRequestFromBatterySaverPolicy(mDisplayPowerRequest);
assertThat(mDisplayPowerRequest.lowPowerMode).isEqualTo(BATTERY_SAVER_ENABLED);
@@ -150,7 +268,7 @@
.isWithin(PRECISION).of(BRIGHTNESS_FACTOR);
}
- @SmallTest
+ @Test
public void testGetLastShutdownReasonInternal() {
SystemProperties.set(TEST_LAST_REBOOT_PROPERTY, "shutdown,thermal");
int reason = mService.getLastShutdownReasonInternal(TEST_LAST_REBOOT_PROPERTY);
@@ -158,7 +276,7 @@
assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN);
}
- @SmallTest
+ @Test
public void testGetDesiredScreenPolicy_WithVR() throws Exception {
// Brighten up the screen
mService.setWakefulnessLocked(WAKEFULNESS_AWAKE, PowerManager.WAKE_REASON_UNKNOWN, 0);
@@ -187,42 +305,171 @@
DisplayPowerRequest.POLICY_BRIGHT);
}
- @SmallTest
+ @Test
public void testWakefulnessAwake_InitialValue() throws Exception {
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
}
- @SmallTest
+ @Test
public void testWakefulnessSleep_NoDozeSleepFlag() throws Exception {
// Start with AWAKE state
+ startSystem();
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
- mService.systemReady(null);
- mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
- // Take a nap with a flag.
+ // Take a nap and verify.
mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
- PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
}
- @MediumTest
+ @Test
+ public void testWakefulnessAwake_AcquireCausesWakeup() throws Exception {
+ startSystem();
+ forceSleep();
+
+ IBinder token = new Binder();
+ String tag = "acq_causes_wakeup";
+ String packageName = "pkg.name";
+
+ // First, ensure that a normal full wake lock does not cause a wakeup
+ int flags = PowerManager.FULL_WAKE_LOCK;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+ // Ensure that the flag does *NOT* work with a partial wake lock.
+ flags = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+ // Verify that flag forces a wakeup when paired to a FULL_WAKE_LOCK
+ flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+ mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+ null /* workSource */, null /* historyTag */);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+ }
+
+ @Test
+ public void testWakefulnessAwake_IPowerManagerWakeUp() throws Exception {
+ startSystem();
+ forceSleep();
+ mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(),
+ PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ }
+
+ /**
+ * Tests a series of variants that control whether a device wakes-up when it is plugged in
+ * or docked.
+ */
+ @Test
+ public void testWakefulnessAwake_ShouldWakeUpWhenPluggedIn() throws Exception {
+ boolean powerState;
+ startSystem();
+ forceSleep();
+
+ // Test 1:
+ // Set config to prevent it wake up, test, verify, reset config value.
+ when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+ .thenReturn(false);
+ mService.readConfigurationLocked();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+ .thenReturn(true);
+ mService.readConfigurationLocked();
+
+ // Test 2:
+ // Turn the power off, sleep, then plug into a wireless charger.
+ // Verify that we do not wake up if the phone is being plugged into a wireless charger.
+ setPluggedIn(false);
+ forceSleep();
+ when(mBatteryManagerInternalMock.getPlugType())
+ .thenReturn(BatteryManager.BATTERY_PLUGGED_WIRELESS);
+ when(mWirelessChargerDetectorMock.update(true /* isPowered */,
+ BatteryManager.BATTERY_PLUGGED_WIRELESS)).thenReturn(false);
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+ // Test 3:
+ // Do not wake up if the phone is being REMOVED from a wireless charger
+ when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+ // Test 4:
+ // Do not wake if we are dreaming.
+ forceAwake(); // Needs to be awake first before it can dream.
+ forceDream();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DREAMING);
+ forceSleep();
+
+ // Test 5:
+ // Don't wake if the device is configured not to wake up in theater mode (and theater
+ // mode is enabled).
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 1);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+ when(mResourcesSpy.getBoolean(
+ com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug))
+ .thenReturn(false);
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
+ Settings.Global.putInt(
+ mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+
+ // Test 6:
+ // Don't wake up if we are Dozing away and always-on is enabled.
+ when(mAmbientDisplayConfigurationMock.alwaysOnEnabled(UserHandle.USER_CURRENT))
+ .thenReturn(true);
+ mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+ forceAwake();
+ forceDozing();
+ setPluggedIn(true);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+
+ // Test 7:
+ // Finally, take away all the factors above and ensure the device wakes up!
+ forceAwake();
+ forceSleep();
+ setPluggedIn(false);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+ }
+
+ @Test
+ public void testWakefulnessDoze_goToSleep() throws Exception {
+ // Start with AWAKE state
+ startSystem();
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE);
+
+ // Take a nap and verify.
+ mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(),
+ PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+ assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING);
+ }
+
+ @Test
public void testWasDeviceIdleFor_true() {
int interval = 1000;
mService.onUserActivity();
- SystemClock.sleep(interval);
+ SystemClock.sleep(interval + 1 /* just a little more */);
assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue();
}
- @SmallTest
+ @Test
public void testWasDeviceIdleFor_false() {
int interval = 1000;
mService.onUserActivity();
assertThat(mService.wasDeviceIdleForInternal(interval)).isFalse();
}
- @SmallTest
+ @Test
public void testForceSuspend_putsDeviceToSleep() {
mService.systemReady(null);
mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
@@ -244,11 +491,11 @@
assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_ASLEEP);
}
- @SmallTest
+ @Test
public void testForceSuspend_pakeLocksDisabled() {
final String tag = "TestWakelockTag_098213";
final int flags = PowerManager.PARTIAL_WAKE_LOCK;
- final String pkg = getContext().getOpPackageName();
+ final String pkg = mContextSpy.getOpPackageName();
// Set up the Notification mock to keep track of the wakelocks that are currently
// active or disabled. We'll use this to verify that wakelocks are disabled when
@@ -292,7 +539,7 @@
}
- @SmallTest
+ @Test
public void testForceSuspend_forceSuspendFailurePropogated() {
when(mNativeWrapperMock.nativeForceSuspend()).thenReturn(false);
assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse();
diff --git a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
index d848b2d..7986055 100644
--- a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
@@ -31,7 +31,6 @@
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.PackageRollbackInfo.RestoreInfo;
-import android.content.rollback.RollbackInfo;
import android.util.IntArray;
import android.util.SparseLongArray;
@@ -46,8 +45,7 @@
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.util.Set;
@RunWith(JUnit4.class)
public class AppDataRollbackHelperTest {
@@ -236,24 +234,24 @@
wasRecentlyRestored.getPendingRestores().add(
new RestoreInfo(73 /* userId */, 239 /* appId*/, "seInfo"));
- RollbackData dataWithPendingBackup = new RollbackData(101, new File("/does/not/exist"), -1,
- true);
- dataWithPendingBackup.packages.add(pendingBackup);
+ RollbackData dataWithPendingBackup = new RollbackData(101, new File("/does/not/exist"), -1);
+ dataWithPendingBackup.info.getPackages().add(pendingBackup);
RollbackData dataWithRecentRestore = new RollbackData(17239, new File("/does/not/exist"),
- -1, true);
- dataWithRecentRestore.packages.add(wasRecentlyRestored);
+ -1);
+ dataWithRecentRestore.info.getPackages().add(wasRecentlyRestored);
RollbackData dataForDifferentUser = new RollbackData(17239, new File("/does/not/exist"),
- -1, true);
- dataForDifferentUser.packages.add(ignoredInfo);
+ -1);
+ dataForDifferentUser.info.getPackages().add(ignoredInfo);
- RollbackInfo rollbackInfo = new RollbackInfo(17239,
- Arrays.asList(pendingRestore, wasRecentlyRestored), false);
+ RollbackData dataForRestore = new RollbackData(17239, new File("/does/not/exist"), -1);
+ dataForRestore.info.getPackages().add(pendingRestore);
+ dataForRestore.info.getPackages().add(wasRecentlyRestored);
- List<RollbackData> changed = helper.commitPendingBackupAndRestoreForUser(37,
- Arrays.asList(dataWithPendingBackup, dataWithRecentRestore, dataForDifferentUser),
- Collections.singletonList(rollbackInfo));
+ Set<RollbackData> changed = helper.commitPendingBackupAndRestoreForUser(37,
+ Arrays.asList(dataWithPendingBackup, dataWithRecentRestore, dataForDifferentUser,
+ dataForRestore));
InOrder inOrder = Mockito.inOrder(installer);
// Check that pending backup and restore for the same package mutually destroyed each other.
@@ -267,9 +265,10 @@
assertEquals(53, pendingBackup.getCeSnapshotInodes().get(37));
// Check that changed returns correct RollbackData.
- assertEquals(2, changed.size());
- assertEquals(dataWithPendingBackup, changed.get(0));
- assertEquals(dataWithRecentRestore, changed.get(1));
+ assertEquals(3, changed.size());
+ assertTrue(changed.contains(dataWithPendingBackup));
+ assertTrue(changed.contains(dataWithRecentRestore));
+ assertTrue(changed.contains(dataForRestore));
// Check that restore was performed.
inOrder.verify(installer).restoreAppDataSnapshot(
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
index 8171469..6ec864c 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
@@ -61,7 +61,6 @@
import android.view.Display;
import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -323,6 +322,8 @@
private boolean mOnParole = false;
private CountDownLatch mLatch;
private long mLastParoleChangeTime;
+ private boolean mIsExpecting = false;
+ private boolean mExpectedParoleState;
public boolean getParoleState() {
synchronized (this) {
@@ -333,6 +334,15 @@
public void rearmLatch() {
synchronized (this) {
mLatch = new CountDownLatch(1);
+ mIsExpecting = false;
+ }
+ }
+
+ public void rearmLatch(boolean expectedParoleState) {
+ synchronized (this) {
+ mLatch = new CountDownLatch(1);
+ mIsExpecting = true;
+ mExpectedParoleState = expectedParoleState;
}
}
@@ -358,7 +368,9 @@
if (mLatch != null && mLatch.getCount() > 0) {
mOnParole = isParoleOn;
mLastParoleChangeTime = getCurrentTime();
- mLatch.countDown();
+ if (!mIsExpecting || isParoleOn == mExpectedParoleState) {
+ mLatch.countDown();
+ }
}
}
}
@@ -417,17 +429,23 @@
}
@Test
- @FlakyTest(bugId = 119774928)
public void testEnabledState() throws Exception {
TestParoleListener paroleListener = new TestParoleListener();
+ paroleListener.rearmLatch(true);
mController.addListener(paroleListener);
long lastUpdateTime;
// Test that listeners are notified if enabled changes when the device is not in parole.
setChargingState(mController, false);
- // Start off not enabled. Device is effectively on permanent parole.
+ // Start off not enabled. Device is effectively in permanent parole.
setAppIdleEnabled(mController, false);
+ // Since AppStandbyController uses a handler to notify listeners of a state change, there is
+ // some inherent latency between changing the state and getting the notification. We need to
+ // wait until the paroleListener has been notified that parole is on before continuing with
+ // the test.
+ paroleListener.awaitOnLatch(STABLE_CHARGING_THRESHOLD * 3 / 2);
+ assertTrue(paroleListener.mOnParole);
// Enable controller
paroleListener.rearmLatch();
diff --git a/services/tests/uiservicestests/Android.bp b/services/tests/uiservicestests/Android.bp
index f4443fe..e4ab257 100644
--- a/services/tests/uiservicestests/Android.bp
+++ b/services/tests/uiservicestests/Android.bp
@@ -17,7 +17,7 @@
"services.net",
"services.usage",
"guava",
- "android-support-test",
+ "androidx.test.rules", "hamcrest-library",
"mockito-target-inline-minus-junit4",
"platform-test-annotations",
"hamcrest-library",
diff --git a/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java b/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java
index 56d3a20..a1d48cc 100644
--- a/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java
+++ b/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java
@@ -16,15 +16,15 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.when;
import android.content.pm.PackageManagerInternal;
import android.net.Uri;
import android.os.Build;
-import android.support.test.InstrumentationRegistry;
import android.testing.TestableContext;
+import androidx.test.InstrumentationRegistry;
+
import com.android.server.uri.UriGrantsManagerInternal;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java b/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java
index d4c41e0..dc7f118 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java
@@ -20,9 +20,10 @@
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java
index cfc7430..e1f3913 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java
@@ -15,26 +15,26 @@
*/
package com.android.server.notification;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.when;
+
import android.app.ActivityManager;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.NotificationChannel;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
index 3e01fb5..273a9e6 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
@@ -17,8 +17,6 @@
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
-import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
-import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
@@ -31,9 +29,10 @@
import android.app.NotificationChannel;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
index 20c5f5d..6be2c2e 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java
@@ -62,13 +62,14 @@
import android.provider.Settings;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.IAccessibilityManager;
import android.view.accessibility.IAccessibilityManagerClient;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.util.IntPair;
import com.android.server.UiServiceTestCase;
import com.android.server.lights.Light;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java
index 97f2104..5041779 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java
@@ -16,18 +16,16 @@
package com.android.server.notification;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
index 84ef0c9..f652c5a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
@@ -25,6 +25,15 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.app.Notification;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,14 +41,6 @@
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
-import android.app.Notification;
-import android.os.UserHandle;
-import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.server.UiServiceTestCase;
-
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java
index abc6e3c..e9515fa 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java
@@ -15,31 +15,30 @@
*/
package com.android.server.notification;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import android.app.ActivityManager;
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.app.NotificationManager;
-import android.app.NotificationChannel;
-import android.os.UserHandle;
-import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
+import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;
-import static org.junit.Assert.assertEquals;
+import android.app.ActivityManager;
+import android.app.Notification;
+import android.app.Notification.Builder;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
import com.android.server.UiServiceTestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
@SmallTest
@RunWith(AndroidJUnit4.class)
public class ImportanceExtractorTest extends UiServiceTestCase {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java
index ca473c6..1408749 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java
@@ -24,10 +24,11 @@
import android.app.NotificationChannel;
import android.net.Uri;
import android.os.Parcel;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Xml;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.util.FastXmlSerializer;
import com.android.server.UiServiceTestCase;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
index 0681295..e15af3d 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
@@ -35,10 +35,11 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.telecom.TelecomManager;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
index 2162f28..52c199a3 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
@@ -39,9 +39,10 @@
import android.service.notification.NotificationListenerService.Ranking;
import android.service.notification.NotificationRankingUpdate;
import android.service.notification.SnoozeCriterion;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
index b9ae7d5..9f11472 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
@@ -56,8 +56,9 @@
import android.provider.Settings;
import android.service.notification.Adjustment;
import android.service.notification.StatusBarNotification;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.R;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
index bae8564..20d7a2a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java
@@ -17,7 +17,6 @@
import static android.service.notification.NotificationStats.DISMISSAL_PEEK;
import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEGATIVE;
-import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_POSITIVE;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
@@ -25,9 +24,10 @@
import android.os.Parcel;
import android.service.notification.NotificationStats;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
index 55c16b3..0ea53fa 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java
@@ -22,20 +22,18 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
import android.app.ActivityManager;
import android.app.Notification;
-import android.app.Person;
import android.app.PendingIntent;
+import android.app.Person;
import android.app.RemoteInput;
import android.content.Context;
import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
@@ -43,14 +41,15 @@
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Build;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.StyleSpan;
import android.util.Pair;
import android.widget.RemoteViews;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java
index fbb8c33..25e10d0 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java
@@ -20,9 +20,10 @@
import android.os.Parcel;
import android.service.notification.NotifyingApp;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index 05bb307..39e47ec 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -59,13 +59,14 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Secure;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableContentResolver;
import android.util.ArrayMap;
import android.util.Xml;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.util.FastXmlSerializer;
import com.android.server.UiServiceTestCase;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
index b322887..2abd340 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
@@ -41,13 +41,13 @@
import android.net.Uri;
import android.os.Build;
import android.os.UserHandle;
-import android.provider.Settings.Secure;
import android.service.notification.StatusBarNotification;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.TestableContentResolver;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java
index 5d8d48f1..68aa1dc 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java
@@ -15,17 +15,19 @@
*/
package com.android.server.notification;
-import android.support.test.runner.AndroidJUnit4;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-
-import com.android.server.UiServiceTestCase;
-
@SmallTest
@RunWith(AndroidJUnit4.class)
public class RateEstimatorTest extends UiServiceTestCase {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java
index 110e3fe..042c9d9 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java
@@ -23,14 +23,14 @@
import android.service.notification.ScheduleCalendar;
import android.service.notification.ZenModeConfig;
-import android.support.test.filters.FlakyTest;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.filters.FlakyTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java
index efa70e7..551e186 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java
@@ -10,11 +10,11 @@
import android.service.notification.Condition;
import android.service.notification.ScheduleCalendar;
import android.service.notification.ZenModeConfig;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
index 174c5fa..1e64543 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
@@ -15,12 +15,17 @@
*/
package com.android.server.notification;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.AlarmManager;
import android.app.Notification;
@@ -30,24 +35,19 @@
import android.os.SystemClock;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.IntArray;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import androidx.test.runner.AndroidJUnit4;
import com.android.server.UiServiceTestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java
index 025b11a..b1ee120 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java
@@ -15,23 +15,24 @@
*/
package com.android.server.notification;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
import android.app.Notification;
import android.app.Person;
import android.os.Bundle;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableString;
-import java.util.ArrayList;
-import java.util.Arrays;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.UiServiceTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertEquals;
-
-import com.android.server.UiServiceTestCase;
+import java.util.ArrayList;
+import java.util.Arrays;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java
index 9c7e028..dcab78e 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java
@@ -28,10 +28,11 @@
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.EventInfo;
import android.service.notification.ZenPolicy;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Xml;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.internal.util.FastXmlSerializer;
import com.android.server.UiServiceTestCase;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java
index 7c6b1c1..a0ee417 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java
@@ -19,14 +19,14 @@
import static junit.framework.Assert.assertEquals;
import android.service.notification.ZenPolicy;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
@SmallTest
@RunWith(AndroidJUnit4.class)
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java b/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java
index c6aea88..f6c854e 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java
@@ -21,10 +21,11 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import com.android.server.slice.SliceManagerService.PackageMatchingCache;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java b/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java
index a71aca5..4c2822a 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java
@@ -26,11 +26,12 @@
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
import android.os.RemoteException;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java
index 1efa415..ff2236d 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java
@@ -24,14 +24,15 @@
import android.content.ContentResolver;
import android.net.Uri;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.Xml.Encoding;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
-import com.android.server.slice.SlicePermissionManager.PkgUser;
import com.android.server.slice.SliceClientPermissions.SliceAuthority;
+import com.android.server.slice.SlicePermissionManager.PkgUser;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java
index bc28150..d942c5a 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java
@@ -19,9 +19,10 @@
import static org.junit.Assert.assertTrue;
import android.os.UserHandle;
-import android.support.test.filters.SmallTest;
import android.util.Xml.Encoding;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import org.junit.Before;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
index 6d4f5f8..7182f0f 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
@@ -34,18 +34,18 @@
import android.app.AppOpsManager;
import android.app.slice.SliceSpec;
import android.app.usage.UsageStatsManagerInternal;
-import android.content.pm.PackageManagerInternal;
import android.net.Uri;
import android.os.Binder;
import android.os.IBinder;
import android.os.Process;
import android.os.RemoteException;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableContext;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.server.LocalServices;
import com.android.server.UiServiceTestCase;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java
index efefee1..1872530b 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java
@@ -23,13 +23,14 @@
import android.net.Uri;
import android.net.Uri.Builder;
import android.os.FileUtils;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.util.Log;
import android.util.Xml.Encoding;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import org.junit.Test;
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java
index 5775991..8e61d21 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java
@@ -20,11 +20,12 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.Xml.Encoding;
+import androidx.test.filters.SmallTest;
+
import com.android.server.UiServiceTestCase;
import com.android.server.slice.SlicePermissionManager.PkgUser;
import com.android.server.slice.SliceProviderPermissions.SliceAuthority;
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
index 2c575f5..68b40b9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -18,11 +18,11 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.content.ActivityInfoProto.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
@@ -42,12 +42,16 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.verify;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
+import android.view.Display;
import android.view.Surface;
import android.view.WindowManager;
@@ -55,6 +59,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* Tests for the {@link AppWindowToken} class.
@@ -332,6 +337,46 @@
}
@Test
+ public void testReportOrientationChangeOnVisibilityChange() {
+ synchronized (mWm.mGlobalLock) {
+ mToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDisplayContent.getDisplayRotation().setFixedToUserRotation(
+ DisplayRotation.FIXED_TO_USER_ROTATION_ENABLED);
+
+ doReturn(Configuration.ORIENTATION_LANDSCAPE).when(mToken.mActivityRecord)
+ .getRequestedConfigurationOrientation();
+
+ mTask.mTaskRecord = Mockito.mock(TaskRecord.class, RETURNS_DEEP_STUBS);
+ mToken.commitVisibility(null, false /* visible */, TRANSIT_UNSET,
+ true /* performLayout */, false /* isVoiceInteraction */);
+ }
+
+ verify(mTask.mTaskRecord).onConfigurationChanged(any(Configuration.class));
+ }
+
+ @Test
+ public void testReportOrientationChangeOnOpeningClosingAppChange() {
+ synchronized (mWm.mGlobalLock) {
+ mToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDisplayContent.getDisplayRotation().setFixedToUserRotation(
+ DisplayRotation.FIXED_TO_USER_ROTATION_ENABLED);
+ mDisplayContent.getDisplayInfo().state = Display.STATE_ON;
+ mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_CLOSE,
+ false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
+
+ doReturn(Configuration.ORIENTATION_LANDSCAPE).when(mToken.mActivityRecord)
+ .getRequestedConfigurationOrientation();
+
+ mTask.mTaskRecord = Mockito.mock(TaskRecord.class, RETURNS_DEEP_STUBS);
+ mToken.setVisibility(false, false);
+ }
+
+ verify(mTask.mTaskRecord).onConfigurationChanged(any(Configuration.class));
+ }
+
+ @Test
public void testCreateRemoveStartingWindow() {
mToken.addStartingWindow(mPackageName,
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
index 6cce9f0..c483489 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java
@@ -213,7 +213,8 @@
final Animation a = new TranslateAnimation(-10, 10, 0, 0);
a.initialize(0, 0, 0, 0);
a.setDuration(50);
- return new WindowAnimationSpec(a, new Point(0, 0), false /* canSkipFirstFrame */);
+ return new WindowAnimationSpec(a, new Point(0, 0), false /* canSkipFirstFrame */,
+ 0 /* windowCornerRadius */);
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java b/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
index 9a825e0..897f0a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowAnimationSpecTest.java
@@ -24,6 +24,8 @@
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.when;
import android.graphics.Point;
import android.graphics.Rect;
@@ -56,7 +58,7 @@
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_NONE,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(windowCrop)));
@@ -66,7 +68,7 @@
public void testApply_clipAfter() {
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_AFTER_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@@ -76,8 +78,7 @@
// Stack bounds is (0, 0, 10, 10) position is (20, 40)
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation,
new Point(20, 40), mStackBounds, false /* canSkipFirstFrame */,
- STACK_CLIP_AFTER_ANIM,
- true /* isAppAnimation */);
+ STACK_CLIP_AFTER_ANIM, true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@@ -87,7 +88,7 @@
// Stack bounds is (0, 0, 10, 10) animation clip is (0, 0, 0, 0)
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(mStackBounds)));
@@ -101,19 +102,32 @@
a.initialize(0, 0, 0, 0);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
null, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl), argThat(Rect::isEmpty));
}
@Test
+ public void testApply_setCornerRadius() {
+ final float windowCornerRadius = 30f;
+ WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(mAnimation, null,
+ mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
+ true /* isAppAnimation */, windowCornerRadius);
+ windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
+ verify(mTransaction, never()).setCornerRadius(eq(mSurfaceControl), eq(windowCornerRadius));
+ when(mAnimation.hasRoundedCorners()).thenReturn(true);
+ windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
+ verify(mTransaction).setCornerRadius(eq(mSurfaceControl), eq(windowCornerRadius));
+ }
+
+ @Test
public void testApply_clipBeforeSmallerAnimationClip() {
// Stack bounds is (0, 0, 10, 10) animation clip is (0, 0, 5, 5)
Rect windowCrop = new Rect(0, 0, 5, 5);
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(windowCrop)));
@@ -126,7 +140,7 @@
Animation a = createClipRectAnimation(windowCrop, windowCrop);
WindowAnimationSpec windowAnimationSpec = new WindowAnimationSpec(a, null,
mStackBounds, false /* canSkipFirstFrame */, STACK_CLIP_BEFORE_ANIM,
- true /* isAppAnimation */);
+ true /* isAppAnimation */, 0 /* windowCornerRadius */);
windowAnimationSpec.apply(mTransaction, mSurfaceControl, 0);
verify(mTransaction).setWindowCrop(eq(mSurfaceControl),
argThat(rect -> rect.equals(mStackBounds)));
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
index 61c1d39..2ccdb9e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowFrameTests.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
import static android.view.DisplayCutout.fromBoundingRect;
@@ -41,6 +42,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* Tests for the {@link WindowState#computeFrameLw} method and other window frame machinery.
@@ -78,17 +80,22 @@
}
private static class TaskWithBounds extends Task {
- final Rect mBounds;
+ Rect mBounds;
final Rect mOverrideDisplayedBounds = new Rect();
boolean mFullscreenForTest = true;
TaskWithBounds(TaskStack stack, WindowManagerService wm, Rect bounds) {
super(0, stack, 0, wm, 0, false, new TaskDescription(), null);
- mBounds = bounds;
setBounds(bounds);
}
@Override
+ public int setBounds(Rect bounds) {
+ mBounds = bounds;
+ return super.setBounds(bounds);
+ }
+
+ @Override
public Rect getBounds() {
return mBounds;
}
@@ -513,6 +520,66 @@
assertEquals(w.getWmDisplayCutout().getDisplayCutout().getSafeInsetRight(), 0);
}
+ @Test
+ public void testFreeformContentInsets() {
+ // fullscreen task doesn't use bounds for computeFrame
+ final Task task = new TaskWithBounds(mStubStack, mWm, null);
+ WindowState w = createWindow(task, MATCH_PARENT, MATCH_PARENT);
+ w.mAttrs.gravity = Gravity.LEFT | Gravity.TOP;
+ task.setWindowingMode(WINDOWING_MODE_FREEFORM);
+ ((TaskWithBounds) task).mFullscreenForTest = false;
+ w.setWindowingMode(WINDOWING_MODE_FREEFORM);
+
+ DisplayContent dc = mWm.getDefaultDisplayContentLocked();
+ dc.mInputMethodTarget = w;
+ WindowState mockIme = mock(WindowState.class);
+ Mockito.doReturn(true).when(mockIme).isVisibleNow();
+ dc.mInputMethodWindow = mockIme;
+
+ // With no insets or system decor all the frames incoming from PhoneWindowManager
+ // are identical.
+ final Rect pf = new Rect(0, 0, 1000, 800);
+ final Rect df = pf;
+ final Rect of = df;
+ final Rect cf = new Rect(pf);
+ cf.bottom -= 400;
+ final Rect vf = new Rect(cf);
+ final Rect sf = new Rect(pf);
+ final Rect dcf = pf;
+
+ // First check that it only gets moved up enough to show window.
+ final Rect winRect = new Rect(200, 200, 300, 500);
+
+ task.setBounds(winRect);
+ w.setBounds(winRect);
+ w.getWindowFrames().setFrames(pf, df, of, cf, vf, dcf, sf, mEmptyRect);
+ w.computeFrameLw();
+
+ final Rect expected = new Rect(winRect.left, cf.bottom - winRect.height(),
+ winRect.right, cf.bottom);
+ assertEquals(expected, w.getFrameLw());
+ assertEquals(expected, w.getContentFrameLw());
+ assertEquals(expected, w.getVisibleFrameLw());
+
+ // Now check that it won't get moved beyond the top and then has appropriate insets
+ winRect.bottom = 600;
+ task.setBounds(winRect);
+ w.setBounds(winRect);
+ w.getWindowFrames().setFrames(pf, df, of, cf, vf, dcf, sf, mEmptyRect);
+ w.computeFrameLw();
+
+ assertFrame(w, winRect.left, 0, winRect.right, winRect.height());
+ expected.top = 0;
+ expected.bottom = cf.bottom;
+ assertContentFrame(w, expected);
+ assertVisibleFrame(w, expected);
+
+ // Check that it's moved back without ime insets
+ w.getWindowFrames().setFrames(pf, df, of, pf, pf, dcf, sf, mEmptyRect);
+ w.computeFrameLw();
+ assertEquals(winRect, w.getFrameLw());
+ }
+
private WindowStateWithTask createWindow(Task task, int width, int height) {
final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
attrs.width = width;
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
index da1defa..0dec8ee 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestUtils.java
@@ -82,6 +82,8 @@
}, new ComponentName("", ""), false, dc, true /* fillsParent */);
mTargetSdk = Build.VERSION_CODES.CUR_DEVELOPMENT;
mSkipOnParentChanged = skipOnParentChanged;
+ mActivityRecord = mock(ActivityRecord.class);
+ mActivityRecord.app = mock(WindowProcessController.class);
}
int getWindowsCount() {
diff --git a/services/usage/java/com/android/server/usage/AppStandbyController.java b/services/usage/java/com/android/server/usage/AppStandbyController.java
index 65ed85d..ffafb6d 100644
--- a/services/usage/java/com/android/server/usage/AppStandbyController.java
+++ b/services/usage/java/com/android/server/usage/AppStandbyController.java
@@ -35,6 +35,7 @@
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYNC_ADAPTER;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYSTEM_INTERACTION;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_SYSTEM_UPDATE;
+import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED;
import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_USER_INTERACTION;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_ACTIVE;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_EXEMPTED;
@@ -197,7 +198,7 @@
static final int MSG_ONE_TIME_CHECK_IDLE_STATES = 10;
/** Check the state of one app: arg1 = userId, arg2 = uid, obj = (String) packageName */
static final int MSG_CHECK_PACKAGE_IDLE_STATE = 11;
- static final int MSG_REPORT_EXEMPTED_SYNC_SCHEDULED = 12;
+ static final int MSG_REPORT_SYNC_SCHEDULED = 12;
static final int MSG_REPORT_EXEMPTED_SYNC_START = 13;
static final int MSG_UPDATE_STABLE_CHARGING= 14;
@@ -231,6 +232,10 @@
* Maximum time an exempted sync should keep the buckets elevated, when sync is started.
*/
long mExemptedSyncStartTimeoutMillis;
+ /**
+ * Maximum time an unexempted sync should keep the buckets elevated, when sync is scheduled
+ */
+ long mUnexemptedSyncScheduledTimeoutMillis;
/** Maximum time a system interaction should keep the buckets elevated. */
long mSystemInteractionTimeoutMillis;
/** The length of time phone must be charging before considered stable enough to run jobs */
@@ -447,6 +452,25 @@
}
}
+ void reportUnexemptedSyncScheduled(String packageName, int userId) {
+ if (!mAppIdleEnabled) return;
+
+ final long elapsedRealtime = mInjector.elapsedRealtime();
+ synchronized (mAppIdleLock) {
+ final int currentBucket =
+ mAppIdleHistory.getAppStandbyBucket(packageName, userId, elapsedRealtime);
+ if (currentBucket == STANDBY_BUCKET_NEVER) {
+ // Bring the app out of the never bucket
+ AppUsageHistory appUsage = mAppIdleHistory.reportUsage(packageName, userId,
+ STANDBY_BUCKET_WORKING_SET, REASON_SUB_USAGE_UNEXEMPTED_SYNC_SCHEDULED,
+ 0,
+ elapsedRealtime + mUnexemptedSyncScheduledTimeoutMillis);
+ maybeInformListeners(packageName, userId, elapsedRealtime,
+ appUsage.currentBucket, appUsage.bucketingReason, false);
+ }
+ }
+ }
+
void reportExemptedSyncStart(String packageName, int userId) {
if (!mAppIdleEnabled) return;
@@ -1423,8 +1447,8 @@
.sendToTarget();
}
- void postReportExemptedSyncScheduled(String packageName, int userId) {
- mHandler.obtainMessage(MSG_REPORT_EXEMPTED_SYNC_SCHEDULED, userId, 0, packageName)
+ void postReportSyncScheduled(String packageName, int userId, boolean exempted) {
+ mHandler.obtainMessage(MSG_REPORT_SYNC_SCHEDULED, userId, exempted ? 1 : 0, packageName)
.sendToTarget();
}
@@ -1492,6 +1516,9 @@
pw.print(" mExemptedSyncStartTimeoutMillis=");
TimeUtils.formatDuration(mExemptedSyncStartTimeoutMillis, pw);
pw.println();
+ pw.print(" mUnexemptedSyncScheduledTimeoutMillis=");
+ TimeUtils.formatDuration(mUnexemptedSyncScheduledTimeoutMillis, pw);
+ pw.println();
pw.print(" mSystemUpdateUsageTimeoutMillis=");
TimeUtils.formatDuration(mSystemUpdateUsageTimeoutMillis, pw);
@@ -1706,8 +1733,13 @@
mInjector.elapsedRealtime());
break;
- case MSG_REPORT_EXEMPTED_SYNC_SCHEDULED:
- reportExemptedSyncScheduled((String) msg.obj, msg.arg1);
+ case MSG_REPORT_SYNC_SCHEDULED:
+ final boolean exempted = msg.arg1 > 0 ? true : false;
+ if (exempted) {
+ reportExemptedSyncScheduled((String) msg.obj, msg.arg1);
+ } else {
+ reportUnexemptedSyncScheduled((String) msg.obj, msg.arg1);
+ }
break;
case MSG_REPORT_EXEMPTED_SYNC_START:
@@ -1799,12 +1831,14 @@
"system_update_usage_duration";
private static final String KEY_PREDICTION_TIMEOUT = "prediction_timeout";
private static final String KEY_SYNC_ADAPTER_HOLD_DURATION = "sync_adapter_duration";
- private static final String KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION
- = "exempted_sync_scheduled_nd_duration";
- private static final String KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION
- = "exempted_sync_scheduled_d_duration";
- private static final String KEY_EXEMPTED_SYNC_START_HOLD_DURATION
- = "exempted_sync_start_duration";
+ private static final String KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION =
+ "exempted_sync_scheduled_nd_duration";
+ private static final String KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION =
+ "exempted_sync_scheduled_d_duration";
+ private static final String KEY_EXEMPTED_SYNC_START_HOLD_DURATION =
+ "exempted_sync_start_duration";
+ private static final String KEY_UNEXEMPTED_SYNC_SCHEDULED_HOLD_DURATION =
+ "unexempted_sync_scheduled_duration";
private static final String KEY_SYSTEM_INTERACTION_HOLD_DURATION =
"system_interaction_duration";
private static final String KEY_STABLE_CHARGING_THRESHOLD = "stable_charging_threshold";
@@ -1816,6 +1850,7 @@
public static final long DEFAULT_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_TIMEOUT = 10 * ONE_MINUTE;
public static final long DEFAULT_EXEMPTED_SYNC_SCHEDULED_DOZE_TIMEOUT = 4 * ONE_HOUR;
public static final long DEFAULT_EXEMPTED_SYNC_START_TIMEOUT = 10 * ONE_MINUTE;
+ public static final long DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT = 10 * ONE_MINUTE;
public static final long DEFAULT_STABLE_CHARGING_THRESHOLD = 10 * ONE_MINUTE;
private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -1883,42 +1918,47 @@
ELAPSED_TIME_THRESHOLDS);
mCheckIdleIntervalMillis = Math.min(mAppStandbyElapsedThresholds[1] / 4,
COMPRESS_TIME ? ONE_MINUTE : 4 * 60 * ONE_MINUTE); // 4 hours
- mStrongUsageTimeoutMillis = mParser.getDurationMillis
- (KEY_STRONG_USAGE_HOLD_DURATION,
+ mStrongUsageTimeoutMillis = mParser.getDurationMillis(
+ KEY_STRONG_USAGE_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STRONG_USAGE_TIMEOUT);
- mNotificationSeenTimeoutMillis = mParser.getDurationMillis
- (KEY_NOTIFICATION_SEEN_HOLD_DURATION,
+ mNotificationSeenTimeoutMillis = mParser.getDurationMillis(
+ KEY_NOTIFICATION_SEEN_HOLD_DURATION,
COMPRESS_TIME ? 12 * ONE_MINUTE : DEFAULT_NOTIFICATION_TIMEOUT);
- mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis
- (KEY_SYSTEM_UPDATE_HOLD_DURATION,
+ mSystemUpdateUsageTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYSTEM_UPDATE_HOLD_DURATION,
COMPRESS_TIME ? 2 * ONE_MINUTE : DEFAULT_SYSTEM_UPDATE_TIMEOUT);
- mPredictionTimeoutMillis = mParser.getDurationMillis
- (KEY_PREDICTION_TIMEOUT,
+ mPredictionTimeoutMillis = mParser.getDurationMillis(
+ KEY_PREDICTION_TIMEOUT,
COMPRESS_TIME ? 10 * ONE_MINUTE : DEFAULT_PREDICTION_TIMEOUT);
- mSyncAdapterTimeoutMillis = mParser.getDurationMillis
- (KEY_SYNC_ADAPTER_HOLD_DURATION,
+ mSyncAdapterTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYNC_ADAPTER_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYNC_ADAPTER_TIMEOUT);
- mExemptedSyncScheduledNonDozeTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION,
+ mExemptedSyncScheduledNonDozeTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_HOLD_DURATION,
COMPRESS_TIME ? (ONE_MINUTE / 2)
: DEFAULT_EXEMPTED_SYNC_SCHEDULED_NON_DOZE_TIMEOUT);
- mExemptedSyncScheduledDozeTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
+ mExemptedSyncScheduledDozeTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE
: DEFAULT_EXEMPTED_SYNC_SCHEDULED_DOZE_TIMEOUT);
- mExemptedSyncStartTimeoutMillis = mParser.getDurationMillis
- (KEY_EXEMPTED_SYNC_START_HOLD_DURATION,
+ mExemptedSyncStartTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_START_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE
: DEFAULT_EXEMPTED_SYNC_START_TIMEOUT);
- mSystemInteractionTimeoutMillis = mParser.getDurationMillis
- (KEY_SYSTEM_INTERACTION_HOLD_DURATION,
+ mUnexemptedSyncScheduledTimeoutMillis = mParser.getDurationMillis(
+ KEY_EXEMPTED_SYNC_SCHEDULED_DOZE_HOLD_DURATION,
+ COMPRESS_TIME ? ONE_MINUTE
+ : DEFAULT_UNEXEMPTED_SYNC_SCHEDULED_TIMEOUT); // TODO
+
+ mSystemInteractionTimeoutMillis = mParser.getDurationMillis(
+ KEY_SYSTEM_INTERACTION_HOLD_DURATION,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_SYSTEM_INTERACTION_TIMEOUT);
- mStableChargingThresholdMillis = mParser.getDurationMillis
- (KEY_STABLE_CHARGING_THRESHOLD,
+ mStableChargingThresholdMillis = mParser.getDurationMillis(
+ KEY_STABLE_CHARGING_THRESHOLD,
COMPRESS_TIME ? ONE_MINUTE : DEFAULT_STABLE_CHARGING_THRESHOLD);
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
index 4756fb4..485a79d 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
@@ -27,6 +27,7 @@
import android.util.TimeUtils;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.IndentingPrintWriter;
import libcore.io.IoUtils;
@@ -1246,4 +1247,36 @@
}
directory.delete();
}
+
+ /**
+ * print total number and list of stats files for each interval type.
+ * @param pw
+ */
+ public void dump(IndentingPrintWriter pw, boolean compact) {
+ synchronized (mLock) {
+ pw.println("UsageStatsDatabase:");
+ pw.increaseIndent();
+ for (int i = 0; i < mSortedStatFiles.length; i++) {
+ final TimeSparseArray<AtomicFile> files = mSortedStatFiles[i];
+ final int size = files.size();
+ pw.print(UserUsageStatsService.intervalToString(i));
+ pw.print(" stats files: ");
+ pw.print(size);
+ pw.println(", sorted list of files:");
+ pw.increaseIndent();
+ for (int f = 0; f < size; f++) {
+ final long fileName = files.keyAt(f);
+ if (compact) {
+ pw.print(UserUsageStatsService.formatDateTime(fileName, false));
+ } else {
+ pw.printPair(Long.toString(fileName),
+ UserUsageStatsService.formatDateTime(fileName, true));
+ }
+ pw.println();
+ }
+ pw.decreaseIndent();
+ }
+ pw.decreaseIndent();
+ }
+ }
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index ebb0210..b14d722 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -1751,8 +1751,8 @@
}
@Override
- public void reportExemptedSyncScheduled(String packageName, int userId) {
- mAppStandby.postReportExemptedSyncScheduled(packageName, userId);
+ public void reportSyncScheduled(String packageName, int userId, boolean exempted) {
+ mAppStandby.postReportSyncScheduled(packageName, userId, exempted);
}
@Override
diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
index ebd8e36..b9a5676 100644
--- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
@@ -658,9 +658,10 @@
pw.println(" stats");
printIntervalStats(pw, mCurrentStats[interval], !compact, true, pkg);
}
+ mDatabase.dump(pw, compact);
}
- private String formatDateTime(long dateTime, boolean pretty) {
+ static String formatDateTime(long dateTime, boolean pretty) {
if (pretty) {
return "\"" + sDateFormat.format(dateTime)+ "\"";
}
@@ -888,7 +889,7 @@
pw.decreaseIndent();
}
- private static String intervalToString(int interval) {
+ public static String intervalToString(int interval) {
switch (interval) {
case INTERVAL_DAILY:
return "daily";
diff --git a/telecomm/java/android/telecom/AudioState.java b/telecomm/java/android/telecom/AudioState.java
index eb202a7..4e74395 100644
--- a/telecomm/java/android/telecom/AudioState.java
+++ b/telecomm/java/android/telecom/AudioState.java
@@ -133,7 +133,7 @@
/**
* Responsible for creating AudioState objects for deserialized Parcels.
*/
- public static final Parcelable.Creator<AudioState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AudioState> CREATOR =
new Parcelable.Creator<AudioState> () {
@Override
diff --git a/telecomm/java/android/telecom/CallAudioState.java b/telecomm/java/android/telecom/CallAudioState.java
index e33ba7e..4b90985 100644
--- a/telecomm/java/android/telecom/CallAudioState.java
+++ b/telecomm/java/android/telecom/CallAudioState.java
@@ -239,7 +239,7 @@
/**
* Responsible for creating AudioState objects for deserialized Parcels.
*/
- public static final Parcelable.Creator<CallAudioState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CallAudioState> CREATOR =
new Parcelable.Creator<CallAudioState> () {
@Override
diff --git a/telecomm/java/android/telecom/CallIdentification.java b/telecomm/java/android/telecom/CallIdentification.java
index cde7f60..d15e024 100644
--- a/telecomm/java/android/telecom/CallIdentification.java
+++ b/telecomm/java/android/telecom/CallIdentification.java
@@ -281,7 +281,7 @@
/**
* Responsible for creating CallIdentification objects for deserialized Parcels.
*/
- public static final Parcelable.Creator<CallIdentification> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CallIdentification> CREATOR =
new Parcelable.Creator<CallIdentification> () {
@Override
diff --git a/telecomm/java/android/telecom/ConferenceParticipant.java b/telecomm/java/android/telecom/ConferenceParticipant.java
index 6317770..2f1505c 100644
--- a/telecomm/java/android/telecom/ConferenceParticipant.java
+++ b/telecomm/java/android/telecom/ConferenceParticipant.java
@@ -86,7 +86,7 @@
/**
* Responsible for creating {@code ConferenceParticipant} objects for deserialized Parcels.
*/
- public static final Parcelable.Creator<ConferenceParticipant> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ConferenceParticipant> CREATOR =
new Parcelable.Creator<ConferenceParticipant>() {
@Override
diff --git a/telecomm/java/android/telecom/ConnectionRequest.java b/telecomm/java/android/telecom/ConnectionRequest.java
index b6e6b0e..b428530 100644
--- a/telecomm/java/android/telecom/ConnectionRequest.java
+++ b/telecomm/java/android/telecom/ConnectionRequest.java
@@ -337,10 +337,34 @@
mAddress == null
? Uri.EMPTY
: Connection.toLogSafePhoneNumber(mAddress.toString()),
- mExtras == null ? "" : mExtras);
+ bundleToString(mExtras));
}
- public static final Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () {
+ private static String bundleToString(Bundle extras){
+ if (extras == null) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append("Bundle[");
+ for (String key : extras.keySet()) {
+ sb.append(key);
+ sb.append("=");
+ switch (key) {
+ case TelecomManager.EXTRA_INCOMING_CALL_ADDRESS:
+ case TelecomManager.EXTRA_UNKNOWN_CALL_HANDLE:
+ sb.append(Log.pii(extras.get(key)));
+ break;
+ default:
+ sb.append(extras.get(key));
+ break;
+ }
+ sb.append(", ");
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
+ public static final @android.annotation.NonNull Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () {
@Override
public ConnectionRequest createFromParcel(Parcel source) {
return new ConnectionRequest(source);
diff --git a/telecomm/java/android/telecom/DisconnectCause.java b/telecomm/java/android/telecom/DisconnectCause.java
index 5a97c94..ae92464 100644
--- a/telecomm/java/android/telecom/DisconnectCause.java
+++ b/telecomm/java/android/telecom/DisconnectCause.java
@@ -207,7 +207,7 @@
return mToneToPlay;
}
- public static final Creator<DisconnectCause> CREATOR = new Creator<DisconnectCause>() {
+ public static final @android.annotation.NonNull Creator<DisconnectCause> CREATOR = new Creator<DisconnectCause>() {
@Override
public DisconnectCause createFromParcel(Parcel source) {
int code = source.readInt();
diff --git a/telecomm/java/android/telecom/GatewayInfo.java b/telecomm/java/android/telecom/GatewayInfo.java
index 928570e..0faa4fd 100644
--- a/telecomm/java/android/telecom/GatewayInfo.java
+++ b/telecomm/java/android/telecom/GatewayInfo.java
@@ -80,7 +80,7 @@
/**
* The Parcelable interface.
* */
- public static final Parcelable.Creator<GatewayInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<GatewayInfo> CREATOR =
new Parcelable.Creator<GatewayInfo> () {
@Override
diff --git a/telecomm/java/android/telecom/Logging/Session.java b/telecomm/java/android/telecom/Logging/Session.java
index c45bd6b..50c3cd9 100644
--- a/telecomm/java/android/telecom/Logging/Session.java
+++ b/telecomm/java/android/telecom/Logging/Session.java
@@ -69,7 +69,7 @@
}
/** Responsible for creating Info objects for deserialized Parcels. */
- public static final Parcelable.Creator<Info> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<Info> CREATOR =
new Parcelable.Creator<Info> () {
@Override
public Info createFromParcel(Parcel source) {
diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java
index f7dec83..345707e 100644
--- a/telecomm/java/android/telecom/ParcelableCall.java
+++ b/telecomm/java/android/telecom/ParcelableCall.java
@@ -331,7 +331,7 @@
/** Responsible for creating ParcelableCall objects for deserialized Parcels. */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
- public static final Parcelable.Creator<ParcelableCall> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableCall> CREATOR =
new Parcelable.Creator<ParcelableCall> () {
@Override
public ParcelableCall createFromParcel(Parcel source) {
diff --git a/telecomm/java/android/telecom/ParcelableCallAnalytics.java b/telecomm/java/android/telecom/ParcelableCallAnalytics.java
index bb066ad..2b9213b 100644
--- a/telecomm/java/android/telecom/ParcelableCallAnalytics.java
+++ b/telecomm/java/android/telecom/ParcelableCallAnalytics.java
@@ -36,7 +36,7 @@
public static final int RECEIVE_REMOTE_SESSION_MODIFY_REQUEST = 2;
public static final int RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE = 3;
- public static final Parcelable.Creator<VideoEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VideoEvent> CREATOR =
new Parcelable.Creator<VideoEvent> () {
@Override
@@ -135,7 +135,7 @@
public static final int REQUEST_PULL = 500;
- public static final Parcelable.Creator<AnalyticsEvent> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AnalyticsEvent> CREATOR =
new Parcelable.Creator<AnalyticsEvent> () {
@Override
@@ -200,7 +200,7 @@
public static final int INVALID = 999999;
- public static final Parcelable.Creator<EventTiming> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<EventTiming> CREATOR =
new Parcelable.Creator<EventTiming> () {
@Override
@@ -284,7 +284,7 @@
public static final int STILL_CONNECTED = -1;
- public static final Parcelable.Creator<ParcelableCallAnalytics> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableCallAnalytics> CREATOR =
new Parcelable.Creator<ParcelableCallAnalytics> () {
@Override
diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java
index a6221d4..636e4b2 100644
--- a/telecomm/java/android/telecom/ParcelableConference.java
+++ b/telecomm/java/android/telecom/ParcelableConference.java
@@ -134,7 +134,7 @@
return mExtras;
}
- public static final Parcelable.Creator<ParcelableConference> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR =
new Parcelable.Creator<ParcelableConference> () {
@Override
public ParcelableConference createFromParcel(Parcel source) {
diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java
index 61d5a12..dab1c6e 100644
--- a/telecomm/java/android/telecom/ParcelableConnection.java
+++ b/telecomm/java/android/telecom/ParcelableConnection.java
@@ -237,7 +237,7 @@
.toString();
}
- public static final Parcelable.Creator<ParcelableConnection> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConnection> CREATOR =
new Parcelable.Creator<ParcelableConnection> () {
@Override
public ParcelableConnection createFromParcel(Parcel source) {
diff --git a/telecomm/java/android/telecom/ParcelableRttCall.java b/telecomm/java/android/telecom/ParcelableRttCall.java
index 763e48b..fbcf486 100644
--- a/telecomm/java/android/telecom/ParcelableRttCall.java
+++ b/telecomm/java/android/telecom/ParcelableRttCall.java
@@ -50,7 +50,7 @@
mReceiveStream = in.readParcelable(ParcelFileDescriptor.class.getClassLoader());
}
- public static final Creator<ParcelableRttCall> CREATOR = new Creator<ParcelableRttCall>() {
+ public static final @android.annotation.NonNull Creator<ParcelableRttCall> CREATOR = new Creator<ParcelableRttCall>() {
@Override
public ParcelableRttCall createFromParcel(Parcel in) {
return new ParcelableRttCall(in);
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java
index 2ffad03..5e13400 100644
--- a/telecomm/java/android/telecom/PhoneAccount.java
+++ b/telecomm/java/android/telecom/PhoneAccount.java
@@ -914,7 +914,7 @@
out.writeInt(mSupportedAudioRoutes);
}
- public static final Creator<PhoneAccount> CREATOR
+ public static final @android.annotation.NonNull Creator<PhoneAccount> CREATOR
= new Creator<PhoneAccount>() {
@Override
public PhoneAccount createFromParcel(Parcel in) {
diff --git a/telecomm/java/android/telecom/PhoneAccountHandle.java b/telecomm/java/android/telecom/PhoneAccountHandle.java
index 5dedb04..a84ce55 100644
--- a/telecomm/java/android/telecom/PhoneAccountHandle.java
+++ b/telecomm/java/android/telecom/PhoneAccountHandle.java
@@ -156,7 +156,7 @@
}
}
- public static final Creator<PhoneAccountHandle> CREATOR = new Creator<PhoneAccountHandle>() {
+ public static final @android.annotation.NonNull Creator<PhoneAccountHandle> CREATOR = new Creator<PhoneAccountHandle>() {
@Override
public PhoneAccountHandle createFromParcel(Parcel in) {
return new PhoneAccountHandle(in);
diff --git a/telecomm/java/android/telecom/PhoneAccountSuggestion.java b/telecomm/java/android/telecom/PhoneAccountSuggestion.java
index b401bcf..3799cf3 100644
--- a/telecomm/java/android/telecom/PhoneAccountSuggestion.java
+++ b/telecomm/java/android/telecom/PhoneAccountSuggestion.java
@@ -17,6 +17,7 @@
package android.telecom;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -72,7 +73,7 @@
*/
@SystemApi
@TestApi
- public PhoneAccountSuggestion(PhoneAccountHandle handle, @SuggestionReason int reason,
+ public PhoneAccountSuggestion(@NonNull PhoneAccountHandle handle, @SuggestionReason int reason,
boolean shouldAutoSelect) {
this.mHandle = handle;
this.mReason = reason;
@@ -85,7 +86,7 @@
mShouldAutoSelect = in.readByte() != 0;
}
- public static final Creator<PhoneAccountSuggestion> CREATOR =
+ public static final @android.annotation.NonNull Creator<PhoneAccountSuggestion> CREATOR =
new Creator<PhoneAccountSuggestion>() {
@Override
public PhoneAccountSuggestion createFromParcel(Parcel in) {
@@ -101,7 +102,7 @@
/**
* @return The {@link PhoneAccountHandle} for this suggestion.
*/
- public PhoneAccountHandle getPhoneAccountHandle() {
+ @NonNull public PhoneAccountHandle getPhoneAccountHandle() {
return mHandle;
}
diff --git a/telecomm/java/android/telecom/StatusHints.java b/telecomm/java/android/telecom/StatusHints.java
index 453f408..762c93a 100644
--- a/telecomm/java/android/telecom/StatusHints.java
+++ b/telecomm/java/android/telecom/StatusHints.java
@@ -119,7 +119,7 @@
out.writeParcelable(mExtras, 0);
}
- public static final Creator<StatusHints> CREATOR
+ public static final @android.annotation.NonNull Creator<StatusHints> CREATOR
= new Creator<StatusHints>() {
public StatusHints createFromParcel(Parcel in) {
return new StatusHints(in);
diff --git a/telecomm/java/android/telecom/TelecomAnalytics.java b/telecomm/java/android/telecom/TelecomAnalytics.java
index 6e0d02c..e88ad77 100644
--- a/telecomm/java/android/telecom/TelecomAnalytics.java
+++ b/telecomm/java/android/telecom/TelecomAnalytics.java
@@ -28,7 +28,7 @@
*/
@SystemApi
public final class TelecomAnalytics implements Parcelable {
- public static final Parcelable.Creator<TelecomAnalytics> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TelecomAnalytics> CREATOR =
new Parcelable.Creator<TelecomAnalytics> () {
@Override
@@ -43,7 +43,7 @@
};
public static final class SessionTiming extends TimedEvent<Integer> implements Parcelable {
- public static final Parcelable.Creator<SessionTiming> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<SessionTiming> CREATOR =
new Parcelable.Creator<SessionTiming> () {
@Override
diff --git a/telecomm/java/android/telecom/VideoProfile.java b/telecomm/java/android/telecom/VideoProfile.java
index 157f12c..64e6ca3 100644
--- a/telecomm/java/android/telecom/VideoProfile.java
+++ b/telecomm/java/android/telecom/VideoProfile.java
@@ -170,7 +170,7 @@
/**
* Responsible for creating VideoProfile objects from deserialized Parcels.
**/
- public static final Parcelable.Creator<VideoProfile> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VideoProfile> CREATOR =
new Parcelable.Creator<VideoProfile> () {
/**
* Creates a MediaProfile instances from a parcel.
@@ -389,7 +389,7 @@
/**
* Responsible for creating CallCameraCapabilities objects from deserialized Parcels.
**/
- public static final Parcelable.Creator<CameraCapabilities> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CameraCapabilities> CREATOR =
new Parcelable.Creator<CameraCapabilities> () {
/**
* Creates a CallCameraCapabilities instances from a parcel.
diff --git a/telecomm/java/android/telecom/Voicemail.java b/telecomm/java/android/telecom/Voicemail.java
index ca235bf..60a8a94 100644
--- a/telecomm/java/android/telecom/Voicemail.java
+++ b/telecomm/java/android/telecom/Voicemail.java
@@ -283,7 +283,7 @@
dest.writeCharSequence(mTranscription);
}
- public static final Creator<Voicemail> CREATOR
+ public static final @android.annotation.NonNull Creator<Voicemail> CREATOR
= new Creator<Voicemail>() {
@Override
public Voicemail createFromParcel(Parcel in) {
diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
index 5030f90..93eea56 100644
--- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
@@ -182,6 +182,7 @@
/**
* @see TelecomServiceImpl#getCallState
*/
+ @UnsupportedAppUsage
int getCallState();
/**
diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java
index fecdb08..79b7807 100644
--- a/telephony/java/android/provider/Telephony.java
+++ b/telephony/java/android/provider/Telephony.java
@@ -17,6 +17,7 @@
package android.provider;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
@@ -4340,6 +4341,7 @@
* @param subscriptionId the subscriptionId to receive updates on
* @return the Uri used to observe precise carrier identity changes
*/
+ @NonNull
public static Uri getPreciseCarrierIdUriForSubscriptionId(int subscriptionId) {
return Uri.withAppendedPath(Uri.withAppendedPath(CONTENT_URI, "precise"),
String.valueOf(subscriptionId));
diff --git a/telephony/java/android/telephony/AvailableNetworkInfo.java b/telephony/java/android/telephony/AvailableNetworkInfo.java
index b407b2a..8a7153e 100644
--- a/telephony/java/android/telephony/AvailableNetworkInfo.java
+++ b/telephony/java/android/telephony/AvailableNetworkInfo.java
@@ -145,7 +145,7 @@
return Objects.hash(mSubId, mPriority, mMccMncs);
}
- public static final Parcelable.Creator<AvailableNetworkInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<AvailableNetworkInfo> CREATOR =
new Creator<AvailableNetworkInfo>() {
@Override
public AvailableNetworkInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CallAttributes.java b/telephony/java/android/telephony/CallAttributes.java
index 0d4f09f..368f0c6 100644
--- a/telephony/java/android/telephony/CallAttributes.java
+++ b/telephony/java/android/telephony/CallAttributes.java
@@ -138,7 +138,7 @@
dest.writeParcelable(mCallQuality, flags);
}
- public static final Parcelable.Creator<CallAttributes> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<CallAttributes> CREATOR = new Parcelable.Creator() {
public CallAttributes createFromParcel(Parcel in) {
return new CallAttributes(in);
}
diff --git a/telephony/java/android/telephony/CallQuality.java b/telephony/java/android/telephony/CallQuality.java
index cbe62284..10a04a9 100644
--- a/telephony/java/android/telephony/CallQuality.java
+++ b/telephony/java/android/telephony/CallQuality.java
@@ -333,7 +333,7 @@
dest.writeInt(mCodecType);
}
- public static final Parcelable.Creator<CallQuality> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<CallQuality> CREATOR = new Parcelable.Creator() {
public CallQuality createFromParcel(Parcel in) {
return new CallQuality(in);
}
diff --git a/telephony/java/android/telephony/CarrierRestrictionRules.java b/telephony/java/android/telephony/CarrierRestrictionRules.java
index d47b55c..47ce632 100644
--- a/telephony/java/android/telephony/CarrierRestrictionRules.java
+++ b/telephony/java/android/telephony/CarrierRestrictionRules.java
@@ -309,7 +309,7 @@
/**
* {@link Parcelable.Creator}
*/
- public static final Creator<CarrierRestrictionRules> CREATOR =
+ public static final @android.annotation.NonNull Creator<CarrierRestrictionRules> CREATOR =
new Creator<CarrierRestrictionRules>() {
@Override
public CarrierRestrictionRules createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellConfigLte.java b/telephony/java/android/telephony/CellConfigLte.java
index eafbfbc..4b57d71 100644
--- a/telephony/java/android/telephony/CellConfigLte.java
+++ b/telephony/java/android/telephony/CellConfigLte.java
@@ -96,7 +96,7 @@
mIsEndcAvailable = in.readBoolean();
}
- public static final Creator<CellConfigLte> CREATOR = new Creator<CellConfigLte>() {
+ public static final @android.annotation.NonNull Creator<CellConfigLte> CREATOR = new Creator<CellConfigLte>() {
@Override
public CellConfigLte createFromParcel(Parcel in) {
return new CellConfigLte(in);
diff --git a/telephony/java/android/telephony/CellIdentity.java b/telephony/java/android/telephony/CellIdentity.java
index 7655834..6c835dc 100644
--- a/telephony/java/android/telephony/CellIdentity.java
+++ b/telephony/java/android/telephony/CellIdentity.java
@@ -186,7 +186,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellIdentity> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentity> CREATOR =
new Creator<CellIdentity>() {
@Override
public CellIdentity createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java
index fa19867..daf80f5 100644
--- a/telephony/java/android/telephony/CellIdentityCdma.java
+++ b/telephony/java/android/telephony/CellIdentityCdma.java
@@ -244,7 +244,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Creator<CellIdentityCdma> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityCdma> CREATOR =
new Creator<CellIdentityCdma>() {
@Override
public CellIdentityCdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java
index 9a24e47..6328afc 100644
--- a/telephony/java/android/telephony/CellIdentityGsm.java
+++ b/telephony/java/android/telephony/CellIdentityGsm.java
@@ -260,7 +260,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Creator<CellIdentityGsm> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityGsm> CREATOR =
new Creator<CellIdentityGsm>() {
@Override
public CellIdentityGsm createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java
index 51393b9..e112004 100644
--- a/telephony/java/android/telephony/CellIdentityLte.java
+++ b/telephony/java/android/telephony/CellIdentityLte.java
@@ -294,7 +294,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Creator<CellIdentityLte> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityLte> CREATOR =
new Creator<CellIdentityLte>() {
@Override
public CellIdentityLte createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java
index 856f081..b48388e 100644
--- a/telephony/java/android/telephony/CellIdentityNr.java
+++ b/telephony/java/android/telephony/CellIdentityNr.java
@@ -81,7 +81,8 @@
/**
* Get the NR Cell Identity.
*
- * @return The NR Cell Identity in range [0, 68719476735] or Long.MAX_VALUE if unknown.
+ * @return The 36-bit NR Cell Identity in range [0, 68719476735] or
+ * {@link CellInfo#UNAVAILABLE_LONG} if unknown.
*/
public long getNci() {
return mNci;
@@ -160,7 +161,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellIdentityNr> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityNr> CREATOR =
new Creator<CellIdentityNr>() {
@Override
public CellIdentityNr createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java
index dba437a..10ffb80 100644
--- a/telephony/java/android/telephony/CellIdentityTdscdma.java
+++ b/telephony/java/android/telephony/CellIdentityTdscdma.java
@@ -226,7 +226,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Creator<CellIdentityTdscdma> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityTdscdma> CREATOR =
new Creator<CellIdentityTdscdma>() {
@Override
public CellIdentityTdscdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java
index 6e09784..b1944af 100644
--- a/telephony/java/android/telephony/CellIdentityWcdma.java
+++ b/telephony/java/android/telephony/CellIdentityWcdma.java
@@ -251,7 +251,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Creator<CellIdentityWcdma> CREATOR =
+ public static final @android.annotation.NonNull Creator<CellIdentityWcdma> CREATOR =
new Creator<CellIdentityWcdma>() {
@Override
public CellIdentityWcdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index 8ce5c54..223f3ef 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -40,6 +40,11 @@
public static final int UNAVAILABLE = Integer.MAX_VALUE;
/**
+ * This value indicates that the long field is unreported.
+ */
+ public static final long UNAVAILABLE_LONG = Long.MAX_VALUE;
+
+ /**
* Cell identity type
* @hide
*/
@@ -284,7 +289,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfo> CREATOR = new Creator<CellInfo>() {
+ public static final @android.annotation.NonNull Creator<CellInfo> CREATOR = new Creator<CellInfo>() {
@Override
public CellInfo createFromParcel(Parcel in) {
int type = in.readInt();
diff --git a/telephony/java/android/telephony/CellInfoCdma.java b/telephony/java/android/telephony/CellInfoCdma.java
index 4440108..9c38506 100644
--- a/telephony/java/android/telephony/CellInfoCdma.java
+++ b/telephony/java/android/telephony/CellInfoCdma.java
@@ -156,7 +156,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfoCdma> CREATOR = new Creator<CellInfoCdma>() {
+ public static final @android.annotation.NonNull Creator<CellInfoCdma> CREATOR = new Creator<CellInfoCdma>() {
@Override
public CellInfoCdma createFromParcel(Parcel in) {
in.readInt(); // Skip past token, we know what it is
diff --git a/telephony/java/android/telephony/CellInfoGsm.java b/telephony/java/android/telephony/CellInfoGsm.java
index 248adfc..0d91f80 100644
--- a/telephony/java/android/telephony/CellInfoGsm.java
+++ b/telephony/java/android/telephony/CellInfoGsm.java
@@ -149,7 +149,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfoGsm> CREATOR = new Creator<CellInfoGsm>() {
+ public static final @android.annotation.NonNull Creator<CellInfoGsm> CREATOR = new Creator<CellInfoGsm>() {
@Override
public CellInfoGsm createFromParcel(Parcel in) {
in.readInt(); // Skip past token, we know what it is
diff --git a/telephony/java/android/telephony/CellInfoLte.java b/telephony/java/android/telephony/CellInfoLte.java
index 8e8ce8a..deae632 100644
--- a/telephony/java/android/telephony/CellInfoLte.java
+++ b/telephony/java/android/telephony/CellInfoLte.java
@@ -179,7 +179,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfoLte> CREATOR = new Creator<CellInfoLte>() {
+ public static final @android.annotation.NonNull Creator<CellInfoLte> CREATOR = new Creator<CellInfoLte>() {
@Override
public CellInfoLte createFromParcel(Parcel in) {
in.readInt(); // Skip past token, we know what it is
diff --git a/telephony/java/android/telephony/CellInfoNr.java b/telephony/java/android/telephony/CellInfoNr.java
index 11857a6..fb147ce 100644
--- a/telephony/java/android/telephony/CellInfoNr.java
+++ b/telephony/java/android/telephony/CellInfoNr.java
@@ -79,7 +79,7 @@
mCellSignalStrength.writeToParcel(dest, flags);
}
- public static final Creator<CellInfoNr> CREATOR = new Creator<CellInfoNr>() {
+ public static final @android.annotation.NonNull Creator<CellInfoNr> CREATOR = new Creator<CellInfoNr>() {
@Override
public CellInfoNr createFromParcel(Parcel in) {
// Skip the type info.
diff --git a/telephony/java/android/telephony/CellInfoTdscdma.java b/telephony/java/android/telephony/CellInfoTdscdma.java
index 2ab38fb..ae43bb2 100644
--- a/telephony/java/android/telephony/CellInfoTdscdma.java
+++ b/telephony/java/android/telephony/CellInfoTdscdma.java
@@ -149,7 +149,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfoTdscdma> CREATOR = new Creator<CellInfoTdscdma>() {
+ public static final @android.annotation.NonNull Creator<CellInfoTdscdma> CREATOR = new Creator<CellInfoTdscdma>() {
@Override
public CellInfoTdscdma createFromParcel(Parcel in) {
in.readInt(); // Skip past token, we know what it is
diff --git a/telephony/java/android/telephony/CellInfoWcdma.java b/telephony/java/android/telephony/CellInfoWcdma.java
index 65e0470..d2287ea 100644
--- a/telephony/java/android/telephony/CellInfoWcdma.java
+++ b/telephony/java/android/telephony/CellInfoWcdma.java
@@ -149,7 +149,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<CellInfoWcdma> CREATOR = new Creator<CellInfoWcdma>() {
+ public static final @android.annotation.NonNull Creator<CellInfoWcdma> CREATOR = new Creator<CellInfoWcdma>() {
@Override
public CellInfoWcdma createFromParcel(Parcel in) {
in.readInt(); // Skip past token, we know what it is
diff --git a/telephony/java/android/telephony/CellSignalStrengthCdma.java b/telephony/java/android/telephony/CellSignalStrengthCdma.java
index 47faf1e..5b19599 100644
--- a/telephony/java/android/telephony/CellSignalStrengthCdma.java
+++ b/telephony/java/android/telephony/CellSignalStrengthCdma.java
@@ -464,7 +464,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<CellSignalStrengthCdma> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthCdma> CREATOR =
new Parcelable.Creator<CellSignalStrengthCdma>() {
@Override
public CellSignalStrengthCdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellSignalStrengthGsm.java b/telephony/java/android/telephony/CellSignalStrengthGsm.java
index a4207c9..3dea6f4 100644
--- a/telephony/java/android/telephony/CellSignalStrengthGsm.java
+++ b/telephony/java/android/telephony/CellSignalStrengthGsm.java
@@ -226,7 +226,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<CellSignalStrengthGsm> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthGsm> CREATOR =
new Parcelable.Creator<CellSignalStrengthGsm>() {
@Override
public CellSignalStrengthGsm createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index 61c6b48..5687ada 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -432,7 +432,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<CellSignalStrengthLte> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthLte> CREATOR =
new Parcelable.Creator<CellSignalStrengthLte>() {
@Override
public CellSignalStrengthLte createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellSignalStrengthNr.java b/telephony/java/android/telephony/CellSignalStrengthNr.java
index 6f84ec5..fff3adf 100644
--- a/telephony/java/android/telephony/CellSignalStrengthNr.java
+++ b/telephony/java/android/telephony/CellSignalStrengthNr.java
@@ -289,7 +289,7 @@
}
/** Implement the Parcelable interface */
- public static final Parcelable.Creator<CellSignalStrengthNr> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthNr> CREATOR =
new Parcelable.Creator<CellSignalStrengthNr>() {
@Override
public CellSignalStrengthNr createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellSignalStrengthTdscdma.java b/telephony/java/android/telephony/CellSignalStrengthTdscdma.java
index 5ae89b0..e79643f 100644
--- a/telephony/java/android/telephony/CellSignalStrengthTdscdma.java
+++ b/telephony/java/android/telephony/CellSignalStrengthTdscdma.java
@@ -237,7 +237,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<CellSignalStrengthTdscdma> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthTdscdma> CREATOR =
new Parcelable.Creator<CellSignalStrengthTdscdma>() {
@Override
public CellSignalStrengthTdscdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/CellSignalStrengthWcdma.java b/telephony/java/android/telephony/CellSignalStrengthWcdma.java
index efa3647..d9fd7f3 100644
--- a/telephony/java/android/telephony/CellSignalStrengthWcdma.java
+++ b/telephony/java/android/telephony/CellSignalStrengthWcdma.java
@@ -333,7 +333,7 @@
/** Implement the Parcelable interface */
@SuppressWarnings("hiding")
- public static final Parcelable.Creator<CellSignalStrengthWcdma> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<CellSignalStrengthWcdma> CREATOR =
new Parcelable.Creator<CellSignalStrengthWcdma>() {
@Override
public CellSignalStrengthWcdma createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ClientRequestStats.java b/telephony/java/android/telephony/ClientRequestStats.java
index 381c847..c787893 100644
--- a/telephony/java/android/telephony/ClientRequestStats.java
+++ b/telephony/java/android/telephony/ClientRequestStats.java
@@ -29,7 +29,7 @@
* @hide
*/
public final class ClientRequestStats implements Parcelable {
- public static final Parcelable.Creator<ClientRequestStats> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ClientRequestStats> CREATOR =
new Parcelable.Creator<ClientRequestStats>() {
public ClientRequestStats createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/DataConnectionRealTimeInfo.java b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
index fc4e17a..8106f5f 100644
--- a/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
+++ b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
@@ -92,7 +92,7 @@
out.writeInt(mDcPowerState);
}
- public static final Parcelable.Creator<DataConnectionRealTimeInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<DataConnectionRealTimeInfo> CREATOR
= new Parcelable.Creator<DataConnectionRealTimeInfo>() {
@Override
diff --git a/telephony/java/android/telephony/DataSpecificRegistrationStates.java b/telephony/java/android/telephony/DataSpecificRegistrationStates.java
index c3387f3..8eb345a 100644
--- a/telephony/java/android/telephony/DataSpecificRegistrationStates.java
+++ b/telephony/java/android/telephony/DataSpecificRegistrationStates.java
@@ -123,7 +123,7 @@
&& this.lteVopsSupportInfo.equals(other.lteVopsSupportInfo);
}
- public static final Parcelable.Creator<DataSpecificRegistrationStates> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DataSpecificRegistrationStates> CREATOR =
new Parcelable.Creator<DataSpecificRegistrationStates>() {
@Override
public DataSpecificRegistrationStates createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/IccOpenLogicalChannelResponse.java b/telephony/java/android/telephony/IccOpenLogicalChannelResponse.java
index 4621f91..44ba70c 100644
--- a/telephony/java/android/telephony/IccOpenLogicalChannelResponse.java
+++ b/telephony/java/android/telephony/IccOpenLogicalChannelResponse.java
@@ -110,7 +110,7 @@
}
}
- public static final Parcelable.Creator<IccOpenLogicalChannelResponse> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<IccOpenLogicalChannelResponse> CREATOR
= new Parcelable.Creator<IccOpenLogicalChannelResponse>() {
@Override
diff --git a/telephony/java/android/telephony/ImsiEncryptionInfo.java b/telephony/java/android/telephony/ImsiEncryptionInfo.java
index d2680ad..ef2f121 100644
--- a/telephony/java/android/telephony/ImsiEncryptionInfo.java
+++ b/telephony/java/android/telephony/ImsiEncryptionInfo.java
@@ -115,7 +115,7 @@
return 0;
}
- public static final Parcelable.Creator<ImsiEncryptionInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ImsiEncryptionInfo> CREATOR =
new Parcelable.Creator<ImsiEncryptionInfo>() {
@Override
public ImsiEncryptionInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/LteVopsSupportInfo.java b/telephony/java/android/telephony/LteVopsSupportInfo.java
index 0ae85c0..ee45f07 100644
--- a/telephony/java/android/telephony/LteVopsSupportInfo.java
+++ b/telephony/java/android/telephony/LteVopsSupportInfo.java
@@ -117,7 +117,7 @@
+ " mEmcBearerSupport = " + mEmcBearerSupport);
}
- public static final Creator<LteVopsSupportInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<LteVopsSupportInfo> CREATOR =
new Creator<LteVopsSupportInfo>() {
@Override
public LteVopsSupportInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ModemActivityInfo.java b/telephony/java/android/telephony/ModemActivityInfo.java
index 521adef..a0af392 100644
--- a/telephony/java/android/telephony/ModemActivityInfo.java
+++ b/telephony/java/android/telephony/ModemActivityInfo.java
@@ -71,7 +71,7 @@
return 0;
}
- public static final Parcelable.Creator<ModemActivityInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ModemActivityInfo> CREATOR =
new Parcelable.Creator<ModemActivityInfo>() {
public ModemActivityInfo createFromParcel(Parcel in) {
long timestamp = in.readLong();
diff --git a/telephony/java/android/telephony/ModemInfo.java b/telephony/java/android/telephony/ModemInfo.java
index 27a5121..c0833af 100644
--- a/telephony/java/android/telephony/ModemInfo.java
+++ b/telephony/java/android/telephony/ModemInfo.java
@@ -97,7 +97,7 @@
dest.writeBoolean(isDataSupported);
}
- public static final Parcelable.Creator<ModemInfo> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<ModemInfo> CREATOR = new Parcelable.Creator() {
public ModemInfo createFromParcel(Parcel in) {
return new ModemInfo(in);
}
diff --git a/telephony/java/android/telephony/NeighboringCellInfo.java b/telephony/java/android/telephony/NeighboringCellInfo.java
index 1c615ab..023ed30 100644
--- a/telephony/java/android/telephony/NeighboringCellInfo.java
+++ b/telephony/java/android/telephony/NeighboringCellInfo.java
@@ -331,7 +331,7 @@
dest.writeInt(mNetworkType);
}
- public static final Parcelable.Creator<NeighboringCellInfo> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<NeighboringCellInfo> CREATOR
= new Parcelable.Creator<NeighboringCellInfo>() {
public NeighboringCellInfo createFromParcel(Parcel in) {
return new NeighboringCellInfo(in);
diff --git a/telephony/java/android/telephony/NetworkRegistrationState.java b/telephony/java/android/telephony/NetworkRegistrationState.java
index 84d6628..9614dc5 100644
--- a/telephony/java/android/telephony/NetworkRegistrationState.java
+++ b/telephony/java/android/telephony/NetworkRegistrationState.java
@@ -509,7 +509,7 @@
}
}
- public static final Parcelable.Creator<NetworkRegistrationState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<NetworkRegistrationState> CREATOR =
new Parcelable.Creator<NetworkRegistrationState>() {
@Override
public NetworkRegistrationState createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/NetworkScanRequest.java b/telephony/java/android/telephony/NetworkScanRequest.java
index 38678a3..465b6aa 100644
--- a/telephony/java/android/telephony/NetworkScanRequest.java
+++ b/telephony/java/android/telephony/NetworkScanRequest.java
@@ -267,7 +267,7 @@
+ (mMccMncs.hashCode() * 59));
}
- public static final Creator<NetworkScanRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<NetworkScanRequest> CREATOR =
new Creator<NetworkScanRequest>() {
@Override
public NetworkScanRequest createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/PcoData.java b/telephony/java/android/telephony/PcoData.java
index 3e735e7..bcfbcf8b 100644
--- a/telephony/java/android/telephony/PcoData.java
+++ b/telephony/java/android/telephony/PcoData.java
@@ -69,7 +69,7 @@
*
* @hide
*/
- public static final Parcelable.Creator<PcoData> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<PcoData> CREATOR = new Parcelable.Creator() {
public PcoData createFromParcel(Parcel in) {
return new PcoData(in);
}
diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java
index 21dad77..119f587 100644
--- a/telephony/java/android/telephony/PhoneCapability.java
+++ b/telephony/java/android/telephony/PhoneCapability.java
@@ -105,7 +105,7 @@
dest.writeList(logicalModemList);
}
- public static final Parcelable.Creator<PhoneCapability> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<PhoneCapability> CREATOR = new Parcelable.Creator() {
public PhoneCapability createFromParcel(Parcel in) {
return new PhoneCapability(in);
}
diff --git a/telephony/java/android/telephony/PhoneNumberRange.java b/telephony/java/android/telephony/PhoneNumberRange.java
index dba803b..c35a485 100644
--- a/telephony/java/android/telephony/PhoneNumberRange.java
+++ b/telephony/java/android/telephony/PhoneNumberRange.java
@@ -43,7 +43,7 @@
*/
@SystemApi
public final class PhoneNumberRange implements Parcelable {
- public static final Creator<PhoneNumberRange> CREATOR = new Creator<PhoneNumberRange>() {
+ public static final @android.annotation.NonNull Creator<PhoneNumberRange> CREATOR = new Creator<PhoneNumberRange>() {
@Override
public PhoneNumberRange createFromParcel(Parcel in) {
return new PhoneNumberRange(in);
@@ -149,7 +149,7 @@
* @param number A phone number, with or without separators or a country code.
* @return {@code true} if the number matches, {@code false} otherwise.
*/
- public boolean matches(String number) {
+ public boolean matches(@NonNull String number) {
// Check the prefix, make sure it matches either with or without the country code.
String normalizedNumber = number.replaceAll("[^0-9]", "");
String prefixWithCountryCode = mCountryCode + mPrefix;
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index bb0673f..5fd36f4 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -609,7 +609,7 @@
@RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))
@SystemApi
public void onPreciseDataConnectionStateChanged(
- PreciseDataConnectionState dataConnectionState) {
+ @NonNull PreciseDataConnectionState dataConnectionState) {
// default implementation empty
}
diff --git a/telephony/java/android/telephony/PhysicalChannelConfig.java b/telephony/java/android/telephony/PhysicalChannelConfig.java
index 22ddb4a..e1763ab 100644
--- a/telephony/java/android/telephony/PhysicalChannelConfig.java
+++ b/telephony/java/android/telephony/PhysicalChannelConfig.java
@@ -222,7 +222,7 @@
mChannelNumber, mPhysicalCellId, mContextIds);
}
- public static final Parcelable.Creator<PhysicalChannelConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<PhysicalChannelConfig> CREATOR =
new Parcelable.Creator<PhysicalChannelConfig>() {
public PhysicalChannelConfig createFromParcel(Parcel in) {
return new PhysicalChannelConfig(in);
diff --git a/telephony/java/android/telephony/PreciseCallState.java b/telephony/java/android/telephony/PreciseCallState.java
index 19e1931..5fb9bac 100644
--- a/telephony/java/android/telephony/PreciseCallState.java
+++ b/telephony/java/android/telephony/PreciseCallState.java
@@ -257,7 +257,7 @@
out.writeInt(mPreciseDisconnectCause);
}
- public static final Parcelable.Creator<PreciseCallState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PreciseCallState> CREATOR
= new Parcelable.Creator<PreciseCallState>() {
public PreciseCallState createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java
index 57a1826..cd4fbac 100644
--- a/telephony/java/android/telephony/PreciseDataConnectionState.java
+++ b/telephony/java/android/telephony/PreciseDataConnectionState.java
@@ -16,6 +16,8 @@
package android.telephony;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.net.LinkProperties;
@@ -25,6 +27,7 @@
import java.util.Objects;
+
/**
* Contains precise data connection state.
*
@@ -119,6 +122,7 @@
/**
* Returns APN {@link ApnSetting} of this data connection.
*/
+ @Nullable
public String getDataConnectionApn() {
return mAPN;
}
@@ -154,7 +158,7 @@
out.writeInt(mFailCause);
}
- public static final Parcelable.Creator<PreciseDataConnectionState> CREATOR
+ public static final @android.annotation.NonNull Parcelable.Creator<PreciseDataConnectionState> CREATOR
= new Parcelable.Creator<PreciseDataConnectionState>() {
public PreciseDataConnectionState createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java
index c1786be..4fdfcbe0 100644
--- a/telephony/java/android/telephony/RadioAccessFamily.java
+++ b/telephony/java/android/telephony/RadioAccessFamily.java
@@ -152,7 +152,7 @@
/**
* Implement the Parcelable interface.
*/
- public static final Creator<android.telephony.RadioAccessFamily> CREATOR =
+ public static final @android.annotation.NonNull Creator<android.telephony.RadioAccessFamily> CREATOR =
new Creator<android.telephony.RadioAccessFamily>() {
@Override
diff --git a/telephony/java/android/telephony/RadioAccessSpecifier.java b/telephony/java/android/telephony/RadioAccessSpecifier.java
index 81e7ed0..690e44a 100644
--- a/telephony/java/android/telephony/RadioAccessSpecifier.java
+++ b/telephony/java/android/telephony/RadioAccessSpecifier.java
@@ -109,7 +109,7 @@
return mChannels == null ? null : mChannels.clone();
}
- public static final Parcelable.Creator<RadioAccessSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RadioAccessSpecifier> CREATOR =
new Parcelable.Creator<RadioAccessSpecifier> (){
@Override
public RadioAccessSpecifier createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 3dc1199..03f6351 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -498,7 +498,7 @@
return 0;
}
- public static final Parcelable.Creator<ServiceState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ServiceState> CREATOR =
new Parcelable.Creator<ServiceState>() {
public ServiceState createFromParcel(Parcel in) {
return new ServiceState(in);
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index d461bd0..c516d97 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -341,7 +341,7 @@
* @hide
*/
@UnsupportedAppUsage
- public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
public SignalStrength createFromParcel(Parcel in) {
return new SignalStrength(in);
}
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 17acf2b..fb6f39d 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -467,7 +467,7 @@
* @return group UUID a String of group UUID if it belongs to a group. Otherwise
* it will return null.
*/
- public String getGroupUuid() {
+ public @Nullable String getGroupUuid() {
return mGroupUUID;
}
@@ -602,7 +602,7 @@
return mIsGroupDisabled;
}
- public static final Parcelable.Creator<SubscriptionInfo> CREATOR = new Parcelable.Creator<SubscriptionInfo>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<SubscriptionInfo> CREATOR = new Parcelable.Creator<SubscriptionInfo>() {
@Override
public SubscriptionInfo createFromParcel(Parcel source) {
int id = source.readInt();
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index c28d1fb..d7a0e50 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -63,14 +63,17 @@
import com.android.internal.telephony.ISub;
import com.android.internal.telephony.ITelephonyRegistry;
import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
@@ -151,6 +154,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ENABLED_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc");
@@ -169,6 +173,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri ADVANCED_CALLING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "advanced_calling");
@@ -186,6 +191,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_MODE_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc_mode");
@@ -202,6 +208,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ROAMING_MODE_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_mode");
@@ -220,6 +227,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri VT_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "vt_enabled");
@@ -237,6 +245,7 @@
* {@link Uri#withAppendedPath(Uri, String)}.
* @hide
*/
+ @NonNull
@SystemApi
public static final Uri WFC_ROAMING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_enabled");
@@ -1066,7 +1075,8 @@
* @param listener that is to be unregistered.
*/
public void removeOnOpportunisticSubscriptionsChangedListener(
- OnOpportunisticSubscriptionsChangedListener listener) {
+ @NonNull OnOpportunisticSubscriptionsChangedListener listener) {
+ Preconditions.checkNotNull(listener, "listener cannot be null");
String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>";
if (DBG) {
logd("unregister OnOpportunisticSubscriptionsChangedListener pkgForDebug="
@@ -1260,7 +1270,7 @@
if (!userVisibleOnly || activeList == null) {
return activeList;
} else {
- return activeList.stream().filter(subInfo -> !shouldHideSubscription(subInfo))
+ return activeList.stream().filter(subInfo -> isSubscriptionVisible(subInfo))
.collect(Collectors.toList());
}
}
@@ -2682,7 +2692,8 @@
* @param callbackIntent pending intent that will be sent after operation is done.
*/
@RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS)
- public void switchToSubscription(int subId, PendingIntent callbackIntent) {
+ public void switchToSubscription(int subId, @NonNull PendingIntent callbackIntent) {
+ Preconditions.checkNotNull(callbackIntent, "callbackIntent cannot be null");
EuiccManager euiccManager = new EuiccManager(mContext);
euiccManager.switchToSubscription(subId, callbackIntent);
}
@@ -2856,32 +2867,27 @@
}
/**
- * Whether system UI should hide a subscription. If it's a bundled opportunistic
- * subscription, it shouldn't show up in anywhere in Settings app, dialer app,
- * or status bar. Exception is if caller is carrier app, in which case they will
+ * Whether a subscription is visible to API caller. If it's a bundled opportunistic
+ * subscription, it should be hidden anywhere in Settings, dialer, status bar etc.
+ * Exception is if caller owns carrier privilege, in which case they will
* want to see their own hidden subscriptions.
*
* @param info the subscriptionInfo to check against.
- * @return true if this subscription should be hidden.
+ * @return true if this subscription should be visible to the API caller.
*
- * @hide
*/
- public boolean shouldHideSubscription(SubscriptionInfo info) {
+ private boolean isSubscriptionVisible(SubscriptionInfo info) {
if (info == null) return false;
- // If hasCarrierPrivileges or canManageSubscription returns true, it means caller
- // has carrier privilege.
- boolean hasCarrierPrivilegePermission = (info.isEmbedded() && canManageSubscription(info))
- || TelephonyManager.from(mContext).hasCarrierPrivileges(info.getSubscriptionId());
+ // If subscription is NOT grouped opportunistic subscription, it's visible.
+ if (TextUtils.isEmpty(info.getGroupUuid()) || !info.isOpportunistic()) return true;
- return isInvisibleSubscription(info) && !hasCarrierPrivilegePermission;
- }
-
- /**
- * @hide
- */
- public static boolean isInvisibleSubscription(SubscriptionInfo info) {
- return info != null && !TextUtils.isEmpty(info.getGroupUuid()) && info.isOpportunistic();
+ // If the caller is the carrier app and owns the subscription, it should be visible
+ // to the caller.
+ boolean hasCarrierPrivilegePermission = TelephonyManager.from(mContext)
+ .hasCarrierPrivileges(info.getSubscriptionId())
+ || (info.isEmbedded() && canManageSubscription(info));
+ return hasCarrierPrivilegePermission;
}
/**
@@ -2900,8 +2906,33 @@
if (availableList == null) {
return null;
} else {
- return availableList.stream().filter(subInfo -> !shouldHideSubscription(subInfo))
- .collect(Collectors.toList());
+ // Multiple subscriptions in a group should only have one representative.
+ // It should be the current active primary subscription if any, or any
+ // primary subscription.
+ List<SubscriptionInfo> selectableList = new ArrayList<>();
+ Map<String, SubscriptionInfo> groupMap = new HashMap<>();
+
+ for (SubscriptionInfo info : availableList) {
+ // Opportunistic subscriptions are considered invisible
+ // to users so they should never be returned.
+ if (!isSubscriptionVisible(info)) continue;
+
+ String groupUuid = info.getGroupUuid();
+ if (groupUuid == null) {
+ // Doesn't belong to any group. Add in the list.
+ selectableList.add(info);
+ } else if (!groupMap.containsKey(groupUuid)
+ || (groupMap.get(groupUuid).getSimSlotIndex() == INVALID_SIM_SLOT_INDEX
+ && info.getSimSlotIndex() != INVALID_SIM_SLOT_INDEX)) {
+ // If it belongs to a group that has never been recorded or it's the current
+ // active subscription, add it in the list.
+ selectableList.remove(groupMap.get(groupUuid));
+ selectableList.add(info);
+ groupMap.put(groupUuid, info);
+ }
+
+ }
+ return selectableList;
}
}
diff --git a/telephony/java/android/telephony/SubscriptionPlan.java b/telephony/java/android/telephony/SubscriptionPlan.java
index d67169c..e0838b3 100644
--- a/telephony/java/android/telephony/SubscriptionPlan.java
+++ b/telephony/java/android/telephony/SubscriptionPlan.java
@@ -145,7 +145,7 @@
return false;
}
- public static final Parcelable.Creator<SubscriptionPlan> CREATOR = new Parcelable.Creator<SubscriptionPlan>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<SubscriptionPlan> CREATOR = new Parcelable.Creator<SubscriptionPlan>() {
@Override
public SubscriptionPlan createFromParcel(Parcel source) {
return new SubscriptionPlan(source);
diff --git a/telephony/java/android/telephony/TelephonyHistogram.java b/telephony/java/android/telephony/TelephonyHistogram.java
index e1c3d7b..63bdac5 100644
--- a/telephony/java/android/telephony/TelephonyHistogram.java
+++ b/telephony/java/android/telephony/TelephonyHistogram.java
@@ -256,7 +256,7 @@
}
}
- public static final Parcelable.Creator<TelephonyHistogram> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<TelephonyHistogram> CREATOR =
new Parcelable.Creator<TelephonyHistogram> () {
@Override
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index d39c5f8..7b40293 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -1355,12 +1355,7 @@
*/
public static final String EXTRA_RECOVERY_ACTION = "recoveryAction";
- /**
- * The max value for the timeout passed in {@link #requestNumberVerification}.
- * @hide
- */
- @SystemApi
- public static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000;
+ private static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000;
/**
* Intent sent when an error occurs that debug tools should log and possibly take further
@@ -2027,6 +2022,15 @@
return cmdline;
}
+ /**
+ * @return The max value for the timeout passed in {@link #requestNumberVerification}.
+ * @hide
+ */
+ @SystemApi
+ public static long getMaxNumberVerificationTimeoutMillis() {
+ return MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS;
+ }
+
/** Kernel command line */
private static final String sKernelCmdLine = getProcCmdLine();
@@ -3249,6 +3253,7 @@
* the caller does not have adequate permissions for that card.
*/
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+ @NonNull
public List<UiccCardInfo> getUiccCardsInfo() {
try {
ITelephony telephony = getITelephony();
@@ -4494,6 +4499,7 @@
* {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}
* @hide
*/
+ @Nullable
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public String getIsimDomain() {
@@ -5742,8 +5748,8 @@
*
* @hide
* @param range The range of phone numbers the caller expects a phone call from.
- * @param timeoutMillis The amount of time to wait for such a call, or
- * {@link #MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS}, whichever is lesser.
+ * @param timeoutMillis The amount of time to wait for such a call, or the value of
+ * {@link #getMaxNumberVerificationTimeoutMillis()}, whichever is lesser.
* @param executor The {@link Executor} that callbacks should be executed on.
* @param callback The callback to use for delivering results.
*/
@@ -9070,6 +9076,7 @@
* @return Application ID for specified app type or {@code null} if no uicc or error.
* @hide
*/
+ @Nullable
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public String getAidForAppType(@UiccAppType int appType) {
diff --git a/telephony/java/android/telephony/UiccAccessRule.java b/telephony/java/android/telephony/UiccAccessRule.java
index d8836dc..37a4491 100644
--- a/telephony/java/android/telephony/UiccAccessRule.java
+++ b/telephony/java/android/telephony/UiccAccessRule.java
@@ -47,7 +47,7 @@
private static final int ENCODING_VERSION = 1;
- public static final Creator<UiccAccessRule> CREATOR = new Creator<UiccAccessRule>() {
+ public static final @android.annotation.NonNull Creator<UiccAccessRule> CREATOR = new Creator<UiccAccessRule>() {
@Override
public UiccAccessRule createFromParcel(Parcel in) {
return new UiccAccessRule(in);
diff --git a/telephony/java/android/telephony/UiccCardInfo.java b/telephony/java/android/telephony/UiccCardInfo.java
index 0192ffb..2c98c4d 100644
--- a/telephony/java/android/telephony/UiccCardInfo.java
+++ b/telephony/java/android/telephony/UiccCardInfo.java
@@ -15,6 +15,8 @@
*/
package android.telephony;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +34,7 @@
private final int mSlotIndex;
private final boolean mIsRemovable;
- public static final Creator<UiccCardInfo> CREATOR = new Creator<UiccCardInfo>() {
+ public static final @android.annotation.NonNull Creator<UiccCardInfo> CREATOR = new Creator<UiccCardInfo>() {
@Override
public UiccCardInfo createFromParcel(Parcel in) {
return new UiccCardInfo(in);
@@ -104,6 +106,7 @@
* Note that this field may be omitted if the caller does not have the correct permissions
* (see {@link TelephonyManager#getUiccCardsInfo()}).
*/
+ @Nullable
public String getEid() {
if (!mIsEuicc) {
return null;
@@ -117,6 +120,7 @@
* Note that this field may be omitted if the caller does not have the correct permissions
* (see {@link TelephonyManager#getUiccCardsInfo()}).
*/
+ @Nullable
public String getIccId() {
return mIccId;
}
@@ -129,11 +133,12 @@
}
/**
- * Returns a copy of the UiccCardinfo with the clears the EID and ICCID set to null. These
- * values are generally private and require carrier privileges to view.
+ * Returns a copy of the UiccCardinfo with the EID and ICCID set to null. These values are
+ * generally private and require carrier privileges to view.
*
* @hide
*/
+ @NonNull
public UiccCardInfo getUnprivileged() {
return new UiccCardInfo(mIsEuicc, mCardId, null, null, mSlotIndex, mIsRemovable);
}
diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java
index 93a7da0..785d7ae 100644
--- a/telephony/java/android/telephony/UiccSlotInfo.java
+++ b/telephony/java/android/telephony/UiccSlotInfo.java
@@ -63,7 +63,7 @@
private final boolean mIsExtendedApduSupported;
private final boolean mIsRemovable;
- public static final Creator<UiccSlotInfo> CREATOR = new Creator<UiccSlotInfo>() {
+ public static final @android.annotation.NonNull Creator<UiccSlotInfo> CREATOR = new Creator<UiccSlotInfo>() {
@Override
public UiccSlotInfo createFromParcel(Parcel in) {
return new UiccSlotInfo(in);
diff --git a/telephony/java/android/telephony/UssdResponse.java b/telephony/java/android/telephony/UssdResponse.java
index 5df681d..19756b5 100644
--- a/telephony/java/android/telephony/UssdResponse.java
+++ b/telephony/java/android/telephony/UssdResponse.java
@@ -63,7 +63,7 @@
mReturnMessage = returnMessage;
}
- public static final Parcelable.Creator<UssdResponse> CREATOR = new Creator<UssdResponse>() {
+ public static final @android.annotation.NonNull Parcelable.Creator<UssdResponse> CREATOR = new Creator<UssdResponse>() {
@Override
public UssdResponse createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/VisualVoicemailSms.java b/telephony/java/android/telephony/VisualVoicemailSms.java
index 1e6ea4b..085f882 100644
--- a/telephony/java/android/telephony/VisualVoicemailSms.java
+++ b/telephony/java/android/telephony/VisualVoicemailSms.java
@@ -116,7 +116,7 @@
}
- public static final Creator<VisualVoicemailSms> CREATOR =
+ public static final @android.annotation.NonNull Creator<VisualVoicemailSms> CREATOR =
new Creator<VisualVoicemailSms>() {
@Override
public VisualVoicemailSms createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
index 7eeb1ce..e8f3f1e 100644
--- a/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
+++ b/telephony/java/android/telephony/VisualVoicemailSmsFilterSettings.java
@@ -162,7 +162,7 @@
packageName = builder.mPackageName;
}
- public static final Creator<VisualVoicemailSmsFilterSettings> CREATOR =
+ public static final @android.annotation.NonNull Creator<VisualVoicemailSmsFilterSettings> CREATOR =
new Creator<VisualVoicemailSmsFilterSettings>() {
@Override
public VisualVoicemailSmsFilterSettings createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/VoLteServiceState.java b/telephony/java/android/telephony/VoLteServiceState.java
index d0b7519..f65c7b0 100644
--- a/telephony/java/android/telephony/VoLteServiceState.java
+++ b/telephony/java/android/telephony/VoLteServiceState.java
@@ -145,7 +145,7 @@
*
* @hide
*/
- public static final Parcelable.Creator<VoLteServiceState> CREATOR = new Parcelable.Creator() {
+ public static final @android.annotation.NonNull Parcelable.Creator<VoLteServiceState> CREATOR = new Parcelable.Creator() {
public VoLteServiceState createFromParcel(Parcel in) {
return new VoLteServiceState(in);
}
diff --git a/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java b/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java
index 871ee4d..d8ce5b4 100644
--- a/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java
+++ b/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java
@@ -99,7 +99,7 @@
}
- public static final Parcelable.Creator<VoiceSpecificRegistrationStates> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<VoiceSpecificRegistrationStates> CREATOR =
new Parcelable.Creator<VoiceSpecificRegistrationStates>() {
@Override
public VoiceSpecificRegistrationStates createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 0e69530..a4ed775 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -1410,7 +1410,7 @@
0, 0, 0, 0, mvnoType, null, apnSetId, carrierId);
}
- public static final Parcelable.Creator<ApnSetting> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ApnSetting> CREATOR =
new Parcelable.Creator<ApnSetting>() {
@Override
public ApnSetting createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/data/DataCallResponse.java b/telephony/java/android/telephony/data/DataCallResponse.java
index 3d2fe5f..6024143 100644
--- a/telephony/java/android/telephony/data/DataCallResponse.java
+++ b/telephony/java/android/telephony/data/DataCallResponse.java
@@ -244,7 +244,7 @@
dest.writeInt(mMtu);
}
- public static final Parcelable.Creator<DataCallResponse> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
new Parcelable.Creator<DataCallResponse>() {
@Override
public DataCallResponse createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/data/DataProfile.java b/telephony/java/android/telephony/data/DataProfile.java
index 1d196f9..f45954b 100644
--- a/telephony/java/android/telephony/data/DataProfile.java
+++ b/telephony/java/android/telephony/data/DataProfile.java
@@ -284,7 +284,7 @@
}
/** @hide */
- public static final Parcelable.Creator<DataProfile> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DataProfile> CREATOR =
new Parcelable.Creator<DataProfile>() {
@Override
public DataProfile createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java
index e68256d..5373c38 100644
--- a/telephony/java/android/telephony/emergency/EmergencyNumber.java
+++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java
@@ -281,7 +281,7 @@
dest.writeInt(mEmergencyCallRouting);
}
- public static final Parcelable.Creator<EmergencyNumber> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<EmergencyNumber> CREATOR =
new Parcelable.Creator<EmergencyNumber>() {
@Override
public EmergencyNumber createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/euicc/DownloadableSubscription.java b/telephony/java/android/telephony/euicc/DownloadableSubscription.java
index f1d5bdd..cb27f64 100644
--- a/telephony/java/android/telephony/euicc/DownloadableSubscription.java
+++ b/telephony/java/android/telephony/euicc/DownloadableSubscription.java
@@ -38,7 +38,7 @@
*/
public final class DownloadableSubscription implements Parcelable {
- public static final Creator<DownloadableSubscription> CREATOR =
+ public static final @android.annotation.NonNull Creator<DownloadableSubscription> CREATOR =
new Creator<DownloadableSubscription>() {
@Override
public DownloadableSubscription createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/euicc/EuiccInfo.java b/telephony/java/android/telephony/euicc/EuiccInfo.java
index 28855b2..91ebb6c 100644
--- a/telephony/java/android/telephony/euicc/EuiccInfo.java
+++ b/telephony/java/android/telephony/euicc/EuiccInfo.java
@@ -30,7 +30,7 @@
// own APIs guarded with appropriate permission checks.
public final class EuiccInfo implements Parcelable {
- public static final Creator<EuiccInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<EuiccInfo> CREATOR =
new Creator<EuiccInfo>() {
@Override
public EuiccInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/euicc/EuiccNotification.java b/telephony/java/android/telephony/euicc/EuiccNotification.java
index 43a7707..b27f775 100644
--- a/telephony/java/android/telephony/euicc/EuiccNotification.java
+++ b/telephony/java/android/telephony/euicc/EuiccNotification.java
@@ -165,7 +165,7 @@
mData = source.createByteArray();
}
- public static final Creator<EuiccNotification> CREATOR =
+ public static final @android.annotation.NonNull Creator<EuiccNotification> CREATOR =
new Creator<EuiccNotification>() {
@Override
public EuiccNotification createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
index 67ae983..89842ae 100644
--- a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
+++ b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
@@ -249,7 +249,7 @@
mPolicyRuleFlags = source.createIntArray();
}
- public static final Creator<EuiccRulesAuthTable> CREATOR =
+ public static final @android.annotation.NonNull Creator<EuiccRulesAuthTable> CREATOR =
new Creator<EuiccRulesAuthTable>() {
@Override
public EuiccRulesAuthTable createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
index 70daa8b..9b72d58 100644
--- a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
+++ b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
@@ -204,7 +204,7 @@
mServiceClass = in.readInt();
}
- public static final Creator<ImsCallForwardInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ImsCallForwardInfo> CREATOR =
new Creator<ImsCallForwardInfo>() {
@Override
public ImsCallForwardInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index 47c8de5..793ac3c 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -583,7 +583,7 @@
mHasKnownUserIntentEmergency = in.readBoolean();
}
- public static final Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() {
+ public static final @android.annotation.NonNull Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() {
@Override
public ImsCallProfile createFromParcel(Parcel in) {
return new ImsCallProfile(in);
diff --git a/telephony/java/android/telephony/ims/ImsConferenceState.java b/telephony/java/android/telephony/ims/ImsConferenceState.java
index 66d2f8d..44595b5 100644
--- a/telephony/java/android/telephony/ims/ImsConferenceState.java
+++ b/telephony/java/android/telephony/ims/ImsConferenceState.java
@@ -16,17 +16,18 @@
package android.telephony.ims;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map.Entry;
-import java.util.Set;
-
import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.telecom.Call;
import android.telecom.Connection;
+import android.telecom.Log;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
/**
* Provides the conference information (defined in RFC 4575) for IMS conference call.
@@ -134,7 +135,7 @@
}
}
- public static final Creator<ImsConferenceState> CREATOR =
+ public static final @android.annotation.NonNull Creator<ImsConferenceState> CREATOR =
new Creator<ImsConferenceState>() {
@Override
public ImsConferenceState createFromParcel(Parcel in) {
@@ -189,7 +190,7 @@
sb.append("<");
while (iterator.hasNext()) {
Entry<String, Bundle> entry = iterator.next();
- sb.append(entry.getKey());
+ sb.append(Log.pii(entry.getKey()));
sb.append(": ");
Bundle participantData = entry.getValue();
@@ -197,7 +198,7 @@
sb.append(key);
sb.append("=");
if (ENDPOINT.equals(key) || USER.equals(key)) {
- sb.append(android.telecom.Log.pii(participantData.get(key)));
+ sb.append(Log.pii(participantData.get(key)));
} else {
sb.append(participantData.get(key));
}
diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java
index f2d0cbf..a58f361 100644
--- a/telephony/java/android/telephony/ims/ImsExternalCallState.java
+++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java
@@ -167,7 +167,7 @@
Rlog.d(TAG, "ImsExternalCallState writeToParcel = " + out.toString());
}
- public static final Parcelable.Creator<ImsExternalCallState> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ImsExternalCallState> CREATOR =
new Parcelable.Creator<ImsExternalCallState>() {
@Override
public ImsExternalCallState createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java
index eb99d5d..bb85be1 100644
--- a/telephony/java/android/telephony/ims/ImsMmTelManager.java
+++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java
@@ -139,7 +139,7 @@
if (mLocalCallback == null) return;
Binder.withCleanCallingIdentity(() ->
- mExecutor.execute(() -> mLocalCallback.onDeregistered(info)));
+ mExecutor.execute(() -> mLocalCallback.onUnregistered(info)));
}
@Override
@@ -199,7 +199,7 @@
*
* @param info the {@link ImsReasonInfo} associated with why registration was disconnected.
*/
- public void onDeregistered(ImsReasonInfo info) {
+ public void onUnregistered(ImsReasonInfo info) {
}
/**
@@ -485,7 +485,7 @@
* @see android.telephony.CarrierConfigManager#KEY_HIDE_ENHANCED_4G_LTE_BOOL
* @see android.telephony.CarrierConfigManager#KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL
* @see android.telephony.CarrierConfigManager#KEY_CARRIER_VOLTE_AVAILABLE_BOOL
- * @see #setAdvancedCallingSetting(boolean)
+ * @see #setAdvancedCallingSettingEnabled(boolean)
* @return true if the user's setting for advanced calling is enabled, false otherwise.
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
@@ -519,9 +519,9 @@
* @see #isAdvancedCallingSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setAdvancedCallingSetting(boolean isEnabled) {
+ public void setAdvancedCallingSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setAdvancedCallingSetting(mSubId, isEnabled);
+ getITelephony().setAdvancedCallingSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -589,7 +589,7 @@
/**
* The user's setting for whether or not they have enabled the "Video Calling" setting.
* @return true if the user’s “Video Calling” setting is currently enabled.
- * @see #setVtSetting(boolean)
+ * @see #setVtSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVtSettingEnabled() {
@@ -605,9 +605,9 @@
* @see #isVtSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVtSetting(boolean isEnabled) {
+ public void setVtSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVtSetting(mSubId, isEnabled);
+ getITelephony().setVtSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -616,7 +616,7 @@
/**
* @return true if the user's setting for Voice over WiFi is enabled and false if it is not.
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVoWiFiSettingEnabled() {
@@ -633,9 +633,9 @@
* @see #isVoWiFiSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVoWiFiSetting(boolean isEnabled) {
+ public void setVoWiFiSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVoWiFiSetting(mSubId, isEnabled);
+ getITelephony().setVoWiFiSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -645,7 +645,7 @@
/**
* @return true if the user's setting for Voice over WiFi while roaming is enabled, false
* if disabled.
- * @see #setVoWiFiRoamingSetting(boolean)
+ * @see #setVoWiFiRoamingSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isVoWiFiRoamingSettingEnabled() {
@@ -663,9 +663,9 @@
* @see #isVoWiFiRoamingSettingEnabled()
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- public void setVoWiFiRoamingSetting(boolean isEnabled) {
+ public void setVoWiFiRoamingSettingEnabled(boolean isEnabled) {
try {
- getITelephony().setVoWiFiRoamingSetting(mSubId, isEnabled);
+ getITelephony().setVoWiFiRoamingSettingEnabled(mSubId, isEnabled);
return;
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
@@ -682,7 +682,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiNonPersistent(boolean isCapable, int mode) {
@@ -700,7 +700,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiSetting(boolean)
+ * @see #setVoWiFiSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @WiFiCallingMode int getVoWiFiModeSetting() {
@@ -739,7 +739,7 @@
* - {@link #WIFI_MODE_WIFI_ONLY}
* - {@link #WIFI_MODE_CELLULAR_PREFERRED}
* - {@link #WIFI_MODE_WIFI_PREFERRED}
- * @see #setVoWiFiRoamingSetting(boolean)
+ * @see #setVoWiFiRoamingSettingEnabled(boolean)
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @WiFiCallingMode int getVoWiFiRoamingModeSetting() {
diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java
index d8d2d9e..b018491 100644
--- a/telephony/java/android/telephony/ims/ImsReasonInfo.java
+++ b/telephony/java/android/telephony/ims/ImsReasonInfo.java
@@ -1181,7 +1181,7 @@
out.writeString(mExtraMessage);
}
- public static final Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
+ public static final @android.annotation.NonNull Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
@Override
public ImsReasonInfo createFromParcel(Parcel in) {
return new ImsReasonInfo(in);
diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java
index 3a82517..10001bc 100644
--- a/telephony/java/android/telephony/ims/ImsSsData.java
+++ b/telephony/java/android/telephony/ims/ImsSsData.java
@@ -364,7 +364,7 @@
mImsSsInfo = (ImsSsInfo[])in.readParcelableArray(this.getClass().getClassLoader());
}
- public static final Creator<ImsSsData> CREATOR = new Creator<ImsSsData>() {
+ public static final @android.annotation.NonNull Creator<ImsSsData> CREATOR = new Creator<ImsSsData>() {
@Override
public ImsSsData createFromParcel(Parcel in) {
return new ImsSsData(in);
diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java
index 031f9e1..303a9fe 100644
--- a/telephony/java/android/telephony/ims/ImsSsInfo.java
+++ b/telephony/java/android/telephony/ims/ImsSsInfo.java
@@ -275,7 +275,7 @@
mProvisionStatus = in.readInt();
}
- public static final Creator<ImsSsInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<ImsSsInfo> CREATOR =
new Creator<ImsSsInfo>() {
@Override
public ImsSsInfo createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
index d11a0de..fd75a6b 100644
--- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
+++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
@@ -228,7 +228,7 @@
mIsReceivingRttAudio = in.readBoolean();
}
- public static final Creator<ImsStreamMediaProfile> CREATOR =
+ public static final @android.annotation.NonNull Creator<ImsStreamMediaProfile> CREATOR =
new Creator<ImsStreamMediaProfile>() {
@Override
public ImsStreamMediaProfile createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
index efaade8..2e4288d 100644
--- a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
+++ b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
@@ -93,7 +93,7 @@
out.writeStringArray(history);
}
- public static final Creator<ImsSuppServiceNotification> CREATOR =
+ public static final @android.annotation.NonNull Creator<ImsSuppServiceNotification> CREATOR =
new Creator<ImsSuppServiceNotification>() {
@Override
public ImsSuppServiceNotification createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsEventQueryParams.java b/telephony/java/android/telephony/ims/RcsEventQueryParams.java
index 5f8fa80..0024cf7 100644
--- a/telephony/java/android/telephony/ims/RcsEventQueryParams.java
+++ b/telephony/java/android/telephony/ims/RcsEventQueryParams.java
@@ -292,7 +292,7 @@
mLimit = in.readInt();
}
- public static final Creator<RcsEventQueryParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsEventQueryParams> CREATOR =
new Creator<RcsEventQueryParams>() {
@Override
public RcsEventQueryParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java
index bba56d3..e30745b7 100644
--- a/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java
@@ -53,7 +53,7 @@
in.readList(mEvents, null);
}
- public static final Creator<RcsEventQueryResultDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsEventQueryResultDescriptor> CREATOR =
new Creator<RcsEventQueryResultDescriptor>() {
@Override
public RcsEventQueryResultDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java
index 4742ba2..e43552d 100644
--- a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java
+++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java
@@ -325,7 +325,7 @@
mFileTransferStatus = in.readInt();
}
- public static final Creator<RcsFileTransferCreationParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsFileTransferCreationParams> CREATOR =
new Creator<RcsFileTransferCreationParams>() {
@Override
public RcsFileTransferCreationParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java
index b7fe4b2..1fb8798 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java
@@ -42,7 +42,7 @@
new RcsParticipant(mOriginatingParticipantId), mNewIcon);
}
- public static final Creator<RcsGroupThreadIconChangedEventDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsGroupThreadIconChangedEventDescriptor> CREATOR =
new Creator<RcsGroupThreadIconChangedEventDescriptor>() {
@Override
public RcsGroupThreadIconChangedEventDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java
index 4ec641f..980aba2 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java
@@ -44,7 +44,7 @@
mNewName);
}
- public static final Creator<RcsGroupThreadNameChangedEventDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsGroupThreadNameChangedEventDescriptor> CREATOR =
new Creator<RcsGroupThreadNameChangedEventDescriptor>() {
@Override
public RcsGroupThreadNameChangedEventDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java
index a4218c2..e899e1c 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java
@@ -43,7 +43,7 @@
new RcsParticipant(mJoinedParticipantId));
}
- public static final Creator<RcsGroupThreadParticipantJoinedEventDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsGroupThreadParticipantJoinedEventDescriptor> CREATOR =
new Creator<RcsGroupThreadParticipantJoinedEventDescriptor>() {
@Override
public RcsGroupThreadParticipantJoinedEventDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java
index 8e91dda..8eefb4b 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java
@@ -44,7 +44,7 @@
new RcsParticipant(mLeavingParticipantId));
}
- public static final Parcelable.Creator<RcsGroupThreadParticipantLeftEventDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RcsGroupThreadParticipantLeftEventDescriptor> CREATOR =
new Creator<RcsGroupThreadParticipantLeftEventDescriptor>() {
@Override
public RcsGroupThreadParticipantLeftEventDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java
index 58dc1bc..955f263 100644
--- a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java
+++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java
@@ -152,7 +152,7 @@
return mSenderParticipantId;
}
- public static final Creator<RcsIncomingMessageCreationParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsIncomingMessageCreationParams> CREATOR =
new Creator<RcsIncomingMessageCreationParams>() {
@Override
public RcsIncomingMessageCreationParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java
index 6491ac9..9f9eafb 100644
--- a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java
@@ -330,7 +330,7 @@
mThreadId = in.readInt();
}
- public static final Creator<RcsMessageQueryParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsMessageQueryParams> CREATOR =
new Creator<RcsMessageQueryParams>() {
@Override
public RcsMessageQueryParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java
index e4020c1..5df929b 100644
--- a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java
@@ -89,7 +89,7 @@
in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR);
}
- public static final Creator<RcsMessageQueryResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsMessageQueryResult> CREATOR =
new Creator<RcsMessageQueryResult>() {
@Override
public RcsMessageQueryResult createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsMessageSnippet.java b/telephony/java/android/telephony/ims/RcsMessageSnippet.java
index 9064251..8103160 100644
--- a/telephony/java/android/telephony/ims/RcsMessageSnippet.java
+++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.java
@@ -71,7 +71,7 @@
mTimestamp = in.readLong();
}
- public static final Creator<RcsMessageSnippet> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsMessageSnippet> CREATOR =
new Creator<RcsMessageSnippet>() {
@Override
public RcsMessageSnippet createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java
index 81e3244..22fd8a5 100644
--- a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java
+++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java
@@ -64,7 +64,7 @@
super(in);
}
- public static final Creator<RcsOutgoingMessageCreationParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsOutgoingMessageCreationParams> CREATOR =
new Creator<RcsOutgoingMessageCreationParams>() {
@Override
public RcsOutgoingMessageCreationParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java
index a32e552..aad9fb3 100644
--- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java
+++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java
@@ -45,7 +45,7 @@
mTimestamp, new RcsParticipant(mParticipantId), mNewAlias);
}
- public static final Creator<RcsParticipantAliasChangedEventDescriptor> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsParticipantAliasChangedEventDescriptor> CREATOR =
new Creator<RcsParticipantAliasChangedEventDescriptor>() {
@Override
public RcsParticipantAliasChangedEventDescriptor createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java
index ada9b8a..21107a2 100644
--- a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java
@@ -279,7 +279,7 @@
mThreadId = in.readInt();
}
- public static final Creator<RcsParticipantQueryParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsParticipantQueryParams> CREATOR =
new Creator<RcsParticipantQueryParams>() {
@Override
public RcsParticipantQueryParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java
index 92e2fa78..3e5c231 100644
--- a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java
@@ -80,7 +80,7 @@
RcsQueryContinuationToken.class.getClassLoader());
}
- public static final Creator<RcsParticipantQueryResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsParticipantQueryResult> CREATOR =
new Creator<RcsParticipantQueryResult>() {
@Override
public RcsParticipantQueryResult createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java
index 970c110..982263a 100644
--- a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java
+++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java
@@ -129,7 +129,7 @@
mOffset = in.readInt();
}
- public static final Creator<RcsQueryContinuationToken> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsQueryContinuationToken> CREATOR =
new Creator<RcsQueryContinuationToken>() {
@Override
public RcsQueryContinuationToken createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java
index 81eee40..da7cdb0 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java
@@ -276,7 +276,7 @@
mIsAscending = in.readByte() == 1;
}
- public static final Creator<RcsThreadQueryParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsThreadQueryParams> CREATOR =
new Creator<RcsThreadQueryParams>() {
@Override
public RcsThreadQueryParams createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
index 9f2fba5..c2c2d3a 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
@@ -91,7 +91,7 @@
in.readList(mRcsThreadIds, Integer.class.getClassLoader());
}
- public static final Creator<RcsThreadQueryResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<RcsThreadQueryResult> CREATOR =
new Creator<RcsThreadQueryResult>() {
@Override
public RcsThreadQueryResult createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
index 1ee8563..80fc09e 100644
--- a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
+++ b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
@@ -187,7 +187,7 @@
}
}
- public static final Creator<CapabilityChangeRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<CapabilityChangeRequest> CREATOR =
new Creator<CapabilityChangeRequest>() {
@Override
public CapabilityChangeRequest createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
index dfb6e2c..6ab9465 100644
--- a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
+++ b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
@@ -165,7 +165,7 @@
}
}
- public static final Creator<ImsFeatureConfiguration> CREATOR
+ public static final @android.annotation.NonNull Creator<ImsFeatureConfiguration> CREATOR
= new Creator<ImsFeatureConfiguration>() {
@Override
public ImsFeatureConfiguration createFromParcel(Parcel in) {
diff --git a/telephony/java/android/telephony/mbms/DownloadRequest.java b/telephony/java/android/telephony/mbms/DownloadRequest.java
index 9e3302b..52b51d2 100644
--- a/telephony/java/android/telephony/mbms/DownloadRequest.java
+++ b/telephony/java/android/telephony/mbms/DownloadRequest.java
@@ -330,7 +330,7 @@
return version;
}
- public static final Parcelable.Creator<DownloadRequest> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<DownloadRequest> CREATOR =
new Parcelable.Creator<DownloadRequest>() {
public DownloadRequest createFromParcel(Parcel in) {
return new DownloadRequest(in);
diff --git a/telephony/java/android/telephony/mbms/FileInfo.java b/telephony/java/android/telephony/mbms/FileInfo.java
index e064adb..ada2872 100644
--- a/telephony/java/android/telephony/mbms/FileInfo.java
+++ b/telephony/java/android/telephony/mbms/FileInfo.java
@@ -33,7 +33,7 @@
private final String mimeType;
- public static final Parcelable.Creator<FileInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FileInfo> CREATOR =
new Parcelable.Creator<FileInfo>() {
@Override
public FileInfo createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/mbms/FileServiceInfo.java b/telephony/java/android/telephony/mbms/FileServiceInfo.java
index b30a3af..8c79ab6 100644
--- a/telephony/java/android/telephony/mbms/FileServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/FileServiceInfo.java
@@ -44,7 +44,7 @@
files = new ArrayList<>(newFiles);
}
- public static final Parcelable.Creator<FileServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<FileServiceInfo> CREATOR =
new Parcelable.Creator<FileServiceInfo>() {
@Override
public FileServiceInfo createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
index ef2a14a..8ad1d89 100644
--- a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
@@ -48,7 +48,7 @@
super(names, className, locales, serviceId, start, end);
}
- public static final Parcelable.Creator<StreamingServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<StreamingServiceInfo> CREATOR =
new Parcelable.Creator<StreamingServiceInfo>() {
@Override
public StreamingServiceInfo createFromParcel(Parcel source) {
diff --git a/telephony/java/android/telephony/mbms/UriPathPair.java b/telephony/java/android/telephony/mbms/UriPathPair.java
index dd20a69..f53d7e0 100644
--- a/telephony/java/android/telephony/mbms/UriPathPair.java
+++ b/telephony/java/android/telephony/mbms/UriPathPair.java
@@ -54,7 +54,7 @@
mContentUri = in.readParcelable(Uri.class.getClassLoader());
}
- public static final Creator<UriPathPair> CREATOR = new Creator<UriPathPair>() {
+ public static final @android.annotation.NonNull Creator<UriPathPair> CREATOR = new Creator<UriPathPair>() {
@Override
public UriPathPair createFromParcel(Parcel in) {
return new UriPathPair(in);
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
index c90ffc7..c1401272 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
@@ -26,13 +26,17 @@
*/
interface IMbmsStreamingService
{
+ @UnsupportedAppUsage
int initialize(IMbmsStreamingSessionCallback callback, int subId);
+ @UnsupportedAppUsage
int requestUpdateStreamingServices(int subId, in List<String> serviceClasses);
+ @UnsupportedAppUsage
int startStreaming(int subId, String serviceId,
IStreamingServiceCallback callback);
+ @UnsupportedAppUsage
Uri getPlaybackUri(int subId, String serviceId);
void stopStreaming(int subId, String serviceId);
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
index e86a47d..1335b52 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
@@ -16,6 +16,7 @@
package android.telephony.mbms.vendor;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.Service;
@@ -187,7 +188,7 @@
*
* May throw an {@link IllegalArgumentException} or a {@link SecurityException}, which
* will be intercepted and passed to the app as
- * {@link MbmsErrors.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE}
+ * {@link MbmsErrors.InitializationErrtrors#ERROR_UNABLE_TO_INITIALIZE}
*
* May return any value from {@link MbmsErrors.InitializationErrors}
* or {@link MbmsErrors#SUCCESS}. Non-successful error codes will be passed to the app via
@@ -196,7 +197,7 @@
* @param callback The callback to use to communicate with the app.
* @param subscriptionId The subscription ID to use.
*/
- public int initialize(MbmsGroupCallSessionCallback callback, int subscriptionId)
+ public int initialize(@NonNull MbmsGroupCallSessionCallback callback, int subscriptionId)
throws RemoteException {
throw new UnsupportedOperationException("Not implemented");
}
@@ -215,8 +216,8 @@
* @param callback The callback object on which the app wishes to receive updates.
* @return Any error in {@link MbmsErrors.GeneralErrors}
*/
- public int startGroupCall(int subscriptionId, long tmgi, List<Integer> saiList,
- List<Integer> frequencyList, GroupCallCallback callback) {
+ public int startGroupCall(int subscriptionId, long tmgi, @NonNull List<Integer> saiList,
+ @NonNull List<Integer> frequencyList, @NonNull GroupCallCallback callback) {
throw new UnsupportedOperationException("Not implemented");
}
@@ -241,8 +242,8 @@
* @param saiList New list of SAIs that the call is available on.
* @param frequencyList New list of frequencies that the call is available on.
*/
- public void updateGroupCall(int subscriptionId, long tmgi, List<Integer> saiList,
- List<Integer> frequencyList) {
+ public void updateGroupCall(int subscriptionId, long tmgi, @NonNull List<Integer> saiList,
+ @NonNull List<Integer> frequencyList) {
throw new UnsupportedOperationException("Not implemented");
}
diff --git a/telephony/java/com/android/ims/ImsConfigListener.aidl b/telephony/java/com/android/ims/ImsConfigListener.aidl
index 64a5015..4f229df 100644
--- a/telephony/java/com/android/ims/ImsConfigListener.aidl
+++ b/telephony/java/com/android/ims/ImsConfigListener.aidl
@@ -47,6 +47,7 @@
*
* @return void.
*/
+ @UnsupportedAppUsage
void onSetFeatureResponse(int feature, int network, int value, int status);
/**
diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
index 579369f..b33a9f1 100644
--- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
+++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl
@@ -34,33 +34,47 @@
/**
* Notifies the result of the basic session operation (setup / terminate).
*/
+ @UnsupportedAppUsage
void callSessionProgressing(in IImsCallSession session, in ImsStreamMediaProfile profile);
+ @UnsupportedAppUsage
void callSessionStarted(in IImsCallSession session, in ImsCallProfile profile);
+ @UnsupportedAppUsage
void callSessionStartFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo);
+ @UnsupportedAppUsage
void callSessionTerminated(in IImsCallSession session, in ImsReasonInfo reasonInfo);
/**
* Notifies the result of the call hold/resume operation.
*/
+ @UnsupportedAppUsage
void callSessionHeld(in IImsCallSession session, in ImsCallProfile profile);
+ @UnsupportedAppUsage
void callSessionHoldFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo);
+ @UnsupportedAppUsage
void callSessionHoldReceived(in IImsCallSession session, in ImsCallProfile profile);
+ @UnsupportedAppUsage
void callSessionResumed(in IImsCallSession session, in ImsCallProfile profile);
+ @UnsupportedAppUsage
void callSessionResumeFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo);
+ @UnsupportedAppUsage
void callSessionResumeReceived(in IImsCallSession session, in ImsCallProfile profile);
/**
* Notifies the result of call merge operation.
*/
+ @UnsupportedAppUsage
void callSessionMergeStarted(in IImsCallSession session,
in IImsCallSession newSession, in ImsCallProfile profile);
+ @UnsupportedAppUsage
void callSessionMergeComplete(in IImsCallSession session);
+ @UnsupportedAppUsage
void callSessionMergeFailed(in IImsCallSession session,
in ImsReasonInfo reasonInfo);
/**
* Notifies the result of call upgrade / downgrade or any other call updates.
*/
+ @UnsupportedAppUsage
void callSessionUpdated(in IImsCallSession session,
in ImsCallProfile profile);
void callSessionUpdateFailed(in IImsCallSession session,
@@ -81,7 +95,9 @@
/**
* Notifies the result of the participant invitation / removal to/from the conference session.
*/
+ @UnsupportedAppUsage
void callSessionInviteParticipantsRequestDelivered(in IImsCallSession session);
+ @UnsupportedAppUsage
void callSessionInviteParticipantsRequestFailed(in IImsCallSession session,
in ImsReasonInfo reasonInfo);
void callSessionRemoveParticipantsRequestDelivered(in IImsCallSession session);
@@ -91,6 +107,7 @@
/**
* Notifies the changes of the conference info. in the conference session.
*/
+ @UnsupportedAppUsage
void callSessionConferenceStateUpdated(in IImsCallSession session,
in ImsConferenceState state);
@@ -103,8 +120,10 @@
/**
* Notifies of handover information for this call
*/
+ @UnsupportedAppUsage
void callSessionHandover(in IImsCallSession session,
in int srcAccessTech, in int targetAccessTech, in ImsReasonInfo reasonInfo);
+ @UnsupportedAppUsage
void callSessionHandoverFailed(in IImsCallSession session,
in int srcAccessTech, in int targetAccessTech, in ImsReasonInfo reasonInfo);
void callSessionMayHandover(in IImsCallSession session,
@@ -118,6 +137,7 @@
* - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
* - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
*/
+ @UnsupportedAppUsage
void callSessionTtyModeReceived(in IImsCallSession session, in int mode);
/**
@@ -126,11 +146,13 @@
* @param session The call session.
* @param isMultiParty {@code true} if the session became multiparty, {@code false} otherwise.
*/
+ @UnsupportedAppUsage
void callSessionMultipartyStateChanged(in IImsCallSession session, in boolean isMultiParty);
/**
* Notifies the supplementary service information for the current session.
*/
+ @UnsupportedAppUsage
void callSessionSuppServiceReceived(in IImsCallSession session,
in ImsSuppServiceNotification suppSrvNotification);
diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl
index 2212109..a7a62a6 100644
--- a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl
+++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl
@@ -32,6 +32,7 @@
*
* @deprecated see {@link registrationConnectedWithRadioTech}
*/
+ @UnsupportedAppUsage
void registrationConnected();
/**
@@ -47,6 +48,7 @@
* @param imsRadioTech the radio access technology. Valid values are {@code
* RIL_RADIO_TECHNOLOGY_*} defined in {@link ServiceState}.
*/
+ @UnsupportedAppUsage
void registrationConnectedWithRadioTech(int imsRadioTech);
/**
@@ -55,12 +57,14 @@
* @param imsRadioTech the radio access technology. Valid values are {@code
* RIL_RADIO_TECHNOLOGY_*} defined in {@link ServiceState}.
*/
+ @UnsupportedAppUsage
void registrationProgressingWithRadioTech(int imsRadioTech);
/**
* Notifies the application when the device is disconnected from the IMS network.
*/
+ @UnsupportedAppUsage
void registrationDisconnected(in ImsReasonInfo imsReasonInfo);
/**
@@ -94,6 +98,7 @@
* @param enabledFeatures features enabled as defined in com.android.ims.ImsConfig#FeatureConstants.
* @param disabledFeatures features disabled as defined in com.android.ims.ImsConfig#FeatureConstants.
*/
+ @UnsupportedAppUsage
void registrationFeatureCapabilityChanged(int serviceClass,
in int[] enabledFeatures, in int[] disabledFeatures);
@@ -101,11 +106,13 @@
* Updates the application with the waiting voice message count.
* @param count The number of waiting voice messages.
*/
+ @UnsupportedAppUsage
void voiceMessageCountUpdate(int count);
/**
* Notifies the application when the list of URIs associated with IMS client is updated.
*/
+ @UnsupportedAppUsage
void registrationAssociatedUriChanged(in Uri[] uris);
/**
@@ -116,5 +123,6 @@
* attempted.
* @param imsReasonInfo Reason for the failure.
*/
+ @UnsupportedAppUsage
void registrationChangeFailed(in int targetAccessTech, in ImsReasonInfo imsReasonInfo);
}
diff --git a/telephony/java/com/android/ims/internal/IImsUtListener.aidl b/telephony/java/com/android/ims/internal/IImsUtListener.aidl
index a603cd3..fcb9fb1 100644
--- a/telephony/java/com/android/ims/internal/IImsUtListener.aidl
+++ b/telephony/java/com/android/ims/internal/IImsUtListener.aidl
@@ -31,30 +31,37 @@
/**
* Notifies the result of the supplementary service configuration udpate.
*/
+ @UnsupportedAppUsage
void utConfigurationUpdated(in IImsUt ut, int id);
+ @UnsupportedAppUsage
void utConfigurationUpdateFailed(in IImsUt ut, int id, in ImsReasonInfo error);
/**
* Notifies the result of the supplementary service configuration query.
*/
+ @UnsupportedAppUsage
void utConfigurationQueried(in IImsUt ut, int id, in Bundle ssInfo);
+ @UnsupportedAppUsage
void utConfigurationQueryFailed(in IImsUt ut, int id, in ImsReasonInfo error);
/**
* Notifies the status of the call barring supplementary service.
*/
+ @UnsupportedAppUsage
void utConfigurationCallBarringQueried(in IImsUt ut,
int id, in ImsSsInfo[] cbInfo);
/**
* Notifies the status of the call forwarding supplementary service.
*/
+ @UnsupportedAppUsage
void utConfigurationCallForwardQueried(in IImsUt ut,
int id, in ImsCallForwardInfo[] cfInfo);
/**
* Notifies the status of the call waiting supplementary service.
*/
+ @UnsupportedAppUsage
void utConfigurationCallWaitingQueried(in IImsUt ut,
int id, in ImsSsInfo[] cwInfo);
diff --git a/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl b/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl
index 9499c9f..cf8d637 100644
--- a/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl
+++ b/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl
@@ -31,18 +31,25 @@
* {@hide}
*/
oneway interface IImsVideoCallCallback {
+ @UnsupportedAppUsage
void receiveSessionModifyRequest(in VideoProfile videoProfile);
+ @UnsupportedAppUsage
void receiveSessionModifyResponse(int status, in VideoProfile requestedProfile,
in VideoProfile responseProfile);
+ @UnsupportedAppUsage
void handleCallSessionEvent(int event);
+ @UnsupportedAppUsage
void changePeerDimensions(int width, int height);
+ @UnsupportedAppUsage
void changeCallDataUsage(long dataUsage);
+ @UnsupportedAppUsage
void changeCameraCapabilities(in VideoProfile.CameraCapabilities cameraCapabilities);
+ @UnsupportedAppUsage
void changeVideoQuality(int videoQuality);
}
diff --git a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
index 0da27e1..4d20bd6 100644
--- a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
+++ b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl
@@ -41,6 +41,7 @@
* @hide
*/
oneway interface IImsVideoCallProvider {
+ @UnsupportedAppUsage
void setCallback(IImsVideoCallCallback callback);
void setCamera(String cameraId, int uid);
diff --git a/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl b/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl
index 8cb1153..c69d5a9 100644
--- a/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl
+++ b/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl
@@ -29,6 +29,7 @@
* @param version, version information of the service.
* @hide
*/
+ @UnsupportedAppUsage
void getVersionCb(in String version );
/**
@@ -37,6 +38,7 @@
* @param statusCode, UCE_SUCCESS as service availability.
* @hide
*/
+ @UnsupportedAppUsage
void serviceAvailable(in StatusCode statusCode);
/**
@@ -45,6 +47,7 @@
* @param statusCode, UCE_SUCCESS as service unavailability.
* @hide
*/
+ @UnsupportedAppUsage
void serviceUnavailable(in StatusCode statusCode);
/**
@@ -55,6 +58,7 @@
* @param capInfo, capabilities of the remote entity received.
* @hide
*/
+ @UnsupportedAppUsage
void sipResponseReceived( String uri,
in OptionsSipResponse sipResponse, in OptionsCapInfo capInfo);
@@ -63,6 +67,7 @@
* @param cmdStatus, command status of the request placed.
* @hide
*/
+ @UnsupportedAppUsage
void cmdStatus(in OptionsCmdStatus cmdStatus);
/**
@@ -73,6 +78,7 @@
* @param tID, transation of the request received from network.
* @hide
*/
+ @UnsupportedAppUsage
void incomingOptions( String uri, in OptionsCapInfo capInfo,
in int tID);
}
diff --git a/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl b/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl
index 839bb55..2e49082 100644
--- a/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl
+++ b/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl
@@ -33,6 +33,7 @@
* @return StatusCode, status of the request placed.
* @hide
*/
+ @UnsupportedAppUsage
StatusCode getVersion(int optionsServiceHandle);
/**
@@ -44,6 +45,7 @@
* The service will fill UceLong.mUceLong with optionsServiceListenerHdl
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode addListener(int optionsServiceHandle, IOptionsListener optionsListener,
inout UceLong optionsServiceListenerHdl);
@@ -54,6 +56,7 @@
* @param optionsServiceListenerHdl provided in createOptionsService() or Addlistener().
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode removeListener(int optionsServiceHandle, in UceLong optionsServiceListenerHdl);
/**
@@ -66,6 +69,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode setMyInfo(int optionsServiceHandle , in CapInfo capInfo, int reqUserData);
@@ -78,6 +82,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getMyInfo(int optionsServiceHandle , int reqUserdata);
/**
@@ -90,6 +95,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getContactCap(int optionsServiceHandle , String remoteURI, int reqUserData);
@@ -103,6 +109,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getContactListCap(int optionsServiceHandle, in String[] remoteURIList,
int reqUserData);
@@ -119,6 +126,7 @@
* @param bContactInBL, true if the contact is blacklisted, else false.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode responseIncomingOptions(int optionsServiceHandle, int tId, int sipResponseCode,
String reasonPhrase, in OptionsCapInfo capInfo,
in boolean bContactInBL);
diff --git a/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl b/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl
index 2ae424f..65e7fc9 100644
--- a/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl
+++ b/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl
@@ -36,6 +36,7 @@
* Gets the version of the presence listener implementation.
* @param version, version information.
*/
+ @UnsupportedAppUsage
void getVersionCb(in String version );
/**
@@ -43,6 +44,7 @@
* availability.
* @param statusCode, UCE_SUCCESS as service availability.
*/
+ @UnsupportedAppUsage
void serviceAvailable(in StatusCode statusCode);
/**
@@ -50,6 +52,7 @@
* unavailability.
* @param statusCode, UCE_SUCCESS as service unAvailability.
*/
+ @UnsupportedAppUsage
void serviceUnAvailable(in StatusCode statusCode);
/**
@@ -57,12 +60,14 @@
* publish request.
* @param publishTrigger, Publish trigger for the network being supported.
*/
+ @UnsupportedAppUsage
void publishTriggering(in PresPublishTriggerType publishTrigger);
/**
* Callback function to be invoked to inform the client of the status of an asynchronous call.
* @param cmdStatus, command status of the request placed.
*/
+ @UnsupportedAppUsage
void cmdStatus( in PresCmdStatus cmdStatus);
/**
@@ -70,6 +75,7 @@
* such as PUBLISH or SUBSCRIBE, has been received.
* @param sipResponse, network response received for the request placed.
*/
+ @UnsupportedAppUsage
void sipResponseReceived(in PresSipResponse sipResponse);
/**
@@ -78,6 +84,7 @@
* @param presentityURI, URI of the remote entity the request was placed.
* @param tupleInfo, array of capability information remote entity supports.
*/
+ @UnsupportedAppUsage
void capInfoReceived(in String presentityURI,
in PresTupleInfo [] tupleInfo);
@@ -87,6 +94,7 @@
* @param rlmiInfo, resource infomation received from network.
* @param resInfo, array of capabilities received from network for the list of remore URI.
*/
+ @UnsupportedAppUsage
void listCapInfoReceived(in PresRlmiInfo rlmiInfo,
in PresResInfo [] resInfo);
@@ -94,6 +102,7 @@
* Callback function to be invoked to inform the client when Unpublish message
* is sent to network.
*/
+ @UnsupportedAppUsage
void unpublishMessageSent();
}
\ No newline at end of file
diff --git a/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl b/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl
index fdea6d3..26a3e83 100644
--- a/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl
+++ b/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl
@@ -33,6 +33,7 @@
* @param presenceServiceHdl returned in createPresenceService().
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getVersion(int presenceServiceHdl);
/**
@@ -45,6 +46,7 @@
*
* @return StatusCode, status of the request placed
*/
+ @UnsupportedAppUsage
StatusCode addListener(int presenceServiceHdl, IPresenceListener presenceServiceListener,
inout UceLong presenceServiceListenerHdl);
@@ -54,6 +56,7 @@
* @param presenceServiceListenerHdl provided in createPresenceService() or Addlistener().
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode removeListener(int presenceServiceHdl, in UceLong presenceServiceListenerHdl);
/**
@@ -69,6 +72,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode reenableService(int presenceServiceHdl, int userData);
/**
@@ -81,6 +85,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode publishMyCap(int presenceServiceHdl, in PresCapInfo myCapInfo , int userData);
/**
@@ -94,6 +99,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getContactCap(int presenceServiceHdl , String remoteUri, int userData);
/**
@@ -107,6 +113,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode getContactListCap(int presenceServiceHdl, in String[] remoteUriList, int userData);
/**
@@ -122,6 +129,7 @@
* with original request.
* @return StatusCode, status of the request placed.
*/
+ @UnsupportedAppUsage
StatusCode setNewFeatureTag(int presenceServiceHdl, String featureTag,
in PresServiceInfo serviceInfo, int userData);
diff --git a/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl b/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl
index 13707a1..41abf7d 100644
--- a/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl
+++ b/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl
@@ -25,5 +25,6 @@
* @param serviceStatusValue defined in ImsUceManager
* @hide
*/
+ @UnsupportedAppUsage
void setStatus(int serviceStatusValue);
}
diff --git a/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl b/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl
index 1fb8513..ec45371 100644
--- a/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl
+++ b/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl
@@ -38,6 +38,7 @@
* Service status is returned in setStatus callback in IUceListener.
* @hide
*/
+ @UnsupportedAppUsage
boolean startService(IUceListener uceListener);
/**
@@ -45,6 +46,7 @@
* @return boolean true if the service stop request is processed successfully, FALSE otherwise.
* @hide
*/
+ @UnsupportedAppUsage
boolean stopService();
@@ -54,6 +56,7 @@
* @return boolean true if service started else false.
* @hide
*/
+ @UnsupportedAppUsage
boolean isServiceStarted();
/**
@@ -71,6 +74,7 @@
*
* @deprecated This is replaced with new API createOptionsServiceForSubscription()
*/
+ @UnsupportedAppUsage
int createOptionsService(IOptionsListener optionsListener,
inout UceLong optionsServiceListenerHdl);
/**
@@ -97,6 +101,7 @@
* in IOptionsListener
* @hide
*/
+ @UnsupportedAppUsage
void destroyOptionsService(int optionsServiceHandle);
/**
@@ -114,6 +119,7 @@
*
* @deprecated This is replaced with new API createPresenceServiceForSubscription()
*/
+ @UnsupportedAppUsage
int createPresenceService(IPresenceListener presenceServiceListener,
inout UceLong presenceServiceListenerHdl);
/**
@@ -141,6 +147,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
void destroyPresenceService(int presenceServiceHdl);
@@ -152,6 +159,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
boolean getServiceStatus();
/**
@@ -163,6 +171,7 @@
*
* @deprecated use API getPresenceServiceForSubscription()
*/
+ @UnsupportedAppUsage
IPresenceService getPresenceService();
/**
@@ -185,6 +194,7 @@
*
* @hide
*/
+ @UnsupportedAppUsage
IOptionsService getOptionsService();
/**
diff --git a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
index 5cd67d9..8e50a8f 100644
--- a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
+++ b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
@@ -23,6 +23,7 @@
*/
interface ICarrierConfigLoader {
+ @UnsupportedAppUsage
PersistableBundle getConfigForSubId(int subId, String callingPackage);
void overrideConfig(int subId, in PersistableBundle overrides);
diff --git a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
index abcb15a..5b509b7 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
@@ -60,6 +60,7 @@
/**
* Retrieves the unique sbuscriber ID, e.g., IMSI for GSM phones.
*/
+ @UnsupportedAppUsage
String getSubscriberId(String callingPackage);
/**
@@ -75,6 +76,7 @@
/**
* Retrieves the serial number of the ICC, if applicable.
*/
+ @UnsupportedAppUsage
String getIccSerialNumber(String callingPackage);
/**
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index d183837..5c5d44a 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -76,6 +76,7 @@
* @param number the number to be dialed. If null, this
* would display the Dialer screen with no number pre-filled.
*/
+ @UnsupportedAppUsage
void dial(String number);
/**
@@ -83,6 +84,7 @@
* @param callingPackage The package making the call.
* @param number the number to be called.
*/
+ @UnsupportedAppUsage
void call(String callingPackage, String number);
/**
@@ -98,6 +100,7 @@
* @param callingPackage the name of the package making the call.
* @return returns true if the radio is on.
*/
+ @UnsupportedAppUsage
boolean isRadioOnForSubscriber(int subId, String callingPackage);
/**
@@ -105,6 +108,7 @@
* @param pin The pin to check.
* @return whether the operation was a success.
*/
+ @UnsupportedAppUsage
boolean supplyPin(String pin);
/**
@@ -182,6 +186,7 @@
* @param dialString the MMI command to be executed.
* @return true if MMI command is executed.
*/
+ @UnsupportedAppUsage
boolean handlePinMmi(String dialString);
@@ -202,11 +207,13 @@
* @param subId user preferred subId.
* @return true if MMI command is executed.
*/
+ @UnsupportedAppUsage
boolean handlePinMmiForSubscriber(int subId, String dialString);
/**
* Toggles the radio on or off.
*/
+ @UnsupportedAppUsage
void toggleRadioOnOff();
/**
@@ -218,6 +225,7 @@
/**
* Set the radio to on or off
*/
+ @UnsupportedAppUsage
boolean setRadio(boolean turnOn);
/**
@@ -234,6 +242,7 @@
/**
* Request to update location information in service state
*/
+ @UnsupportedAppUsage
void updateServiceLocation();
/**
@@ -245,6 +254,7 @@
/**
* Enable location update notifications.
*/
+ @UnsupportedAppUsage
void enableLocationUpdates();
/**
@@ -256,6 +266,7 @@
/**
* Disable location update notifications.
*/
+ @UnsupportedAppUsage
void disableLocationUpdates();
/**
@@ -267,11 +278,13 @@
/**
* Allow mobile data connections.
*/
+ @UnsupportedAppUsage
boolean enableDataConnectivity();
/**
* Disallow mobile data connections.
*/
+ @UnsupportedAppUsage
boolean disableDataConnectivity();
/**
@@ -293,6 +306,7 @@
*/
List<NeighboringCellInfo> getNeighboringCellInfo(String callingPkg);
+ @UnsupportedAppUsage
int getCallState();
/**
@@ -300,7 +314,9 @@
*/
int getCallStateForSlot(int slotIndex);
+ @UnsupportedAppUsage
int getDataActivity();
+ @UnsupportedAppUsage
int getDataState();
/**
@@ -308,6 +324,7 @@
* Returns TelephonyManager.PHONE_TYPE_CDMA if RILConstants.CDMA_PHONE
* and TelephonyManager.PHONE_TYPE_GSM if RILConstants.GSM_PHONE
*/
+ @UnsupportedAppUsage
int getActivePhoneType();
/**
@@ -444,6 +461,7 @@
* Returns the network type for data transmission
* Legacy call, permission-free
*/
+ @UnsupportedAppUsage
int getNetworkType();
/**
@@ -477,6 +495,7 @@
/**
* Return true if an ICC card is present
*/
+ @UnsupportedAppUsage
boolean hasIccCard();
/**
@@ -557,6 +576,7 @@
* successful iccOpenLogicalChannel.
* @return true if the channel was closed successfully.
*/
+ @UnsupportedAppUsage
boolean iccCloseLogicalChannel(int subId, int channel);
/**
@@ -577,6 +597,7 @@
* @return The APDU response from the ICC card with the status appended at
* the end.
*/
+ @UnsupportedAppUsage
String iccTransmitApduLogicalChannel(int subId, int channel, int cla, int instruction,
int p1, int p2, int p3, String data);
@@ -829,6 +850,7 @@
*
* @return true on enabled
*/
+ @UnsupportedAppUsage
boolean getDataEnabled(int subId);
/**
@@ -1679,7 +1701,7 @@
/**
* Modify the user's setting for whether or not 4G LTE is enabled.
*/
- void setAdvancedCallingSetting(int subId, boolean isEnabled);
+ void setAdvancedCallingSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for VT is enabled for the subscription.
@@ -1689,7 +1711,7 @@
/**
* Modify the user's setting for whether or not VT is available for the subscrption specified.
*/
- void setVtSetting(int subId, boolean isEnabled);
+ void setVtSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for whether or not Voice over WiFi is currently enabled.
@@ -1699,7 +1721,7 @@
/**
* sets the user's setting for Voice over WiFi enabled state.
*/
- void setVoWiFiSetting(int subId, boolean isEnabled);
+ void setVoWiFiSettingEnabled(int subId, boolean isEnabled);
/**
* return true if the user's setting for Voice over WiFi while roaming is enabled.
@@ -1710,7 +1732,7 @@
* Sets the user's preference for whether or not Voice over WiFi is enabled for the current
* subscription while roaming.
*/
- void setVoWiFiRoamingSetting(int subId, boolean isEnabled);
+ void setVoWiFiRoamingSettingEnabled(int subId, boolean isEnabled);
/**
* Set the Voice over WiFi enabled state, but do not persist the setting.
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 6de608e..0610c5d 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -38,9 +38,11 @@
IOnSubscriptionsChangedListener callback);
void removeOnSubscriptionsChangedListener(String pkg,
IOnSubscriptionsChangedListener callback);
+ @UnsupportedAppUsage
void listen(String pkg, IPhoneStateListener callback, int events, boolean notifyNow);
void listenForSubscriber(in int subId, String pkg, IPhoneStateListener callback, int events,
boolean notifyNow);
+ @UnsupportedAppUsage
void notifyCallState(int state, String incomingNumber);
void notifyCallStateForPhoneId(in int phoneId, in int subId, int state, String incomingNumber);
void notifyServiceStateForPhoneId(in int phoneId, in int subId, in ServiceState state);
@@ -57,11 +59,13 @@
void notifyDataConnectionForSubscriber(int subId, int state, boolean isDataConnectivityPossible,
String apn, String apnType, in LinkProperties linkProperties,
in NetworkCapabilities networkCapabilities, int networkType, boolean roaming);
+ @UnsupportedAppUsage
void notifyDataConnectionFailed(String apnType);
void notifyDataConnectionFailedForSubscriber(int subId, String apnType);
void notifyCellLocation(in Bundle cellLocation);
void notifyCellLocationForSubscriber(in int subId, in Bundle cellLocation);
void notifyOtaspChanged(in int otaspMode);
+ @UnsupportedAppUsage
void notifyCellInfo(in List<CellInfo> cellInfo);
void notifyPhysicalChannelConfiguration(in List<PhysicalChannelConfig> configs);
void notifyPhysicalChannelConfigurationForSubscriber(in int subId,
diff --git a/telephony/java/com/android/internal/telephony/IWapPushManager.aidl b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl
index d5ecb94..1c3df65 100644
--- a/telephony/java/com/android/internal/telephony/IWapPushManager.aidl
+++ b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl
@@ -30,6 +30,7 @@
* Returns true if inserting the information is successfull. Inserting the duplicated
* record in the application ID table is not allowed. Use update/delete method.
*/
+ @UnsupportedAppUsage
boolean addPackage(String x_app_id, String content_type,
String package_name, String class_name,
int app_type, boolean need_signature, boolean further_processing);
@@ -38,6 +39,7 @@
* Updates receiver application that is last added.
* Returns true if updating the information is successfull.
*/
+ @UnsupportedAppUsage
boolean updatePackage(String x_app_id, String content_type,
String package_name, String class_name,
int app_type, boolean need_signature, boolean further_processing);
@@ -46,6 +48,7 @@
* Delites receiver application information.
* Returns true if deleting is successfull.
*/
+ @UnsupportedAppUsage
boolean deletePackage(String x_app_id, String content_type,
String package_name, String class_name);
}
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 77b7979..5205973 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -470,6 +470,7 @@
int RIL_REQUEST_START_KEEPALIVE = 144;
int RIL_REQUEST_STOP_KEEPALIVE = 145;
int RIL_REQUEST_ENABLE_MODEM = 146;
+ int RIL_REQUEST_GET_MODEM_STATUS = 147;
/* The following requests are not defined in RIL.h */
int RIL_REQUEST_HAL_NON_RIL_BASE = 200;
diff --git a/test-base/hiddenapi/Android.bp b/test-base/hiddenapi/Android.bp
new file mode 100644
index 0000000..c4e0fab
--- /dev/null
+++ b/test-base/hiddenapi/Android.bp
@@ -0,0 +1,29 @@
+//
+// 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.
+//
+
+// Provided solely to contribute information about which hidden parts of the android.test.base
+// library are used by apps. The source files are stubs of the actual files in ../src which use the
+// UnsupportedAppUsage annotation to tag those methods that are accessible via the hiddenapi.
+// Relies on the convention that modules with name <x>-hiddenapi provide hiddenapi information for
+// module <x> that is on the bootclasspath.
+java_library {
+ name: "android.test.base-hiddenapi",
+ compile_dex: true,
+
+ srcs: ["src/**/*.java"],
+
+ libs: ["android.test.base"],
+}
diff --git a/test-base/hiddenapi/src/android/test/AndroidTestCase.java b/test-base/hiddenapi/src/android/test/AndroidTestCase.java
new file mode 100644
index 0000000..2b9beb1
--- /dev/null
+++ b/test-base/hiddenapi/src/android/test/AndroidTestCase.java
@@ -0,0 +1,46 @@
+/*
+ * 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.test;
+
+import android.annotation.UnsupportedAppUsage;
+import android.content.Context;
+
+import junit.framework.TestCase;
+
+/**
+ * @deprecated Stub only
+ */
+@SuppressWarnings({ "unchecked", "deprecation", "all" })
+@Deprecated
+public class AndroidTestCase extends TestCase {
+
+ /**
+ * Stub only
+ */
+ @UnsupportedAppUsage
+ public void setTestContext(Context context) {
+ throw new RuntimeException("Stub!");
+ }
+
+ /**
+ * Stub only
+ */
+ @UnsupportedAppUsage
+ public Context getTestContext() {
+ throw new RuntimeException("Stub!");
+ }
+}
diff --git a/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java
new file mode 100644
index 0000000..139cd18
--- /dev/null
+++ b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java
@@ -0,0 +1,39 @@
+/*
+ * 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.test;
+
+import android.annotation.UnsupportedAppUsage;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Method;
+
+/**
+ * @deprecated Stub only
+ */
+@SuppressWarnings({ "unchecked", "deprecation", "all" })
+@Deprecated
+public class InstrumentationTestCase extends TestCase {
+
+ /**
+ * Stub only
+ */
+ @UnsupportedAppUsage
+ private void runMethod(Method runMethod, int tolerance) throws Throwable {
+ throw new RuntimeException("Stub!");
+ }
+}
diff --git a/test-base/hiddenapi/src/junit/framework/TestCase.java b/test-base/hiddenapi/src/junit/framework/TestCase.java
new file mode 100644
index 0000000..5a54861
--- /dev/null
+++ b/test-base/hiddenapi/src/junit/framework/TestCase.java
@@ -0,0 +1,46 @@
+/*
+ * 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 junit.framework;
+
+import android.annotation.UnsupportedAppUsage;
+
+/**
+ * Stub only
+ */
+@SuppressWarnings({ "unchecked", "deprecation", "all" })
+public abstract class TestCase extends Assert implements Test {
+
+ /**
+ * the name of the test case
+ */
+ @UnsupportedAppUsage
+ private String fName;
+
+ /**
+ * Stub only
+ */
+ public int countTestCases() {
+ throw new RuntimeException("Stub!");
+ }
+
+ /**
+ * Stub only
+ */
+ public void run(TestResult result) {
+ throw new RuntimeException("Stub!");
+ }
+}
diff --git a/test-base/hiddenapi/src/junit/framework/TestSuite.java b/test-base/hiddenapi/src/junit/framework/TestSuite.java
new file mode 100644
index 0000000..368c661
--- /dev/null
+++ b/test-base/hiddenapi/src/junit/framework/TestSuite.java
@@ -0,0 +1,58 @@
+/*
+ * 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 junit.framework;
+
+import android.annotation.UnsupportedAppUsage;
+
+import java.lang.reflect.Method;
+
+/**
+ * Stub only
+ */
+@SuppressWarnings({ "unchecked", "deprecation", "all" })
+public class TestSuite implements Test {
+
+ /**
+ * Stub only
+ */
+ @UnsupportedAppUsage
+ private boolean isPublicTestMethod(Method m) {
+ throw new RuntimeException("Stub!");
+ }
+
+ /**
+ * Stub only
+ */
+ @UnsupportedAppUsage
+ private boolean isTestMethod(Method m) {
+ throw new RuntimeException("Stub!");
+ }
+
+ /**
+ * Stub only
+ */
+ public int countTestCases() {
+ throw new RuntimeException("Stub!");
+ }
+
+ /**
+ * Stub only
+ */
+ public void run(TestResult result) {
+ throw new RuntimeException("Stub!");
+ }
+}
diff --git a/tests/DynamicCodeLoggerIntegrationTests/src/com/android/server/pm/dex/DynamicCodeLoggerIntegrationTests.java b/tests/DynamicCodeLoggerIntegrationTests/src/com/android/server/pm/dex/DynamicCodeLoggerIntegrationTests.java
index 8ef15d8..4f9aeea 100644
--- a/tests/DynamicCodeLoggerIntegrationTests/src/com/android/server/pm/dex/DynamicCodeLoggerIntegrationTests.java
+++ b/tests/DynamicCodeLoggerIntegrationTests/src/com/android/server/pm/dex/DynamicCodeLoggerIntegrationTests.java
@@ -235,6 +235,34 @@
}
@Test
+ public void testGeneratesEvents_spoofed_validFile_untrustedApp() throws Exception {
+ File privateCopyFile = privateFile("spoofed2");
+
+ String expectedContentHash = copyAndHashResource(
+ "/DynamicCodeLoggerNativeExecutable", privateCopyFile);
+
+ EventLog.writeEvent(EventLog.getTagCode("auditd"),
+ "type=1400 avc: granted { execute_no_trans } "
+ + "path=\"" + privateCopyFile + "\" "
+ + "scontext=u:r:untrusted_app: "
+ + "tcontext=u:object_r:app_data_file: "
+ + "tclass=file ");
+
+ String expectedNameHash =
+ "3E57AA59249154C391316FDCF07C1D499C26A564E4D305833CCD9A98ED895AC9";
+
+ // Run the job to scan generated audit log entries
+ runDynamicCodeLoggingJob(AUDIT_WATCHING_JOB_ID);
+
+ // And then make sure we log events about it
+ long previousEventNanos = mostRecentEventTimeNanos();
+ runDynamicCodeLoggingJob(IDLE_LOGGING_JOB_ID);
+
+ assertDclLoggedSince(previousEventNanos, DCL_NATIVE_SUBTAG,
+ expectedNameHash, expectedContentHash);
+ }
+
+ @Test
public void testGeneratesEvents_spoofed_pathTraversal() throws Exception {
File privateDir = privateFile("x").getParentFile();
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
index 316aad3..818d899 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PositionListenerActivity.java
@@ -53,7 +53,7 @@
MyPositionReporter(Context c) {
super(c);
mNode = new RenderNode("positionListener");
- mNode.requestPositionUpdates(this);
+ mNode.addPositionUpdateListener(this);
setTextAlignment(TEXT_ALIGNMENT_VIEW_START);
}
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java
index 7be83ed..a6054e8 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java
@@ -19,19 +19,17 @@
import static com.android.tests.rollback.RollbackTestUtils.assertPackageRollbackInfoEquals;
import static com.android.tests.rollback.RollbackTestUtils.assertRollbackInfoEquals;
import static com.android.tests.rollback.RollbackTestUtils.getUniqueRollbackInfoForPackage;
+import static com.android.tests.rollback.RollbackTestUtils.processUserData;
import android.Manifest;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.VersionedPackage;
import android.content.rollback.RollbackInfo;
import android.content.rollback.RollbackManager;
-import android.os.Handler;
-import android.os.HandlerThread;
import android.provider.DeviceConfig;
import android.support.test.InstrumentationRegistry;
import android.util.Log;
@@ -47,7 +45,6 @@
import java.util.Collections;
import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
@@ -427,52 +424,6 @@
}
}
- private static final String NO_RESPONSE = "NO RESPONSE";
-
- // Calls into the test app to process user data.
- // Asserts if the user data could not be processed or was version
- // incompatible with the previously processed user data.
- private void processUserData(String packageName) throws Exception {
- Intent intent = new Intent();
- intent.setComponent(new ComponentName(packageName,
- "com.android.tests.rollback.testapp.ProcessUserData"));
- Context context = InstrumentationRegistry.getContext();
-
- HandlerThread handlerThread = new HandlerThread("RollbackTestHandlerThread");
- handlerThread.start();
-
- // It can sometimes take a while after rollback before the app will
- // receive this broadcast, so try a few times in a loop.
- String result = NO_RESPONSE;
- for (int i = 0; result.equals(NO_RESPONSE) && i < 5; ++i) {
- BlockingQueue<String> resultQueue = new LinkedBlockingQueue<>();
- context.sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (getResultCode() == 1) {
- resultQueue.add("OK");
- } else {
- // If the test app doesn't receive the broadcast or
- // fails to set the result data, then getResultData
- // here returns the initial NO_RESPONSE data passed to
- // the sendOrderedBroadcast call.
- resultQueue.add(getResultData());
- }
- }
- }, new Handler(handlerThread.getLooper()), 0, NO_RESPONSE, null);
-
- result = resultQueue.poll(10, TimeUnit.SECONDS);
- if (result == null) {
- result = "ProcessUserData broadcast timed out";
- }
- }
-
- handlerThread.quit();
- if (!"OK".equals(result)) {
- fail(result);
- }
- }
-
/**
* Test that app user data is rolled back.
*/
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTestUtils.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTestUtils.java
index f28714c..2f989f3 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTestUtils.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTestUtils.java
@@ -17,6 +17,7 @@
package com.android.tests.rollback;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -27,12 +28,15 @@
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.RollbackInfo;
import android.content.rollback.RollbackManager;
+import android.os.Handler;
+import android.os.HandlerThread;
import android.support.test.InstrumentationRegistry;
import android.util.Log;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
@@ -393,4 +397,53 @@
throw new AssertionError(e);
}
}
+
+ private static final String NO_RESPONSE = "NO RESPONSE";
+
+ /**
+ * Calls into the test app to process user data.
+ * Asserts if the user data could not be processed or was version
+ * incompatible with the previously processed user data.
+ */
+ static void processUserData(String packageName) {
+ Intent intent = new Intent();
+ intent.setComponent(new ComponentName(packageName,
+ "com.android.tests.rollback.testapp.ProcessUserData"));
+ Context context = InstrumentationRegistry.getContext();
+
+ HandlerThread handlerThread = new HandlerThread("RollbackTestHandlerThread");
+ handlerThread.start();
+
+ // It can sometimes take a while after rollback before the app will
+ // receive this broadcast, so try a few times in a loop.
+ String result = NO_RESPONSE;
+ for (int i = 0; result.equals(NO_RESPONSE) && i < 5; ++i) {
+ BlockingQueue<String> resultQueue = new LinkedBlockingQueue<>();
+ context.sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (getResultCode() == 1) {
+ resultQueue.add("OK");
+ } else {
+ // If the test app doesn't receive the broadcast or
+ // fails to set the result data, then getResultData
+ // here returns the initial NO_RESPONSE data passed to
+ // the sendOrderedBroadcast call.
+ resultQueue.add(getResultData());
+ }
+ }
+ }, new Handler(handlerThread.getLooper()), 0, NO_RESPONSE, null);
+
+ try {
+ result = resultQueue.take();
+ } catch (InterruptedException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ handlerThread.quit();
+ if (!"OK".equals(result)) {
+ fail(result);
+ }
+ }
}
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
index b65917b..59ae8d9 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
@@ -84,6 +84,7 @@
RollbackTestUtils.install("RollbackTestAppAv1.apk", false);
assertEquals(1, RollbackTestUtils.getInstalledVersion(TEST_APP_A));
+ RollbackTestUtils.processUserData(TEST_APP_A);
RollbackTestUtils.installStaged(true, "RollbackTestAppAv2.apk");
@@ -98,6 +99,7 @@
@Test
public void testApkOnlyCommitRollback() throws Exception {
assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_A));
+ RollbackTestUtils.processUserData(TEST_APP_A);
RollbackManager rm = RollbackTestUtils.getRollbackManager();
RollbackInfo rollback = getUniqueRollbackInfoForPackage(
@@ -129,6 +131,7 @@
@Test
public void testApkOnlyConfirmRollback() throws Exception {
assertEquals(1, RollbackTestUtils.getInstalledVersion(TEST_APP_A));
+ RollbackTestUtils.processUserData(TEST_APP_A);
RollbackManager rm = RollbackTestUtils.getRollbackManager();
RollbackInfo rollback = getUniqueRollbackInfoForPackage(
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index ed524f6..1a0e8fa 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -17,10 +17,10 @@
package com.android.server;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
+import static android.net.ConnectivityManager.NETID_UNSET;
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
-import static android.net.ConnectivityManager.NETID_UNSET;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_MOBILE_FOTA;
@@ -125,6 +125,7 @@
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
import android.net.NetworkStackClient;
+import android.net.NetworkState;
import android.net.NetworkUtils;
import android.net.ProxyInfo;
import android.net.RouteInfo;
@@ -157,6 +158,7 @@
import android.util.SparseArray;
import com.android.internal.net.VpnConfig;
+import com.android.internal.net.VpnInfo;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.WakeupMessage;
import com.android.internal.util.test.BroadcastInterceptingContext;
@@ -1828,6 +1830,12 @@
fn.test((NetworkCapabilities) cbi.arg));
}
+ void expectLinkPropertiesLike(Predicate<LinkProperties> fn, MockNetworkAgent agent) {
+ CallbackInfo cbi = expectCallback(CallbackState.LINK_PROPERTIES, agent);
+ assertTrue("Received LinkProperties don't match expectations : " + cbi.arg,
+ fn.test((LinkProperties) cbi.arg));
+ }
+
void expectBlockedStatusCallback(boolean expectBlocked, MockNetworkAgent agent) {
CallbackInfo cbi = expectCallback(CallbackState.BLOCKED_STATUS, agent);
boolean actualBlocked = (boolean) cbi.arg;
@@ -4356,48 +4364,91 @@
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
- Network[] onlyCell = new Network[]{mCellNetworkAgent.getNetwork()};
- Network[] onlyWifi = new Network[]{mWiFiNetworkAgent.getNetwork()};
+ Network[] onlyCell = new Network[] {mCellNetworkAgent.getNetwork()};
+ Network[] onlyWifi = new Network[] {mWiFiNetworkAgent.getNetwork()};
+
+ LinkProperties cellLp = new LinkProperties();
+ cellLp.setInterfaceName(MOBILE_IFNAME);
+ LinkProperties wifiLp = new LinkProperties();
+ wifiLp.setInterfaceName(WIFI_IFNAME);
// Simple connection should have updated ifaces
mCellNetworkAgent.connect(false);
+ mCellNetworkAgent.sendLinkProperties(cellLp);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Default network switch should update ifaces.
mWiFiNetworkAgent.connect(false);
+ mWiFiNetworkAgent.sendLinkProperties(wifiLp);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyWifi);
+ assertEquals(wifiLp, mService.getActiveLinkProperties());
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyWifi),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(WIFI_IFNAME));
reset(mStatsService);
// Disconnect should update ifaces.
mWiFiNetworkAgent.disconnect();
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Metered change should update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
mCellNetworkAgent.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Captive portal change shouldn't update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
waitForIdle();
- verify(mStatsService, never()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, never())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
// Roaming change should update ifaces
mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
waitForIdle();
- verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell);
+ verify(mStatsService, atLeastOnce())
+ .forceUpdateIfaces(
+ eq(onlyCell),
+ eq(new VpnInfo[0]),
+ any(NetworkState[].class),
+ eq(MOBILE_IFNAME));
reset(mStatsService);
}
@@ -5176,6 +5227,9 @@
public void testStackedLinkProperties() throws UnknownHostException, RemoteException {
final LinkAddress myIpv4 = new LinkAddress("1.2.3.4/24");
final LinkAddress myIpv6 = new LinkAddress("2001:db8:1::1/64");
+ final String kNat64PrefixString = "2001:db8:64:64:64:64::";
+ final IpPrefix kNat64Prefix = new IpPrefix(InetAddress.getByName(kNat64PrefixString), 96);
+
final NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_INTERNET)
@@ -5183,8 +5237,9 @@
final TestNetworkCallback networkCallback = new TestNetworkCallback();
mCm.registerNetworkCallback(networkRequest, networkCallback);
- // Prepare ipv6 only link properties and connect.
+ // Prepare ipv6 only link properties.
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
+ final int cellNetId = mCellNetworkAgent.getNetwork().netId;
final LinkProperties cellLp = new LinkProperties();
cellLp.setInterfaceName(MOBILE_IFNAME);
cellLp.addLinkAddress(myIpv6);
@@ -5194,15 +5249,44 @@
when(mNetworkManagementService.getInterfaceConfig(CLAT_PREFIX + MOBILE_IFNAME))
.thenReturn(getClatInterfaceConfig(myIpv4));
- // Connect with ipv6 link properties, then expect clat setup ipv4 and update link
- // properties properly.
+ // Connect with ipv6 link properties. Expect prefix discovery to be started.
mCellNetworkAgent.sendLinkProperties(cellLp);
mCellNetworkAgent.connect(true);
networkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
- verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME);
- Nat464Xlat clat = mService.getNat464Xlat(mCellNetworkAgent);
+ verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
- // Clat iface up, expect stack link updated.
+ // Switching default network updates TCP buffer sizes.
+ verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);
+
+ // Add an IPv4 address. Expect prefix discovery to be stopped. Netd doesn't tell us that
+ // the NAT64 prefix was removed because one was never discovered.
+ cellLp.addLinkAddress(myIpv4);
+ mCellNetworkAgent.sendLinkProperties(cellLp);
+ networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
+ verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId);
+
+ verifyNoMoreInteractions(mMockNetd);
+ reset(mMockNetd);
+
+ // Remove IPv4 address. Expect prefix discovery to be started again.
+ cellLp.removeLinkAddress(myIpv4);
+ cellLp.removeRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME));
+ mCellNetworkAgent.sendLinkProperties(cellLp);
+ networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
+ verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
+
+ // When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started.
+ Nat464Xlat clat = mService.getNat464Xlat(mCellNetworkAgent);
+ assertNull(mCm.getLinkProperties(mCellNetworkAgent.getNetwork()).getNat64Prefix());
+ mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
+ kNat64PrefixString, 96);
+ LinkProperties lpBeforeClat = (LinkProperties) networkCallback.expectCallback(
+ CallbackState.LINK_PROPERTIES, mCellNetworkAgent).arg;
+ assertEquals(0, lpBeforeClat.getStackedLinks().size());
+ assertEquals(kNat64Prefix, lpBeforeClat.getNat64Prefix());
+ verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME, kNat64Prefix.toString());
+
+ // Clat iface comes up. Expect stacked link to be added.
clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true);
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
List<LinkProperties> stackedLps = mCm.getLinkProperties(mCellNetworkAgent.getNetwork())
@@ -5219,20 +5303,66 @@
assertNotEquals(stackedLpsAfterChange, Collections.EMPTY_LIST);
assertEquals(makeClatLinkProperties(myIpv4), stackedLpsAfterChange.get(0));
- // Add ipv4 address, expect stacked linkproperties be cleaned up
+ // Add ipv4 address, expect that clatd and prefix discovery are stopped and stacked
+ // linkproperties are cleaned up.
cellLp.addLinkAddress(myIpv4);
cellLp.addRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME));
mCellNetworkAgent.sendLinkProperties(cellLp);
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
+ verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId);
- // Clat iface removed, expect linkproperties revert to original one
- clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME);
+ // As soon as stop is called, the linkproperties lose the stacked interface.
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
LinkProperties actualLpAfterIpv4 = mCm.getLinkProperties(mCellNetworkAgent.getNetwork());
- assertEquals(cellLp, actualLpAfterIpv4);
+ LinkProperties expected = new LinkProperties(cellLp);
+ expected.setNat64Prefix(kNat64Prefix);
+ assertEquals(expected, actualLpAfterIpv4);
+ assertEquals(0, actualLpAfterIpv4.getStackedLinks().size());
- // Clean up
+ // The interface removed callback happens but has no effect after stop is called.
+ clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME);
+ networkCallback.assertNoCallback();
+
+ verifyNoMoreInteractions(mMockNetd);
+ reset(mMockNetd);
+
+ // Stopping prefix discovery causes netd to tell us that the NAT64 prefix is gone.
+ mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
+ kNat64PrefixString, 96);
+ networkCallback.expectLinkPropertiesLike((lp) -> lp.getNat64Prefix() == null,
+ mCellNetworkAgent);
+
+ // Remove IPv4 address and expect prefix discovery and clatd to be started again.
+ cellLp.removeLinkAddress(myIpv4);
+ cellLp.removeRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME));
+ cellLp.removeDnsServer(InetAddress.getByName("8.8.8.8"));
+ mCellNetworkAgent.sendLinkProperties(cellLp);
+ networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
+ verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
+ mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
+ kNat64PrefixString, 96);
+ networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
+ verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME, kNat64Prefix.toString());
+
+
+ // Clat iface comes up. Expect stacked link to be added.
+ clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true);
+ networkCallback.expectLinkPropertiesLike(
+ (lp) -> lp.getStackedLinks().size() == 1 && lp.getNat64Prefix() != null,
+ mCellNetworkAgent);
+
+ // NAT64 prefix is removed. Expect that clat is stopped.
+ mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
+ kNat64PrefixString, 96);
+ networkCallback.expectLinkPropertiesLike(
+ (lp) -> lp.getStackedLinks().size() == 0 && lp.getNat64Prefix() == null,
+ mCellNetworkAgent);
+ verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
+ networkCallback.expectLinkPropertiesLike((lp) -> lp.getStackedLinks().size() == 0,
+ mCellNetworkAgent);
+
+ // Clean up.
mCellNetworkAgent.disconnect();
networkCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
networkCallback.assertNoCallback();
@@ -5313,30 +5443,34 @@
mCm.unregisterNetworkCallback(networkCallback);
}
- private static final String TEST_TCP_BUFFER_SIZES = "1,2,3,4,5,6";
-
- private void verifyTcpBufferSizeChange(String tcpBufferSizes) throws Exception {
+ private void verifyTcpBufferSizeChange(String tcpBufferSizes) {
String[] values = tcpBufferSizes.split(",");
String rmemValues = String.join(" ", values[0], values[1], values[2]);
String wmemValues = String.join(" ", values[3], values[4], values[5]);
waitForIdle();
- verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues);
+ try {
+ verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues);
+ } catch (RemoteException e) {
+ fail("mMockNetd should never throw RemoteException");
+ }
reset(mMockNetd);
}
@Test
- public void testTcpBufferReset() throws Exception {
+ public void testTcpBufferReset() {
+ final String testTcpBufferSizes = "1,2,3,4,5,6";
+
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
reset(mMockNetd);
- // Simple connection should have updated tcp buffer size.
+ // Switching default network updates TCP buffer sizes.
mCellNetworkAgent.connect(false);
verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);
// Change link Properties should have updated tcp buffer size.
LinkProperties lp = new LinkProperties();
- lp.setTcpBufferSizes(TEST_TCP_BUFFER_SIZES);
+ lp.setTcpBufferSizes(testTcpBufferSizes);
mCellNetworkAgent.sendLinkProperties(lp);
- verifyTcpBufferSizeChange(TEST_TCP_BUFFER_SIZES);
+ verifyTcpBufferSizeChange(testTcpBufferSizes);
}
@Test
diff --git a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java
index 07b1d05..37c0df8 100644
--- a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java
+++ b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java
@@ -16,9 +16,11 @@
package com.android.server.connectivity;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -27,6 +29,7 @@
import android.net.ConnectivityManager;
import android.net.INetd;
import android.net.InterfaceConfiguration;
+import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkInfo;
@@ -43,6 +46,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -53,6 +57,8 @@
static final String BASE_IFACE = "test0";
static final String STACKED_IFACE = "v4-test0";
static final LinkAddress ADDR = new LinkAddress("192.0.2.5/29");
+ static final String NAT64_PREFIX = "64:ff9b::/96";
+ static final int NETID = 42;
@Mock ConnectivityService mConnectivity;
@Mock NetworkMisc mMisc;
@@ -65,7 +71,11 @@
Handler mHandler;
Nat464Xlat makeNat464Xlat() {
- return new Nat464Xlat(mNai, mNetd, mNms);
+ return new Nat464Xlat(mNai, mNetd, mNms) {
+ @Override protected int getNetId() {
+ return NETID;
+ }
+ };
}
@Before
@@ -87,6 +97,24 @@
when(mConfig.getLinkAddress()).thenReturn(ADDR);
}
+ private void assertRequiresClat(boolean expected, NetworkAgentInfo nai) {
+ String msg = String.format("requiresClat expected %b for type=%d state=%s skip=%b "
+ + "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(),
+ nai.networkInfo.getDetailedState(),
+ mMisc.skip464xlat, nai.linkProperties.getNat64Prefix(),
+ nai.linkProperties.getLinkAddresses());
+ assertEquals(msg, expected, Nat464Xlat.requiresClat(nai));
+ }
+
+ private void assertShouldStartClat(boolean expected, NetworkAgentInfo nai) {
+ String msg = String.format("shouldStartClat expected %b for type=%d state=%s skip=%b "
+ + "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(),
+ nai.networkInfo.getDetailedState(),
+ mMisc.skip464xlat, nai.linkProperties.getNat64Prefix(),
+ nai.linkProperties.getLinkAddresses());
+ assertEquals(msg, expected, Nat464Xlat.shouldStartClat(nai));
+ }
+
@Test
public void testRequiresClat() throws Exception {
final int[] supportedTypes = {
@@ -102,20 +130,45 @@
NetworkInfo.DetailedState.SUSPENDED,
};
+ LinkProperties oldLp = new LinkProperties(mNai.linkProperties);
for (int type : supportedTypes) {
mNai.networkInfo.setType(type);
for (NetworkInfo.DetailedState state : supportedDetailedStates) {
mNai.networkInfo.setDetailedState(state, "reason", "extraInfo");
- String msg = String.format("requiresClat expected for type=%d state=%s",
- type, state);
+
+ mNai.linkProperties.setNat64Prefix(new IpPrefix("2001:db8:0:64::/96"));
+ assertRequiresClat(false, mNai);
+ assertShouldStartClat(false, mNai);
+
+ mNai.linkProperties.addLinkAddress(new LinkAddress("fc00::1/64"));
+ assertRequiresClat(false, mNai);
+ assertShouldStartClat(false, mNai);
+
+ mNai.linkProperties.addLinkAddress(new LinkAddress("2001:db8::1/64"));
+ assertRequiresClat(true, mNai);
+ assertShouldStartClat(true, mNai);
mMisc.skip464xlat = true;
- String errorMsg = msg + String.format(" skip464xlat=%b", mMisc.skip464xlat);
- assertFalse(errorMsg, Nat464Xlat.requiresClat(mNai));
+ assertRequiresClat(false, mNai);
+ assertShouldStartClat(false, mNai);
mMisc.skip464xlat = false;
- errorMsg = msg + String.format(" skip464xlat=%b", mMisc.skip464xlat);
- assertTrue(errorMsg, Nat464Xlat.requiresClat(mNai));
+ assertRequiresClat(true, mNai);
+ assertShouldStartClat(true, mNai);
+
+ mNai.linkProperties.addLinkAddress(new LinkAddress("192.0.2.2/24"));
+ assertRequiresClat(false, mNai);
+ assertShouldStartClat(false, mNai);
+
+ mNai.linkProperties.removeLinkAddress(new LinkAddress("192.0.2.2/24"));
+ assertRequiresClat(true, mNai);
+ assertShouldStartClat(true, mNai);
+
+ mNai.linkProperties.setNat64Prefix(null);
+ assertRequiresClat(true, mNai);
+ assertShouldStartClat(false, mNai);
+
+ mNai.linkProperties = new LinkProperties(oldLp);
}
}
}
@@ -125,11 +178,13 @@
Nat464Xlat nat = makeNat464Xlat();
ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
- // ConnectivityService starts clat.
+ nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX));
+
+ // Start clat.
nat.start();
verify(mNms).registerObserver(eq(nat));
- verify(mNetd).clatdStart(eq(BASE_IFACE));
+ verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// Stacked interface up notification arrives.
nat.interfaceLinkStateChanged(STACKED_IFACE, true);
@@ -141,22 +196,109 @@
assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
assertRunning(nat);
- // ConnectivityService stops clat (Network disconnects, IPv4 addr appears, ...).
+ // Stop clat (Network disconnects, IPv4 addr appears, ...).
nat.stop();
verify(mNetd).clatdStop(eq(BASE_IFACE));
+ verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
+ verify(mNms).unregisterObserver(eq(nat));
+ assertTrue(c.getValue().getStackedLinks().isEmpty());
+ assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+ verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
+ assertIdle(nat);
- // Stacked interface removed notification arrives.
+ // Stacked interface removed notification arrives and is ignored.
nat.interfaceRemoved(STACKED_IFACE);
mLooper.dispatchNext();
- verify(mNms).unregisterObserver(eq(nat));
- verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
+ verifyNoMoreInteractions(mNetd, mNms, mConnectivity);
+ }
+
+ private void checkStartStopStart(boolean interfaceRemovedFirst) throws Exception {
+ Nat464Xlat nat = makeNat464Xlat();
+ ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
+ InOrder inOrder = inOrder(mNetd, mConnectivity);
+
+ nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX));
+
+ nat.start();
+
+ inOrder.verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
+
+ // Stacked interface up notification arrives.
+ nat.interfaceLinkStateChanged(STACKED_IFACE, true);
+ mLooper.dispatchNext();
+
+ inOrder.verify(mConnectivity).handleUpdateLinkProperties(eq(mNai), c.capture());
+ assertFalse(c.getValue().getStackedLinks().isEmpty());
+ assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+ assertRunning(nat);
+
+ // ConnectivityService stops clat (Network disconnects, IPv4 addr appears, ...).
+ nat.stop();
+
+ inOrder.verify(mNetd).clatdStop(eq(BASE_IFACE));
+
+ inOrder.verify(mConnectivity, times(1)).handleUpdateLinkProperties(eq(mNai), c.capture());
assertTrue(c.getValue().getStackedLinks().isEmpty());
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
assertIdle(nat);
- verifyNoMoreInteractions(mNetd, mNms, mConnectivity);
+ if (interfaceRemovedFirst) {
+ // Stacked interface removed notification arrives and is ignored.
+ nat.interfaceRemoved(STACKED_IFACE);
+ mLooper.dispatchNext();
+ nat.interfaceLinkStateChanged(STACKED_IFACE, false);
+ mLooper.dispatchNext();
+ }
+
+ assertTrue(c.getValue().getStackedLinks().isEmpty());
+ assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+ assertIdle(nat);
+ inOrder.verifyNoMoreInteractions();
+
+ nat.start();
+
+ inOrder.verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
+
+ if (!interfaceRemovedFirst) {
+ // Stacked interface removed notification arrives and is ignored.
+ nat.interfaceRemoved(STACKED_IFACE);
+ mLooper.dispatchNext();
+ nat.interfaceLinkStateChanged(STACKED_IFACE, false);
+ mLooper.dispatchNext();
+ }
+
+ // Stacked interface up notification arrives.
+ nat.interfaceLinkStateChanged(STACKED_IFACE, true);
+ mLooper.dispatchNext();
+
+ inOrder.verify(mConnectivity).handleUpdateLinkProperties(eq(mNai), c.capture());
+ assertFalse(c.getValue().getStackedLinks().isEmpty());
+ assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+ assertRunning(nat);
+
+ // ConnectivityService stops clat again.
+ nat.stop();
+
+ inOrder.verify(mNetd).clatdStop(eq(BASE_IFACE));
+
+ inOrder.verify(mConnectivity, times(1)).handleUpdateLinkProperties(eq(mNai), c.capture());
+ assertTrue(c.getValue().getStackedLinks().isEmpty());
+ assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+ assertIdle(nat);
+
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ @Test
+ public void testStartStopStart() throws Exception {
+ checkStartStopStart(true);
+ }
+
+ @Test
+ public void testStartStopStartBeforeInterfaceRemoved() throws Exception {
+ checkStartStopStart(false);
}
@Test
@@ -164,11 +306,12 @@
Nat464Xlat nat = makeNat464Xlat();
ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
- // ConnectivityService starts clat.
+ nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX));
+
nat.start();
verify(mNms).registerObserver(eq(nat));
- verify(mNetd).clatdStart(eq(BASE_IFACE));
+ verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// Stacked interface up notification arrives.
nat.interfaceLinkStateChanged(STACKED_IFACE, true);
@@ -184,9 +327,10 @@
nat.interfaceRemoved(STACKED_IFACE);
mLooper.dispatchNext();
- verify(mNms).unregisterObserver(eq(nat));
verify(mNetd).clatdStop(eq(BASE_IFACE));
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
+ verify(mNms).unregisterObserver(eq(nat));
+ verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
assertTrue(c.getValue().getStackedLinks().isEmpty());
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
assertIdle(nat);
@@ -201,24 +345,25 @@
public void testStopBeforeClatdStarts() throws Exception {
Nat464Xlat nat = makeNat464Xlat();
- // ConnectivityService starts clat.
+ nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX));
+
nat.start();
verify(mNms).registerObserver(eq(nat));
- verify(mNetd).clatdStart(eq(BASE_IFACE));
+ verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
nat.stop();
- verify(mNms).unregisterObserver(eq(nat));
verify(mNetd).clatdStop(eq(BASE_IFACE));
+ verify(mNms).unregisterObserver(eq(nat));
+ verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
assertIdle(nat);
// In-flight interface up notification arrives: no-op
nat.interfaceLinkStateChanged(STACKED_IFACE, true);
mLooper.dispatchNext();
-
// Interface removed notification arrives after stopClatd() takes effect: no-op.
nat.interfaceRemoved(STACKED_IFACE);
mLooper.dispatchNext();
@@ -232,17 +377,19 @@
public void testStopAndClatdNeverStarts() throws Exception {
Nat464Xlat nat = makeNat464Xlat();
- // ConnectivityService starts clat.
+ nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX));
+
nat.start();
verify(mNms).registerObserver(eq(nat));
- verify(mNetd).clatdStart(eq(BASE_IFACE));
+ verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
nat.stop();
- verify(mNms).unregisterObserver(eq(nat));
verify(mNetd).clatdStop(eq(BASE_IFACE));
+ verify(mNms).unregisterObserver(eq(nat));
+ verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
assertIdle(nat);
verifyNoMoreInteractions(mNetd, mNms, mConnectivity);
diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
index f89f303..d91d3eb 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
@@ -70,7 +70,6 @@
import android.content.Context;
import android.content.Intent;
import android.net.DataUsageRequest;
-import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsSession;
import android.net.LinkProperties;
@@ -163,7 +162,6 @@
private @Mock INetworkManagementService mNetManager;
private @Mock NetworkStatsSettings mSettings;
- private @Mock IConnectivityManager mConnManager;
private @Mock IBinder mBinder;
private @Mock AlarmManager mAlarmManager;
private HandlerThread mHandlerThread;
@@ -205,7 +203,6 @@
Handler.Callback callback = new NetworkStatsService.HandlerCallback(mService);
mHandler = new Handler(mHandlerThread.getLooper(), callback);
mService.setHandler(mHandler, callback);
- mService.bindConnectivityManager(mConnManager);
mElapsedRealtime = 0L;
@@ -234,7 +231,6 @@
mNetManager = null;
mSettings = null;
- mConnManager = null;
mSession.close();
mService = null;
@@ -245,12 +241,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -289,12 +285,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -363,12 +359,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// modify some number on wifi, and trigger poll event
@@ -405,12 +401,12 @@
public void testUidStatsAcrossNetworks() throws Exception {
// pretend first mobile network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some traffic on first network
@@ -437,7 +433,7 @@
// disappearing, to verify we don't count backwards.
incrementCurrentTime(HOUR_IN_MILLIS);
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_2));
+ states = new NetworkState[] {buildMobile3gState(IMSI_2)};
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
.addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3)
@@ -446,7 +442,7 @@
.addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
forcePollAndWaitForIdle();
@@ -481,12 +477,12 @@
public void testUidRemovedIsMoved() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some traffic
@@ -540,12 +536,12 @@
public void testUid3g4gCombinedByTemplate() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some traffic
@@ -566,14 +562,14 @@
// now switch over to 4g network
incrementCurrentTime(HOUR_IN_MILLIS);
expectDefaultSettings();
- expectNetworkState(buildMobile4gState(TEST_IFACE2));
+ states = new NetworkState[] {buildMobile4gState(TEST_IFACE2)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)
.addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
forcePollAndWaitForIdle();
@@ -598,12 +594,12 @@
public void testSummaryForAllUid() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some traffic for two apps
@@ -657,12 +653,12 @@
public void testDetailedUidStats() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
NetworkStats.Entry entry1 = new NetworkStats.Entry(
TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L);
@@ -700,13 +696,13 @@
stackedProp.setInterfaceName(stackedIface);
final NetworkState wifiState = buildWifiState();
wifiState.linkProperties.addStackedLink(stackedProp);
- expectNetworkState(wifiState);
+ NetworkState[] states = new NetworkState[] {wifiState};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
NetworkStats.Entry uidStats = new NetworkStats.Entry(
TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xF00D, 1024L, 8L, 512L, 4L, 0L);
@@ -745,12 +741,12 @@
public void testForegroundBackground() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some initial traffic
@@ -803,12 +799,12 @@
public void testMetered() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildWifiState(true /* isMetered */));
+ NetworkState[] states = new NetworkState[] {buildWifiState(true /* isMetered */)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// create some initial traffic
@@ -843,12 +839,13 @@
public void testRoaming() throws Exception {
// pretend that network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1, true /* isRoaming */));
+ NetworkState[] states =
+ new NetworkState[] {buildMobile3gState(IMSI_1, true /* isRoaming */)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// Create some traffic
@@ -882,12 +879,12 @@
public void testTethering() throws Exception {
// pretend first mobile network comes online
expectDefaultSettings();
- expectNetworkState(buildMobile3gState(IMSI_1));
+ NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_MOBILE);
+ mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));
// create some tethering traffic
@@ -925,12 +922,12 @@
// pretend that wifi network comes online; service should ask about full
// network state, and poll any existing interfaces before updating.
expectDefaultSettings();
- expectNetworkState(buildWifiState());
+ NetworkState[] states = new NetworkState[] {buildWifiState()};
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
expectBandwidthControlCheck();
- mService.forceUpdateIfaces(NETWORKS_WIFI);
+ mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));
// verify service has empty history for wifi
assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0);
@@ -1077,11 +1074,11 @@
expectBandwidthControlCheck();
}
- private void expectNetworkState(NetworkState... state) throws Exception {
- when(mConnManager.getAllNetworkState()).thenReturn(state);
-
- final LinkProperties linkProp = state.length > 0 ? state[0].linkProperties : null;
- when(mConnManager.getActiveLinkProperties()).thenReturn(linkProp);
+ private String getActiveIface(NetworkState... states) throws Exception {
+ if (states == null || states.length == 0 || states[0].linkProperties == null) {
+ return null;
+ }
+ return states[0].linkProperties.getInterfaceName();
}
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
@@ -1090,8 +1087,6 @@
private void expectNetworkStatsSummary(NetworkStats summary, NetworkStats tetherStats)
throws Exception {
- when(mConnManager.getAllVpnInfo()).thenReturn(new VpnInfo[0]);
-
expectNetworkStatsTethering(STATS_PER_IFACE, tetherStats);
expectNetworkStatsSummaryDev(summary.clone());
expectNetworkStatsSummaryXt(summary.clone());
diff --git a/tests/testables/Android.bp b/tests/testables/Android.bp
index f07f09d..0bad7a4 100644
--- a/tests/testables/Android.bp
+++ b/tests/testables/Android.bp
@@ -25,7 +25,7 @@
libs: [
"android.test.runner",
"android.test.mock",
- "android-support-test",
+ "androidx.test.rules",
"mockito-target-inline-minus-junit4",
],
diff --git a/tests/testables/src/android/testing/AndroidTestingRunner.java b/tests/testables/src/android/testing/AndroidTestingRunner.java
index cf5d4cf..0375220 100644
--- a/tests/testables/src/android/testing/AndroidTestingRunner.java
+++ b/tests/testables/src/android/testing/AndroidTestingRunner.java
@@ -14,13 +14,13 @@
package android.testing;
-import android.support.test.internal.runner.junit4.statement.RunAfters;
-import android.support.test.internal.runner.junit4.statement.RunBefores;
-import android.support.test.internal.runner.junit4.statement.UiThreadStatement;
-
import android.testing.TestableLooper.LooperFrameworkMethod;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.internal.runner.junit4.statement.RunAfters;
+import androidx.test.internal.runner.junit4.statement.RunBefores;
+import androidx.test.internal.runner.junit4.statement.UiThreadStatement;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/testables/src/android/testing/BaseFragmentTest.java b/tests/testables/src/android/testing/BaseFragmentTest.java
index d18c126..9f60cce 100644
--- a/tests/testables/src/android/testing/BaseFragmentTest.java
+++ b/tests/testables/src/android/testing/BaseFragmentTest.java
@@ -26,13 +26,14 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
-import android.support.test.InstrumentationRegistry;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.FrameLayout;
+import androidx.test.InstrumentationRegistry;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
diff --git a/tests/testables/src/android/testing/TestableInstrumentation.java b/tests/testables/src/android/testing/TestableInstrumentation.java
index c35dc68..ed867c1 100644
--- a/tests/testables/src/android/testing/TestableInstrumentation.java
+++ b/tests/testables/src/android/testing/TestableInstrumentation.java
@@ -19,9 +19,10 @@
import android.os.Looper;
import android.os.Message;
import android.os.TestLooperManager;
-import android.support.test.runner.AndroidJUnitRunner;
import android.util.Log;
+import androidx.test.runner.AndroidJUnitRunner;
+
import java.util.ArrayList;
/**
diff --git a/tests/testables/src/android/testing/TestableLooper.java b/tests/testables/src/android/testing/TestableLooper.java
index 8b4cba1..8d99ac7 100644
--- a/tests/testables/src/android/testing/TestableLooper.java
+++ b/tests/testables/src/android/testing/TestableLooper.java
@@ -20,9 +20,10 @@
import android.os.Message;
import android.os.MessageQueue;
import android.os.TestLooperManager;
-import android.support.test.InstrumentationRegistry;
import android.util.ArrayMap;
+import androidx.test.InstrumentationRegistry;
+
import org.junit.runners.model.FrameworkMethod;
import java.lang.annotation.ElementType;
diff --git a/tests/testables/src/android/testing/ViewUtils.java b/tests/testables/src/android/testing/ViewUtils.java
index 1c6016e..80c2e8d 100644
--- a/tests/testables/src/android/testing/ViewUtils.java
+++ b/tests/testables/src/android/testing/ViewUtils.java
@@ -16,7 +16,6 @@
import android.content.pm.ApplicationInfo;
import android.graphics.PixelFormat;
-import android.support.test.InstrumentationRegistry;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
diff --git a/tests/testables/tests/Android.mk b/tests/testables/tests/Android.mk
index 79469e3..16fbb18 100644
--- a/tests/testables/tests/Android.mk
+++ b/tests/testables/tests/Android.mk
@@ -27,7 +27,7 @@
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_STATIC_JAVA_LIBRARIES := \
- android-support-test \
+ androidx.test.rules hamcrest-library \
mockito-target-inline-minus-junit4 \
testables
diff --git a/tests/testables/tests/AndroidManifest.xml b/tests/testables/tests/AndroidManifest.xml
index 61f0be6..2bfb04f 100644
--- a/tests/testables/tests/AndroidManifest.xml
+++ b/tests/testables/tests/AndroidManifest.xml
@@ -25,7 +25,7 @@
<uses-library android:name="android.test.runner" />
</application>
- <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.testables"
android:label="Tests for Testables">
</instrumentation>
diff --git a/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java b/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java
index 2528d09..13addb1 100644
--- a/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java
+++ b/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java
@@ -22,8 +22,8 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/testables/tests/src/android/testing/TestableContentResolverTest.java b/tests/testables/tests/src/android/testing/TestableContentResolverTest.java
index 71afda0..f531369 100644
--- a/tests/testables/tests/src/android/testing/TestableContentResolverTest.java
+++ b/tests/testables/tests/src/android/testing/TestableContentResolverTest.java
@@ -2,8 +2,9 @@
import android.content.ContentProvider;
import android.content.IContentProvider;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
diff --git a/tests/testables/tests/src/android/testing/TestablePermissionsTest.java b/tests/testables/tests/src/android/testing/TestablePermissionsTest.java
index c56146e..4626de7 100644
--- a/tests/testables/tests/src/android/testing/TestablePermissionsTest.java
+++ b/tests/testables/tests/src/android/testing/TestablePermissionsTest.java
@@ -20,11 +20,10 @@
import static org.junit.Assert.assertEquals;
import android.Manifest.permission;
-import android.content.pm.PackageManager;
import android.net.Uri;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.testing.TestableLooper.RunWithLooper;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
import org.junit.Rule;
import org.junit.Test;
diff --git a/tests/testables/tests/src/android/testing/TestableResourcesTest.java b/tests/testables/tests/src/android/testing/TestableResourcesTest.java
index dc7cf95..dd4325c 100644
--- a/tests/testables/tests/src/android/testing/TestableResourcesTest.java
+++ b/tests/testables/tests/src/android/testing/TestableResourcesTest.java
@@ -21,9 +21,10 @@
import static org.junit.Assert.fail;
import android.content.res.Resources;
-import android.support.test.InstrumentationRegistry;
import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.InstrumentationRegistry;
+
import com.android.testables.R;
import org.junit.Rule;
diff --git a/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java b/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java
index ac61deb..0333d51 100644
--- a/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java
+++ b/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java
@@ -14,20 +14,22 @@
package android.testing;
+import static org.junit.Assert.*;
+
import android.content.ContentResolver;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.provider.Settings.Secure;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.*;
-
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TestableSettingsProviderTest {
diff --git a/tools/apilint/apilint.py b/tools/apilint/apilint.py
index 4c02d94..295e3de 100644
--- a/tools/apilint/apilint.py
+++ b/tools/apilint/apilint.py
@@ -79,6 +79,7 @@
self.value = raw[3].strip(';"')
else:
self.value = None
+ self.annotations = []
self.ident = "-".join((self.typ, self.name, self.value or ""))
@@ -88,6 +89,18 @@
def __repr__(self):
return self.raw
+
+class Argument(object):
+
+ __slots__ = ["type", "annotations", "name", "default"]
+
+ def __init__(self, type):
+ self.type = type
+ self.annotations = []
+ self.name = None
+ self.default = None
+
+
class Method():
def __init__(self, clazz, line, raw, blame, sig_format = 1):
self.clazz = clazz
@@ -118,21 +131,24 @@
self.name = raw[1]
# parse args
- self.args = []
+ self.detailed_args = []
for arg in re.split(",\s*", raw_args):
arg = re.split("\s", arg)
# ignore annotations for now
arg = [ a for a in arg if not a.startswith("@") ]
if len(arg[0]) > 0:
- self.args.append(arg[0])
+ self.detailed_args.append(Argument(arg[0]))
# parse throws
self.throws = []
for throw in re.split(",\s*", raw_throws):
self.throws.append(throw)
+
+ self.annotations = []
else:
raise ValueError("Unknown signature format: " + sig_format)
+ self.args = map(lambda a: a.type, self.detailed_args)
self.ident = "-".join((self.typ, self.name, "-".join(self.args)))
def sig_matches(self, typ, name, args):
@@ -312,10 +328,10 @@
method.split = []
kind = self.parse_one_of("ctor", "method")
method.split.append(kind)
- annotations = self.parse_annotations()
+ method.annotations = self.parse_annotations()
method.split.extend(self.parse_modifiers())
self.parse_matching_paren("<", ">")
- if "@Deprecated" in annotations:
+ if "@Deprecated" in method.annotations:
method.split.append("deprecated")
if kind == "ctor":
method.typ = "ctor"
@@ -325,7 +341,7 @@
method.name = self.parse_name()
method.split.append(method.name)
self.parse_token("(")
- method.args = self.parse_args()
+ method.detailed_args = self.parse_args()
self.parse_token(")")
method.throws = self.parse_throws()
if "@interface" in method.clazz.split:
@@ -360,8 +376,8 @@
def parse_into_field(self, field):
kind = self.parse_one_of(*V2LineParser.FIELD_KINDS)
field.split = [kind]
- annotations = self.parse_annotations()
- if "@Deprecated" in annotations:
+ field.annotations = self.parse_annotations()
+ if "@Deprecated" in field.annotations:
field.split.append("deprecated")
field.split.extend(self.parse_modifiers())
field.typ = self.parse_type()
@@ -488,15 +504,16 @@
def parse_arg(self):
self.parse_if("vararg") # kotlin vararg
- self.parse_annotations()
- type = self.parse_arg_type()
+ annotations = self.parse_annotations()
+ arg = Argument(self.parse_arg_type())
+ arg.annotations = annotations
l = self.lookahead()
if l != "," and l != ")":
if self.lookahead() != '=':
- self.parse_token() # kotlin argument name
+ arg.name = self.parse_token() # kotlin argument name
if self.parse_if('='): # kotlin default value
- self.parse_expression()
- return type
+ arg.default = self.parse_expression()
+ return arg
def parse_expression(self):
while not self.lookahead() in [')', ',', ';']:
@@ -593,7 +610,7 @@
blame = None
sig_format = 1
- re_blame = re.compile("^([a-z0-9]{7,}) \(<([^>]+)>.+?\) (.+?)$")
+ re_blame = re.compile(r"^(\^?[a-z0-9]{7,}) \(<([^>]+)>.+?\) (.+?)$")
field_prefixes = map(lambda kind: " %s" % (kind,), V2LineParser.FIELD_KINDS)
def startsWithFieldPrefix(raw):
@@ -608,11 +625,13 @@
match = re_blame.match(raw)
if match is not None:
blame = match.groups()[0:2]
+ if blame[0].startswith("^"): # Outside of blame range
+ blame = None
raw = match.groups()[2]
else:
blame = None
- if line == 1 and raw.startswith("// Signature format: "):
+ if line == 1 and V2Tokenizer.SIGNATURE_PREFIX in raw:
sig_format_string = raw[len(V2Tokenizer.SIGNATURE_PREFIX):]
if sig_format_string in ["2.0", "3.0"]:
sig_format = 2
@@ -1109,6 +1128,9 @@
if not has_build:
warn(clazz, None, None, "Missing build() method")
+ if "final" not in clazz.split:
+ error(clazz, None, None, "Builder should be final")
+
def verify_aidl(clazz):
"""Catch people exposing raw AIDL."""
@@ -1868,6 +1890,35 @@
if arg in discouraged:
warn(clazz, m, "FW12", "Should avoid odd sized primitives; use int instead")
+PRIMITIVES = {"void", "int", "float", "boolean", "short", "char", "byte", "long", "double"}
+
+def verify_nullability(clazz):
+ """Catches missing nullability annotations"""
+
+ for f in clazz.fields:
+ if f.value is not None and 'static' in f.split and 'final' in f.split:
+ continue # Nullability of constants can be inferred.
+ if f.typ not in PRIMITIVES and not has_nullability(f.annotations):
+ error(clazz, f, "M12", "Field must be marked either @NonNull or @Nullable")
+
+ for c in clazz.ctors:
+ verify_nullability_args(clazz, c)
+
+ for m in clazz.methods:
+ if m.name == "writeToParcel" or m.name == "onReceive":
+ continue # Parcelable.writeToParcel() and BroadcastReceiver.onReceive() are not yet annotated
+
+ if m.typ not in PRIMITIVES and not has_nullability(m.annotations):
+ error(clazz, m, "M12", "Return value must be marked either @NonNull or @Nullable")
+ verify_nullability_args(clazz, m)
+
+def verify_nullability_args(clazz, m):
+ for i, arg in enumerate(m.detailed_args):
+ if arg.type not in PRIMITIVES and not has_nullability(arg.annotations):
+ error(clazz, m, "M12", "Argument %d must be marked either @NonNull or @Nullable" % (i+1,))
+
+def has_nullability(annotations):
+ return "@NonNull" in annotations or "@Nullable" in annotations
def verify_singleton(clazz):
"""Catch singleton objects with constructors."""
@@ -1956,6 +2007,7 @@
verify_pfd(clazz)
verify_numbers(clazz)
verify_singleton(clazz)
+ verify_nullability(clazz)
def examine_stream(stream, base_stream=None, in_classes_with_base=[], out_classes_with_base=None):
diff --git a/tools/apilint/apilint_test.py b/tools/apilint/apilint_test.py
index c10ef15..f34492d 100644
--- a/tools/apilint/apilint_test.py
+++ b/tools/apilint/apilint_test.py
@@ -88,20 +88,22 @@
faulty_current_txt = """
+// Signature format: 2.0
package android.app {
public final class Activity {
}
public final class WallpaperColors implements android.os.Parcelable {
- ctor public WallpaperColors(android.os.Parcel);
+ ctor public WallpaperColors(@NonNull android.os.Parcel);
method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
}
}
-""".split('\n')
+""".strip().split('\n')
ok_current_txt = """
+// Signature format: 2.0
package android.app {
public final class Activity {
}
@@ -109,19 +111,20 @@
public final class WallpaperColors implements android.os.Parcelable {
ctor public WallpaperColors();
method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
}
}
-""".split('\n')
+""".strip().split('\n')
system_current_txt = """
+// Signature format: 2.0
package android.app {
public final class WallpaperColors implements android.os.Parcelable {
method public int getSomething();
}
}
-""".split('\n')
+""".strip().split('\n')
diff --git a/tools/bit/main.cpp b/tools/bit/main.cpp
index 860094ae..082ccf3 100644
--- a/tools/bit/main.cpp
+++ b/tools/bit/main.cpp
@@ -33,6 +33,8 @@
using namespace std;
+#define NATIVE_TESTS "NATIVE_TESTS"
+
/**
* An entry from the command line for something that will be built, installed,
* and/or tested.
@@ -132,6 +134,32 @@
{
}
+struct PushedFile
+{
+ TrackedFile file;
+ string dest;
+
+ PushedFile();
+ PushedFile(const PushedFile& that);
+ PushedFile(const string& filename, const string& dest);
+ ~PushedFile() {};
+};
+
+PushedFile::PushedFile()
+{
+}
+
+PushedFile::PushedFile(const PushedFile& that)
+ :file(that.file),
+ dest(that.dest)
+{
+}
+
+PushedFile::PushedFile(const string& f, const string& d)
+ :file(f),
+ dest(d)
+{
+}
/**
* Record for an test that is going to be launched.
@@ -658,12 +686,14 @@
}
// Figure out whether we need to sync the system and which apks to install
- string systemPath = buildOut + "/target/product/" + buildDevice + "/system/";
- string dataPath = buildOut + "/target/product/" + buildDevice + "/data/";
+ string deviceTargetPath = buildOut + "/target/product/" + buildDevice;
+ string systemPath = deviceTargetPath + "/system/";
+ string dataPath = deviceTargetPath + "/data/";
bool syncSystem = false;
bool alwaysSyncSystem = false;
vector<string> systemFiles;
vector<InstallApk> installApks;
+ vector<PushedFile> pushedFiles;
for (size_t i=0; i<targets.size(); i++) {
Target* target = targets[i];
if (target->install) {
@@ -687,6 +717,11 @@
installApks.push_back(InstallApk(file, !target->build));
continue;
}
+ // If it's a native test module, push it.
+ if (target->module.HasClass(NATIVE_TESTS) && starts_with(file, dataPath)) {
+ string installedPath(file.c_str() + deviceTargetPath.length());
+ pushedFiles.push_back(PushedFile(file, installedPath));
+ }
}
}
}
@@ -701,6 +736,13 @@
printf(" %s\n", systemFiles[i].c_str());
}
}
+ if (pushedFiles.size() > 0){
+ print_info("Files to push:");
+ for (size_t i=0; i<pushedFiles.size(); i++) {
+ printf(" %s\n", pushedFiles[i].file.filename.c_str());
+ printf(" --> %s\n", pushedFiles[i].dest.c_str());
+ }
+ }
if (installApks.size() > 0){
print_info("APKs to install:");
for (size_t i=0; i<installApks.size(); i++) {
@@ -784,6 +826,25 @@
}
}
+ // Push files
+ if (pushedFiles.size() > 0) {
+ print_status("Pushing files");
+ for (size_t i=0; i<pushedFiles.size(); i++) {
+ const PushedFile& pushed = pushedFiles[i];
+ string dir = dirname(pushed.dest);
+ if (dir.length() == 0 || dir == "/") {
+ // This isn't really a file inside the data directory. Just skip it.
+ continue;
+ }
+ // TODO: if (!apk.file.fileInfo.exists || apk.file.HasChanged())
+ err = run_adb("shell", "mkdir", "-p", dir.c_str(), NULL);
+ check_error(err);
+ err = run_adb("push", pushed.file.filename.c_str(), pushed.dest.c_str());
+ check_error(err);
+ // pushed.installed = true;
+ }
+ }
+
// Install APKs
if (installApks.size() > 0) {
print_status("Installing APKs");
@@ -804,6 +865,74 @@
// Actions
//
+ // Whether there have been any tests run, so we can print a summary.
+ bool testsRun = false;
+
+ // Run the native tests.
+ // TODO: We don't have a good way of running these and capturing the output of
+ // them live. It'll take some work. On the other hand, if they're gtest tests,
+ // the output of gtest is not completely insane like the text output of the
+ // instrumentation tests. So for now, we'll just live with that.
+ for (size_t i=0; i<targets.size(); i++) {
+ Target* target = targets[i];
+ if (target->test && target->module.HasClass(NATIVE_TESTS)) {
+ // We don't have a clear signal from the build system which of the installed
+ // files is actually the test, so we guess by looking for one with the same
+ // leaf name as the module that is executable.
+ for (size_t j=0; j<target->module.installed.size(); j++) {
+ string filename = target->module.installed[j];
+ if (!starts_with(filename, dataPath)) {
+ // Native tests go into the data directory.
+ continue;
+ }
+ if (leafname(filename) != target->module.name) {
+ // This isn't the test executable.
+ continue;
+ }
+ if (!is_executable(filename)) {
+ continue;
+ }
+ string installedPath(filename.c_str() + deviceTargetPath.length());
+ printf("the magic one is: %s\n", filename.c_str());
+ printf(" and it's installed at: %s\n", installedPath.c_str());
+
+ // Convert bit-style actions to gtest test filter arguments
+ if (target->actions.size() > 0) {
+ testsRun = true;
+ target->testActionCount++;
+ bool runAll = false;
+ string filterArg("--gtest_filter=");
+ for (size_t k=0; k<target->actions.size(); k++) {
+ string actionString = target->actions[k];
+ if (actionString == "*") {
+ runAll = true;
+ } else {
+ filterArg += actionString;
+ if (k != target->actions.size()-1) {
+ // We would otherwise have to worry about this condition
+ // being true, and appending an extra ':', but we know that
+ // if the extra action is "*", then we'll just run all and
+ // won't use filterArg anyway, so just keep this condition
+ // simple.
+ filterArg += ':';
+ }
+ }
+ }
+ if (runAll) {
+ err = run_adb("shell", installedPath.c_str(), NULL);
+ } else {
+ err = run_adb("shell", installedPath.c_str(), filterArg.c_str(), NULL);
+ }
+ if (err == 0) {
+ target->testPassCount++;
+ } else {
+ target->testFailCount++;
+ }
+ }
+ }
+ }
+ }
+
// Inspect the apks, and figure out what is an activity and what needs a test runner
bool printedInspecting = false;
vector<TestAction> testActions;
@@ -872,6 +1001,7 @@
TestResults testResults;
if (testActions.size() > 0) {
print_status("Running tests");
+ testsRun = true;
for (size_t i=0; i<testActions.size(); i++) {
TestAction& action = testActions[i];
testResults.SetCurrentAction(&action);
@@ -969,7 +1099,7 @@
// Tests
bool hasErrors = false;
- if (testActions.size() > 0) {
+ if (testsRun) {
printf("%sRan tests:%s\n", g_escapeBold, g_escapeEndColor);
size_t maxNameLength = 0;
for (size_t i=0; i<targets.size(); i++) {
diff --git a/tools/bit/make.cpp b/tools/bit/make.cpp
index 6270913..df64a80 100644
--- a/tools/bit/make.cpp
+++ b/tools/bit/make.cpp
@@ -51,6 +51,18 @@
return filename + "/.bit_cache";
}
+bool
+Module::HasClass(const string& cl)
+{
+ for (vector<string>::const_iterator c = classes.begin(); c != classes.end(); c++) {
+ if (*c == cl) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
BuildVars::BuildVars(const string& outDir, const string& buildProduct,
const string& buildVariant, const string& buildType)
:m_filename(),
diff --git a/tools/bit/make.h b/tools/bit/make.h
index db0b69f..785912a 100644
--- a/tools/bit/make.h
+++ b/tools/bit/make.h
@@ -29,6 +29,8 @@
vector<string> classes;
vector<string> paths;
vector<string> installed;
+
+ bool HasClass(const string& cl);
};
/**
diff --git a/tools/bit/util.cpp b/tools/bit/util.cpp
index a502a9d..63399d6 100644
--- a/tools/bit/util.cpp
+++ b/tools/bit/util.cpp
@@ -254,4 +254,42 @@
return result;
}
+bool
+is_executable(const string& filename)
+{
+ int err;
+ struct stat st;
+ err = stat(filename.c_str(), &st);
+ if (err != 0) {
+ return false;
+ }
+
+ return (st.st_mode & S_IXUSR) != 0;
+}
+
+string
+dirname(const string& filename)
+{
+ size_t slash = filename.rfind('/');
+ if (slash == string::npos) {
+ return "";
+ } else if (slash == 0) {
+ return "/";
+ } else {
+ return string(filename, 0, slash);
+ }
+}
+
+string
+leafname(const string& filename)
+{
+ size_t slash = filename.rfind('/');
+ if (slash == string::npos) {
+ return filename;
+ } else if (slash == filename.length() - 1) {
+ return "";
+ } else {
+ return string(filename, slash + 1);
+ }
+}
diff --git a/tools/bit/util.h b/tools/bit/util.h
index 718f147..7ccdab1 100644
--- a/tools/bit/util.h
+++ b/tools/bit/util.h
@@ -79,5 +79,10 @@
string read_file(const string& filename);
+bool is_executable(const string& filename);
+
+string dirname(const string& filename);
+string leafname(const string& filename);
+
#endif // UTIL_H
diff --git a/tools/hiddenapi/exclude.sh b/tools/hiddenapi/exclude.sh
index 4ffcf68..18c4054 100755
--- a/tools/hiddenapi/exclude.sh
+++ b/tools/hiddenapi/exclude.sh
@@ -9,6 +9,7 @@
LIBCORE_PACKAGES="\
android.icu \
android.system \
+ android.test \
com.android.bouncycastle \
com.android.conscrypt \
com.android.i18n.phonenumbers \
@@ -17,6 +18,7 @@
dalvik \
java \
javax \
+ junit \
libcore \
org.apache.harmony \
org.json \
diff --git a/wifi/java/android/net/wifi/BatchedScanResult.java b/wifi/java/android/net/wifi/BatchedScanResult.java
index c06543e..ed8845dd 100644
--- a/wifi/java/android/net/wifi/BatchedScanResult.java
+++ b/wifi/java/android/net/wifi/BatchedScanResult.java
@@ -78,7 +78,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<BatchedScanResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<BatchedScanResult> CREATOR =
new Creator<BatchedScanResult>() {
public BatchedScanResult createFromParcel(Parcel in) {
BatchedScanResult result = new BatchedScanResult();
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index d549799..17948e7 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -147,8 +147,10 @@
void stopWatchLocalOnlyHotspot();
+ @UnsupportedAppUsage
int getWifiApEnabledState();
+ @UnsupportedAppUsage
WifiConfiguration getWifiApConfiguration();
boolean setWifiApConfiguration(in WifiConfiguration wifiConfig, String packageName);
@@ -173,6 +175,7 @@
void factoryReset(String packageName);
+ @UnsupportedAppUsage
Network getCurrentNetwork();
byte[] retrieveBackupData();
diff --git a/wifi/java/android/net/wifi/PasspointManagementObjectDefinition.java b/wifi/java/android/net/wifi/PasspointManagementObjectDefinition.java
index 9fc1706..70577b9 100644
--- a/wifi/java/android/net/wifi/PasspointManagementObjectDefinition.java
+++ b/wifi/java/android/net/wifi/PasspointManagementObjectDefinition.java
@@ -63,7 +63,7 @@
/**
* Implement the Parcelable interface {@hide}
*/
- public static final Creator<PasspointManagementObjectDefinition> CREATOR =
+ public static final @android.annotation.NonNull Creator<PasspointManagementObjectDefinition> CREATOR =
new Creator<PasspointManagementObjectDefinition>() {
public PasspointManagementObjectDefinition createFromParcel(Parcel in) {
return new PasspointManagementObjectDefinition(
diff --git a/wifi/java/android/net/wifi/RssiPacketCountInfo.java b/wifi/java/android/net/wifi/RssiPacketCountInfo.java
index 0de2033..4301165 100644
--- a/wifi/java/android/net/wifi/RssiPacketCountInfo.java
+++ b/wifi/java/android/net/wifi/RssiPacketCountInfo.java
@@ -60,7 +60,7 @@
return 0;
}
- public static final Parcelable.Creator<RssiPacketCountInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<RssiPacketCountInfo> CREATOR =
new Parcelable.Creator<RssiPacketCountInfo>() {
@Override
public RssiPacketCountInfo createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java
index 9ab374a..6ce2121 100644
--- a/wifi/java/android/net/wifi/RttManager.java
+++ b/wifi/java/android/net/wifi/RttManager.java
@@ -292,7 +292,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<RttCapabilities> CREATOR =
+ public static final @android.annotation.NonNull Creator<RttCapabilities> CREATOR =
new Creator<RttCapabilities>() {
@Override
public RttCapabilities createFromParcel(Parcel in) {
@@ -556,7 +556,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ParcelableRttParams> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelableRttParams> CREATOR =
new Creator<ParcelableRttParams>() {
@Override
public ParcelableRttParams createFromParcel(Parcel in) {
@@ -859,7 +859,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ParcelableRttResults> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelableRttResults> CREATOR =
new Creator<ParcelableRttResults>() {
@Override
public ParcelableRttResults createFromParcel(Parcel in) {
@@ -1158,7 +1158,7 @@
}
/** Implement {@link Parcelable} interface */
- public static final Parcelable.Creator<ResponderConfig> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<ResponderConfig> CREATOR =
new Parcelable.Creator<ResponderConfig>() {
@Override
public ResponderConfig createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index 9b9247d..21fe22e 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -751,7 +751,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<ScanResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<ScanResult> CREATOR =
new Creator<ScanResult>() {
public ScanResult createFromParcel(Parcel in) {
WifiSsid wifiSsid = null;
diff --git a/wifi/java/android/net/wifi/SupplicantState.java b/wifi/java/android/net/wifi/SupplicantState.java
index 369d3a8..de7e2b5 100644
--- a/wifi/java/android/net/wifi/SupplicantState.java
+++ b/wifi/java/android/net/wifi/SupplicantState.java
@@ -251,7 +251,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<SupplicantState> CREATOR =
+ public static final @android.annotation.NonNull Creator<SupplicantState> CREATOR =
new Creator<SupplicantState>() {
public SupplicantState createFromParcel(Parcel in) {
return SupplicantState.valueOf(in.readString());
diff --git a/wifi/java/android/net/wifi/WifiActivityEnergyInfo.java b/wifi/java/android/net/wifi/WifiActivityEnergyInfo.java
index 03c9fbe..0f7fc2d 100644
--- a/wifi/java/android/net/wifi/WifiActivityEnergyInfo.java
+++ b/wifi/java/android/net/wifi/WifiActivityEnergyInfo.java
@@ -100,7 +100,7 @@
+ " }";
}
- public static final Parcelable.Creator<WifiActivityEnergyInfo> CREATOR =
+ public static final @android.annotation.NonNull Parcelable.Creator<WifiActivityEnergyInfo> CREATOR =
new Parcelable.Creator<WifiActivityEnergyInfo>() {
public WifiActivityEnergyInfo createFromParcel(Parcel in) {
long timestamp = in.readLong();
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 4d6ff48..c59ad65 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -2486,7 +2486,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<WifiConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiConfiguration> CREATOR =
new Creator<WifiConfiguration>() {
public WifiConfiguration createFromParcel(Parcel in) {
WifiConfiguration config = new WifiConfiguration();
diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
index 145e269..7a505a2 100644
--- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -226,7 +226,7 @@
ParcelUtil.writeCertificates(dest, mClientCertificateChain);
}
- public static final Creator<WifiEnterpriseConfig> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiEnterpriseConfig> CREATOR =
new Creator<WifiEnterpriseConfig>() {
@Override
public WifiEnterpriseConfig createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java
index 089b59a..ee60408 100644
--- a/wifi/java/android/net/wifi/WifiInfo.java
+++ b/wifi/java/android/net/wifi/WifiInfo.java
@@ -16,6 +16,7 @@
package android.net.wifi;
+import android.annotation.IntRange;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -101,6 +102,11 @@
private int mLinkSpeed;
/**
+ * Constant for unknown link speed.
+ */
+ public static final int LINK_SPEED_UNKNOWN = -1;
+
+ /**
* Tx(transmit) Link speed in Mbps
*/
private int mTxLinkSpeed;
@@ -214,7 +220,7 @@
mNetworkId = -1;
mSupplicantState = SupplicantState.UNINITIALIZED;
mRssi = INVALID_RSSI;
- mLinkSpeed = -1;
+ mLinkSpeed = LINK_SPEED_UNKNOWN;
mFrequency = -1;
}
@@ -225,9 +231,9 @@
setSSID(null);
setNetworkId(-1);
setRssi(INVALID_RSSI);
- setLinkSpeed(-1);
- setTxLinkSpeedMbps(-1);
- setRxLinkSpeedMbps(-1);
+ setLinkSpeed(LINK_SPEED_UNKNOWN);
+ setTxLinkSpeedMbps(LINK_SPEED_UNKNOWN);
+ setRxLinkSpeedMbps(LINK_SPEED_UNKNOWN);
setFrequency(-1);
setMeteredHint(false);
setEphemeral(false);
@@ -369,8 +375,9 @@
/**
* Returns the current link speed in {@link #LINK_SPEED_UNITS}.
- * @return the link speed or -1 if there is no valid value.
+ * @return the link speed or {@link #LINK_SPEED_UNKNOWN} if link speed is unknown.
* @see #LINK_SPEED_UNITS
+ * @see #LINK_SPEED_UNKNOWN
*/
public int getLinkSpeed() {
return mLinkSpeed;
@@ -384,8 +391,10 @@
/**
* Returns the current transmit link speed in Mbps.
- * @return the Tx link speed or -1 if there is no valid value.
+ * @return the Tx link speed or {@link #LINK_SPEED_UNKNOWN} if link speed is unknown.
+ * @see #LINK_SPEED_UNKNOWN
*/
+ @IntRange(from = -1)
public int getTxLinkSpeedMbps() {
return mTxLinkSpeed;
}
@@ -400,8 +409,10 @@
/**
* Returns the current receive link speed in Mbps.
- * @return the Rx link speed or -1 if there is no valid value.
+ * @return the Rx link speed or {@link #LINK_SPEED_UNKNOWN} if link speed is unknown.
+ * @see #LINK_SPEED_UNKNOWN
*/
+ @IntRange(from = -1)
public int getRxLinkSpeedMbps() {
return mRxLinkSpeed;
}
@@ -725,7 +736,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<WifiInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiInfo> CREATOR =
new Creator<WifiInfo>() {
public WifiInfo createFromParcel(Parcel in) {
WifiInfo info = new WifiInfo();
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 6c645fc..d4a5b46 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -4524,7 +4524,7 @@
/**
* @return true if this device supports Wi-Fi Enhanced Open (OWE)
*/
- public boolean isOweSupported() {
+ public boolean isEnhancedOpenSupported() {
return isFeatureSupported(WIFI_FEATURE_OWE);
}
@@ -4575,7 +4575,8 @@
public static final int DEVICE_MOBILITY_STATE_UNKNOWN = 0;
/**
- * High movement device mobility state
+ * High movement device mobility state.
+ * e.g. on a bike, in a motor vehicle
*
* @see #setDeviceMobilityState(int)
*
@@ -4585,7 +4586,8 @@
public static final int DEVICE_MOBILITY_STATE_HIGH_MVMT = 1;
/**
- * Low movement device mobility state
+ * Low movement device mobility state.
+ * e.g. walking, running
*
* @see #setDeviceMobilityState(int)
*
@@ -4607,6 +4609,8 @@
/**
* Updates the device mobility state. Wifi uses this information to adjust the interval between
* Wifi scans in order to balance power consumption with scan accuracy.
+ * The default mobility state when the device boots is {@link #DEVICE_MOBILITY_STATE_UNKNOWN}.
+ * This API should be called whenever there is a change in the mobility state.
* @param state the updated device mobility state
* @hide
*/
diff --git a/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
index 9d87466..24aa23a 100644
--- a/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
+++ b/wifi/java/android/net/wifi/WifiNetworkAgentSpecifier.java
@@ -74,7 +74,7 @@
/**
* @hide
*/
- public static final Creator<WifiNetworkAgentSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiNetworkAgentSpecifier> CREATOR =
new Creator<WifiNetworkAgentSpecifier>() {
@Override
public WifiNetworkAgentSpecifier createFromParcel(@NonNull Parcel in) {
diff --git a/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java b/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
index 9b2fdc8..8262a7a 100644
--- a/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
+++ b/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
@@ -68,7 +68,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiNetworkConnectionStatistics> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiNetworkConnectionStatistics> CREATOR =
new Creator<WifiNetworkConnectionStatistics>() {
public WifiNetworkConnectionStatistics createFromParcel(Parcel in) {
int numConnection = in.readInt();
diff --git a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
index c99bd2e..358bf31 100644
--- a/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/WifiNetworkSpecifier.java
@@ -45,7 +45,7 @@
/**
* Builder used to create {@link WifiNetworkSpecifier} objects.
*/
- public static class Builder {
+ public static final class Builder {
private static final String MATCH_ALL_SSID_PATTERN_PATH = ".*";
private static final String MATCH_EMPTY_SSID_PATTERN_PATH = "";
private static final Pair<MacAddress, MacAddress> MATCH_NO_BSSID_PATTERN1 =
@@ -115,7 +115,7 @@
* string pattern to use for matching the network's SSID.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setSsidPattern(@NonNull PatternMatcher ssidPattern) {
+ public @NonNull Builder setSsidPattern(@NonNull PatternMatcher ssidPattern) {
checkNotNull(ssidPattern);
mSsidPatternMatcher = ssidPattern;
return this;
@@ -133,7 +133,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the SSID is not valid unicode.
*/
- public Builder setSsid(@NonNull String ssid) {
+ public @NonNull Builder setSsid(@NonNull String ssid) {
checkNotNull(ssid);
final CharsetEncoder unicodeEncoder = StandardCharsets.UTF_8.newEncoder();
if (!unicodeEncoder.canEncode(ssid)) {
@@ -155,7 +155,7 @@
* @param mask Mask for BSSID pattern.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setBssidPattern(
+ public @NonNull Builder setBssidPattern(
@NonNull MacAddress baseAddress, @NonNull MacAddress mask) {
checkNotNull(baseAddress, mask);
mBssidPatternMatcher = Pair.create(baseAddress, mask);
@@ -174,7 +174,7 @@
* @param bssid BSSID of the network.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setBssid(@NonNull MacAddress bssid) {
+ public @NonNull Builder setBssid(@NonNull MacAddress bssid) {
checkNotNull(bssid);
mBssidPatternMatcher = Pair.create(bssid, MATCH_EXACT_BSSID_PATTERN_MASK);
return this;
@@ -185,7 +185,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsEnhancedOpen() {
+ public @NonNull Builder setIsEnhancedOpen() {
mIsEnhancedOpen = true;
return this;
}
@@ -198,7 +198,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the passphrase is not ASCII encodable.
*/
- public Builder setWpa2Passphrase(@NonNull String passphrase) {
+ public @NonNull Builder setWpa2Passphrase(@NonNull String passphrase) {
checkNotNull(passphrase);
final CharsetEncoder asciiEncoder = StandardCharsets.US_ASCII.newEncoder();
if (!asciiEncoder.canEncode(passphrase)) {
@@ -216,7 +216,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the passphrase is not ASCII encodable.
*/
- public Builder setWpa3Passphrase(@NonNull String passphrase) {
+ public @NonNull Builder setWpa3Passphrase(@NonNull String passphrase) {
checkNotNull(passphrase);
final CharsetEncoder asciiEncoder = StandardCharsets.US_ASCII.newEncoder();
if (!asciiEncoder.canEncode(passphrase)) {
@@ -233,7 +233,7 @@
* @param enterpriseConfig Instance of {@link WifiEnterpriseConfig}.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setWpa2EnterpriseConfig(
+ public @NonNull Builder setWpa2EnterpriseConfig(
@NonNull WifiEnterpriseConfig enterpriseConfig) {
checkNotNull(enterpriseConfig);
mWpa2EnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
@@ -247,7 +247,7 @@
* @param enterpriseConfig Instance of {@link WifiEnterpriseConfig}.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setWpa3EnterpriseConfig(
+ public @NonNull Builder setWpa3EnterpriseConfig(
@NonNull WifiEnterpriseConfig enterpriseConfig) {
checkNotNull(enterpriseConfig);
mWpa3EnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
@@ -263,12 +263,11 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsHiddenSsid() {
+ public @NonNull Builder setIsHiddenSsid() {
mIsHiddenSSID = true;
return this;
}
-
private void setSecurityParamsInWifiConfiguration(
@NonNull WifiConfiguration configuration) {
if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
@@ -409,7 +408,7 @@
* @return Instance of {@link NetworkSpecifier}.
* @throws IllegalStateException on invalid params set.
*/
- public NetworkSpecifier build() {
+ public @NonNull NetworkSpecifier build() {
if (!hasSetAnyPattern()) {
throw new IllegalStateException("one of setSsidPattern/setSsid/setBssidPattern/"
+ "setBssid should be invoked for specifier");
@@ -496,7 +495,7 @@
this.requestorPackageName = requestorPackageName;
}
- public static final Creator<WifiNetworkSpecifier> CREATOR =
+ public static final @NonNull Creator<WifiNetworkSpecifier> CREATOR =
new Creator<WifiNetworkSpecifier>() {
@Override
public WifiNetworkSpecifier createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
index f02404f..3742b83 100644
--- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
+++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
@@ -45,7 +45,7 @@
/**
* Builder used to create {@link WifiNetworkSuggestion} objects.
*/
- public static class Builder {
+ public static final class Builder {
private static final int UNASSIGNED_PRIORITY = -1;
/**
@@ -125,7 +125,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the SSID is not valid unicode.
*/
- public Builder setSsid(@NonNull String ssid) {
+ public @NonNull Builder setSsid(@NonNull String ssid) {
checkNotNull(ssid);
final CharsetEncoder unicodeEncoder = StandardCharsets.UTF_8.newEncoder();
if (!unicodeEncoder.canEncode(ssid)) {
@@ -150,7 +150,7 @@
* @param bssid BSSID of the network.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setBssid(@NonNull MacAddress bssid) {
+ public @NonNull Builder setBssid(@NonNull MacAddress bssid) {
checkNotNull(bssid);
mBssid = MacAddress.fromBytes(bssid.toByteArray());
return this;
@@ -161,7 +161,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsEnhancedOpen() {
+ public @NonNull Builder setIsEnhancedOpen() {
mIsEnhancedOpen = true;
return this;
}
@@ -174,7 +174,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the passphrase is not ASCII encodable.
*/
- public Builder setWpa2Passphrase(@NonNull String passphrase) {
+ public @NonNull Builder setWpa2Passphrase(@NonNull String passphrase) {
checkNotNull(passphrase);
final CharsetEncoder asciiEncoder = StandardCharsets.US_ASCII.newEncoder();
if (!asciiEncoder.canEncode(passphrase)) {
@@ -192,7 +192,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the passphrase is not ASCII encodable.
*/
- public Builder setWpa3Passphrase(@NonNull String passphrase) {
+ public @NonNull Builder setWpa3Passphrase(@NonNull String passphrase) {
checkNotNull(passphrase);
final CharsetEncoder asciiEncoder = StandardCharsets.US_ASCII.newEncoder();
if (!asciiEncoder.canEncode(passphrase)) {
@@ -209,7 +209,7 @@
* @param enterpriseConfig Instance of {@link WifiEnterpriseConfig}.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setWpa2EnterpriseConfig(
+ public @NonNull Builder setWpa2EnterpriseConfig(
@NonNull WifiEnterpriseConfig enterpriseConfig) {
checkNotNull(enterpriseConfig);
mWpa2EnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
@@ -223,7 +223,7 @@
* @param enterpriseConfig Instance of {@link WifiEnterpriseConfig}.
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setWpa3EnterpriseConfig(
+ public @NonNull Builder setWpa3EnterpriseConfig(
@NonNull WifiEnterpriseConfig enterpriseConfig) {
checkNotNull(enterpriseConfig);
mWpa3EnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
@@ -237,7 +237,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsHiddenSsid() {
+ public @NonNull Builder setIsHiddenSsid() {
mIsHiddenSSID = true;
return this;
}
@@ -255,7 +255,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsAppInteractionRequired() {
+ public @NonNull Builder setIsAppInteractionRequired() {
mIsAppInteractionRequired = true;
return this;
}
@@ -267,7 +267,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsUserInteractionRequired() {
+ public @NonNull Builder setIsUserInteractionRequired() {
mIsUserInteractionRequired = true;
return this;
}
@@ -283,7 +283,7 @@
* @return Instance of {@link Builder} to enable chaining of the builder method.
* @throws IllegalArgumentException if the priority value is negative.
*/
- public Builder setPriority(int priority) {
+ public @NonNull Builder setPriority(int priority) {
if (priority < 0) {
throw new IllegalArgumentException("Invalid priority value " + priority);
}
@@ -298,7 +298,7 @@
*
* @return Instance of {@link Builder} to enable chaining of the builder method.
*/
- public Builder setIsMetered() {
+ public @NonNull Builder setIsMetered() {
mIsMetered = true;
return this;
}
@@ -406,7 +406,7 @@
* @return Instance of {@link WifiNetworkSuggestion}.
* @throws IllegalStateException on invalid params set.
*/
- public WifiNetworkSuggestion build() {
+ public @NonNull WifiNetworkSuggestion build() {
if (mSsid == null) {
throw new IllegalStateException("setSsid should be invoked for suggestion");
}
@@ -483,7 +483,7 @@
this.suggestorPackageName = suggestorPackageName;
}
- public static final Creator<WifiNetworkSuggestion> CREATOR =
+ public static final @NonNull Creator<WifiNetworkSuggestion> CREATOR =
new Creator<WifiNetworkSuggestion>() {
@Override
public WifiNetworkSuggestion createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java
index b73551f..66dc992 100644
--- a/wifi/java/android/net/wifi/WifiScanner.java
+++ b/wifi/java/android/net/wifi/WifiScanner.java
@@ -310,7 +310,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ScanSettings> CREATOR =
+ public static final @android.annotation.NonNull Creator<ScanSettings> CREATOR =
new Creator<ScanSettings>() {
public ScanSettings createFromParcel(Parcel in) {
ScanSettings settings = new ScanSettings();
@@ -453,7 +453,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ScanData> CREATOR =
+ public static final @android.annotation.NonNull Creator<ScanData> CREATOR =
new Creator<ScanData>() {
public ScanData createFromParcel(Parcel in) {
int id = in.readInt();
@@ -505,7 +505,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ParcelableScanData> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelableScanData> CREATOR =
new Creator<ParcelableScanData>() {
public ParcelableScanData createFromParcel(Parcel in) {
int n = in.readInt();
@@ -553,7 +553,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<ParcelableScanResults> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelableScanResults> CREATOR =
new Creator<ParcelableScanResults>() {
public ParcelableScanResults createFromParcel(Parcel in) {
int n = in.readInt();
@@ -684,7 +684,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<PnoSettings> CREATOR =
+ public static final @android.annotation.NonNull Creator<PnoSettings> CREATOR =
new Creator<PnoSettings>() {
public PnoSettings createFromParcel(Parcel in) {
PnoSettings settings = new PnoSettings();
@@ -1029,7 +1029,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<WifiChangeSettings> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiChangeSettings> CREATOR =
new Creator<WifiChangeSettings>() {
public WifiChangeSettings createFromParcel(Parcel in) {
return new WifiChangeSettings();
@@ -1140,7 +1140,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<HotlistSettings> CREATOR =
+ public static final @android.annotation.NonNull Creator<HotlistSettings> CREATOR =
new Creator<HotlistSettings>() {
public HotlistSettings createFromParcel(Parcel in) {
HotlistSettings settings = new HotlistSettings();
@@ -1373,7 +1373,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<OperationResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<OperationResult> CREATOR =
new Creator<OperationResult>() {
public OperationResult createFromParcel(Parcel in) {
int reason = in.readInt();
diff --git a/wifi/java/android/net/wifi/WifiSsid.java b/wifi/java/android/net/wifi/WifiSsid.java
index 9acbc14..fd59390 100644
--- a/wifi/java/android/net/wifi/WifiSsid.java
+++ b/wifi/java/android/net/wifi/WifiSsid.java
@@ -252,7 +252,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<WifiSsid> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiSsid> CREATOR =
new Creator<WifiSsid>() {
public WifiSsid createFromParcel(Parcel in) {
WifiSsid ssid = new WifiSsid();
diff --git a/wifi/java/android/net/wifi/WifiUsabilityStatsEntry.java b/wifi/java/android/net/wifi/WifiUsabilityStatsEntry.java
index c43818d..2dee971 100644
--- a/wifi/java/android/net/wifi/WifiUsabilityStatsEntry.java
+++ b/wifi/java/android/net/wifi/WifiUsabilityStatsEntry.java
@@ -167,7 +167,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiUsabilityStatsEntry> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiUsabilityStatsEntry> CREATOR =
new Creator<WifiUsabilityStatsEntry>() {
public WifiUsabilityStatsEntry createFromParcel(Parcel in) {
return new WifiUsabilityStatsEntry(
diff --git a/wifi/java/android/net/wifi/WpsInfo.java b/wifi/java/android/net/wifi/WpsInfo.java
index ae3104b..00cb243 100644
--- a/wifi/java/android/net/wifi/WpsInfo.java
+++ b/wifi/java/android/net/wifi/WpsInfo.java
@@ -85,7 +85,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WpsInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WpsInfo> CREATOR =
new Creator<WpsInfo>() {
public WpsInfo createFromParcel(Parcel in) {
WpsInfo config = new WpsInfo();
diff --git a/wifi/java/android/net/wifi/WpsResult.java b/wifi/java/android/net/wifi/WpsResult.java
index d4fd3e2..f2ffb6f 100644
--- a/wifi/java/android/net/wifi/WpsResult.java
+++ b/wifi/java/android/net/wifi/WpsResult.java
@@ -74,7 +74,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<WpsResult> CREATOR =
+ public static final @android.annotation.NonNull Creator<WpsResult> CREATOR =
new Creator<WpsResult>() {
public WpsResult createFromParcel(Parcel in) {
WpsResult result = new WpsResult();
diff --git a/wifi/java/android/net/wifi/aware/Characteristics.java b/wifi/java/android/net/wifi/aware/Characteristics.java
index 70474fd..e2cf4dc 100644
--- a/wifi/java/android/net/wifi/aware/Characteristics.java
+++ b/wifi/java/android/net/wifi/aware/Characteristics.java
@@ -87,7 +87,7 @@
return 0;
}
- public static final Creator<Characteristics> CREATOR =
+ public static final @android.annotation.NonNull Creator<Characteristics> CREATOR =
new Creator<Characteristics>() {
@Override
public Characteristics createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/aware/ConfigRequest.java b/wifi/java/android/net/wifi/aware/ConfigRequest.java
index cc14ab2..1e46d1b 100644
--- a/wifi/java/android/net/wifi/aware/ConfigRequest.java
+++ b/wifi/java/android/net/wifi/aware/ConfigRequest.java
@@ -112,7 +112,7 @@
dest.writeIntArray(mDiscoveryWindowInterval);
}
- public static final Creator<ConfigRequest> CREATOR = new Creator<ConfigRequest>() {
+ public static final @android.annotation.NonNull Creator<ConfigRequest> CREATOR = new Creator<ConfigRequest>() {
@Override
public ConfigRequest[] newArray(int size) {
return new ConfigRequest[size];
diff --git a/wifi/java/android/net/wifi/aware/ParcelablePeerHandle.java b/wifi/java/android/net/wifi/aware/ParcelablePeerHandle.java
index 4ddf872..ce67abf 100644
--- a/wifi/java/android/net/wifi/aware/ParcelablePeerHandle.java
+++ b/wifi/java/android/net/wifi/aware/ParcelablePeerHandle.java
@@ -43,7 +43,7 @@
dest.writeInt(peerId);
}
- public static final Creator<ParcelablePeerHandle> CREATOR =
+ public static final @android.annotation.NonNull Creator<ParcelablePeerHandle> CREATOR =
new Creator<ParcelablePeerHandle>() {
@Override
public ParcelablePeerHandle[] newArray(int size) {
diff --git a/wifi/java/android/net/wifi/aware/PublishConfig.java b/wifi/java/android/net/wifi/aware/PublishConfig.java
index d43f727..f0c7967 100644
--- a/wifi/java/android/net/wifi/aware/PublishConfig.java
+++ b/wifi/java/android/net/wifi/aware/PublishConfig.java
@@ -129,7 +129,7 @@
dest.writeInt(mEnableRanging ? 1 : 0);
}
- public static final Creator<PublishConfig> CREATOR = new Creator<PublishConfig>() {
+ public static final @android.annotation.NonNull Creator<PublishConfig> CREATOR = new Creator<PublishConfig>() {
@Override
public PublishConfig[] newArray(int size) {
return new PublishConfig[size];
diff --git a/wifi/java/android/net/wifi/aware/SubscribeConfig.java b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
index 51353c6..f477490 100644
--- a/wifi/java/android/net/wifi/aware/SubscribeConfig.java
+++ b/wifi/java/android/net/wifi/aware/SubscribeConfig.java
@@ -146,7 +146,7 @@
dest.writeInt(mMaxDistanceMmSet ? 1 : 0);
}
- public static final Creator<SubscribeConfig> CREATOR = new Creator<SubscribeConfig>() {
+ public static final @android.annotation.NonNull Creator<SubscribeConfig> CREATOR = new Creator<SubscribeConfig>() {
@Override
public SubscribeConfig[] newArray(int size) {
return new SubscribeConfig[size];
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
index 4bee837..9164d04 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
@@ -77,7 +77,7 @@
dest.writeArray(mNetworkSpecifiers.toArray());
}
- public static final Creator<WifiAwareAgentNetworkSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiAwareAgentNetworkSpecifier> CREATOR =
new Creator<WifiAwareAgentNetworkSpecifier>() {
@Override
public WifiAwareAgentNetworkSpecifier createFromParcel(Parcel in) {
@@ -210,7 +210,7 @@
dest.writeBlob(mData);
}
- public static final Creator<ByteArrayWrapper> CREATOR =
+ public static final @android.annotation.NonNull Creator<ByteArrayWrapper> CREATOR =
new Creator<ByteArrayWrapper>() {
@Override
public ByteArrayWrapper createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareNetworkInfo.java b/wifi/java/android/net/wifi/aware/WifiAwareNetworkInfo.java
index b258906..020cb56 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareNetworkInfo.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareNetworkInfo.java
@@ -116,7 +116,7 @@
dest.writeInt(mTransportProtocol);
}
- public static final Creator<WifiAwareNetworkInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiAwareNetworkInfo> CREATOR =
new Creator<WifiAwareNetworkInfo>() {
@Override
public WifiAwareNetworkInfo createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
index a93a6d5..59f534a 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
@@ -167,7 +167,7 @@
this.requestorUid = requestorUid;
}
- public static final Creator<WifiAwareNetworkSpecifier> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiAwareNetworkSpecifier> CREATOR =
new Creator<WifiAwareNetworkSpecifier>() {
@Override
public WifiAwareNetworkSpecifier createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/OsuProvider.java b/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
index f91790f..a1684d6 100644
--- a/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
+++ b/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
@@ -256,7 +256,7 @@
+ " mIcon=" + mIcon;
}
- public static final Creator<OsuProvider> CREATOR =
+ public static final @android.annotation.NonNull Creator<OsuProvider> CREATOR =
new Creator<OsuProvider>() {
@Override
public OsuProvider createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
index f09d864..9095b5d 100644
--- a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
+++ b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java
@@ -600,7 +600,7 @@
return true;
}
- public static final Creator<PasspointConfiguration> CREATOR =
+ public static final @android.annotation.NonNull Creator<PasspointConfiguration> CREATOR =
new Creator<PasspointConfiguration>() {
@Override
public PasspointConfiguration createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
index 28165e15..9409c03 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java
@@ -428,7 +428,7 @@
return true;
}
- public static final Creator<UserCredential> CREATOR =
+ public static final @android.annotation.NonNull Creator<UserCredential> CREATOR =
new Creator<UserCredential>() {
@Override
public UserCredential createFromParcel(Parcel in) {
@@ -599,7 +599,7 @@
return true;
}
- public static final Creator<CertificateCredential> CREATOR =
+ public static final @android.annotation.NonNull Creator<CertificateCredential> CREATOR =
new Creator<CertificateCredential>() {
@Override
public CertificateCredential createFromParcel(Parcel in) {
@@ -770,7 +770,7 @@
return true;
}
- public static final Creator<SimCredential> CREATOR =
+ public static final @android.annotation.NonNull Creator<SimCredential> CREATOR =
new Creator<SimCredential>() {
@Override
public SimCredential createFromParcel(Parcel in) {
@@ -1086,7 +1086,7 @@
return true;
}
- public static final Creator<Credential> CREATOR =
+ public static final @android.annotation.NonNull Creator<Credential> CREATOR =
new Creator<Credential>() {
@Override
public Credential createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
index d829ea8..49a76c3 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java
@@ -345,7 +345,7 @@
return true;
}
- public static final Creator<HomeSp> CREATOR =
+ public static final @android.annotation.NonNull Creator<HomeSp> CREATOR =
new Creator<HomeSp>() {
@Override
public HomeSp createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/Policy.java b/wifi/java/android/net/wifi/hotspot2/pps/Policy.java
index ee0894b..b0a2cc3 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/Policy.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/Policy.java
@@ -279,7 +279,7 @@
return true;
}
- public static final Creator<RoamingPartner> CREATOR =
+ public static final @android.annotation.NonNull Creator<RoamingPartner> CREATOR =
new Creator<RoamingPartner>() {
@Override
public RoamingPartner createFromParcel(Parcel in) {
@@ -475,7 +475,7 @@
return true;
}
- public static final Creator<Policy> CREATOR =
+ public static final @android.annotation.NonNull Creator<Policy> CREATOR =
new Creator<Policy>() {
@Override
public Policy createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java b/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java
index 8d30ff1..4a8aa36 100644
--- a/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java
+++ b/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java
@@ -378,7 +378,7 @@
return true;
}
- public static final Creator<UpdateParameter> CREATOR =
+ public static final @android.annotation.NonNull Creator<UpdateParameter> CREATOR =
new Creator<UpdateParameter>() {
@Override
public UpdateParameter createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index 479adbc..5e1f569 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -193,7 +193,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pConfig> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pConfig> CREATOR =
new Creator<WifiP2pConfig>() {
public WifiP2pConfig createFromParcel(Parcel in) {
WifiP2pConfig config = new WifiP2pConfig();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
index ab7bb68..c5318a9 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
@@ -385,7 +385,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pDevice> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pDevice> CREATOR =
new Creator<WifiP2pDevice>() {
@Override
public WifiP2pDevice createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
index 72edd56..acf06fb 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
@@ -200,7 +200,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pDeviceList> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pDeviceList> CREATOR =
new Creator<WifiP2pDeviceList>() {
public WifiP2pDeviceList createFromParcel(Parcel in) {
WifiP2pDeviceList deviceList = new WifiP2pDeviceList();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
index 8a1b21c..4866bd4 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java
@@ -332,7 +332,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pGroup> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pGroup> CREATOR =
new Creator<WifiP2pGroup>() {
public WifiP2pGroup createFromParcel(Parcel in) {
WifiP2pGroup group = new WifiP2pGroup();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
index 8d92253..62524d9 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
@@ -231,7 +231,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pGroupList> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pGroupList> CREATOR =
new Creator<WifiP2pGroupList>() {
public WifiP2pGroupList createFromParcel(Parcel in) {
WifiP2pGroupList grpList = new WifiP2pGroupList();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pInfo.java b/wifi/java/android/net/wifi/p2p/WifiP2pInfo.java
index 8972b7e..33bc37e 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pInfo.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pInfo.java
@@ -77,7 +77,7 @@
}
/** Implement the Parcelable interface */
- public static final Creator<WifiP2pInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pInfo> CREATOR =
new Creator<WifiP2pInfo>() {
public WifiP2pInfo createFromParcel(Parcel in) {
WifiP2pInfo info = new WifiP2pInfo();
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
index f9ef08f..3caa280 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java
@@ -195,7 +195,7 @@
/** Implement the Parcelable interface */
@UnsupportedAppUsage
- public static final Creator<WifiP2pWfdInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pWfdInfo> CREATOR =
new Creator<WifiP2pWfdInfo>() {
public WifiP2pWfdInfo createFromParcel(Parcel in) {
WifiP2pWfdInfo device = new WifiP2pWfdInfo();
diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java
index e9ee7bb..db0bdb8 100644
--- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java
+++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java
@@ -171,7 +171,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<WifiP2pServiceInfo> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pServiceInfo> CREATOR =
new Creator<WifiP2pServiceInfo>() {
public WifiP2pServiceInfo createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java
index f1f2262..87528c4 100644
--- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java
+++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java
@@ -266,7 +266,7 @@
/** Implement the Parcelable interface {@hide} */
@UnsupportedAppUsage
- public static final Creator<WifiP2pServiceRequest> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pServiceRequest> CREATOR =
new Creator<WifiP2pServiceRequest>() {
public WifiP2pServiceRequest createFromParcel(Parcel in) {
int servType = in.readInt();
diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceResponse.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceResponse.java
index 1020fd2..1b9c080 100644
--- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceResponse.java
+++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceResponse.java
@@ -350,7 +350,7 @@
}
/** Implement the Parcelable interface {@hide} */
- public static final Creator<WifiP2pServiceResponse> CREATOR =
+ public static final @android.annotation.NonNull Creator<WifiP2pServiceResponse> CREATOR =
new Creator<WifiP2pServiceResponse>() {
public WifiP2pServiceResponse createFromParcel(Parcel in) {
diff --git a/wifi/java/android/net/wifi/rtt/CivicLocation.java b/wifi/java/android/net/wifi/rtt/CivicLocation.java
index a669d77..b438a69 100644
--- a/wifi/java/android/net/wifi/rtt/CivicLocation.java
+++ b/wifi/java/android/net/wifi/rtt/CivicLocation.java
@@ -91,7 +91,7 @@
mCivicAddressElements = in.readSparseArray(this.getClass().getClassLoader());
}
- public static final Creator<CivicLocation> CREATOR = new Creator<CivicLocation>() {
+ public static final @android.annotation.NonNull Creator<CivicLocation> CREATOR = new Creator<CivicLocation>() {
@Override
public CivicLocation createFromParcel(Parcel in) {
return new CivicLocation(in);
diff --git a/wifi/java/android/net/wifi/rtt/RangingRequest.java b/wifi/java/android/net/wifi/rtt/RangingRequest.java
index 339233b..70af03e 100644
--- a/wifi/java/android/net/wifi/rtt/RangingRequest.java
+++ b/wifi/java/android/net/wifi/rtt/RangingRequest.java
@@ -76,7 +76,7 @@
dest.writeList(mRttPeers);
}
- public static final Creator<RangingRequest> CREATOR = new Creator<RangingRequest>() {
+ public static final @android.annotation.NonNull Creator<RangingRequest> CREATOR = new Creator<RangingRequest>() {
@Override
public RangingRequest[] newArray(int size) {
return new RangingRequest[size];
diff --git a/wifi/java/android/net/wifi/rtt/RangingResult.java b/wifi/java/android/net/wifi/rtt/RangingResult.java
index b53b35c..7c29ff4 100644
--- a/wifi/java/android/net/wifi/rtt/RangingResult.java
+++ b/wifi/java/android/net/wifi/rtt/RangingResult.java
@@ -349,7 +349,7 @@
dest.writeLong(mTimestamp);
}
- public static final Creator<RangingResult> CREATOR = new Creator<RangingResult>() {
+ public static final @android.annotation.NonNull Creator<RangingResult> CREATOR = new Creator<RangingResult>() {
@Override
public RangingResult[] newArray(int size) {
return new RangingResult[size];
diff --git a/wifi/java/android/net/wifi/rtt/ResponderConfig.java b/wifi/java/android/net/wifi/rtt/ResponderConfig.java
index 166af6c..e6ae483 100644
--- a/wifi/java/android/net/wifi/rtt/ResponderConfig.java
+++ b/wifi/java/android/net/wifi/rtt/ResponderConfig.java
@@ -406,7 +406,7 @@
dest.writeInt(preamble);
}
- public static final Creator<ResponderConfig> CREATOR = new Creator<ResponderConfig>() {
+ public static final @android.annotation.NonNull Creator<ResponderConfig> CREATOR = new Creator<ResponderConfig>() {
@Override
public ResponderConfig[] newArray(int size) {
return new ResponderConfig[size];
diff --git a/wifi/java/android/net/wifi/rtt/ResponderLocation.java b/wifi/java/android/net/wifi/rtt/ResponderLocation.java
index 2912a67..7b25eed 100644
--- a/wifi/java/android/net/wifi/rtt/ResponderLocation.java
+++ b/wifi/java/android/net/wifi/rtt/ResponderLocation.java
@@ -439,7 +439,7 @@
}
}
- public static final Creator<ResponderLocation> CREATOR = new Creator<ResponderLocation>() {
+ public static final @android.annotation.NonNull Creator<ResponderLocation> CREATOR = new Creator<ResponderLocation>() {
@Override
public ResponderLocation createFromParcel(Parcel in) {
return new ResponderLocation(in);