diff options
139 files changed, 1327 insertions, 855 deletions
diff --git a/Android.bp b/Android.bp index fd307e7796a1..523e35637f84 100644 --- a/Android.bp +++ b/Android.bp @@ -1552,6 +1552,7 @@ droidstubs { ":openjdk_java_files", ":non_openjdk_java_files", ":opt-telephony-common-srcs", + "core/java/**/*.java", ], arg_files: [ "core/res/AndroidManifest.xml", diff --git a/api/current.txt b/api/current.txt index 76011b52fd90..37a542d80b34 100755 --- a/api/current.txt +++ b/api/current.txt @@ -54,6 +54,7 @@ package android { field public static final String BROADCAST_SMS = "android.permission.BROADCAST_SMS"; field public static final String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY"; field public static final String BROADCAST_WAP_PUSH = "android.permission.BROADCAST_WAP_PUSH"; + field public static final String CALL_COMPANION_APP = "android.permission.CALL_COMPANION_APP"; field public static final String CALL_PHONE = "android.permission.CALL_PHONE"; field public static final String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED"; field public static final String CAMERA = "android.permission.CAMERA"; @@ -41958,6 +41959,7 @@ package android.telecom { field public static final String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS"; field public static final String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE"; field public static final String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP"; + field public static final String EXTRA_IS_ENABLED = "android.telecom.extra.IS_ENABLED"; field public static final String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT"; field public static final String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER"; field public static final String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS"; @@ -41969,6 +41971,7 @@ package android.telecom { field public static final String GATEWAY_PROVIDER_PACKAGE = "android.telecom.extra.GATEWAY_PROVIDER_PACKAGE"; field public static final String METADATA_INCLUDE_EXTERNAL_CALLS = "android.telecom.INCLUDE_EXTERNAL_CALLS"; field public static final String METADATA_INCLUDE_SELF_MANAGED_CALLS = "android.telecom.INCLUDE_SELF_MANAGED_CALLS"; + field public static final String METADATA_IN_CALL_SERVICE_CAR_MODE_UI = "android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"; field public static final String METADATA_IN_CALL_SERVICE_RINGING = "android.telecom.IN_CALL_SERVICE_RINGING"; field public static final String METADATA_IN_CALL_SERVICE_UI = "android.telecom.IN_CALL_SERVICE_UI"; field public static final int PRESENTATION_ALLOWED = 1; // 0x1 @@ -42961,7 +42964,7 @@ package android.telephony { 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(); @@ -43002,7 +43005,7 @@ package android.telephony { method public boolean isNetworkRoaming(int); method public static boolean isUsableSubscriptionId(int); method public static boolean isValidSubscriptionId(int); - method public void removeOnOpportunisticSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener); + method public void removeOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener); method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean removeSubscriptionsFromGroup(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setMetered(boolean, int); @@ -43011,7 +43014,7 @@ package android.telephony { method public void setSubscriptionOverrideCongested(int, boolean, long); method public void setSubscriptionOverrideUnmetered(int, boolean, long); method public void setSubscriptionPlans(int, @NonNull java.util.List<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"; diff --git a/api/system-current.txt b/api/system-current.txt index a2f83fd7783f..1717382272f3 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5916,11 +5916,11 @@ package android.telephony { field public static final int VSNCP_TIMEOUT = 2236; // 0x8bc } - public final class DataSpecificRegistrationStates implements android.os.Parcelable { + public final class DataSpecificRegistrationInfo implements android.os.Parcelable { 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.DataSpecificRegistrationInfo> CREATOR; } public final class DisconnectCause { @@ -6029,7 +6029,7 @@ package android.telephony { method public int getAccessNetworkTechnology(); method @NonNull public java.util.List<java.lang.Integer> getAvailableServices(); method @Nullable public android.telephony.CellIdentity getCellIdentity(); - method @Nullable public android.telephony.DataSpecificRegistrationStates getDataSpecificStates(); + method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo(); method public int getDomain(); method public int getRegistrationState(); method public int getRejectCause(); diff --git a/api/test-current.txt b/api/test-current.txt index bb1a957da589..ca7410931a50 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1484,10 +1484,34 @@ package android.telecom { package android.telephony { + public final class AccessNetworkConstants { + field public static final int TRANSPORT_TYPE_WLAN = 2; // 0x2 + field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1 + } + public class CarrierConfigManager { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void overrideConfig(int, @Nullable android.os.PersistableBundle); } + public final class DataSpecificRegistrationInfo implements android.os.Parcelable { + method public int describeContents(); + method @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo(); + method public void writeToParcel(android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationInfo> CREATOR; + } + + public final class LteVopsSupportInfo implements android.os.Parcelable { + ctor public LteVopsSupportInfo(int, int); + method public int describeContents(); + 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 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 + } + public class MbmsDownloadSession implements java.lang.AutoCloseable { field public static final String MBMS_DOWNLOAD_SERVICE_OVERRIDE_METADATA = "mbms-download-service-override"; } @@ -1500,7 +1524,52 @@ package android.telephony { field public static final String MBMS_STREAMING_SERVICE_OVERRIDE_METADATA = "mbms-streaming-service-override"; } + public final class NetworkRegistrationInfo implements android.os.Parcelable { + method public int describeContents(); + method public int getAccessNetworkTechnology(); + method @NonNull public java.util.List<java.lang.Integer> getAvailableServices(); + method @Nullable public android.telephony.CellIdentity getCellIdentity(); + method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo(); + method public int getDomain(); + method public int getRegistrationState(); + method public int getRejectCause(); + method public int getRoamingType(); + method public int getTransportType(); + method public boolean isEmergencyEnabled(); + method public boolean isRoaming(); + method public void writeToParcel(android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationInfo> CREATOR; + field public static final int DOMAIN_CS = 1; // 0x1 + field public static final int DOMAIN_PS = 2; // 0x2 + field public static final int REGISTRATION_STATE_DENIED = 3; // 0x3 + field public static final int REGISTRATION_STATE_HOME = 1; // 0x1 + field public static final int REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING = 0; // 0x0 + field public static final int REGISTRATION_STATE_NOT_REGISTERED_SEARCHING = 2; // 0x2 + field public static final int REGISTRATION_STATE_ROAMING = 5; // 0x5 + field public static final int REGISTRATION_STATE_UNKNOWN = 4; // 0x4 + field public static final int SERVICE_TYPE_DATA = 2; // 0x2 + field public static final int SERVICE_TYPE_EMERGENCY = 5; // 0x5 + field public static final int SERVICE_TYPE_SMS = 3; // 0x3 + field public static final int SERVICE_TYPE_UNKNOWN = 0; // 0x0 + field public static final int SERVICE_TYPE_VIDEO = 4; // 0x4 + field public static final int SERVICE_TYPE_VOICE = 1; // 0x1 + } + + public static final class NetworkRegistrationInfo.Builder { + ctor public NetworkRegistrationInfo.Builder(); + method @NonNull public android.telephony.NetworkRegistrationInfo build(); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAccessNetworkTechnology(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAvailableServices(@NonNull java.util.List<java.lang.Integer>); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setCellIdentity(@Nullable android.telephony.CellIdentity); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setDomain(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setEmergencyOnly(boolean); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegistrationState(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setTransportType(int); + } + public class ServiceState implements android.os.Parcelable { + method public void addNetworkRegistrationInfo(android.telephony.NetworkRegistrationInfo); method public void setCdmaSystemAndNetworkId(int, int); method public void setCellBandwidths(int[]); method public void setChannelNumber(int); diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index e3c7a2f9431a..7efadf20c3e4 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -794,11 +794,6 @@ Lcom/android/ims/internal/uce/presence/IPresenceService$Stub;-><init>()V Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;-><init>()V Lcom/android/ims/internal/uce/uceservice/IUceService$Stub;-><init>()V 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; -Lcom/android/internal/app/AlertActivity;->setupAlert()V -Lcom/android/internal/app/AssistUtils;-><init>(Landroid/content/Context;)V -Lcom/android/internal/app/AssistUtils;->getAssistComponentForUser(I)Landroid/content/ComponentName; Lcom/android/internal/app/ChooserActivity;-><init>()V Lcom/android/internal/app/IAppOpsCallback$Stub;-><init>()V Lcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V @@ -826,34 +821,9 @@ Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_stopWatchingMode:I 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/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/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; -Lcom/android/internal/app/LocaleHelper;->getDisplayName(Ljava/util/Locale;Ljava/util/Locale;Z)Ljava/lang/String; -Lcom/android/internal/app/LocaleHelper;->normalizeForSearch(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String; -Lcom/android/internal/app/LocalePicker$LocaleInfo;->getLocale()Ljava/util/Locale; -Lcom/android/internal/app/LocalePicker;->getLocales()Landroid/os/LocaleList; -Lcom/android/internal/app/LocalePicker;->updateLocale(Ljava/util/Locale;)V -Lcom/android/internal/app/LocalePicker;->updateLocales(Landroid/os/LocaleList;)V -Lcom/android/internal/app/LocaleStore$LocaleInfo;->getFullNameInUiLanguage()Ljava/lang/String; -Lcom/android/internal/app/LocaleStore$LocaleInfo;->getFullNameNative()Ljava/lang/String; -Lcom/android/internal/app/LocaleStore$LocaleInfo;->getId()Ljava/lang/String; -Lcom/android/internal/app/LocaleStore$LocaleInfo;->getLocale()Ljava/util/Locale; -Lcom/android/internal/app/LocaleStore$LocaleInfo;->getParent()Ljava/util/Locale; -Lcom/android/internal/app/LocaleStore;->fillCache(Landroid/content/Context;)V -Lcom/android/internal/app/LocaleStore;->getLevelLocales(Landroid/content/Context;Ljava/util/Set;Lcom/android/internal/app/LocaleStore$LocaleInfo;Z)Ljava/util/Set; -Lcom/android/internal/app/LocaleStore;->getLocaleInfo(Ljava/util/Locale;)Lcom/android/internal/app/LocaleStore$LocaleInfo; -Lcom/android/internal/app/NetInitiatedActivity;->handleNIVerify(Landroid/content/Intent;)V Lcom/android/internal/app/ResolverActivity;-><init>()V -Lcom/android/internal/app/ResolverActivity;->mAdapter:Lcom/android/internal/app/ResolverActivity$ResolveListAdapter; -Lcom/android/internal/app/ResolverActivity;->mPm:Landroid/content/pm/PackageManager; -Lcom/android/internal/app/ResolverActivity;->onCreate(Landroid/os/Bundle;Landroid/content/Intent;Ljava/lang/CharSequence;[Landroid/content/Intent;Ljava/util/List;Z)V -Lcom/android/internal/app/WindowDecorActionBar$TabImpl;->mCallback:Landroid/app/ActionBar$TabListener; -Lcom/android/internal/app/WindowDecorActionBar;->mTabScrollView:Lcom/android/internal/widget/ScrollingTabContainerView; -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/backup/IBackupTransport$Stub;-><init>()V @@ -861,10 +831,6 @@ Lcom/android/internal/backup/LocalTransport;->mDataDir:Ljava/io/File; Lcom/android/internal/backup/LocalTransport;->mRestorePackage:I Lcom/android/internal/backup/LocalTransport;->mRestorePackages:[Landroid/content/pm/PackageInfo; Lcom/android/internal/content/PackageMonitor;-><init>()V -Lcom/android/internal/database/SortCursor;-><init>([Landroid/database/Cursor;Ljava/lang/String;)V -Lcom/android/internal/database/SortCursor;->mCursor:Landroid/database/Cursor; -Lcom/android/internal/database/SortCursor;->mCursors:[Landroid/database/Cursor; -Lcom/android/internal/http/HttpDateTime;->parse(Ljava/lang/String;)J Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;-><init>()V Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->requestorId:Ljava/lang/String; Lcom/android/internal/location/GpsNetInitiatedHandler$GpsNiNotification;->requestorIdEncoding:I @@ -878,48 +844,11 @@ Lcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/ Lcom/android/internal/logging/MetricsLogger;-><init>()V Lcom/android/internal/net/LegacyVpnInfo;-><init>()V Lcom/android/internal/net/VpnConfig;-><init>()V -Lcom/android/internal/os/AndroidPrintStream;-><init>(ILjava/lang/String;)V Lcom/android/internal/os/BaseCommand;-><init>()V -Lcom/android/internal/os/BaseCommand;->mArgs:Landroid/os/ShellCommand; Lcom/android/internal/os/BatterySipper$DrainType;->values()[Lcom/android/internal/os/BatterySipper$DrainType; -Lcom/android/internal/os/BinderInternal;->getContextObject()Landroid/os/IBinder; -Lcom/android/internal/os/BinderInternal;->handleGc()V -Lcom/android/internal/os/ClassLoaderFactory;->createClassloaderNamespace(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Ljava/lang/String; Lcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService; -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 -Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_utime:I -Lcom/android/internal/os/ProcessCpuTracker;-><init>(Z)V -Lcom/android/internal/os/ProcessCpuTracker;->countWorkingStats()I -Lcom/android/internal/os/ProcessCpuTracker;->getWorkingStats(I)Lcom/android/internal/os/ProcessCpuTracker$Stats; -Lcom/android/internal/os/ProcessCpuTracker;->update()V -Lcom/android/internal/os/RuntimeInit;->commonInit()V -Lcom/android/internal/os/RuntimeInit;->getApplicationObject()Landroid/os/IBinder; -Lcom/android/internal/os/RuntimeInit;->initialized:Z -Lcom/android/internal/os/RuntimeInit;->main([Ljava/lang/String;)V -Lcom/android/internal/os/RuntimeInit;->mApplicationObject:Landroid/os/IBinder; -Lcom/android/internal/os/ZygoteConnection;->closeSocket()V -Lcom/android/internal/os/ZygoteConnection;->mSocket:Landroid/net/LocalSocket; -Lcom/android/internal/os/ZygoteConnection;->mSocketOutStream:Ljava/io/DataOutputStream; -Lcom/android/internal/os/ZygoteConnection;->peer:Landroid/net/Credentials; -Lcom/android/internal/os/ZygoteInit;->main([Ljava/lang/String;)V -Lcom/android/internal/os/ZygoteInit;->mResources:Landroid/content/res/Resources; -Lcom/android/internal/os/ZygoteSecurityException;-><init>(Ljava/lang/String;)V -Lcom/android/internal/policy/DecorView;->mLastBottomInset:I -Lcom/android/internal/policy/DecorView;->mLastLeftInset:I -Lcom/android/internal/policy/DecorView;->mLastRightInset:I -Lcom/android/internal/policy/DecorView;->mWindow:Lcom/android/internal/policy/PhoneWindow; Lcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService; Lcom/android/internal/policy/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; -Lcom/android/internal/policy/PhoneFallbackEventHandler;->mView:Landroid/view/View; -Lcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyDown(ILandroid/view/KeyEvent;)Z -Lcom/android/internal/policy/PhoneFallbackEventHandler;->onKeyUp(ILandroid/view/KeyEvent;)Z -Lcom/android/internal/policy/PhoneFallbackEventHandler;->startCallActivity()V -Lcom/android/internal/policy/PhoneWindow;-><init>(Landroid/content/Context;)V -Lcom/android/internal/policy/PhoneWindow;->mTitle:Ljava/lang/CharSequence; Lcom/android/internal/preference/YesNoPreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V Lcom/android/internal/R$anim;->fade_in:I Lcom/android/internal/R$array;->config_autoBrightnessLcdBacklightValues:I @@ -1671,203 +1600,15 @@ Lcom/android/internal/telephony/uicc/IccUtils;->parseToBnW([BI)Landroid/graphics Lcom/android/internal/telephony/uicc/IccUtils;->parseToRGB([BIZ)Landroid/graphics/Bitmap; Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->values()[Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; Lcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V -Lcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; -Lcom/android/internal/util/ArrayUtils;->appendInt([II)[I -Lcom/android/internal/util/ArrayUtils;->contains([II)Z -Lcom/android/internal/util/ArrayUtils;->contains([Ljava/lang/Object;Ljava/lang/Object;)Z -Lcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object; -Lcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I -Lcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z -Lcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object; -Lcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I -Lcom/android/internal/util/ArrayUtils;->removeElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; -Lcom/android/internal/util/BitwiseInputStream;-><init>([B)V -Lcom/android/internal/util/BitwiseInputStream;->available()I -Lcom/android/internal/util/BitwiseInputStream;->read(I)I -Lcom/android/internal/util/BitwiseInputStream;->readByteArray(I)[B -Lcom/android/internal/util/BitwiseInputStream;->skip(I)V -Lcom/android/internal/util/BitwiseOutputStream;-><init>(I)V -Lcom/android/internal/util/BitwiseOutputStream;->toByteArray()[B -Lcom/android/internal/util/BitwiseOutputStream;->write(II)V -Lcom/android/internal/util/BitwiseOutputStream;->writeByteArray(I[B)V -Lcom/android/internal/util/CharSequences;->compareToIgnoreCase(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I -Lcom/android/internal/util/CharSequences;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z -Lcom/android/internal/util/FastMath;->round(F)I -Lcom/android/internal/util/FastXmlSerializer;-><init>()V -Lcom/android/internal/util/GrowingArrayUtils;->append([III)[I -Lcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object; -Lcom/android/internal/util/HexDump;->hexStringToByteArray(Ljava/lang/String;)[B -Lcom/android/internal/util/HexDump;->toHexString(I)Ljava/lang/String; -Lcom/android/internal/util/HexDump;->toHexString([B)Ljava/lang/String; -Lcom/android/internal/util/HexDump;->toHexString([BII)Ljava/lang/String; -Lcom/android/internal/util/HexDump;->toHexString([BZ)Ljava/lang/String; -Lcom/android/internal/util/IState;->getName()Ljava/lang/String; Lcom/android/internal/util/MemInfoReader;-><init>()V -Lcom/android/internal/util/MemInfoReader;->getCachedSize()J -Lcom/android/internal/util/MemInfoReader;->getFreeSize()J -Lcom/android/internal/util/MemInfoReader;->getRawInfo()[J -Lcom/android/internal/util/MemInfoReader;->getTotalSize()J -Lcom/android/internal/util/MemInfoReader;->readMemInfo()V -Lcom/android/internal/util/Preconditions;->checkArgument(Z)V -Lcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V -Lcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I -Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; -Lcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -Lcom/android/internal/util/Preconditions;->checkState(Z)V -Lcom/android/internal/util/Preconditions;->checkState(ZLjava/lang/String;)V -Lcom/android/internal/util/State;-><init>()V -Lcom/android/internal/util/State;->enter()V -Lcom/android/internal/util/State;->exit()V -Lcom/android/internal/util/State;->getName()Ljava/lang/String; -Lcom/android/internal/util/State;->processMessage(Landroid/os/Message;)Z -Lcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;)V -Lcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;Landroid/os/Handler;)V -Lcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;Landroid/os/Looper;)V -Lcom/android/internal/util/StateMachine;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V -Lcom/android/internal/util/StateMachine;->obtainMessage(III)Landroid/os/Message; -Lcom/android/internal/util/StateMachine;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message; -Lcom/android/internal/util/StateMachine;->sendMessage(I)V -Lcom/android/internal/util/StateMachine;->sendMessage(II)V -Lcom/android/internal/util/StateMachine;->sendMessage(IIILjava/lang/Object;)V -Lcom/android/internal/util/StateMachine;->sendMessage(ILjava/lang/Object;)V -Lcom/android/internal/util/StateMachine;->sendMessage(Landroid/os/Message;)V -Lcom/android/internal/view/ActionBarPolicy;-><init>(Landroid/content/Context;)V -Lcom/android/internal/view/ActionBarPolicy;->get(Landroid/content/Context;)Lcom/android/internal/view/ActionBarPolicy; -Lcom/android/internal/view/ActionBarPolicy;->getEmbeddedMenuWidthLimit()I -Lcom/android/internal/view/ActionBarPolicy;->getMaxActionButtons()I -Lcom/android/internal/view/ActionBarPolicy;->getStackedTabMaxWidth()I -Lcom/android/internal/view/ActionBarPolicy;->getTabContainerHeight()I -Lcom/android/internal/view/ActionBarPolicy;->hasEmbeddedTabs()Z -Lcom/android/internal/view/ActionBarPolicy;->mContext:Landroid/content/Context; -Lcom/android/internal/view/ActionBarPolicy;->showsOverflowMenuButton()Z Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager; Lcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession; -Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->dispose()V -Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->getInstance()Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback; -Lcom/android/internal/view/menu/ActionMenu;-><init>(Landroid/content/Context;)V -Lcom/android/internal/view/menu/ActionMenuItem;-><init>(Landroid/content/Context;IIIILjava/lang/CharSequence;)V -Lcom/android/internal/view/menu/ContextMenuBuilder;-><init>(Landroid/content/Context;)V -Lcom/android/internal/view/menu/IconMenuItemView;->getTextAppropriateLayoutParams()Lcom/android/internal/view/menu/IconMenuView$LayoutParams; -Lcom/android/internal/view/menu/IconMenuItemView;->setIconMenuView(Lcom/android/internal/view/menu/IconMenuView;)V -Lcom/android/internal/view/menu/IconMenuItemView;->setItemInvoker(Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;)V -Lcom/android/internal/view/menu/IconMenuView$SavedState;-><init>(Landroid/os/Parcel;)V -Lcom/android/internal/view/menu/IconMenuView;->createMoreItemView()Lcom/android/internal/view/menu/IconMenuItemView; -Lcom/android/internal/view/menu/IconMenuView;->getNumActualItemsShown()I -Lcom/android/internal/view/menu/IconMenuView;->mItemBackground:Landroid/graphics/drawable/Drawable; -Lcom/android/internal/view/menu/IconMenuView;->mMaxItems:I -Lcom/android/internal/view/menu/IconMenuView;->mMenu:Lcom/android/internal/view/menu/MenuBuilder; -Lcom/android/internal/view/menu/MenuDialogHelper;-><init>(Lcom/android/internal/view/menu/MenuBuilder;)V -Lcom/android/internal/view/menu/MenuDialogHelper;->dismiss()V -Lcom/android/internal/view/menu/MenuDialogHelper;->show(Landroid/os/IBinder;)V -Lcom/android/internal/view/WindowManagerPolicyThread;->getLooper()Landroid/os/Looper; -Lcom/android/internal/widget/AbsActionBarView;->dismissPopupMenus()V -Lcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V -Lcom/android/internal/widget/ActionBarOverlayLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V -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/IRemoteViewsFactory$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/IRemoteViewsFactory; -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; -Lcom/android/internal/widget/LockPatternUtils$RequestThrottledException;-><init>(I)V -Lcom/android/internal/widget/LockPatternUtils$RequestThrottledException;->getTimeoutMs()I -Lcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V -Lcom/android/internal/widget/LockPatternUtils;->checkPassword(Ljava/lang/String;I)Z -Lcom/android/internal/widget/LockPatternUtils;->getActivePasswordQuality(I)I -Lcom/android/internal/widget/LockPatternUtils;->getDevicePolicyManager()Landroid/app/admin/DevicePolicyManager; -Lcom/android/internal/widget/LockPatternUtils;->getKeyguardStoredPasswordQuality(I)I -Lcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings; -Lcom/android/internal/widget/LockPatternUtils;->getOwnerInfo(I)Ljava/lang/String; -Lcom/android/internal/widget/LockPatternUtils;->getPowerButtonInstantlyLocks(I)Z -Lcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String; -Lcom/android/internal/widget/LockPatternUtils;->isDeviceEncryptionEnabled()Z -Lcom/android/internal/widget/LockPatternUtils;->isLockPasswordEnabled(I)Z -Lcom/android/internal/widget/LockPatternUtils;->isLockPatternEnabled(I)Z -Lcom/android/internal/widget/LockPatternUtils;->isLockScreenDisabled(I)Z -Lcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z -Lcom/android/internal/widget/LockPatternUtils;->isTactileFeedbackEnabled()Z -Lcom/android/internal/widget/LockPatternUtils;->isVisiblePatternEnabled(I)Z -Lcom/android/internal/widget/LockPatternUtils;->mContentResolver:Landroid/content/ContentResolver; -Lcom/android/internal/widget/LockPatternUtils;->mContext:Landroid/content/Context; -Lcom/android/internal/widget/LockPatternUtils;->patternToHash(Ljava/util/List;)[B -Lcom/android/internal/widget/LockPatternUtils;->patternToString(Ljava/util/List;)Ljava/lang/String; -Lcom/android/internal/widget/LockPatternUtils;->reportFailedPasswordAttempt(I)V -Lcom/android/internal/widget/LockPatternUtils;->reportSuccessfulPasswordAttempt(I)V -Lcom/android/internal/widget/LockPatternUtils;->saveLockPassword(Ljava/lang/String;Ljava/lang/String;II)V -Lcom/android/internal/widget/LockPatternUtils;->setLockoutAttemptDeadline(II)J -Lcom/android/internal/widget/LockPatternUtils;->setLong(Ljava/lang/String;JI)V -Lcom/android/internal/widget/LockPatternUtils;->setOwnerInfo(Ljava/lang/String;I)V -Lcom/android/internal/widget/LockPatternUtils;->setOwnerInfoEnabled(ZI)V -Lcom/android/internal/widget/LockPatternUtils;->setString(Ljava/lang/String;Ljava/lang/String;I)V -Lcom/android/internal/widget/LockPatternView$Cell;->column:I -Lcom/android/internal/widget/LockPatternView$Cell;->row:I -Lcom/android/internal/widget/LockPatternView$DisplayMode;->Animate:Lcom/android/internal/widget/LockPatternView$DisplayMode; -Lcom/android/internal/widget/LockPatternView$DisplayMode;->Correct:Lcom/android/internal/widget/LockPatternView$DisplayMode; -Lcom/android/internal/widget/LockPatternView$DisplayMode;->Wrong:Lcom/android/internal/widget/LockPatternView$DisplayMode; -Lcom/android/internal/widget/LockPatternView$SavedState;-><init>(Landroid/os/Parcel;)V -Lcom/android/internal/widget/LockPatternView$SavedState;-><init>(Landroid/os/Parcelable;Ljava/lang/String;IZZZ)V -Lcom/android/internal/widget/LockPatternView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V -Lcom/android/internal/widget/LockPatternView;->clearPattern()V -Lcom/android/internal/widget/LockPatternView;->disableInput()V -Lcom/android/internal/widget/LockPatternView;->enableInput()V -Lcom/android/internal/widget/LockPatternView;->getCellStates()[[Lcom/android/internal/widget/LockPatternView$CellState; -Lcom/android/internal/widget/LockPatternView;->mInStealthMode:Z -Lcom/android/internal/widget/LockPatternView;->mPaint:Landroid/graphics/Paint; -Lcom/android/internal/widget/LockPatternView;->mPathPaint:Landroid/graphics/Paint; -Lcom/android/internal/widget/LockPatternView;->mPattern:Ljava/util/ArrayList; -Lcom/android/internal/widget/LockPatternView;->mPatternDisplayMode:Lcom/android/internal/widget/LockPatternView$DisplayMode; -Lcom/android/internal/widget/LockPatternView;->mPatternInProgress:Z -Lcom/android/internal/widget/LockPatternView;->mSquareHeight:F -Lcom/android/internal/widget/LockPatternView;->mSquareWidth:F -Lcom/android/internal/widget/LockPatternView;->notifyPatternDetected()V -Lcom/android/internal/widget/LockPatternView;->setDisplayMode(Lcom/android/internal/widget/LockPatternView$DisplayMode;)V -Lcom/android/internal/widget/LockPatternView;->setInStealthMode(Z)V -Lcom/android/internal/widget/LockPatternView;->setOnPatternListener(Lcom/android/internal/widget/LockPatternView$OnPatternListener;)V -Lcom/android/internal/widget/LockPatternView;->setTactileFeedbackEnabled(Z)V Lcom/android/internal/widget/PointerLocationView$PointerState;-><init>()V -Lcom/android/internal/widget/PointerLocationView$PointerState;->mCurDown:Z -Lcom/android/internal/widget/PointerLocationView;->mCurDown:Z -Lcom/android/internal/widget/PointerLocationView;->mCurNumPointers:I -Lcom/android/internal/widget/PointerLocationView;->mMaxNumPointers:I -Lcom/android/internal/widget/PointerLocationView;->mPointers:Ljava/util/ArrayList; -Lcom/android/internal/widget/PointerLocationView;->mPrintCoords:Z -Lcom/android/internal/widget/PreferenceImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V -Lcom/android/internal/widget/RecyclerView$RecycledViewPool$ScrapData;->mScrapHeap:Ljava/util/ArrayList; -Lcom/android/internal/widget/ScrollBarUtils;->getThumbLength(IIII)I -Lcom/android/internal/widget/SlidingTab$Slider;->tab:Landroid/widget/ImageView; -Lcom/android/internal/widget/SlidingTab$Slider;->text:Landroid/widget/TextView; -Lcom/android/internal/widget/SlidingTab;->mAnimationDoneListener:Landroid/view/animation/Animation$AnimationListener; -Lcom/android/internal/widget/SlidingTab;->mLeftSlider:Lcom/android/internal/widget/SlidingTab$Slider; -Lcom/android/internal/widget/SlidingTab;->mRightSlider:Lcom/android/internal/widget/SlidingTab$Slider; -Lcom/android/internal/widget/SlidingTab;->onAnimationDone()V -Lcom/android/internal/widget/SlidingTab;->resetView()V -Lcom/android/internal/widget/SlidingTab;->setHoldAfterTrigger(ZZ)V -Lcom/android/internal/widget/SlidingTab;->setLeftHintText(I)V -Lcom/android/internal/widget/SlidingTab;->setLeftTabResources(IIII)V -Lcom/android/internal/widget/SlidingTab;->setOnTriggerListener(Lcom/android/internal/widget/SlidingTab$OnTriggerListener;)V -Lcom/android/internal/widget/SlidingTab;->setRightHintText(I)V -Lcom/android/internal/widget/SlidingTab;->setRightTabResources(IIII)V -Lcom/android/internal/widget/TextViewInputDisabler;-><init>(Landroid/widget/TextView;)V -Lcom/android/internal/widget/TextViewInputDisabler;->setInputEnabled(Z)V -Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageScrolled(IFI)V -Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageScrollStateChanged(I)V -Lcom/android/internal/widget/ViewPager$OnPageChangeListener;->onPageSelected(I)V -Lcom/android/internal/widget/ViewPager;->getCurrentItem()I Lcom/android/server/net/BaseNetworkObserver;-><init>()V -Lcom/android/server/net/NetlinkTracker;-><init>(Ljava/lang/String;Lcom/android/server/net/NetlinkTracker$Callback;)V -Lcom/android/server/net/NetlinkTracker;->clearLinkProperties()V -Lcom/android/server/net/NetlinkTracker;->getLinkProperties()Landroid/net/LinkProperties; Lcom/android/server/ResettableTimeout$T;-><init>(Lcom/android/server/ResettableTimeout;)V -Lcom/android/server/ResettableTimeout;->mLock:Landroid/os/ConditionVariable; -Lcom/android/server/ResettableTimeout;->mOffAt:J -Lcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList; -Lcom/google/android/collect/Sets;->newArraySet()Landroid/util/ArraySet; -Lcom/google/android/collect/Sets;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet; -Lcom/google/android/collect/Sets;->newHashSet()Ljava/util/HashSet; -Lcom/google/android/collect/Sets;->newHashSet([Ljava/lang/Object;)Ljava/util/HashSet; -Lcom/google/android/collect/Sets;->newSortedSet()Ljava/util/SortedSet; Lcom/google/android/gles_jni/EGLImpl;-><init>()V Lcom/google/android/gles_jni/GLImpl;-><init>()V Lcom/google/android/mms/ContentType;->getAudioTypes()Ljava/util/ArrayList; @@ -2150,17 +1891,7 @@ Lcom/google/android/mms/util/SqliteWrapper;->insert(Landroid/content/Context;Lan Lcom/google/android/mms/util/SqliteWrapper;->query(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; Lcom/google/android/mms/util/SqliteWrapper;->requery(Landroid/content/Context;Landroid/database/Cursor;)Z Lcom/google/android/mms/util/SqliteWrapper;->update(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I -Lcom/google/android/util/AbstractMessageParser$Token$Type;->ACRONYM:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->FLICKR:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->FORMAT:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->GOOGLE_VIDEO:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->HTML:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->LINK:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->MUSIC:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->PHOTO:Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->SMILEY:Lcom/google/android/util/AbstractMessageParser$Token$Type; Lcom/google/android/util/AbstractMessageParser$Token$Type;->values()[Lcom/google/android/util/AbstractMessageParser$Token$Type; -Lcom/google/android/util/AbstractMessageParser$Token$Type;->YOUTUBE_VIDEO:Lcom/google/android/util/AbstractMessageParser$Token$Type; Lgov/nist/core/Debug;->printStackTrace(Ljava/lang/Exception;)V Lgov/nist/core/GenericObject;-><init>()V Lgov/nist/core/GenericObject;->dbgPrint()V diff --git a/core/java/android/app/ApplicationLoaders.java b/core/java/android/app/ApplicationLoaders.java index 9ef24c6c2aeb..faa30f3a98b8 100644 --- a/core/java/android/app/ApplicationLoaders.java +++ b/core/java/android/app/ApplicationLoaders.java @@ -17,20 +17,27 @@ package android.app; import android.annotation.UnsupportedAppUsage; +import android.content.pm.SharedLibraryInfo; import android.os.Build; import android.os.GraphicsEnvironment; import android.os.Trace; import android.util.ArrayMap; +import android.util.Log; import com.android.internal.os.ClassLoaderFactory; import dalvik.system.PathClassLoader; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** @hide */ public class ApplicationLoaders { + private static final String TAG = "ApplicationLoaders"; + @UnsupportedAppUsage public static ApplicationLoaders getDefault() { return gApplicationLoaders; @@ -54,6 +61,26 @@ public class ApplicationLoaders { libraryPermittedPath, parent, zip, classLoaderName, sharedLibraries); } + /** + * Gets a class loader for a shared library. Additional dependent shared libraries are allowed + * to be specified (sharedLibraries). + * + * Additionally, as an optimization, this will return a pre-created ClassLoader if one has + * been cached by createAndCacheNonBootclasspathSystemClassLoaders. + */ + ClassLoader getSharedLibraryClassLoaderWithSharedLibraries(String zip, int targetSdkVersion, + boolean isBundled, String librarySearchPath, String libraryPermittedPath, + ClassLoader parent, String classLoaderName, List<ClassLoader> sharedLibraries) { + ClassLoader loader = getCachedNonBootclasspathSystemLib(zip, parent, classLoaderName, + sharedLibraries); + if (loader != null) { + return loader; + } + + return getClassLoaderWithSharedLibraries(zip, targetSdkVersion, isBundled, + librarySearchPath, libraryPermittedPath, parent, classLoaderName, sharedLibraries); + } + private ClassLoader getClassLoader(String zip, int targetSdkVersion, boolean isBundled, String librarySearchPath, String libraryPermittedPath, ClassLoader parent, String cacheKey, @@ -95,7 +122,9 @@ public class ApplicationLoaders { classloader, librarySearchPath, libraryPermittedPath); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); - mLoaders.put(cacheKey, classloader); + if (cacheKey != null) { + mLoaders.put(cacheKey, classloader); + } return classloader; } @@ -108,6 +137,112 @@ public class ApplicationLoaders { } /** + * Caches system library class loaders which are not on the bootclasspath but are still used + * by many system apps. + * + * All libraries in the closure of libraries to be loaded must be in libs. A library can + * only depend on libraries that come before it in the list. + */ + public void createAndCacheNonBootclasspathSystemClassLoaders(SharedLibraryInfo[] libs) { + if (mSystemLibsCacheMap != null) { + Log.wtf(TAG, "Already cached."); + return; + } + + mSystemLibsCacheMap = new HashMap<String, CachedClassLoader>(); + + for (SharedLibraryInfo lib : libs) { + createAndCacheNonBootclasspathSystemClassLoader(lib); + } + } + + /** + * Caches a single non-bootclasspath class loader. + * + * All of this library's dependencies must have previously been cached. + */ + private void createAndCacheNonBootclasspathSystemClassLoader(SharedLibraryInfo lib) { + String path = lib.getPath(); + List<SharedLibraryInfo> dependencies = lib.getDependencies(); + + // get cached classloaders for dependencies + ArrayList<ClassLoader> sharedLibraries = null; + if (dependencies != null) { + sharedLibraries = new ArrayList<ClassLoader>(dependencies.size()); + for (SharedLibraryInfo dependency : dependencies) { + String dependencyPath = dependency.getPath(); + CachedClassLoader cached = mSystemLibsCacheMap.get(dependencyPath); + + if (cached == null) { + Log.e(TAG, "Failed to find dependency " + dependencyPath + + " of cached library " + path); + return; + } + + sharedLibraries.add(cached.loader); + } + } + + // assume cached libraries work with current sdk since they are built-in + ClassLoader classLoader = getClassLoader(path, Build.VERSION.SDK_INT, true /*isBundled*/, + null /*librarySearchPath*/, null /*libraryPermittedPath*/, null /*parent*/, + null /*cacheKey*/, null /*classLoaderName*/, sharedLibraries /*sharedLibraries*/); + + if (classLoader == null) { + Log.e(TAG, "Failed to cache " + path); + return; + } + + CachedClassLoader cached = new CachedClassLoader(); + cached.loader = classLoader; + cached.sharedLibraries = sharedLibraries; + + Log.d(TAG, "Created zygote-cached class loader: " + path); + mSystemLibsCacheMap.put(path, cached); + } + + private static boolean sharedLibrariesEquals(List<ClassLoader> lhs, List<ClassLoader> rhs) { + if (lhs == null) { + return rhs == null; + } + + return lhs.equals(rhs); + } + + /** + * Returns lib cached with createAndCacheNonBootclasspathSystemClassLoader. This is called by + * the zygote during caching. + * + * If there is an error or the cache is not available, this returns null. + */ + private ClassLoader getCachedNonBootclasspathSystemLib(String zip, ClassLoader parent, + String classLoaderName, List<ClassLoader> sharedLibraries) { + if (mSystemLibsCacheMap == null) { + return null; + } + + // we only cache top-level libs with the default class loader + if (parent != null || classLoaderName != null) { + return null; + } + + CachedClassLoader cached = mSystemLibsCacheMap.get(zip); + if (cached == null) { + return null; + } + + // cached must be built and loaded in the same environment + if (!sharedLibrariesEquals(sharedLibraries, cached.sharedLibraries)) { + Log.w(TAG, "Unexpected environment for cached library: (" + sharedLibraries + "|" + + cached.sharedLibraries + ")"); + return null; + } + + Log.d(TAG, "Returning zygote-cached class loader: " + zip); + return cached.loader; + } + + /** * Creates a classloader for the WebView APK and places it in the cache of loaders maintained * by this class. This is used in the WebView zygote, where its presence in the cache speeds up * startup and enables memory sharing. @@ -151,4 +286,18 @@ public class ApplicationLoaders { private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<>(); private static final ApplicationLoaders gApplicationLoaders = new ApplicationLoaders(); + + private static class CachedClassLoader { + ClassLoader loader; + + /** + * The shared libraries used when constructing loader for verification. + */ + List<ClassLoader> sharedLibraries; + } + + /** + * This is a map of zip to associated class loader. + */ + private Map<String, CachedClassLoader> mSystemLibsCacheMap = null; } diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 0f1ba390cd7a..53849ba92339 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -675,7 +675,7 @@ public final class LoadedApk { // Shared libraries get a null parent: this has the side effect of having canonicalized // shared libraries using ApplicationLoaders cache, which is the behavior we want. - return ApplicationLoaders.getDefault().getClassLoaderWithSharedLibraries(jars, + return ApplicationLoaders.getDefault().getSharedLibraryClassLoaderWithSharedLibraries(jars, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, /* parent */ null, /* classLoaderName */ null, sharedLibraries); diff --git a/services/net/java/android/net/StaticIpConfigurationParcelable.aidl b/core/java/android/net/StaticIpConfiguration.aidl index 6fffb423edb5..8aac701fe7e1 100644 --- a/services/net/java/android/net/StaticIpConfigurationParcelable.aidl +++ b/core/java/android/net/StaticIpConfiguration.aidl @@ -17,11 +17,4 @@ package android.net; -import android.net.LinkAddress; - -parcelable StaticIpConfigurationParcelable { - LinkAddress ipAddress; - String gateway; - String[] dnsServers; - String domains; -} +@JavaOnlyStableParcelable parcelable StaticIpConfiguration;
\ No newline at end of file diff --git a/core/java/android/net/apf/ApfCapabilities.aidl b/core/java/android/net/apf/ApfCapabilities.aidl new file mode 100644 index 000000000000..7c4d4c2da4bc --- /dev/null +++ b/core/java/android/net/apf/ApfCapabilities.aidl @@ -0,0 +1,20 @@ +/* +** +** 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.net.apf; + +@JavaOnlyStableParcelable parcelable ApfCapabilities;
\ No newline at end of file diff --git a/core/java/com/android/internal/app/AlertActivity.java b/core/java/com/android/internal/app/AlertActivity.java index 999a908251dd..0b08099b51ed 100644 --- a/core/java/com/android/internal/app/AlertActivity.java +++ b/core/java/com/android/internal/app/AlertActivity.java @@ -16,6 +16,7 @@ package com.android.internal.app; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; @@ -38,11 +39,13 @@ public abstract class AlertActivity extends Activity implements DialogInterface * * @see #mAlertParams */ + @UnsupportedAppUsage protected AlertController mAlert; /** * The parameters for the alert. */ + @UnsupportedAppUsage protected AlertController.AlertParams mAlertParams; @Override @@ -90,6 +93,7 @@ public abstract class AlertActivity extends Activity implements DialogInterface * @see #mAlert * @see #mAlertParams */ + @UnsupportedAppUsage protected void setupAlert() { mAlert.installContent(mAlertParams); } diff --git a/core/java/com/android/internal/app/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java index fed0a89a4d75..9ae614982fb5 100644 --- a/core/java/com/android/internal/app/AssistUtils.java +++ b/core/java/com/android/internal/app/AssistUtils.java @@ -18,6 +18,7 @@ package com.android.internal.app; import com.android.internal.R; +import android.annotation.UnsupportedAppUsage; import android.app.SearchManager; import android.content.ComponentName; import android.content.Context; @@ -53,6 +54,7 @@ public class AssistUtils { private final Context mContext; private final IVoiceInteractionManagerService mVoiceInteractionManagerService; + @UnsupportedAppUsage public AssistUtils(Context context) { mContext = context; mVoiceInteractionManagerService = IVoiceInteractionManagerService.Stub.asInterface( @@ -155,6 +157,7 @@ public class AssistUtils { } } + @UnsupportedAppUsage public ComponentName getAssistComponentForUser(int userId) { final String setting = Settings.Secure.getStringForUser(mContext.getContentResolver(), Settings.Secure.ASSISTANT, userId); diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index c31f17af67af..6343908738fc 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.ActivityManager; import android.app.usage.UsageStatsManager; diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java index 4728124c17c5..ed771406db5c 100644 --- a/core/java/com/android/internal/app/IntentForwarderActivity.java +++ b/core/java/com/android/internal/app/IntentForwarderActivity.java @@ -20,6 +20,7 @@ import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY; import android.annotation.Nullable; import android.annotation.StringRes; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityThread; @@ -50,6 +51,7 @@ import java.util.Set; * be passed in and out of a managed profile. */ public class IntentForwarderActivity extends Activity { + @UnsupportedAppUsage public static String TAG = "IntentForwarderActivity"; public static String FORWARD_INTENT_TO_PARENT diff --git a/core/java/com/android/internal/app/LocaleHelper.java b/core/java/com/android/internal/app/LocaleHelper.java index 0a230a90a735..aef4dbf41d35 100644 --- a/core/java/com/android/internal/app/LocaleHelper.java +++ b/core/java/com/android/internal/app/LocaleHelper.java @@ -17,6 +17,7 @@ package com.android.internal.app; import android.annotation.IntRange; +import android.annotation.UnsupportedAppUsage; import android.icu.text.ListFormatter; import android.icu.util.ULocale; import android.os.LocaleList; @@ -84,6 +85,7 @@ public class LocaleHelper { * @param locale the locale that might be used for certain operations (i.e. case conversion) * @return the string normalized for search */ + @UnsupportedAppUsage public static String normalizeForSearch(String str, Locale locale) { // TODO: tbd if it needs to be smarter (real normalization, remove accents, etc.) // If needed we might use case folding and ICU/CLDR's collation-based loose searching. @@ -109,6 +111,7 @@ public class LocaleHelper { * @param sentenceCase true if the result should be sentence-cased * @return the localized name of the locale. */ + @UnsupportedAppUsage public static String getDisplayName(Locale locale, Locale displayLocale, boolean sentenceCase) { final ULocale displayULocale = ULocale.forLocale(displayLocale); String result = shouldUseDialectName(locale) @@ -135,6 +138,7 @@ public class LocaleHelper { * @param displayLocale the locale in which to display the name. * @return the localized country name. */ + @UnsupportedAppUsage public static String getDisplayCountry(Locale locale, Locale displayLocale) { final String languageTag = locale.toLanguageTag(); final ULocale uDisplayLocale = ULocale.forLocale(displayLocale); @@ -226,6 +230,7 @@ public class LocaleHelper { * * @param sortLocale the locale to be used for sorting. */ + @UnsupportedAppUsage public LocaleInfoComparator(Locale sortLocale, boolean countryMode) { mCollator = Collator.getInstance(sortLocale); mCountryMode = countryMode; @@ -253,6 +258,7 @@ public class LocaleHelper { * @return a negative integer, zero, or a positive integer as the first * argument is less than, equal to, or greater than the second. */ + @UnsupportedAppUsage @Override public int compare(LocaleStore.LocaleInfo lhs, LocaleStore.LocaleInfo rhs) { // We don't care about the various suggestion types, just "suggested" (!= 0) diff --git a/core/java/com/android/internal/app/LocalePicker.java b/core/java/com/android/internal/app/LocalePicker.java index c8c2fcf60d1f..75174246cd99 100644 --- a/core/java/com/android/internal/app/LocalePicker.java +++ b/core/java/com/android/internal/app/LocalePicker.java @@ -18,6 +18,7 @@ package com.android.internal.app; import com.android.internal.R; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.ListFragment; @@ -70,6 +71,7 @@ public class LocalePicker extends ListFragment { return label; } + @UnsupportedAppUsage public Locale getLocale() { return locale; } @@ -251,6 +253,7 @@ public class LocalePicker extends ListFragment { * * @see #updateLocales(LocaleList) */ + @UnsupportedAppUsage public static void updateLocale(Locale locale) { updateLocales(new LocaleList(locale)); } @@ -260,6 +263,7 @@ public class LocalePicker extends ListFragment { * Note that the system looks halted for a while during the Locale migration, * so the caller need to take care of it. */ + @UnsupportedAppUsage public static void updateLocales(LocaleList locales) { try { final IActivityManager am = ActivityManager.getService(); @@ -281,6 +285,7 @@ public class LocalePicker extends ListFragment { * * @return The locale list. */ + @UnsupportedAppUsage public static LocaleList getLocales() { try { return ActivityManager.getService() diff --git a/core/java/com/android/internal/app/LocaleStore.java b/core/java/com/android/internal/app/LocaleStore.java index d24701372453..df2df4e92200 100644 --- a/core/java/com/android/internal/app/LocaleStore.java +++ b/core/java/com/android/internal/app/LocaleStore.java @@ -16,6 +16,7 @@ package com.android.internal.app; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.LocaleList; import android.provider.Settings; @@ -80,14 +81,17 @@ public class LocaleStore { return mId; } + @UnsupportedAppUsage public Locale getLocale() { return mLocale; } + @UnsupportedAppUsage public Locale getParent() { return mParent; } + @UnsupportedAppUsage public String getId() { return mId; } @@ -114,6 +118,7 @@ public class LocaleStore { return (mSuggestionFlags & suggestionMask) == suggestionMask; } + @UnsupportedAppUsage public String getFullNameNative() { if (mFullNameNative == null) { mFullNameNative = @@ -139,6 +144,7 @@ public class LocaleStore { * For instance German will show as "Deutsch" in the list, but we will also search for * "allemand" if the system UI is in French. */ + @UnsupportedAppUsage public String getFullNameInUiLanguage() { // We don't cache the UI name because the default locale keeps changing return LocaleHelper.getDisplayName(mLocale, true /* sentence case */); @@ -253,6 +259,7 @@ public class LocaleStore { } } + @UnsupportedAppUsage public static void fillCache(Context context) { if (sFullyInitialized) { return; @@ -339,6 +346,7 @@ public class LocaleStore { * Example: if the parent is "ar", then the region list will contain all Arabic locales. * (this is not language based, but language-script, so that it works for zh-Hant and so on. */ + @UnsupportedAppUsage public static Set<LocaleInfo> getLevelLocales(Context context, Set<String> ignorables, LocaleInfo parent, boolean translatedOnly) { fillCache(context); @@ -364,6 +372,7 @@ public class LocaleStore { return result; } + @UnsupportedAppUsage public static LocaleInfo getLocaleInfo(Locale locale) { String id = locale.toLanguageTag(); LocaleInfo result; diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java index d3bae16d03a7..9a802a9c0fa9 100644 --- a/core/java/com/android/internal/app/NetInitiatedActivity.java +++ b/core/java/com/android/internal/app/NetInitiatedActivity.java @@ -16,6 +16,7 @@ package com.android.internal.app; +import android.annotation.UnsupportedAppUsage; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -141,6 +142,7 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa locationManager.sendNiResponse(notificationId, response); } + @UnsupportedAppUsage private void handleNIVerify(Intent intent) { int notifId = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_NOTIF_ID, -1); notificationId = notifId; diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index ceb06f511108..5ab76694df65 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -19,6 +19,7 @@ package com.android.internal.app; import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.UiThread; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityThread; @@ -90,6 +91,7 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; @UiThread public class ResolverActivity extends Activity { + @UnsupportedAppUsage protected ResolveListAdapter mAdapter; private boolean mSafeForwardingMode; private AbsListView mAdapterView; @@ -110,6 +112,7 @@ public class ResolverActivity extends Activity { // Whether or not this activity supports choosing a default handler for the intent. private boolean mSupportsAlwaysUseOption; protected ResolverDrawerLayout mResolverDrawerLayout; + @UnsupportedAppUsage protected PackageManager mPm; protected int mLaunchedFromUid; @@ -242,6 +245,7 @@ public class ResolverActivity extends Activity { * Compatibility version for other bundled services that use this overload without * a default title resource */ + @UnsupportedAppUsage protected void onCreate(Bundle savedInstanceState, Intent intent, CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList, boolean supportsAlwaysUseOption) { diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index 119f30df8946..e71ee66c677c 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -84,6 +84,7 @@ public class WindowDecorActionBar extends ActionBar implements private ActionBarContextView mContextView; private ActionBarContainer mSplitView; private View mContentView; + @UnsupportedAppUsage private ScrollingTabContainerView mTabScrollView; private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>(); @@ -331,6 +332,7 @@ public class WindowDecorActionBar extends ActionBar implements * * @param enabled true to animate, false to not animate. */ + @UnsupportedAppUsage public void setShowHideAnimationEnabled(boolean enabled) { mShowHideAnimationEnabled = enabled; if (!enabled && mCurrentShowAnim != null) { @@ -1147,6 +1149,7 @@ public class WindowDecorActionBar extends ActionBar implements * @hide */ public class TabImpl extends ActionBar.Tab { + @UnsupportedAppUsage private ActionBar.TabListener mCallback; private Object mTag; private Drawable mIcon; diff --git a/core/java/com/android/internal/database/SortCursor.java b/core/java/com/android/internal/database/SortCursor.java index 00255128972c..7fe809ee319b 100644 --- a/core/java/com/android/internal/database/SortCursor.java +++ b/core/java/com/android/internal/database/SortCursor.java @@ -16,6 +16,7 @@ package com.android.internal.database; +import android.annotation.UnsupportedAppUsage; import android.database.AbstractCursor; import android.database.Cursor; import android.database.DataSetObserver; @@ -28,7 +29,9 @@ import android.util.Log; public class SortCursor extends AbstractCursor { private static final String TAG = "SortCursor"; + @UnsupportedAppUsage private Cursor mCursor; // updated in onMove + @UnsupportedAppUsage private Cursor[] mCursors; private int [] mSortColumns; private final int ROWCACHESIZE = 64; @@ -52,6 +55,7 @@ public class SortCursor extends AbstractCursor } }; + @UnsupportedAppUsage public SortCursor(Cursor[] cursors, String sortcolumn) { mCursors = cursors; diff --git a/core/java/com/android/internal/http/HttpDateTime.java b/core/java/com/android/internal/http/HttpDateTime.java index 8ebd4aaf1ac0..f7706e310952 100644 --- a/core/java/com/android/internal/http/HttpDateTime.java +++ b/core/java/com/android/internal/http/HttpDateTime.java @@ -16,6 +16,7 @@ package com.android.internal.http; +import android.annotation.UnsupportedAppUsage; import android.text.format.Time; import java.util.Calendar; @@ -82,6 +83,7 @@ public final class HttpDateTime { int second; } + @UnsupportedAppUsage public static long parse(String timeString) throws IllegalArgumentException { diff --git a/core/java/com/android/internal/os/AndroidPrintStream.java b/core/java/com/android/internal/os/AndroidPrintStream.java index 7f4807a5b863..fe2341144d28 100644 --- a/core/java/com/android/internal/os/AndroidPrintStream.java +++ b/core/java/com/android/internal/os/AndroidPrintStream.java @@ -16,6 +16,7 @@ package com.android.internal.os; +import android.annotation.UnsupportedAppUsage; import android.util.Log; /** @@ -34,6 +35,7 @@ class AndroidPrintStream extends LoggingPrintStream { * @param priority from {@link android.util.Log} * @param tag to log */ + @UnsupportedAppUsage public AndroidPrintStream(int priority, String tag) { if (tag == null) { throw new NullPointerException("tag"); diff --git a/core/java/com/android/internal/os/BaseCommand.java b/core/java/com/android/internal/os/BaseCommand.java index 05ec9e90513e..278f40660ee9 100644 --- a/core/java/com/android/internal/os/BaseCommand.java +++ b/core/java/com/android/internal/os/BaseCommand.java @@ -17,12 +17,14 @@ package com.android.internal.os; +import android.annotation.UnsupportedAppUsage; import android.os.ShellCommand; import java.io.PrintStream; public abstract class BaseCommand { + @UnsupportedAppUsage final protected ShellCommand mArgs = new ShellCommand() { @Override public int onCommand(String cmd) { return 0; diff --git a/core/java/com/android/internal/os/BinderInternal.java b/core/java/com/android/internal/os/BinderInternal.java index 5bddd2f98983..6efcbda9a00d 100644 --- a/core/java/com/android/internal/os/BinderInternal.java +++ b/core/java/com/android/internal/os/BinderInternal.java @@ -17,6 +17,7 @@ package com.android.internal.os; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.os.Handler; import android.os.IBinder; import android.os.SystemClock; @@ -94,6 +95,7 @@ public class BinderInternal { * an implementation of IServiceManager, which you can use to find * other services. */ + @UnsupportedAppUsage public static final native IBinder getContextObject(); /** @@ -105,6 +107,7 @@ public class BinderInternal { public static final native void setMaxThreads(int numThreads); + @UnsupportedAppUsage static native final void handleGc(); public static void forceGc(String reason) { diff --git a/core/java/com/android/internal/os/ClassLoaderFactory.java b/core/java/com/android/internal/os/ClassLoaderFactory.java index 99a1a19686e4..d32349834dd8 100644 --- a/core/java/com/android/internal/os/ClassLoaderFactory.java +++ b/core/java/com/android/internal/os/ClassLoaderFactory.java @@ -16,6 +16,7 @@ package com.android.internal.os; +import android.annotation.UnsupportedAppUsage; import android.os.Trace; import dalvik.system.DelegateLastClassLoader; @@ -132,6 +133,7 @@ public class ClassLoaderFactory { return classLoader; } + @UnsupportedAppUsage private static native String createClassloaderNamespace(ClassLoader classLoader, int targetSdkVersion, String librarySearchPath, diff --git a/core/java/com/android/internal/os/ProcessCpuTracker.java b/core/java/com/android/internal/os/ProcessCpuTracker.java index 1ee4269d974b..e097ddbdab40 100644 --- a/core/java/com/android/internal/os/ProcessCpuTracker.java +++ b/core/java/com/android/internal/os/ProcessCpuTracker.java @@ -18,6 +18,7 @@ package com.android.internal.os; import static android.os.Process.*; +import android.annotation.UnsupportedAppUsage; import android.os.FileUtils; import android.os.Process; import android.os.StrictMode; @@ -197,6 +198,7 @@ public class ProcessCpuTracker { public boolean interesting; public String baseName; + @UnsupportedAppUsage public String name; public int nameWidth; @@ -212,6 +214,7 @@ public class ProcessCpuTracker { /** * Time in milliseconds. */ + @UnsupportedAppUsage public long rel_uptime; /** @@ -227,11 +230,13 @@ public class ProcessCpuTracker { /** * Time in milliseconds. */ + @UnsupportedAppUsage public int rel_utime; /** * Time in milliseconds. */ + @UnsupportedAppUsage public int rel_stime; public long base_minfaults; @@ -292,6 +297,7 @@ public class ProcessCpuTracker { }; + @UnsupportedAppUsage public ProcessCpuTracker(boolean includeThreads) { mIncludeThreads = includeThreads; long jiffyHz = Os.sysconf(OsConstants._SC_CLK_TCK); @@ -311,6 +317,7 @@ public class ProcessCpuTracker { update(); } + @UnsupportedAppUsage public void update() { if (DEBUG) Slog.v(TAG, "Update: " + this); @@ -713,11 +720,13 @@ public class ProcessCpuTracker { return statses; } + @UnsupportedAppUsage final public int countWorkingStats() { buildWorkingProcs(); return mWorkingProcs.size(); } + @UnsupportedAppUsage final public Stats getWorkingStats(int index) { return mWorkingProcs.get(index); } diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java index e37e650f6e50..eac150dbd320 100644 --- a/core/java/com/android/internal/os/RuntimeInit.java +++ b/core/java/com/android/internal/os/RuntimeInit.java @@ -16,6 +16,7 @@ package com.android.internal.os; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.ApplicationErrorReport; @@ -48,8 +49,10 @@ public class RuntimeInit { final static boolean DEBUG = false; /** true if commonInit() has been called */ + @UnsupportedAppUsage private static boolean initialized; + @UnsupportedAppUsage private static IBinder mApplicationObject; private static volatile boolean mCrashing = false; @@ -186,6 +189,7 @@ public class RuntimeInit { } } + @UnsupportedAppUsage protected static final void commonInit() { if (DEBUG) Slog.d(TAG, "Entered RuntimeInit!"); @@ -315,6 +319,7 @@ public class RuntimeInit { return new MethodAndArgsCaller(m, argv); } + @UnsupportedAppUsage public static final void main(String[] argv) { enableDdms(); if (argv.length == 2 && argv[1].equals("application")) { @@ -402,6 +407,7 @@ public class RuntimeInit { mApplicationObject = app; } + @UnsupportedAppUsage public static final IBinder getApplicationObject() { return mApplicationObject; } diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 14958ca539de..034c37cdf4c3 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -26,6 +26,7 @@ import static android.system.OsConstants.STDOUT_FILENO; import static com.android.internal.os.ZygoteConnectionConstants.CONNECTION_TIMEOUT_MILLIS; import static com.android.internal.os.ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS; +import android.annotation.UnsupportedAppUsage; import android.metrics.LogMaker; import android.net.Credentials; import android.net.LocalSocket; @@ -65,9 +66,12 @@ class ZygoteConnection { * that it closes when the child process terminates. In other cases, * it is closed in the peer. */ + @UnsupportedAppUsage private final LocalSocket mSocket; + @UnsupportedAppUsage private final DataOutputStream mSocketOutStream; private final BufferedReader mSocketReader; + @UnsupportedAppUsage private final Credentials peer; private final String abiList; private boolean isEof; @@ -396,6 +400,7 @@ class ZygoteConnection { /** * Closes socket associated with this connection. */ + @UnsupportedAppUsage void closeSocket() { try { mSocket.close(); diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index c6303518d9ae..2abc8c080ac1 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -19,8 +19,11 @@ package com.android.internal.os; import static android.system.OsConstants.S_IRWXG; import static android.system.OsConstants.S_IRWXO; +import android.annotation.UnsupportedAppUsage; import android.content.res.Resources; import android.content.res.TypedArray; +import android.app.ApplicationLoaders; +import android.content.pm.SharedLibraryInfo; import android.os.Build; import android.os.Environment; import android.os.IInstalld; @@ -105,6 +108,7 @@ public class ZygoteInit { /** * Used to pre-load resources. */ + @UnsupportedAppUsage private static Resources mResources; /** @@ -139,6 +143,9 @@ public class ZygoteInit { bootTimingsTraceLog.traceBegin("PreloadClasses"); preloadClasses(); bootTimingsTraceLog.traceEnd(); // PreloadClasses + bootTimingsTraceLog.traceBegin("CacheNonBootClasspathClassLoaders"); + cacheNonBootClasspathClassLoaders(); + bootTimingsTraceLog.traceEnd(); // CacheNonBootClasspathClassLoaders bootTimingsTraceLog.traceBegin("PreloadResources"); preloadResources(); bootTimingsTraceLog.traceEnd(); // PreloadResources @@ -345,6 +352,32 @@ public class ZygoteInit { } /** + * Load in things which are used by many apps but which cannot be put in the boot + * classpath. + */ + private static void cacheNonBootClasspathClassLoaders() { + // These libraries used to be part of the bootclasspath, but had to be removed. + // Old system applications still get them for backwards compatibility reasons, + // so they are cached here in order to preserve performance characteristics. + SharedLibraryInfo hidlBase = new SharedLibraryInfo( + "/system/framework/android.hidl.base-V1.0-java.jar", null /*packageName*/, + null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, + null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/); + SharedLibraryInfo hidlManager = new SharedLibraryInfo( + "/system/framework/android.hidl.manager-V1.0-java.jar", null /*packageName*/, + null /*codePaths*/, null /*name*/, 0 /*version*/, SharedLibraryInfo.TYPE_BUILTIN, + null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/); + hidlManager.addDependency(hidlBase); + + ApplicationLoaders.getDefault().createAndCacheNonBootclasspathSystemClassLoaders( + new SharedLibraryInfo[]{ + // ordered dependencies first + hidlBase, + hidlManager, + }); + } + + /** * Load in commonly used resources, so they can be shared across processes. * * These tend to be a few Kbytes, but are frequently in the 20-40K range, and occasionally even @@ -787,6 +820,7 @@ public class ZygoteInit { return result; } + @UnsupportedAppUsage public static void main(String argv[]) { ZygoteServer zygoteServer = new ZygoteServer(); diff --git a/core/java/com/android/internal/os/ZygoteSecurityException.java b/core/java/com/android/internal/os/ZygoteSecurityException.java index 13b47597c1eb..7e50cb885324 100644 --- a/core/java/com/android/internal/os/ZygoteSecurityException.java +++ b/core/java/com/android/internal/os/ZygoteSecurityException.java @@ -16,10 +16,13 @@ package com.android.internal.os; +import android.annotation.UnsupportedAppUsage; + /** * Exception thrown when a security policy is violated. */ class ZygoteSecurityException extends RuntimeException { + @UnsupportedAppUsage ZygoteSecurityException(String message) { super(message); } diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 6ad1d72eaec4..b38a7c1c47b2 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -41,6 +41,7 @@ import java.util.List; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; @@ -207,8 +208,11 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind private final BackgroundFallback mBackgroundFallback = new BackgroundFallback(); private int mLastTopInset = 0; + @UnsupportedAppUsage private int mLastBottomInset = 0; + @UnsupportedAppUsage private int mLastRightInset = 0; + @UnsupportedAppUsage private int mLastLeftInset = 0; private boolean mLastHasTopStableInset = false; private boolean mLastHasBottomStableInset = false; @@ -219,6 +223,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind private int mRootScrollY = 0; + @UnsupportedAppUsage private PhoneWindow mWindow; ViewGroup mContentRoot; diff --git a/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java index d8ee4dd34269..791c2d7aa4b2 100644 --- a/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java +++ b/core/java/com/android/internal/policy/PhoneFallbackEventHandler.java @@ -16,6 +16,7 @@ package com.android.internal.policy; +import android.annotation.UnsupportedAppUsage; import android.app.KeyguardManager; import android.app.SearchManager; import android.content.ActivityNotFoundException; @@ -41,7 +42,9 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { private static String TAG = "PhoneFallbackEventHandler"; private static final boolean DEBUG = false; + @UnsupportedAppUsage Context mContext; + @UnsupportedAppUsage View mView; AudioManager mAudioManager; @@ -50,6 +53,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { TelephonyManager mTelephonyManager; MediaSessionManager mMediaSessionManager; + @UnsupportedAppUsage public PhoneFallbackEventHandler(Context context) { mContext = context; } @@ -74,6 +78,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { } } + @UnsupportedAppUsage boolean onKeyDown(int keyCode, KeyEvent event) { /* **************************************************************************** * HOW TO DECIDE WHERE YOUR KEY HANDLING GOES. @@ -207,6 +212,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { && (getKeyguardManager().inKeyguardRestrictedInputMode() || dispatcher == null); } + @UnsupportedAppUsage boolean onKeyUp(int keyCode, KeyEvent event) { if (DEBUG) { Log.d(TAG, "up " + keyCode); @@ -270,6 +276,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler { return false; } + @UnsupportedAppUsage void startCallActivity() { sendCloseSystemWindows(); Intent intent = new Intent(Intent.ACTION_CALL_BUTTON); diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index daea9a8eff41..0fa43a6f069d 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -63,6 +63,7 @@ import com.android.internal.view.menu.MenuView; import com.android.internal.widget.DecorContentParent; import com.android.internal.widget.SwipeDismissLayout; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.KeyguardManager; import android.content.Context; @@ -237,6 +238,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private boolean mForcedStatusBarColor = false; private boolean mForcedNavigationBarColor = false; + @UnsupportedAppUsage private CharSequence mTitle = null; private int mTitleColor = 0; @@ -300,6 +302,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { static final RotationWatcher sRotationWatcher = new RotationWatcher(); + @UnsupportedAppUsage public PhoneWindow(Context context) { super(context); mLayoutInflater = LayoutInflater.from(context); diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index 4b662670f5e7..eb556855ad41 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -18,6 +18,7 @@ package com.android.internal.util; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.ArraySet; import dalvik.system.VMRuntime; @@ -51,6 +52,7 @@ public class ArrayUtils { return (char[])VMRuntime.getRuntime().newUnpaddedArray(char.class, minLen); } + @UnsupportedAppUsage public static int[] newUnpaddedIntArray(int minLen) { return (int[])VMRuntime.getRuntime().newUnpaddedArray(int.class, minLen); } @@ -71,6 +73,7 @@ public class ArrayUtils { return (Object[])VMRuntime.getRuntime().newUnpaddedArray(Object.class, minLen); } + @UnsupportedAppUsage @SuppressWarnings("unchecked") public static <T> T[] newUnpaddedArray(Class<T> clazz, int minLen) { return (T[])VMRuntime.getRuntime().newUnpaddedArray(clazz, minLen); @@ -108,6 +111,7 @@ public class ArrayUtils { * it will return the same empty array every time to avoid reallocation, * although this is not guaranteed. */ + @UnsupportedAppUsage @SuppressWarnings("unchecked") public static <T> T[] emptyArray(Class<T> kind) { if (kind == Object.class) { @@ -144,6 +148,7 @@ public class ArrayUtils { /** * Checks if given array is null or has zero elements. */ + @UnsupportedAppUsage public static <T> boolean isEmpty(@Nullable T[] array) { return array == null || array.length == 0; } @@ -196,6 +201,7 @@ public class ArrayUtils { * @param value the value to check for * @return true if the value is present in the array */ + @UnsupportedAppUsage public static <T> boolean contains(@Nullable T[] array, T value) { return indexOf(array, value) != -1; } @@ -204,6 +210,7 @@ public class ArrayUtils { * Return first index of {@code value} in {@code array}, or {@code -1} if * not found. */ + @UnsupportedAppUsage public static <T> int indexOf(@Nullable T[] array, T value) { if (array == null) return -1; for (int i = 0; i < array.length; i++) { @@ -238,6 +245,7 @@ public class ArrayUtils { return false; } + @UnsupportedAppUsage public static boolean contains(@Nullable int[] array, int value) { if (array == null) return false; for (int element : array) { @@ -329,6 +337,7 @@ public class ArrayUtils { * Adds value to given array if not already present, providing set-like * behavior. */ + @UnsupportedAppUsage @SuppressWarnings("unchecked") public static @NonNull <T> T[] appendElement(Class<T> kind, @Nullable T[] array, T element) { return appendElement(kind, array, element, false); @@ -358,6 +367,7 @@ public class ArrayUtils { /** * Removes value from given array if present, providing set-like behavior. */ + @UnsupportedAppUsage @SuppressWarnings("unchecked") public static @Nullable <T> T[] removeElement(Class<T> kind, @Nullable T[] array, T element) { if (array != null) { @@ -404,6 +414,7 @@ public class ArrayUtils { * Adds value to given array if not already present, providing set-like * behavior. */ + @UnsupportedAppUsage public static @NonNull int[] appendInt(@Nullable int[] cur, int val) { return appendInt(cur, val, false); } diff --git a/core/java/com/android/internal/util/BitwiseInputStream.java b/core/java/com/android/internal/util/BitwiseInputStream.java index 86f74f302518..6ff67e9b9718 100644 --- a/core/java/com/android/internal/util/BitwiseInputStream.java +++ b/core/java/com/android/internal/util/BitwiseInputStream.java @@ -16,6 +16,8 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; + /** * An object that provides bitwise incremental read access to a byte array. * @@ -49,6 +51,7 @@ public class BitwiseInputStream { * * @param buf a byte array containing data */ + @UnsupportedAppUsage public BitwiseInputStream(byte buf[]) { mBuf = buf; mEnd = buf.length << 3; @@ -58,6 +61,7 @@ public class BitwiseInputStream { /** * Return the number of bit still available for reading. */ + @UnsupportedAppUsage public int available() { return mEnd - mPos; } @@ -71,6 +75,7 @@ public class BitwiseInputStream { * @param bits the amount of data to read (gte 0, lte 8) * @return byte of read data (possibly partially filled, from lsb) */ + @UnsupportedAppUsage public int read(int bits) throws AccessException { int index = mPos >>> 3; int offset = 16 - (mPos & 0x07) - bits; // &7==%8 @@ -92,6 +97,7 @@ public class BitwiseInputStream { * @param bits the amount of data to read * @return newly allocated byte array of read data */ + @UnsupportedAppUsage public byte[] readByteArray(int bits) throws AccessException { int bytes = (bits >>> 3) + ((bits & 0x07) > 0 ? 1 : 0); // &7==%8 byte[] arr = new byte[bytes]; @@ -107,6 +113,7 @@ public class BitwiseInputStream { * * @param bits the amount by which to increment the position */ + @UnsupportedAppUsage public void skip(int bits) throws AccessException { if ((mPos + bits) > mEnd) { throw new AccessException("illegal skip " + diff --git a/core/java/com/android/internal/util/BitwiseOutputStream.java b/core/java/com/android/internal/util/BitwiseOutputStream.java index ddecbed1d97c..cdd6f173484c 100644 --- a/core/java/com/android/internal/util/BitwiseOutputStream.java +++ b/core/java/com/android/internal/util/BitwiseOutputStream.java @@ -16,6 +16,8 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; + /** * An object that provides bitwise incremental write access to a byte array. * @@ -49,6 +51,7 @@ public class BitwiseOutputStream { * * @param startingLength initial internal byte array length in bytes */ + @UnsupportedAppUsage public BitwiseOutputStream(int startingLength) { mBuf = new byte[startingLength]; mEnd = startingLength << 3; @@ -60,6 +63,7 @@ public class BitwiseOutputStream { * * @return newly allocated byte array */ + @UnsupportedAppUsage public byte[] toByteArray() { int len = (mPos >>> 3) + ((mPos & 0x07) > 0 ? 1 : 0); // &7==%8 byte[] newBuf = new byte[len]; @@ -89,6 +93,7 @@ public class BitwiseOutputStream { * @param bits the amount of data to write (gte 0, lte 8) * @param data to write, will be masked to expose only bits param from lsb */ + @UnsupportedAppUsage public void write(int bits, int data) throws AccessException { if ((bits < 0) || (bits > 8)) { throw new AccessException("illegal write (" + bits + " bits)"); @@ -109,6 +114,7 @@ public class BitwiseOutputStream { * @param bits the amount of data to write * @param arr the byte array containing data to be written */ + @UnsupportedAppUsage public void writeByteArray(int bits, byte[] arr) throws AccessException { for (int i = 0; i < arr.length; i++) { int increment = Math.min(8, bits - (i << 3)); diff --git a/core/java/com/android/internal/util/CharSequences.java b/core/java/com/android/internal/util/CharSequences.java index fdaa4bce25db..6b6c43ce8195 100644 --- a/core/java/com/android/internal/util/CharSequences.java +++ b/core/java/com/android/internal/util/CharSequences.java @@ -16,6 +16,8 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; + /** * {@link CharSequence} utility methods. */ @@ -93,6 +95,7 @@ public class CharSequences { /** * Compares two character sequences for equality. */ + @UnsupportedAppUsage public static boolean equals(CharSequence a, CharSequence b) { if (a.length() != b.length()) { return false; @@ -114,6 +117,7 @@ public class CharSequences { * @param another The other CharSequence. * @return See {@link Comparable#compareTo}. */ + @UnsupportedAppUsage public static int compareToIgnoreCase(CharSequence me, CharSequence another) { // Code adapted from String#compareTo int myLen = me.length(), anotherLen = another.length(); diff --git a/core/java/com/android/internal/util/FastMath.java b/core/java/com/android/internal/util/FastMath.java index 88a17e6ba259..35efe708795e 100644 --- a/core/java/com/android/internal/util/FastMath.java +++ b/core/java/com/android/internal/util/FastMath.java @@ -16,6 +16,8 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; + /** * Fast and loose math routines. */ @@ -26,6 +28,7 @@ public class FastMath { * thought it may return slightly different results. It does not try to * handle (in any meaningful way) NaN or infinities. */ + @UnsupportedAppUsage public static int round(float value) { long lx = (long) (value * (65536 * 256f)); return (int) ((lx + 0x800000) >> 24); diff --git a/core/java/com/android/internal/util/FastXmlSerializer.java b/core/java/com/android/internal/util/FastXmlSerializer.java index b85b84fb3dc8..9f76aeb663c5 100644 --- a/core/java/com/android/internal/util/FastXmlSerializer.java +++ b/core/java/com/android/internal/util/FastXmlSerializer.java @@ -18,6 +18,7 @@ package com.android.internal.util; import org.xmlpull.v1.XmlSerializer; +import android.annotation.UnsupportedAppUsage; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -69,6 +70,7 @@ public class FastXmlSerializer implements XmlSerializer { private int mNesting = 0; private boolean mLineStart = true; + @UnsupportedAppUsage public FastXmlSerializer() { this(DEFAULT_BUFFER_LEN); } diff --git a/core/java/com/android/internal/util/GrowingArrayUtils.java b/core/java/com/android/internal/util/GrowingArrayUtils.java index 968d9204b106..9f563667e019 100644 --- a/core/java/com/android/internal/util/GrowingArrayUtils.java +++ b/core/java/com/android/internal/util/GrowingArrayUtils.java @@ -16,6 +16,8 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; + /** * A helper class that aims to provide comparable growth performance to ArrayList, but on primitive * arrays. Common array operations are implemented for efficient use in dynamic containers. @@ -37,6 +39,7 @@ public final class GrowingArrayUtils { * @return the array to which the element was appended. This may be different than the given * array. */ + @UnsupportedAppUsage public static <T> T[] append(T[] array, int currentSize, T element) { assert currentSize <= array.length; @@ -54,6 +57,7 @@ public final class GrowingArrayUtils { /** * Primitive int version of {@link #append(Object[], int, Object)}. */ + @UnsupportedAppUsage public static int[] append(int[] array, int currentSize, int element) { assert currentSize <= array.length; diff --git a/core/java/com/android/internal/util/HexDump.java b/core/java/com/android/internal/util/HexDump.java index af004009e1ee..6ffc92853b08 100644 --- a/core/java/com/android/internal/util/HexDump.java +++ b/core/java/com/android/internal/util/HexDump.java @@ -17,6 +17,7 @@ package com.android.internal.util; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; public class HexDump { @@ -100,16 +101,19 @@ public class HexDump return toHexString(toByteArray(b)); } + @UnsupportedAppUsage public static String toHexString(byte[] array) { return toHexString(array, 0, array.length, true); } + @UnsupportedAppUsage public static String toHexString(byte[] array, boolean upperCase) { return toHexString(array, 0, array.length, upperCase); } + @UnsupportedAppUsage public static String toHexString(byte[] array, int offset, int length) { return toHexString(array, offset, length, true); @@ -131,6 +135,7 @@ public class HexDump return new String(buf); } + @UnsupportedAppUsage public static String toHexString(int i) { return toHexString(toByteArray(i)); @@ -164,6 +169,7 @@ public class HexDump throw new RuntimeException ("Invalid hex char '" + c + "'"); } + @UnsupportedAppUsage public static byte[] hexStringToByteArray(String hexString) { int length = hexString.length(); diff --git a/core/java/com/android/internal/util/IState.java b/core/java/com/android/internal/util/IState.java index 056f8e9b0424..eb66e2ce94d7 100644 --- a/core/java/com/android/internal/util/IState.java +++ b/core/java/com/android/internal/util/IState.java @@ -16,6 +16,7 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; import android.os.Message; /** @@ -67,5 +68,6 @@ public interface IState { * * @return name of state. */ + @UnsupportedAppUsage String getName(); } diff --git a/core/java/com/android/internal/util/MemInfoReader.java b/core/java/com/android/internal/util/MemInfoReader.java index 8d7166679b78..630916ebeecb 100644 --- a/core/java/com/android/internal/util/MemInfoReader.java +++ b/core/java/com/android/internal/util/MemInfoReader.java @@ -16,12 +16,14 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; import android.os.Debug; import android.os.StrictMode; public final class MemInfoReader { final long[] mInfos = new long[Debug.MEMINFO_COUNT]; + @UnsupportedAppUsage public void readMemInfo() { // Permit disk reads here, as /proc/meminfo isn't really "on // disk" and should be fast. TODO: make BlockGuard ignore @@ -37,6 +39,7 @@ public final class MemInfoReader { /** * Total amount of RAM available to the kernel. */ + @UnsupportedAppUsage public long getTotalSize() { return mInfos[Debug.MEMINFO_TOTAL] * 1024; } @@ -44,6 +47,7 @@ public final class MemInfoReader { /** * Amount of RAM that is not being used for anything. */ + @UnsupportedAppUsage public long getFreeSize() { return mInfos[Debug.MEMINFO_FREE] * 1024; } @@ -52,6 +56,7 @@ public final class MemInfoReader { * Amount of RAM that the kernel is being used for caches, not counting caches * that are mapped in to processes. */ + @UnsupportedAppUsage public long getCachedSize() { return getCachedSizeKb() * 1024; } @@ -107,6 +112,7 @@ public final class MemInfoReader { return mInfos[Debug.MEMINFO_ZRAM_TOTAL]; } + @UnsupportedAppUsage public long[] getRawInfo() { return mInfos; } diff --git a/core/java/com/android/internal/util/Preconditions.java b/core/java/com/android/internal/util/Preconditions.java index 91c76afdf5b2..3a5720f6e918 100644 --- a/core/java/com/android/internal/util/Preconditions.java +++ b/core/java/com/android/internal/util/Preconditions.java @@ -18,6 +18,7 @@ package com.android.internal.util; import android.annotation.IntRange; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.text.TextUtils; import java.util.Collection; @@ -28,6 +29,7 @@ import java.util.Collection; */ public class Preconditions { + @UnsupportedAppUsage public static void checkArgument(boolean expression) { if (!expression) { throw new IllegalArgumentException(); @@ -42,6 +44,7 @@ public class Preconditions { * be converted to a string using {@link String#valueOf(Object)} * @throws IllegalArgumentException if {@code expression} is false */ + @UnsupportedAppUsage public static void checkArgument(boolean expression, final Object errorMessage) { if (!expression) { throw new IllegalArgumentException(String.valueOf(errorMessage)); @@ -106,6 +109,7 @@ public class Preconditions { * @return the non-null reference that was validated * @throws NullPointerException if {@code reference} is null */ + @UnsupportedAppUsage public static @NonNull <T> T checkNotNull(final T reference) { if (reference == null) { throw new NullPointerException(); @@ -123,6 +127,7 @@ public class Preconditions { * @return the non-null reference that was validated * @throws NullPointerException if {@code reference} is null */ + @UnsupportedAppUsage public static @NonNull <T> T checkNotNull(final T reference, final Object errorMessage) { if (reference == null) { throw new NullPointerException(String.valueOf(errorMessage)); @@ -158,6 +163,7 @@ public class Preconditions { * @param message exception message * @throws IllegalStateException if {@code expression} is false */ + @UnsupportedAppUsage public static void checkState(final boolean expression, String message) { if (!expression) { throw new IllegalStateException(message); @@ -171,6 +177,7 @@ public class Preconditions { * @param expression a boolean expression * @throws IllegalStateException if {@code expression} is false */ + @UnsupportedAppUsage public static void checkState(final boolean expression) { checkState(expression, null); } @@ -338,6 +345,7 @@ public class Preconditions { * * @throws IllegalArgumentException if {@code value} was not within the range */ + @UnsupportedAppUsage public static int checkArgumentInRange(int value, int lower, int upper, String valueName) { if (value < lower) { diff --git a/core/java/com/android/internal/util/State.java b/core/java/com/android/internal/util/State.java index 3eadff58bc09..3c61e035e886 100644 --- a/core/java/com/android/internal/util/State.java +++ b/core/java/com/android/internal/util/State.java @@ -16,6 +16,7 @@ package com.android.internal.util; +import android.annotation.UnsupportedAppUsage; import android.os.Message; /** @@ -28,12 +29,14 @@ public class State implements IState { /** * Constructor */ + @UnsupportedAppUsage protected State() { } /* (non-Javadoc) * @see com.android.internal.util.IState#enter() */ + @UnsupportedAppUsage @Override public void enter() { } @@ -41,6 +44,7 @@ public class State implements IState { /* (non-Javadoc) * @see com.android.internal.util.IState#exit() */ + @UnsupportedAppUsage @Override public void exit() { } @@ -48,6 +52,7 @@ public class State implements IState { /* (non-Javadoc) * @see com.android.internal.util.IState#processMessage(android.os.Message) */ + @UnsupportedAppUsage @Override public boolean processMessage(Message msg) { return false; @@ -65,6 +70,7 @@ public class State implements IState { * * @see com.android.internal.util.IState#processMessage(android.os.Message) */ + @UnsupportedAppUsage @Override public String getName() { String name = getClass().getName(); diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java index 7398e9526a42..dacdae6fd6c6 100644 --- a/core/java/com/android/internal/util/StateMachine.java +++ b/core/java/com/android/internal/util/StateMachine.java @@ -1301,6 +1301,7 @@ public class StateMachine { * * @param name of the state machine */ + @UnsupportedAppUsage protected StateMachine(String name) { mSmThread = new HandlerThread(name); mSmThread.start(); @@ -1314,6 +1315,7 @@ public class StateMachine { * * @param name of the state machine */ + @UnsupportedAppUsage protected StateMachine(String name, Looper looper) { initStateMachine(name, looper); } @@ -1323,6 +1325,7 @@ public class StateMachine { * * @param name of the state machine */ + @UnsupportedAppUsage protected StateMachine(String name, Handler handler) { initStateMachine(name, handler.getLooper()); } @@ -1678,6 +1681,7 @@ public class StateMachine { * @param arg2 is assigned to Message.arg2 * @return A Message object from the global pool */ + @UnsupportedAppUsage public final Message obtainMessage(int what, int arg1, int arg2) { return Message.obtain(mSmHandler, what, arg1, arg2); } @@ -1697,6 +1701,7 @@ public class StateMachine { * @param obj is assigned to Message.obj * @return A Message object from the global pool */ + @UnsupportedAppUsage public final Message obtainMessage(int what, int arg1, int arg2, Object obj) { return Message.obtain(mSmHandler, what, arg1, arg2, obj); } @@ -1706,6 +1711,7 @@ public class StateMachine { * * Message is ignored if state machine has quit. */ + @UnsupportedAppUsage public void sendMessage(int what) { // mSmHandler can be null if the state machine has quit. SmHandler smh = mSmHandler; @@ -1719,6 +1725,7 @@ public class StateMachine { * * Message is ignored if state machine has quit. */ + @UnsupportedAppUsage public void sendMessage(int what, Object obj) { // mSmHandler can be null if the state machine has quit. SmHandler smh = mSmHandler; @@ -1732,6 +1739,7 @@ public class StateMachine { * * Message is ignored if state machine has quit. */ + @UnsupportedAppUsage public void sendMessage(int what, int arg1) { // mSmHandler can be null if the state machine has quit. SmHandler smh = mSmHandler; @@ -1758,6 +1766,7 @@ public class StateMachine { * * Message is ignored if state machine has quit. */ + @UnsupportedAppUsage public void sendMessage(int what, int arg1, int arg2, Object obj) { // mSmHandler can be null if the state machine has quit. SmHandler smh = mSmHandler; @@ -1771,6 +1780,7 @@ public class StateMachine { * * Message is ignored if state machine has quit. */ + @UnsupportedAppUsage public void sendMessage(Message msg) { // mSmHandler can be null if the state machine has quit. SmHandler smh = mSmHandler; @@ -2074,6 +2084,7 @@ public class StateMachine { * @param pw * @param args */ + @UnsupportedAppUsage public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(getName() + ":"); pw.println(" total records=" + getLogRecCount()); diff --git a/core/java/com/android/internal/view/ActionBarPolicy.java b/core/java/com/android/internal/view/ActionBarPolicy.java index 755faf333a1e..d18c35e703da 100644 --- a/core/java/com/android/internal/view/ActionBarPolicy.java +++ b/core/java/com/android/internal/view/ActionBarPolicy.java @@ -18,6 +18,7 @@ package com.android.internal.view; import com.android.internal.R; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; @@ -29,12 +30,15 @@ import android.os.Build; * about how the action bar should lay out and behave on the current device. */ public class ActionBarPolicy { + @UnsupportedAppUsage private Context mContext; + @UnsupportedAppUsage public static ActionBarPolicy get(Context context) { return new ActionBarPolicy(context); } + @UnsupportedAppUsage private ActionBarPolicy(Context context) { mContext = context; } @@ -44,6 +48,7 @@ public class ActionBarPolicy { * bar/action mode. This will be used to determine how many showAsAction="ifRoom" items can fit. * "always" items can override this. */ + @UnsupportedAppUsage public int getMaxActionButtons() { final Configuration config = mContext.getResources().getConfiguration(); final int width = config.screenWidthDp; @@ -62,14 +67,17 @@ public class ActionBarPolicy { return 2; } } + @UnsupportedAppUsage public boolean showsOverflowMenuButton() { return true; } + @UnsupportedAppUsage public int getEmbeddedMenuWidthLimit() { return mContext.getResources().getDisplayMetrics().widthPixels / 2; } + @UnsupportedAppUsage public boolean hasEmbeddedTabs() { final int targetSdk = mContext.getApplicationInfo().targetSdkVersion; if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) { @@ -85,6 +93,7 @@ public class ActionBarPolicy { width >= 480 || (width >= 640 && height >= 480); } + @UnsupportedAppUsage public int getTabContainerHeight() { TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar, com.android.internal.R.attr.actionBarStyle, 0); @@ -106,6 +115,7 @@ public class ActionBarPolicy { Build.VERSION_CODES.ICE_CREAM_SANDWICH; } + @UnsupportedAppUsage public int getStackedTabMaxWidth() { return mContext.getResources().getDimensionPixelSize( R.dimen.action_bar_stacked_tab_max_width); diff --git a/core/java/com/android/internal/view/InputConnectionWrapper.java b/core/java/com/android/internal/view/InputConnectionWrapper.java index 5b65bbe1e90e..666c9e093218 100644 --- a/core/java/com/android/internal/view/InputConnectionWrapper.java +++ b/core/java/com/android/internal/view/InputConnectionWrapper.java @@ -19,6 +19,7 @@ package com.android.internal.view; import android.annotation.AnyThread; import android.annotation.BinderThread; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.inputmethodservice.AbstractInputMethodService; import android.os.Bundle; import android.os.Handler; @@ -78,6 +79,7 @@ public class InputConnectionWrapper implements InputConnection { * sequence number is set to a new integer. We use a sequence number so that replies that * occur after a timeout has expired are not interpreted as replies to a later request. */ + @UnsupportedAppUsage @AnyThread private static InputContextCallback getInstance() { synchronized (InputContextCallback.class) { @@ -102,6 +104,7 @@ public class InputConnectionWrapper implements InputConnection { /** * Makes the given InputContextCallback available for use in the future. */ + @UnsupportedAppUsage @AnyThread private void dispose() { synchronized (InputContextCallback.class) { diff --git a/core/java/com/android/internal/view/WindowManagerPolicyThread.java b/core/java/com/android/internal/view/WindowManagerPolicyThread.java index c8c38bb01886..b009a2d8ca30 100644 --- a/core/java/com/android/internal/view/WindowManagerPolicyThread.java +++ b/core/java/com/android/internal/view/WindowManagerPolicyThread.java @@ -16,6 +16,7 @@ package com.android.internal.view; +import android.annotation.UnsupportedAppUsage; import android.os.Looper; /** @@ -35,6 +36,7 @@ public class WindowManagerPolicyThread { return mThread; } + @UnsupportedAppUsage public static Looper getLooper() { return mLooper; } diff --git a/core/java/com/android/internal/view/menu/ActionMenu.java b/core/java/com/android/internal/view/menu/ActionMenu.java index c657b872e71e..977c1f6fda7b 100644 --- a/core/java/com/android/internal/view/menu/ActionMenu.java +++ b/core/java/com/android/internal/view/menu/ActionMenu.java @@ -19,6 +19,7 @@ package com.android.internal.view.menu; import java.util.ArrayList; import java.util.List; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -39,6 +40,7 @@ public class ActionMenu implements Menu { private ArrayList<ActionMenuItem> mItems; + @UnsupportedAppUsage public ActionMenu(Context context) { mContext = context; mItems = new ArrayList<ActionMenuItem>(); diff --git a/core/java/com/android/internal/view/menu/ActionMenuItem.java b/core/java/com/android/internal/view/menu/ActionMenuItem.java index b807a42e922e..ed253d58fb82 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuItem.java +++ b/core/java/com/android/internal/view/menu/ActionMenuItem.java @@ -17,6 +17,7 @@ package com.android.internal.view.menu; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; @@ -69,6 +70,7 @@ public class ActionMenuItem implements MenuItem { private static final int HIDDEN = 0x00000008; private static final int ENABLED = 0x00000010; + @UnsupportedAppUsage public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering, CharSequence title) { mContext = context; diff --git a/core/java/com/android/internal/view/menu/ContextMenuBuilder.java b/core/java/com/android/internal/view/menu/ContextMenuBuilder.java index 82f061cb86ca..3d3aceb4a85f 100644 --- a/core/java/com/android/internal/view/menu/ContextMenuBuilder.java +++ b/core/java/com/android/internal/view/menu/ContextMenuBuilder.java @@ -16,6 +16,7 @@ package com.android.internal.view.menu; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.IBinder; @@ -39,6 +40,7 @@ import android.view.View; */ public class ContextMenuBuilder extends MenuBuilder implements ContextMenu { + @UnsupportedAppUsage public ContextMenuBuilder(Context context) { super(context); } diff --git a/core/java/com/android/internal/view/menu/IconMenuItemView.java b/core/java/com/android/internal/view/menu/IconMenuItemView.java index 6c8f330fbcc8..3d888d347d65 100644 --- a/core/java/com/android/internal/view/menu/IconMenuItemView.java +++ b/core/java/com/android/internal/view/menu/IconMenuItemView.java @@ -18,6 +18,7 @@ package com.android.internal.view.menu; import com.android.internal.view.menu.MenuBuilder.ItemInvoker; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Rect; @@ -213,6 +214,7 @@ public final class IconMenuItemView extends TextView implements MenuView.ItemVie } } + @UnsupportedAppUsage public void setItemInvoker(ItemInvoker itemInvoker) { mItemInvoker = itemInvoker; } @@ -232,6 +234,7 @@ public final class IconMenuItemView extends TextView implements MenuView.ItemVie } } + @UnsupportedAppUsage void setIconMenuView(IconMenuView iconMenuView) { mIconMenuView = iconMenuView; } @@ -267,6 +270,7 @@ public final class IconMenuItemView extends TextView implements MenuView.ItemVie * @return layout params appropriate for this view. If layout params already exist, it will * augment them to be appropriate to the current text size. */ + @UnsupportedAppUsage IconMenuView.LayoutParams getTextAppropriateLayoutParams() { IconMenuView.LayoutParams lp = (IconMenuView.LayoutParams) getLayoutParams(); if (lp == null) { diff --git a/core/java/com/android/internal/view/menu/IconMenuView.java b/core/java/com/android/internal/view/menu/IconMenuView.java index dab43ebfe5d5..6f264341f7b4 100644 --- a/core/java/com/android/internal/view/menu/IconMenuView.java +++ b/core/java/com/android/internal/view/menu/IconMenuView.java @@ -18,6 +18,7 @@ package com.android.internal.view.menu; import com.android.internal.view.menu.MenuBuilder.ItemInvoker; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -51,6 +52,7 @@ import java.util.ArrayList; public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuView, Runnable { private static final int ITEM_CAPTION_CYCLE_DELAY = 1000; + @UnsupportedAppUsage private MenuBuilder mMenu; /** Height of each row */ @@ -58,6 +60,7 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi /** Maximum number of rows to be shown */ private int mMaxRows; /** Maximum number of items to show in the icon menu. */ + @UnsupportedAppUsage private int mMaxItems; /** Maximum number of items per row */ private int mMaxItemsPerRow; @@ -82,6 +85,7 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi private Drawable mMoreIcon; /** Background of each item (should contain the selected and focused states) */ + @UnsupportedAppUsage private Drawable mItemBackground; /** Default animations for this menu */ @@ -288,6 +292,7 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi * have a MenuItemData backing it. * @return The IconMenuItemView for the 'More' button */ + @UnsupportedAppUsage IconMenuItemView createMoreItemView() { Context context = getContext(); LayoutInflater inflater = LayoutInflater.from(context); @@ -494,6 +499,7 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi * {@link MenuView.ItemView} implementation--eg: excludes More * item). */ + @UnsupportedAppUsage int getNumActualItemsShown() { return mNumActualItemsShown; } @@ -717,6 +723,7 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi /** * Constructor called from {@link #CREATOR} */ + @UnsupportedAppUsage private SavedState(Parcel in) { super(in); focusedPosition = in.readInt(); diff --git a/core/java/com/android/internal/view/menu/MenuDialogHelper.java b/core/java/com/android/internal/view/menu/MenuDialogHelper.java index ecab29fdbbd4..88d0a03bd55f 100644 --- a/core/java/com/android/internal/view/menu/MenuDialogHelper.java +++ b/core/java/com/android/internal/view/menu/MenuDialogHelper.java @@ -16,6 +16,7 @@ package com.android.internal.view.menu; +import android.annotation.UnsupportedAppUsage; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; @@ -36,6 +37,7 @@ public class MenuDialogHelper implements MenuHelper, DialogInterface.OnKeyListen ListMenuPresenter mPresenter; private MenuPresenter.Callback mPresenterCallback; + @UnsupportedAppUsage public MenuDialogHelper(MenuBuilder menu) { mMenu = menu; } @@ -45,6 +47,7 @@ public class MenuDialogHelper implements MenuHelper, DialogInterface.OnKeyListen * * @param windowToken Optional token to assign to the window. */ + @UnsupportedAppUsage public void show(IBinder windowToken) { // Many references to mMenu, create local reference final MenuBuilder menu = mMenu; @@ -132,6 +135,7 @@ public class MenuDialogHelper implements MenuHelper, DialogInterface.OnKeyListen * * @see Dialog#dismiss() */ + @UnsupportedAppUsage @Override public void dismiss() { if (mDialog != null) { diff --git a/core/java/com/android/internal/widget/AbsActionBarView.java b/core/java/com/android/internal/widget/AbsActionBarView.java index 582c4f1dd669..9ccee7fc32ff 100644 --- a/core/java/com/android/internal/widget/AbsActionBarView.java +++ b/core/java/com/android/internal/widget/AbsActionBarView.java @@ -27,6 +27,7 @@ import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; @@ -294,6 +295,7 @@ public abstract class AbsActionBarView extends ViewGroup { return isOverflowReserved() && getVisibility() == VISIBLE; } + @UnsupportedAppUsage public void dismissPopupMenus() { if (mActionMenuPresenter != null) { mActionMenuPresenter.dismissPopupMenus(); diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java index 693b194caa8b..78ed53fa918c 100644 --- a/core/java/com/android/internal/widget/ActionBarContextView.java +++ b/core/java/com/android/internal/widget/ActionBarContextView.java @@ -21,6 +21,7 @@ import android.widget.ActionMenuPresenter; import android.widget.ActionMenuView; import com.android.internal.view.menu.MenuBuilder; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; @@ -58,6 +59,7 @@ public class ActionBarContextView extends AbsActionBarView { this(context, null); } + @UnsupportedAppUsage public ActionBarContextView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.actionModeStyle); } diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java index 4a1c95532ba0..efa8f2c3888a 100644 --- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java +++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java @@ -18,6 +18,7 @@ package com.android.internal.widget; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -168,6 +169,7 @@ public class ActionBarOverlayLayout extends ViewGroup implements DecorContentPar init(context); } + @UnsupportedAppUsage public ActionBarOverlayLayout(Context context, AttributeSet attrs) { super(context, attrs); init(context); @@ -672,6 +674,7 @@ public class ActionBarOverlayLayout extends ViewGroup implements DecorContentPar return finalY > mActionBarTop.getHeight(); } + @UnsupportedAppUsage @Override public void setWindowCallback(Window.Callback cb) { pullChildren(); diff --git a/core/java/com/android/internal/widget/EditableInputConnection.java b/core/java/com/android/internal/widget/EditableInputConnection.java index 7f7528dd3de0..4bf34c83a872 100644 --- a/core/java/com/android/internal/widget/EditableInputConnection.java +++ b/core/java/com/android/internal/widget/EditableInputConnection.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.os.Bundle; import android.text.Editable; import android.text.Spanned; @@ -41,6 +42,7 @@ public class EditableInputConnection extends BaseInputConnection { // A negative value means that this connection has been finished by the InputMethodManager. private int mBatchEditNesting; + @UnsupportedAppUsage public EditableInputConnection(TextView textview) { super(textview, true); mTextView = textview; diff --git a/core/java/com/android/internal/widget/LinearLayoutWithDefaultTouchRecepient.java b/core/java/com/android/internal/widget/LinearLayoutWithDefaultTouchRecepient.java index b2001cbe15ef..cc7911da0b96 100644 --- a/core/java/com/android/internal/widget/LinearLayoutWithDefaultTouchRecepient.java +++ b/core/java/com/android/internal/widget/LinearLayoutWithDefaultTouchRecepient.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; @@ -36,6 +37,7 @@ public class LinearLayoutWithDefaultTouchRecepient extends LinearLayout { private final Rect mTempRect = new Rect(); private View mDefaultTouchRecepient; + @UnsupportedAppUsage public LinearLayoutWithDefaultTouchRecepient(Context context) { super(context); } @@ -44,6 +46,7 @@ public class LinearLayoutWithDefaultTouchRecepient extends LinearLayout { super(context, attrs); } + @UnsupportedAppUsage public void setDefaultTouchRecepient(View defaultTouchRecepient) { mDefaultTouchRecepient = defaultTouchRecepient; } diff --git a/core/java/com/android/internal/widget/LockPatternChecker.java b/core/java/com/android/internal/widget/LockPatternChecker.java index 586ece0a274a..2a485f129ab8 100644 --- a/core/java/com/android/internal/widget/LockPatternChecker.java +++ b/core/java/com/android/internal/widget/LockPatternChecker.java @@ -1,5 +1,6 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.os.AsyncTask; import com.android.internal.widget.LockPatternUtils.RequestThrottledException; @@ -223,6 +224,7 @@ public final class LockPatternChecker { * @param userId The user to check against the pattern. * @param callback The callback to be invoked with the check result. */ + @UnsupportedAppUsage public static AsyncTask<?, ?, ?> checkPassword(final LockPatternUtils utils, final String password, final int userId, diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 8eae8afe2407..a3bfd021ca87 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -27,6 +27,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED import android.annotation.IntDef; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.admin.DevicePolicyManager; import android.app.admin.PasswordMetrics; import android.app.trust.IStrongAuthTracker; @@ -169,7 +170,9 @@ public class LockPatternUtils { public static final String SYNTHETIC_PASSWORD_ENABLED_KEY = "enable-sp"; private static final String HISTORY_DELIMITER = ","; + @UnsupportedAppUsage private final Context mContext; + @UnsupportedAppUsage private final ContentResolver mContentResolver; private DevicePolicyManager mDevicePolicyManager; private ILockSettings mLockSettingsService; @@ -212,6 +215,7 @@ public class LockPatternUtils { public static final class RequestThrottledException extends Exception { private int mTimeoutMs; + @UnsupportedAppUsage public RequestThrottledException(int timeoutMs) { mTimeoutMs = timeoutMs; } @@ -220,12 +224,14 @@ public class LockPatternUtils { * @return The amount of time in ms before another request may * be executed */ + @UnsupportedAppUsage public int getTimeoutMs() { return mTimeoutMs; } } + @UnsupportedAppUsage public DevicePolicyManager getDevicePolicyManager() { if (mDevicePolicyManager == null) { mDevicePolicyManager = @@ -254,6 +260,7 @@ public class LockPatternUtils { return trust; } + @UnsupportedAppUsage public LockPatternUtils(Context context) { mContext = context; mContentResolver = context.getContentResolver(); @@ -262,6 +269,7 @@ public class LockPatternUtils { mHandler = looper != null ? new Handler(looper) : null; } + @UnsupportedAppUsage @VisibleForTesting public ILockSettings getLockSettings() { if (mLockSettingsService == null) { @@ -312,6 +320,7 @@ public class LockPatternUtils { return getDevicePolicyManager().getPasswordMinimumNonLetter(null, userId); } + @UnsupportedAppUsage public void reportFailedPasswordAttempt(int userId) { if (userId == USER_FRP && frpCredentialEnabled(mContext)) { return; @@ -320,6 +329,7 @@ public class LockPatternUtils { getTrustManager().reportUnlockAttempt(false /* authenticated */, userId); } + @UnsupportedAppUsage public void reportSuccessfulPasswordAttempt(int userId) { if (userId == USER_FRP && frpCredentialEnabled(mContext)) { return; @@ -479,6 +489,7 @@ public class LockPatternUtils { * @param password The password to check. * @return Whether the password matches the stored one. */ + @UnsupportedAppUsage public boolean checkPassword(String password, int userId) throws RequestThrottledException { return checkPassword(password, userId, null /* progressCallback */); } @@ -602,6 +613,7 @@ public class LockPatternUtils { * Used by device policy manager to validate the current password * information it has. */ + @UnsupportedAppUsage public int getActivePasswordQuality(int userId) { int quality = getKeyguardStoredPasswordQuality(userId); @@ -672,6 +684,7 @@ public class LockPatternUtils { * * @return true if lock screen is disabled */ + @UnsupportedAppUsage public boolean isLockScreenDisabled(int userId) { if (isSecure(userId)) { return false; @@ -754,16 +767,19 @@ public class LockPatternUtils { } } + @UnsupportedAppUsage public void setOwnerInfo(String info, int userId) { setString(LOCK_SCREEN_OWNER_INFO, info, userId); updateCryptoUserInfo(userId); } + @UnsupportedAppUsage public void setOwnerInfoEnabled(boolean enabled, int userId) { setBoolean(LOCK_SCREEN_OWNER_INFO_ENABLED, enabled, userId); updateCryptoUserInfo(userId); } + @UnsupportedAppUsage public String getOwnerInfo(int userId) { return getString(LOCK_SCREEN_OWNER_INFO, userId); } @@ -829,6 +845,7 @@ public class LockPatternUtils { * @param requestedQuality {@see DevicePolicyManager#getPasswordQuality(android.content.ComponentName)} * @param userHandle The userId of the user to change the password for */ + @UnsupportedAppUsage public void saveLockPassword(String password, String savedPassword, int requestedQuality, int userHandle) { if (password == null || password.length() < MIN_LOCK_PASSWORD_SIZE) { @@ -926,6 +943,7 @@ public class LockPatternUtils { * encrypted with the default password. * @return true if device encryption is enabled */ + @UnsupportedAppUsage public static boolean isDeviceEncryptionEnabled() { return StorageManager.isEncrypted(); } @@ -951,6 +969,7 @@ public class LockPatternUtils { * * @return stored password quality */ + @UnsupportedAppUsage public int getKeyguardStoredPasswordQuality(int userHandle) { return (int) getLong(PASSWORD_TYPE_KEY, PASSWORD_QUALITY_UNSPECIFIED, userHandle); } @@ -1072,6 +1091,7 @@ public class LockPatternUtils { * @param pattern The pattern. * @return The pattern in string form. */ + @UnsupportedAppUsage public static String patternToString(List<LockPatternView.Cell> pattern) { if (pattern == null) { return ""; @@ -1107,6 +1127,7 @@ public class LockPatternUtils { * @param pattern the gesture pattern. * @return the hash of the pattern in a byte array. */ + @UnsupportedAppUsage public static byte[] patternToHash(List<LockPatternView.Cell> pattern) { if (pattern == null) { return null; @@ -1193,11 +1214,13 @@ public class LockPatternUtils { * @param userId the user for which to report the value * @return Whether the lock screen is secured. */ + @UnsupportedAppUsage public boolean isSecure(int userId) { int mode = getKeyguardStoredPasswordQuality(userId); return isLockPatternEnabled(mode, userId) || isLockPasswordEnabled(mode, userId); } + @UnsupportedAppUsage public boolean isLockPasswordEnabled(int userId) { return isLockPasswordEnabled(getKeyguardStoredPasswordQuality(userId), userId); } @@ -1215,6 +1238,7 @@ public class LockPatternUtils { /** * @return Whether the lock pattern is enabled */ + @UnsupportedAppUsage public boolean isLockPatternEnabled(int userId) { return isLockPatternEnabled(getKeyguardStoredPasswordQuality(userId), userId); } @@ -1239,6 +1263,7 @@ public class LockPatternUtils { /** * @return Whether the visible pattern is enabled. */ + @UnsupportedAppUsage public boolean isVisiblePatternEnabled(int userId) { return getBoolean(Settings.Secure.LOCK_PATTERN_VISIBLE, false, userId); } @@ -1298,6 +1323,7 @@ public class LockPatternUtils { /** * @return Whether tactile feedback for the pattern is enabled. */ + @UnsupportedAppUsage public boolean isTactileFeedbackEnabled() { return Settings.System.getIntForUser(mContentResolver, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1, UserHandle.USER_CURRENT) != 0; @@ -1308,6 +1334,7 @@ public class LockPatternUtils { * pattern until the deadline has passed. * @return the chosen deadline. */ + @UnsupportedAppUsage public long setLockoutAttemptDeadline(int userId, int timeoutMs) { final long deadline = SystemClock.elapsedRealtime() + timeoutMs; if (userId == USER_FRP) { @@ -1360,6 +1387,7 @@ public class LockPatternUtils { } } + @UnsupportedAppUsage private void setLong(String secureSettingKey, long value, int userHandle) { try { getLockSettings().setLong(secureSettingKey, value, userHandle); @@ -1369,6 +1397,7 @@ public class LockPatternUtils { } } + @UnsupportedAppUsage private String getString(String secureSettingKey, int userHandle) { try { return getLockSettings().getString(secureSettingKey, null, userHandle); @@ -1377,6 +1406,7 @@ public class LockPatternUtils { } } + @UnsupportedAppUsage private void setString(String secureSettingKey, String value, int userHandle) { try { getLockSettings().setString(secureSettingKey, value, userHandle); @@ -1390,6 +1420,7 @@ public class LockPatternUtils { setBoolean(LOCKSCREEN_POWER_BUTTON_INSTANTLY_LOCKS, enabled, userId); } + @UnsupportedAppUsage public boolean getPowerButtonInstantlyLocks(int userId) { return getBoolean(LOCKSCREEN_POWER_BUTTON_INSTANTLY_LOCKS, true, userId); } diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index e8fc5989354a..70efd0081fcc 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -19,6 +19,7 @@ package com.android.internal.widget; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -79,7 +80,9 @@ public class LockPatternView extends View { private boolean mDrawingProfilingStarted = false; + @UnsupportedAppUsage private final Paint mPaint = new Paint(); + @UnsupportedAppUsage private final Paint mPathPaint = new Paint(); /** @@ -99,6 +102,7 @@ public class LockPatternView extends View { private static final String TAG = "LockPatternView"; private OnPatternListener mOnPatternListener; + @UnsupportedAppUsage private final ArrayList<Cell> mPattern = new ArrayList<Cell>(9); /** @@ -120,16 +124,21 @@ public class LockPatternView extends View { private long mAnimatingPeriodStart; private long[] mLineFadeStart = new long[9]; + @UnsupportedAppUsage private DisplayMode mPatternDisplayMode = DisplayMode.Correct; private boolean mInputEnabled = true; + @UnsupportedAppUsage private boolean mInStealthMode = false; private boolean mEnableHapticFeedback = true; + @UnsupportedAppUsage private boolean mPatternInProgress = false; private boolean mFadePattern = true; private float mHitFactor = 0.6f; + @UnsupportedAppUsage private float mSquareWidth; + @UnsupportedAppUsage private float mSquareHeight; private final Path mCurrentPath = new Path(); @@ -154,7 +163,9 @@ public class LockPatternView extends View { * Represents a cell in the 3 X 3 matrix of the unlock pattern view. */ public static final class Cell { + @UnsupportedAppUsage final int row; + @UnsupportedAppUsage final int column; // keep # objects limited to 9 @@ -232,16 +243,19 @@ public class LockPatternView extends View { /** * The pattern drawn is correct (i.e draw it in a friendly color) */ + @UnsupportedAppUsage Correct, /** * Animate the pattern (for demo, and help). */ + @UnsupportedAppUsage Animate, /** * The pattern is wrong (i.e draw a foreboding color) */ + @UnsupportedAppUsage Wrong } @@ -277,6 +291,7 @@ public class LockPatternView extends View { this(context, null); } + @UnsupportedAppUsage public LockPatternView(Context context, AttributeSet attrs) { super(context, attrs); @@ -348,6 +363,7 @@ public class LockPatternView extends View { a.recycle(); } + @UnsupportedAppUsage public CellState[][] getCellStates() { return mCellStates; } @@ -372,6 +388,7 @@ public class LockPatternView extends View { * * @param inStealthMode Whether in stealth mode. */ + @UnsupportedAppUsage public void setInStealthMode(boolean inStealthMode) { mInStealthMode = inStealthMode; } @@ -390,6 +407,7 @@ public class LockPatternView extends View { * * @param tactileFeedbackEnabled Whether tactile feedback is enabled */ + @UnsupportedAppUsage public void setTactileFeedbackEnabled(boolean tactileFeedbackEnabled) { mEnableHapticFeedback = tactileFeedbackEnabled; } @@ -398,6 +416,7 @@ public class LockPatternView extends View { * Set the call back for pattern detection. * @param onPatternListener The call back. */ + @UnsupportedAppUsage public void setOnPatternListener( OnPatternListener onPatternListener) { mOnPatternListener = onPatternListener; @@ -426,6 +445,7 @@ public class LockPatternView extends View { * in progress result to correct or wrong. * @param displayMode The display mode. */ + @UnsupportedAppUsage public void setDisplayMode(DisplayMode displayMode) { mPatternDisplayMode = displayMode; if (displayMode == DisplayMode.Animate) { @@ -565,6 +585,7 @@ public class LockPatternView extends View { } } + @UnsupportedAppUsage private void notifyPatternDetected() { sendAccessEvent(R.string.lockscreen_access_pattern_detected); if (mOnPatternListener != null) { @@ -582,6 +603,7 @@ public class LockPatternView extends View { /** * Clear the pattern. */ + @UnsupportedAppUsage public void clearPattern() { resetPattern(); } @@ -622,6 +644,7 @@ public class LockPatternView extends View { * Disable input (for instance when displaying a message that will * timeout so user doesn't get view into messy state). */ + @UnsupportedAppUsage public void disableInput() { mInputEnabled = false; } @@ -629,6 +652,7 @@ public class LockPatternView extends View { /** * Enable input. */ + @UnsupportedAppUsage public void enableInput() { mInputEnabled = true; } @@ -1307,6 +1331,7 @@ public class LockPatternView extends View { /** * Constructor called from {@link LockPatternView#onSaveInstanceState()} */ + @UnsupportedAppUsage private SavedState(Parcelable superState, String serializedPattern, int displayMode, boolean inputEnabled, boolean inStealthMode, boolean tactileFeedbackEnabled) { super(superState); @@ -1320,6 +1345,7 @@ public class LockPatternView extends View { /** * Constructor called from {@link #CREATOR} */ + @UnsupportedAppUsage private SavedState(Parcel in) { super(in); mSerializedPattern = in.readString(); diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java index 5847033feb1e..65e10029f37e 100644 --- a/core/java/com/android/internal/widget/PointerLocationView.java +++ b/core/java/com/android/internal/widget/PointerLocationView.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; @@ -53,6 +54,7 @@ public class PointerLocationView extends View implements InputDeviceListener, private int mTraceCount; // True if the pointer is down. + @UnsupportedAppUsage private boolean mCurDown; // Most recent coordinates. @@ -120,10 +122,14 @@ public class PointerLocationView extends View implements InputDeviceListener, private final Paint mPathPaint; private final FontMetricsInt mTextMetrics = new FontMetricsInt(); private int mHeaderBottom; + @UnsupportedAppUsage private boolean mCurDown; + @UnsupportedAppUsage private int mCurNumPointers; + @UnsupportedAppUsage private int mMaxNumPointers; private int mActivePointerId; + @UnsupportedAppUsage private final ArrayList<PointerState> mPointers = new ArrayList<PointerState>(); private final PointerCoords mTempCoords = new PointerCoords(); @@ -132,6 +138,7 @@ public class PointerLocationView extends View implements InputDeviceListener, private final FasterStringBuilder mText = new FasterStringBuilder(); + @UnsupportedAppUsage private boolean mPrintCoords = true; public PointerLocationView(Context c) { diff --git a/core/java/com/android/internal/widget/PreferenceImageView.java b/core/java/com/android/internal/widget/PreferenceImageView.java index 8730cdab258b..02a0b8d436b9 100644 --- a/core/java/com/android/internal/widget/PreferenceImageView.java +++ b/core/java/com/android/internal/widget/PreferenceImageView.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; @@ -29,6 +30,7 @@ public class PreferenceImageView extends ImageView { this(context, null); } + @UnsupportedAppUsage public PreferenceImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } diff --git a/core/java/com/android/internal/widget/RecyclerView.java b/core/java/com/android/internal/widget/RecyclerView.java index 408a4e9b02a4..b66a7b44f05d 100644 --- a/core/java/com/android/internal/widget/RecyclerView.java +++ b/core/java/com/android/internal/widget/RecyclerView.java @@ -20,6 +20,7 @@ import android.annotation.CallSuper; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.TypedArray; import android.database.Observable; @@ -4953,6 +4954,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView, NestedScro * constructed by {@link GapWorker} prefetch from being bound to a lower priority prefetch. */ static class ScrapData { + @UnsupportedAppUsage ArrayList<ViewHolder> mScrapHeap = new ArrayList<>(); int mMaxScrap = DEFAULT_MAX_SCRAP; long mCreateRunningAverageNs = 0; diff --git a/core/java/com/android/internal/widget/ScrollBarUtils.java b/core/java/com/android/internal/widget/ScrollBarUtils.java index 0ae9f74167d5..982e3152fc7c 100644 --- a/core/java/com/android/internal/widget/ScrollBarUtils.java +++ b/core/java/com/android/internal/widget/ScrollBarUtils.java @@ -16,8 +16,11 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; + public class ScrollBarUtils { + @UnsupportedAppUsage public static int getThumbLength(int size, int thickness, int extent, int range) { // Avoid the tiny thumb. final int minLength = thickness * 2; diff --git a/core/java/com/android/internal/widget/SlidingTab.java b/core/java/com/android/internal/widget/SlidingTab.java index 79adada9cc98..4b5d62467af0 100644 --- a/core/java/com/android/internal/widget/SlidingTab.java +++ b/core/java/com/android/internal/widget/SlidingTab.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -83,7 +84,9 @@ public class SlidingTab extends ViewGroup { */ private final int mOrientation; + @UnsupportedAppUsage private final Slider mLeftSlider; + @UnsupportedAppUsage private final Slider mRightSlider; private Slider mCurrentSlider; private boolean mTracking; @@ -95,6 +98,7 @@ public class SlidingTab extends ViewGroup { /** * Listener used to reset the view when the current animation completes. */ + @UnsupportedAppUsage private final AnimationListener mAnimationDoneListener = new AnimationListener() { public void onAnimationStart(Animation animation) { @@ -178,7 +182,9 @@ public class SlidingTab extends ViewGroup { private static final int STATE_PRESSED = 1; private static final int STATE_ACTIVE = 2; + @UnsupportedAppUsage private final ImageView tab; + @UnsupportedAppUsage private final TextView text; private final ImageView target; private int currentState = STATE_NORMAL; @@ -708,6 +714,7 @@ public class SlidingTab extends ViewGroup { slider.startAnimation(trans1, trans2); } + @UnsupportedAppUsage private void onAnimationDone() { resetView(); mAnimating = false; @@ -722,6 +729,7 @@ public class SlidingTab extends ViewGroup { return mOrientation == HORIZONTAL; } + @UnsupportedAppUsage private void resetView() { mLeftSlider.reset(false); mRightSlider.reset(false); @@ -763,6 +771,7 @@ public class SlidingTab extends ViewGroup { * @param barId the resource of the bar drawable (stateful) * @param tabId the resource of the */ + @UnsupportedAppUsage public void setLeftTabResources(int iconId, int targetId, int barId, int tabId) { mLeftSlider.setIcon(iconId); mLeftSlider.setTarget(targetId); @@ -776,6 +785,7 @@ public class SlidingTab extends ViewGroup { * * @param resId */ + @UnsupportedAppUsage public void setLeftHintText(int resId) { if (isHorizontal()) { mLeftSlider.setHintText(resId); @@ -793,6 +803,7 @@ public class SlidingTab extends ViewGroup { * @param barId the resource of the bar drawable (stateful) * @param tabId the resource of the */ + @UnsupportedAppUsage public void setRightTabResources(int iconId, int targetId, int barId, int tabId) { mRightSlider.setIcon(iconId); mRightSlider.setTarget(targetId); @@ -806,12 +817,14 @@ public class SlidingTab extends ViewGroup { * * @param resId */ + @UnsupportedAppUsage public void setRightHintText(int resId) { if (isHorizontal()) { mRightSlider.setHintText(resId); } } + @UnsupportedAppUsage public void setHoldAfterTrigger(boolean holdLeft, boolean holdRight) { mHoldLeftOnTransition = holdLeft; mHoldRightOnTransition = holdRight; @@ -838,6 +851,7 @@ public class SlidingTab extends ViewGroup { * * @param listener the OnDialTriggerListener to attach to this view */ + @UnsupportedAppUsage public void setOnTriggerListener(OnTriggerListener listener) { mOnTriggerListener = listener; } diff --git a/core/java/com/android/internal/widget/TextViewInputDisabler.java b/core/java/com/android/internal/widget/TextViewInputDisabler.java index fb0b3b95b6f2..8d8f0fe52d64 100644 --- a/core/java/com/android/internal/widget/TextViewInputDisabler.java +++ b/core/java/com/android/internal/widget/TextViewInputDisabler.java @@ -16,6 +16,7 @@ package com.android.internal.widget; +import android.annotation.UnsupportedAppUsage; import android.text.InputFilter; import android.text.Spanned; import android.widget.TextView; @@ -38,11 +39,13 @@ public class TextViewInputDisabler { } }; + @UnsupportedAppUsage public TextViewInputDisabler(TextView textView) { mTextView = textView; mDefaultFilters = mTextView.getFilters(); } + @UnsupportedAppUsage public void setInputEnabled(boolean enabled) { mTextView.setFilters(enabled ? mDefaultFilters : mNoInputFilters); } diff --git a/core/java/com/android/internal/widget/ViewPager.java b/core/java/com/android/internal/widget/ViewPager.java index 64bdc6e1eb37..574a09f8d3af 100644 --- a/core/java/com/android/internal/widget/ViewPager.java +++ b/core/java/com/android/internal/widget/ViewPager.java @@ -18,6 +18,7 @@ package com.android.internal.widget; import android.annotation.DrawableRes; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -243,6 +244,7 @@ public class ViewPager extends ViewGroup { * @param positionOffset Value from [0, 1) indicating the offset from the page at position. * @param positionOffsetPixels Value in pixels indicating the offset from position. */ + @UnsupportedAppUsage public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); /** @@ -251,6 +253,7 @@ public class ViewPager extends ViewGroup { * * @param position Position index of the new selected page. */ + @UnsupportedAppUsage public void onPageSelected(int position); /** @@ -263,6 +266,7 @@ public class ViewPager extends ViewGroup { * @see com.android.internal.widget.ViewPager#SCROLL_STATE_DRAGGING * @see com.android.internal.widget.ViewPager#SCROLL_STATE_SETTLING */ + @UnsupportedAppUsage public void onPageScrollStateChanged(int state); } @@ -483,6 +487,7 @@ public class ViewPager extends ViewGroup { setCurrentItemInternal(item, smoothScroll, false); } + @UnsupportedAppUsage public int getCurrentItem() { return mCurItem; } diff --git a/core/java/com/android/server/ResettableTimeout.java b/core/java/com/android/server/ResettableTimeout.java index ac5b160670b0..64083f72aff5 100644 --- a/core/java/com/android/server/ResettableTimeout.java +++ b/core/java/com/android/server/ResettableTimeout.java @@ -18,6 +18,7 @@ package com.android.server; import android.os.SystemClock; +import android.annotation.UnsupportedAppUsage; import android.os.ConditionVariable; /** @@ -120,9 +121,11 @@ abstract class ResettableTimeout } } + @UnsupportedAppUsage private ConditionVariable mLock = new ConditionVariable(); // turn it off at this time. + @UnsupportedAppUsage private volatile long mOffAt; private volatile boolean mOffCalled; diff --git a/core/java/com/android/server/net/BaseNetworkObserver.java b/core/java/com/android/server/net/BaseNetworkObserver.java index 3d9fb5c872f7..a0740eee5df6 100644 --- a/core/java/com/android/server/net/BaseNetworkObserver.java +++ b/core/java/com/android/server/net/BaseNetworkObserver.java @@ -16,6 +16,7 @@ package com.android.server.net; +import android.annotation.UnsupportedAppUsage; import android.net.INetworkManagementEventObserver; import android.net.LinkAddress; import android.net.RouteInfo; diff --git a/core/java/com/android/server/net/NetlinkTracker.java b/core/java/com/android/server/net/NetlinkTracker.java index 5b421d988e0a..647fb5b9d079 100644 --- a/core/java/com/android/server/net/NetlinkTracker.java +++ b/core/java/com/android/server/net/NetlinkTracker.java @@ -16,6 +16,7 @@ package com.android.server.net; +import android.annotation.UnsupportedAppUsage; import android.net.LinkAddress; import android.net.LinkProperties; import android.net.RouteInfo; @@ -79,6 +80,7 @@ public class NetlinkTracker extends BaseNetworkObserver { private static final boolean DBG = false; + @UnsupportedAppUsage public NetlinkTracker(String iface, Callback callback) { TAG = "NetlinkTracker/" + iface; mInterfaceName = iface; @@ -187,10 +189,12 @@ public class NetlinkTracker extends BaseNetworkObserver { /** * Returns a copy of this object's LinkProperties. */ + @UnsupportedAppUsage public synchronized LinkProperties getLinkProperties() { return new LinkProperties(mLinkProperties); } + @UnsupportedAppUsage public synchronized void clearLinkProperties() { // Clear the repository before clearing mLinkProperties. That way, if a clear() happens // while interfaceDnsServerInfo() is being called, we'll end up with no DNS servers in diff --git a/core/java/com/google/android/collect/Lists.java b/core/java/com/google/android/collect/Lists.java index 3ea873bbb0f9..8f6594aefb0a 100644 --- a/core/java/com/google/android/collect/Lists.java +++ b/core/java/com/google/android/collect/Lists.java @@ -57,6 +57,7 @@ public class Lists { * @param elements the elements that the list should contain, in order * @return a newly-created {@code ArrayList} containing those elements */ + @UnsupportedAppUsage public static <E> ArrayList<E> newArrayList(E... elements) { int capacity = (elements.length * 110) / 100 + 5; ArrayList<E> list = new ArrayList<E>(capacity); diff --git a/core/java/com/google/android/collect/Sets.java b/core/java/com/google/android/collect/Sets.java index dd3cab15d0b2..09b5e51ae2c6 100644 --- a/core/java/com/google/android/collect/Sets.java +++ b/core/java/com/google/android/collect/Sets.java @@ -16,6 +16,7 @@ package com.google.android.collect; +import android.annotation.UnsupportedAppUsage; import android.util.ArraySet; import java.util.Collections; @@ -42,6 +43,7 @@ public class Sets { * * @return a newly-created, initially-empty {@code HashSet} */ + @UnsupportedAppUsage public static <K> HashSet<K> newHashSet() { return new HashSet<K>(); } @@ -63,6 +65,7 @@ public class Sets { * @return a newly-created {@code HashSet} containing those elements (minus * duplicates) */ + @UnsupportedAppUsage public static <E> HashSet<E> newHashSet(E... elements) { int capacity = elements.length * 4 / 3 + 1; HashSet<E> set = new HashSet<E>(capacity); @@ -75,6 +78,7 @@ public class Sets { * * @return a newly-created, initially-empty {@code SortedSet}. */ + @UnsupportedAppUsage public static <E> SortedSet<E> newSortedSet() { return new TreeSet<E>(); } @@ -95,6 +99,7 @@ public class Sets { /** * Creates a {@code ArraySet} instance. */ + @UnsupportedAppUsage public static <E> ArraySet<E> newArraySet() { return new ArraySet<E>(); } @@ -102,6 +107,7 @@ public class Sets { /** * Creates a {@code ArraySet} instance containing the given elements. */ + @UnsupportedAppUsage public static <E> ArraySet<E> newArraySet(E... elements) { int capacity = elements.length * 4 / 3 + 1; ArraySet<E> set = new ArraySet<E>(capacity); diff --git a/core/java/com/google/android/util/AbstractMessageParser.java b/core/java/com/google/android/util/AbstractMessageParser.java index 1871682ee063..9d12f82aeb75 100644 --- a/core/java/com/google/android/util/AbstractMessageParser.java +++ b/core/java/com/google/android/util/AbstractMessageParser.java @@ -16,6 +16,7 @@ package com.google.android.util; +import android.annotation.UnsupportedAppUsage; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -654,15 +655,25 @@ public abstract class AbstractMessageParser { public static abstract class Token { public enum Type { + @UnsupportedAppUsage HTML ("html"), + @UnsupportedAppUsage FORMAT ("format"), // subtype of HTML + @UnsupportedAppUsage LINK ("l"), + @UnsupportedAppUsage SMILEY ("e"), + @UnsupportedAppUsage ACRONYM ("a"), + @UnsupportedAppUsage MUSIC ("m"), + @UnsupportedAppUsage GOOGLE_VIDEO ("v"), + @UnsupportedAppUsage YOUTUBE_VIDEO ("yt"), + @UnsupportedAppUsage PHOTO ("p"), + @UnsupportedAppUsage FLICKR ("f"); //stringreps for HTML and FORMAT don't really matter diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index e62df2a189a7..71879194ccf6 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1009,6 +1009,18 @@ android:description="@string/permdesc_manageOwnCalls" android:protectionLevel="normal" /> + <!--Allows an app which implements the + {@link android.telecom.InCallService} API to be eligible to be enabled as a calling companion app. This + means that the Telecom framework will bind to the app's InCallService implementation when + there are calls active. The app can use the InCallService API to view information about + calls on the system and control these calls. + <p>Protection level: normal + --> + <permission android:name="android.permission.CALL_COMPANION_APP" + android:label="@string/permlab_callCompanionApp" + android:description="@string/permdesc_callCompanionApp" + android:protectionLevel="normal" /> + <!-- Allows a calling app to continue a call which was started in another app. An example is a video calling app that wants to continue a voice call on the user's mobile network.<p> When the handover of a call from one app to another takes place, there are two devices diff --git a/core/res/res/drawable/ic_bluetooth_share_icon.xml b/core/res/res/drawable/ic_bluetooth_share_icon.xml new file mode 100644 index 000000000000..2446402be93f --- /dev/null +++ b/core/res/res/drawable/ic_bluetooth_share_icon.xml @@ -0,0 +1,27 @@ +<!-- + 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. +--> +<!-- This drawable should only be used by the Bluetooth application for its share target icon. --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="@android:color/accent_device_default"> + + <path + android:fillColor="@android:color/white" + android:pathData="M17.71,7.71L12,2h-1v7.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L11,14.41V22h1l5.71-5.71L13.41,12L17.71,7.71z M13,5.83 l1.88,1.88L13,9.59V5.83z M14.88,16.29L13,18.17v-3.76L14.88,16.29z" /> +</vector>
\ No newline at end of file diff --git a/core/res/res/values-night/colors_device_defaults.xml b/core/res/res/values-night/colors_device_defaults.xml new file mode 100644 index 000000000000..08ad4926197b --- /dev/null +++ b/core/res/res/values-night/colors_device_defaults.xml @@ -0,0 +1,19 @@ +<?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. +--> + +<resources> + <color name="accent_device_default">@color/accent_device_default_dark</color> +</resources>
\ No newline at end of file diff --git a/core/res/res/values/colors_device_defaults.xml b/core/res/res/values/colors_device_defaults.xml index 256c53133096..212e1cc55137 100644 --- a/core/res/res/values/colors_device_defaults.xml +++ b/core/res/res/values/colors_device_defaults.xml @@ -35,6 +35,7 @@ <color name="accent_device_default_light">@color/accent_material_light</color> <color name="accent_device_default_dark">@color/accent_material_dark</color> + <color name="accent_device_default">@color/accent_device_default_light</color> <color name="background_device_default_dark">@color/background_material_dark</color> <color name="background_device_default_light">@color/background_material_light</color> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 75aa60f1242a..4f6775b99e10 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1185,6 +1185,15 @@ <string name="permdesc_manageOwnCalls">Allows the app to route its calls through the system in order to improve the calling experience.</string> + <!-- Title of an application permission. When granted the app is allowed to be enabled as + a companion app. [CHAR LIMIT=NONE]--> + <string name="permlab_callCompanionApp">see and control calls through the system.</string> + <!-- Description of an application permission. When granted the app is allowed to be enabled as + a companion app. [CHAR LIMIT=NONE]--> + <string name="permdesc_callCompanionApp">Allows the app to see and control ongoing calls on the + device. This includes information such as call numbers for calls and the state of the + calls.</string> + <!-- Title of an application permission. When granted the user is giving access to a third party app to continue a call which originated in another app. For example, the user could be in a voice call over their carrier's mobile network, and a third party video diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java index b1f855246320..c59098795faf 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionTests.java @@ -29,6 +29,15 @@ import android.support.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +/** + * Tests for {@link ClientTransaction}. + * + * <p>Build/Install/Run: + * atest FrameworksCoreTests:ClientTransactionTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index fb0f5344f643..32e5f008c729 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -41,6 +41,15 @@ import android.support.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +/** + * Tests for {@link ObjectPool}. + * + * <p>Build/Install/Run: + * atest FrameworksCoreTests:ObjectPoolTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java index fe58116002f2..6620a2e86272 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java @@ -26,9 +26,8 @@ import static android.app.servertransaction.ActivityLifecycleItem.ON_STOP; import static android.app.servertransaction.ActivityLifecycleItem.PRE_ON_CREATE; import static android.app.servertransaction.ActivityLifecycleItem.UNDEFINED; -import static junit.framework.Assert.assertEquals; - import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; @@ -58,7 +57,15 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -/** Test {@link TransactionExecutor} logic. */ +/** + * Test {@link TransactionExecutor} logic. + * + * <p>Build/Install/Run: + * atest FrameworksCoreTests:TransactionExecutorTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 104208eefef7..d922c16a9297 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -21,8 +21,8 @@ import static android.app.servertransaction.TestUtils.mergedConfig; import static android.app.servertransaction.TestUtils.referrerIntentList; import static android.app.servertransaction.TestUtils.resultInfoList; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import android.app.IApplicationThread; import android.app.IInstrumentationWatcher; @@ -60,7 +60,15 @@ import org.junit.runner.RunWith; import java.util.List; import java.util.Map; -/** Test parcelling and unparcelling of transactions and transaction items. */ +/** + * Test parcelling and unparcelling of transactions and transaction items. + * + * <p>Build/Install/Run: + * atest FrameworksCoreTests:TransactionParcelTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/core/tests/coretests/src/android/view/DisplayCutoutTest.java b/core/tests/coretests/src/android/view/DisplayCutoutTest.java index fe45fe7d3aaf..a3df1a094ec0 100644 --- a/core/tests/coretests/src/android/view/DisplayCutoutTest.java +++ b/core/tests/coretests/src/android/view/DisplayCutoutTest.java @@ -40,6 +40,15 @@ import org.junit.runner.RunWith; import java.util.Arrays; +/** + * Tests for {@link DisplayCutout}. + * + * <p>Build/Install/Run: + * atest FrameworksCoreTests:DisplayCutoutTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/data/etc/Android.bp b/data/etc/Android.bp index bb4765835890..3968f84471c5 100644 --- a/data/etc/Android.bp +++ b/data/etc/Android.bp @@ -66,6 +66,14 @@ prebuilt_etc { } prebuilt_etc { + name: "privapp_whitelist_com.android.emergency", + product_specific: true, + sub_dir: "permissions", + src: "com.android.emergency.xml", + filename_from_src: true, +} + +prebuilt_etc { name: "privapp_whitelist_com.android.launcher3", product_specific: true, sub_dir: "permissions", diff --git a/data/etc/com.android.emergency.xml b/data/etc/com.android.emergency.xml new file mode 100644 index 000000000000..28f99dd1d018 --- /dev/null +++ b/data/etc/com.android.emergency.xml @@ -0,0 +1,23 @@ +<?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 + --> +<permissions> + <privapp-permissions package="com.android.emergency"> + <!-- Required to place emergency calls from emergency info screen. --> + <permission name="android.permission.CALL_PRIVILEGED"/> + <permission name="android.permission.MANAGE_USERS"/> + </privapp-permissions> +</permissions> diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index 78bbcf137f2a..9decd086972a 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -48,12 +48,6 @@ applications that come with the platform <permission name="android.permission.WRITE_MEDIA_STORAGE"/> </privapp-permissions> - <privapp-permissions package="com.android.emergency"> - <!-- Required to place emergency calls from emergency info screen. --> - <permission name="android.permission.CALL_PRIVILEGED"/> - <permission name="android.permission.MANAGE_USERS"/> - </privapp-permissions> - <privapp-permissions package="com.android.externalstorage"> <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <permission name="android.permission.WRITE_MEDIA_STORAGE"/> diff --git a/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java b/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java index 1e724c22a7ec..79d6a554e251 100644 --- a/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java +++ b/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java @@ -102,9 +102,9 @@ public class DhcpClient extends StateMachine { private static final String TAG = "DhcpClient"; private static final boolean DBG = true; - private static final boolean STATE_DBG = false; - private static final boolean MSG_DBG = false; - private static final boolean PACKET_DBG = false; + private static final boolean STATE_DBG = Log.isLoggable(TAG, Log.DEBUG); + private static final boolean MSG_DBG = Log.isLoggable(TAG, Log.DEBUG); + private static final boolean PACKET_DBG = Log.isLoggable(TAG, Log.DEBUG); // Metrics events: must be kept in sync with server-side aggregation code. /** Represents transitions from DhcpInitState to DhcpBoundState */ diff --git a/packages/NetworkStack/src/android/net/ip/IpReachabilityMonitor.java b/packages/NetworkStack/src/android/net/ip/IpReachabilityMonitor.java index 3aa6933fe8f2..c19a24eb7fb6 100644 --- a/packages/NetworkStack/src/android/net/ip/IpReachabilityMonitor.java +++ b/packages/NetworkStack/src/android/net/ip/IpReachabilityMonitor.java @@ -129,8 +129,8 @@ import java.util.Map; */ public class IpReachabilityMonitor { private static final String TAG = "IpReachabilityMonitor"; - private static final boolean DBG = false; - private static final boolean VDBG = false; + private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG); + private static final boolean VDBG = Log.isLoggable(TAG, Log.VERBOSE); public interface Callback { // This callback function must execute as quickly as possible as it is diff --git a/services/core/Android.bp b/services/core/Android.bp index 48b69b029643..b028ba80ca02 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -20,6 +20,7 @@ java_library_static { ":mediaupdateservice_aidl", "java/com/android/server/EventLogTags.logtags", "java/com/android/server/am/EventLogTags.logtags", + "java/com/android/server/policy/EventLogTags.logtags", ], libs: [ diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java index 123564eb4fdb..0c559346bc42 100644 --- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java +++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java @@ -22,6 +22,7 @@ import static android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS; import static android.Manifest.permission.INTERNET; import static android.Manifest.permission.NETWORK_STACK; import static android.Manifest.permission.UPDATE_DEVICE_STATS; +import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED; import static android.content.pm.PackageManager.GET_PERMISSIONS; import static android.content.pm.PackageManager.MATCH_ANY_USER; import static android.os.Process.INVALID_UID; @@ -42,13 +43,15 @@ import android.os.INetworkManagementService; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; +import android.util.ArraySet; import android.util.Log; -import android.util.Slog; +import android.util.SparseArray; import android.util.SparseIntArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.server.LocalServices; +import com.android.server.SystemConfig; import java.util.ArrayList; import java.util.HashMap; @@ -83,41 +86,32 @@ public class PermissionMonitor { private final Map<Integer, Boolean> mApps = new HashMap<>(); private class PackageListObserver implements PackageManagerInternal.PackageListObserver { - @Override - public void onPackageAdded(String packageName, int uid) { - final PackageInfo app = getPackageInfo(packageName); - if (app == null) { - Slog.wtf(TAG, "Failed to get information of installed package: " + packageName); - return; - } - if (uid == INVALID_UID) { - Slog.wtf(TAG, "Failed to get the uid of installed package: " + packageName - + "uid: " + uid); - return; - } - if (app.requestedPermissions == null) { - return; - } - sendPackagePermissionsForUid(uid, - getNetdPermissionMask(app.requestedPermissions)); - } - @Override - public void onPackageRemoved(String packageName, int uid) { + private int getPermissionForUid(int uid) { int permission = 0; - // If there are still packages remain under the same uid, check the permission of the - // remaining packages. We only remove the permission for a given uid when all packages - // for that uid no longer have that permission. + // Check all the packages for this UID. The UID has the permission if any of the + // packages in it has the permission. String[] packages = mPackageManager.getPackagesForUid(uid); if (packages != null && packages.length > 0) { for (String name : packages) { final PackageInfo app = getPackageInfo(name); if (app != null && app.requestedPermissions != null) { - permission |= getNetdPermissionMask(app.requestedPermissions); + permission |= getNetdPermissionMask(app.requestedPermissions, + app.requestedPermissionsFlags); } } } - sendPackagePermissionsForUid(uid, permission); + return permission; + } + + @Override + public void onPackageAdded(String packageName, int uid) { + sendPackagePermissionsForUid(uid, getPermissionForUid(uid)); + } + + @Override + public void onPackageRemoved(String packageName, int uid) { + sendPackagePermissionsForUid(uid, getPermissionForUid(uid)); } } @@ -167,12 +161,9 @@ public class PermissionMonitor { } //TODO: unify the management of the permissions into one codepath. - if (app.requestedPermissions != null) { - int otherNetdPerms = getNetdPermissionMask(app.requestedPermissions); - if (otherNetdPerms != 0) { - netdPermsUids.put(uid, netdPermsUids.get(uid) | otherNetdPerms); - } - } + int otherNetdPerms = getNetdPermissionMask(app.requestedPermissions, + app.requestedPermissionsFlags); + netdPermsUids.put(uid, netdPermsUids.get(uid) | otherNetdPerms); } List<UserInfo> users = mUserManager.getUsers(true); // exclude dying users @@ -182,6 +173,23 @@ public class PermissionMonitor { } } + final SparseArray<ArraySet<String>> systemPermission = + SystemConfig.getInstance().getSystemPermissions(); + for (int i = 0; i < systemPermission.size(); i++) { + ArraySet<String> perms = systemPermission.valueAt(i); + int uid = systemPermission.keyAt(i); + int netdPermission = 0; + // Get the uids of native services that have UPDATE_DEVICE_STATS permission. + if (perms != null) { + netdPermission |= perms.contains(UPDATE_DEVICE_STATS) + ? INetd.PERMISSION_UPDATE_DEVICE_STATS : 0; + } + // For internet permission, the native services have their own selinux domains and + // sepolicy will control the socket creation during run time. netd cannot block the + // socket creation based on the permission information here. + netdPermission |= INetd.PERMISSION_INTERNET; + netdPermsUids.put(uid, netdPermsUids.get(uid) | netdPermission); + } log("Users: " + mUsers.size() + ", Apps: " + mApps.size()); update(mUsers, mApps, true); sendPackagePermissionsToNetd(netdPermsUids); @@ -403,13 +411,17 @@ public class PermissionMonitor { } } - private static int getNetdPermissionMask(String[] requestedPermissions) { + private static int getNetdPermissionMask(String[] requestedPermissions, + int[] requestedPermissionsFlags) { int permissions = 0; - for (String permissionName : requestedPermissions) { - if (permissionName.equals(INTERNET)) { + if (requestedPermissions == null || requestedPermissionsFlags == null) return permissions; + for (int i = 0; i < requestedPermissions.length; i++) { + if (requestedPermissions[i].equals(INTERNET) + && ((requestedPermissionsFlags[i] & REQUESTED_PERMISSION_GRANTED) != 0)) { permissions |= INetd.PERMISSION_INTERNET; } - if (permissionName.equals(UPDATE_DEVICE_STATS)) { + if (requestedPermissions[i].equals(UPDATE_DEVICE_STATS) + && ((requestedPermissionsFlags[i] & REQUESTED_PERMISSION_GRANTED) != 0)) { permissions |= INetd.PERMISSION_UPDATE_DEVICE_STATS; } } diff --git a/services/core/java/com/android/server/policy/EventLogTags.logtags b/services/core/java/com/android/server/policy/EventLogTags.logtags new file mode 100644 index 000000000000..75633820d01f --- /dev/null +++ b/services/core/java/com/android/server/policy/EventLogTags.logtags @@ -0,0 +1,8 @@ +# See system/core/logcat/event.logtags for a description of the format of this file. + +option java_package com.android.server.policy + + +# 0 for screen off, 1 for screen on +70000 screen_toggled (screen_state|1|5) +70001 intercept_power (action|3),(mPowerKeyHandled|1),(mPowerKeyPressCounter|1) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 9a741bcfc3d6..0149d30da6bd 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -225,7 +225,6 @@ import android.speech.RecognizerIntent; import android.telecom.TelecomManager; import android.util.ArraySet; import android.util.DisplayMetrics; -import android.util.EventLog; import android.util.Log; import android.util.LongSparseArray; import android.util.MutableBoolean; @@ -270,12 +269,11 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.internal.policy.IShortcutService; -import com.android.internal.policy.KeyguardDismissCallback; import com.android.internal.policy.PhoneWindow; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.ArrayUtils; -import com.android.internal.util.ScreenshotHelper; import com.android.internal.util.ScreenShapeHelper; +import com.android.internal.util.ScreenshotHelper; import com.android.internal.widget.PointerLocationView; import com.android.server.GestureLauncherService; import com.android.server.LocalServices; @@ -6247,6 +6245,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { } case KeyEvent.KEYCODE_POWER: { + EventLogTags.writeInterceptPower( + KeyEvent.actionToString(event.getAction()), + mPowerKeyHandled ? 1 : 0, mPowerKeyPressCounter); // Any activity on the power button stops the accessibility shortcut cancelPendingAccessibilityShortcutAction(); result &= ~ACTION_PASS_TO_USER; @@ -6785,7 +6786,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the PowerManager's Notifier thread. @Override public void finishedGoingToSleep(int why) { - EventLog.writeEvent(70000, 0); + EventLogTags.writeScreenToggled(0); if (DEBUG_WAKEUP) Slog.i(TAG, "Finished going to sleep... (why=" + why + ")"); MetricsLogger.histogram(mContext, "screen_timeout", mLockScreenTimeout / 1000); @@ -6810,7 +6811,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // Called on the PowerManager's Notifier thread. @Override public void startedWakingUp() { - EventLog.writeEvent(70000, 1); + EventLogTags.writeScreenToggled(1); if (DEBUG_WAKEUP) Slog.i(TAG, "Started waking up..."); // Since goToSleep performs these functions synchronously, we must diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 22ac65df4337..1fb28e1969a8 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3703,13 +3703,19 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo .show(mSplitScreenDividerAnchor); scheduleAnimation(); } else { - mAppAnimationLayer.destroy(); + // At this time mBoostedAppAnimationLayer may be used for animating, + // and ResizeableActivity is in it. mBoostedAppAnimationLayer.destroy() + // can also destroy the surface of ResizeableActivity, but the surface will + // be used after. So change to use transaction to call destroy to delay it, + // and ResizeableActivity is not in mBoostedAppAnimationLayer. + getPendingTransaction() + .destroy(mAppAnimationLayer) + .destroy(mBoostedAppAnimationLayer) + .destroy(mHomeAppAnimationLayer) + .destroy(mSplitScreenDividerAnchor); mAppAnimationLayer = null; - mBoostedAppAnimationLayer.destroy(); mBoostedAppAnimationLayer = null; - mHomeAppAnimationLayer.destroy(); mHomeAppAnimationLayer = null; - mSplitScreenDividerAnchor.destroy(); mSplitScreenDividerAnchor = null; } } diff --git a/services/net/Android.bp b/services/net/Android.bp index 9e1d44b9faff..67fbdc4d95f2 100644 --- a/services/net/Android.bp +++ b/services/net/Android.bp @@ -25,7 +25,6 @@ aidl_interface { local_include_dir: "java", include_dirs: ["frameworks/base/core/java"], // For framework parcelables. srcs: [ - "java/android/net/ApfCapabilitiesParcelable.aidl", "java/android/net/DhcpResultsParcelable.aidl", "java/android/net/IIpMemoryStore.aidl", "java/android/net/IIpMemoryStoreCallbacks.aidl", @@ -36,7 +35,6 @@ aidl_interface { "java/android/net/InitialConfigurationParcelable.aidl", "java/android/net/PrivateDnsConfigParcel.aidl", "java/android/net/ProvisioningConfigurationParcelable.aidl", - "java/android/net/StaticIpConfigurationParcelable.aidl", "java/android/net/TcpKeepalivePacketDataParcelable.aidl", "java/android/net/dhcp/DhcpServingParamsParcel.aidl", "java/android/net/dhcp/IDhcpServer.aidl", diff --git a/services/net/java/android/net/ApfCapabilitiesParcelable.aidl b/services/net/java/android/net/ApfCapabilitiesParcelable.aidl deleted file mode 100644 index f0645d2782d2..000000000000 --- a/services/net/java/android/net/ApfCapabilitiesParcelable.aidl +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.net; - -parcelable ApfCapabilitiesParcelable { - int apfVersionSupported; - int maximumApfProgramSize; - int apfPacketFormat; -}
\ No newline at end of file diff --git a/services/net/java/android/net/DhcpResultsParcelable.aidl b/services/net/java/android/net/DhcpResultsParcelable.aidl index cf5629b6f792..978638b51ad1 100644 --- a/services/net/java/android/net/DhcpResultsParcelable.aidl +++ b/services/net/java/android/net/DhcpResultsParcelable.aidl @@ -16,10 +16,10 @@ package android.net; -import android.net.StaticIpConfigurationParcelable; +import android.net.StaticIpConfiguration; parcelable DhcpResultsParcelable { - StaticIpConfigurationParcelable baseConfiguration; + StaticIpConfiguration baseConfiguration; int leaseDuration; int mtu; String serverAddress; diff --git a/services/net/java/android/net/ProvisioningConfigurationParcelable.aidl b/services/net/java/android/net/ProvisioningConfigurationParcelable.aidl index 5b46d7f55ee3..99606fb4b7a2 100644 --- a/services/net/java/android/net/ProvisioningConfigurationParcelable.aidl +++ b/services/net/java/android/net/ProvisioningConfigurationParcelable.aidl @@ -17,10 +17,10 @@ package android.net; -import android.net.ApfCapabilitiesParcelable; import android.net.InitialConfigurationParcelable; import android.net.Network; -import android.net.StaticIpConfigurationParcelable; +import android.net.StaticIpConfiguration; +import android.net.apf.ApfCapabilities; parcelable ProvisioningConfigurationParcelable { boolean enableIPv4; @@ -29,8 +29,8 @@ parcelable ProvisioningConfigurationParcelable { boolean usingIpReachabilityMonitor; int requestedPreDhcpActionMs; InitialConfigurationParcelable initialConfig; - StaticIpConfigurationParcelable staticIpConfig; - ApfCapabilitiesParcelable apfCapabilities; + StaticIpConfiguration staticIpConfig; + ApfCapabilities apfCapabilities; int provisioningTimeoutMs; int ipv6AddrGenMode; Network network; diff --git a/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java b/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java index 6b5826f8b095..44d8e0ce3635 100644 --- a/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java +++ b/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java @@ -16,17 +16,10 @@ package android.net.shared; -import static android.net.shared.ParcelableUtil.fromParcelableArray; -import static android.net.shared.ParcelableUtil.toParcelableArray; - import android.annotation.Nullable; -import android.net.ApfCapabilitiesParcelable; import android.net.DhcpResults; import android.net.DhcpResultsParcelable; import android.net.InetAddresses; -import android.net.StaticIpConfiguration; -import android.net.StaticIpConfigurationParcelable; -import android.net.apf.ApfCapabilities; import java.net.Inet4Address; import java.net.InetAddress; @@ -38,44 +31,12 @@ import java.net.InetAddress; */ public final class IpConfigurationParcelableUtil { /** - * Convert a StaticIpConfiguration to a StaticIpConfigurationParcelable. - */ - public static StaticIpConfigurationParcelable toStableParcelable( - @Nullable StaticIpConfiguration config) { - if (config == null) return null; - final StaticIpConfigurationParcelable p = new StaticIpConfigurationParcelable(); - p.ipAddress = config.getIpAddress(); - p.gateway = parcelAddress(config.getGateway()); - p.dnsServers = toParcelableArray( - config.getDnsServers(), IpConfigurationParcelableUtil::parcelAddress, String.class); - p.domains = config.getDomains(); - return p; - } - - /** - * Convert a StaticIpConfigurationParcelable to a StaticIpConfiguration. - */ - public static StaticIpConfiguration fromStableParcelable( - @Nullable StaticIpConfigurationParcelable p) { - if (p == null) return null; - final StaticIpConfiguration config = new StaticIpConfiguration(); - config.setIpAddress(p.ipAddress); - config.setGateway(unparcelAddress(p.gateway)); - for (InetAddress addr : fromParcelableArray( - p.dnsServers, IpConfigurationParcelableUtil::unparcelAddress)) { - config.addDnsServer(addr); - } - config.setDomains(p.domains); - return config; - } - - /** * Convert DhcpResults to a DhcpResultsParcelable. */ public static DhcpResultsParcelable toStableParcelable(@Nullable DhcpResults results) { if (results == null) return null; final DhcpResultsParcelable p = new DhcpResultsParcelable(); - p.baseConfiguration = toStableParcelable(results.toStaticIpConfiguration()); + p.baseConfiguration = results.toStaticIpConfiguration(); p.leaseDuration = results.leaseDuration; p.mtu = results.mtu; p.serverAddress = parcelAddress(results.serverAddress); @@ -88,7 +49,7 @@ public final class IpConfigurationParcelableUtil { */ public static DhcpResults fromStableParcelable(@Nullable DhcpResultsParcelable p) { if (p == null) return null; - final DhcpResults results = new DhcpResults(fromStableParcelable(p.baseConfiguration)); + final DhcpResults results = new DhcpResults(p.baseConfiguration); results.leaseDuration = p.leaseDuration; results.mtu = p.mtu; results.serverAddress = (Inet4Address) unparcelAddress(p.serverAddress); @@ -97,27 +58,6 @@ public final class IpConfigurationParcelableUtil { } /** - * Convert ApfCapabilities to ApfCapabilitiesParcelable. - */ - public static ApfCapabilitiesParcelable toStableParcelable(@Nullable ApfCapabilities caps) { - if (caps == null) return null; - final ApfCapabilitiesParcelable p = new ApfCapabilitiesParcelable(); - p.apfVersionSupported = caps.apfVersionSupported; - p.maximumApfProgramSize = caps.maximumApfProgramSize; - p.apfPacketFormat = caps.apfPacketFormat; - return p; - } - - /** - * Convert ApfCapabilitiesParcelable toApfCapabilities. - */ - public static ApfCapabilities fromStableParcelable(@Nullable ApfCapabilitiesParcelable p) { - if (p == null) return null; - return new ApfCapabilities( - p.apfVersionSupported, p.maximumApfProgramSize, p.apfPacketFormat); - } - - /** * Convert InetAddress to String. * TODO: have an InetAddressParcelable */ diff --git a/services/net/java/android/net/shared/ProvisioningConfiguration.java b/services/net/java/android/net/shared/ProvisioningConfiguration.java index 0aceb2278660..6f9c2949d864 100644 --- a/services/net/java/android/net/shared/ProvisioningConfiguration.java +++ b/services/net/java/android/net/shared/ProvisioningConfiguration.java @@ -235,8 +235,10 @@ public class ProvisioningConfiguration { p.usingIpReachabilityMonitor = mUsingIpReachabilityMonitor; p.requestedPreDhcpActionMs = mRequestedPreDhcpActionMs; p.initialConfig = mInitialConfig == null ? null : mInitialConfig.toStableParcelable(); - p.staticIpConfig = IpConfigurationParcelableUtil.toStableParcelable(mStaticIpConfig); - p.apfCapabilities = IpConfigurationParcelableUtil.toStableParcelable(mApfCapabilities); + p.staticIpConfig = mStaticIpConfig == null + ? null + : new StaticIpConfiguration(mStaticIpConfig); + p.apfCapabilities = mApfCapabilities; // ApfCapabilities is immutable p.provisioningTimeoutMs = mProvisioningTimeoutMs; p.ipv6AddrGenMode = mIPv6AddrGenMode; p.network = mNetwork; @@ -257,10 +259,10 @@ public class ProvisioningConfiguration { config.mUsingIpReachabilityMonitor = p.usingIpReachabilityMonitor; config.mRequestedPreDhcpActionMs = p.requestedPreDhcpActionMs; config.mInitialConfig = InitialConfiguration.fromStableParcelable(p.initialConfig); - config.mStaticIpConfig = IpConfigurationParcelableUtil.fromStableParcelable( - p.staticIpConfig); - config.mApfCapabilities = IpConfigurationParcelableUtil.fromStableParcelable( - p.apfCapabilities); + config.mStaticIpConfig = p.staticIpConfig == null + ? null + : new StaticIpConfiguration(p.staticIpConfig); + config.mApfCapabilities = p.apfCapabilities; // ApfCapabilities is immutable config.mProvisioningTimeoutMs = p.provisioningTimeoutMs; config.mIPv6AddrGenMode = p.ipv6AddrGenMode; config.mNetwork = p.network; diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java index d75a3fc8d20b..01644737f55f 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java @@ -43,8 +43,11 @@ import org.junit.runner.RunWith; /** * Tests for exercising resizing bounds due to activity options. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:ActivityLaunchParamsModifierTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java index 5ee7477b486c..af0aaf31cd59 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java @@ -30,16 +30,15 @@ import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_BOTTOM; import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_LEFT; import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_RIGHT; -import static junit.framework.TestCase.assertNotNull; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyInt; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -62,8 +61,11 @@ import org.mockito.invocation.InvocationOnMock; /** * Tests for the {@link ActivityRecord} class. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:com.android.server.am.ActivityRecordTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java index f36c57973240..b0f949132c3e 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java @@ -27,15 +27,14 @@ import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE; import static android.content.pm.ActivityInfo.FLAG_SHOW_WHEN_LOCKED; import static com.android.server.am.ActivityStack.REMOVE_TASK_MODE_DESTROYING; -import static com.android.server.am.ActivityStackSupervisor - .MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE; +import static com.android.server.am.ActivityStackSupervisor.MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Matchers.anyInt; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -62,8 +61,11 @@ import java.util.ArrayList; /** * Tests for the {@link ActivityStackSupervisor} class. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:com.android.server.am.ActivityStackSupervisorTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java index be0c689ab89f..d89bc976e73f 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java @@ -33,7 +33,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.anyInt; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -51,8 +51,11 @@ import org.junit.runner.RunWith; /** * Tests for the {@link ActivityStack} class. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:com.android.server.am.ActivityStackTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @SmallTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java index 3464ac2a3044..e84e354dbb8f 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java @@ -19,8 +19,8 @@ package com.android.server.am; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -43,8 +43,11 @@ import java.util.Random; /** * Tests for the {@link ActivityStartController} class. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:ActivityStartControllerTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @SmallTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java index d1550d736e0b..1c83ded3cb9e 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java @@ -55,8 +55,11 @@ import org.mockito.MockitoAnnotations; /** * Unit tests for {@link ActivityStartInterceptorTest}. * - * Build/Install/Run: - * bit FrameworksServicesTests:com.android.server.am.ActivityStartInterceptorTest + * <p>Build/Install/Run: + * atest FrameworksServicesTests:ActivityStartInterceptorTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @SmallTest public class ActivityStartInterceptorTest { diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index f956a364315b..1e127a9863e6 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -39,14 +39,14 @@ import static com.android.server.am.ActivityManagerService.ANIMATE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyBoolean; -import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.anyObject; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -80,8 +80,11 @@ import org.junit.runner.RunWith; /** * Tests for the {@link ActivityStarter} class. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:ActivityStarterTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @SmallTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java b/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java index d985364a7cee..2e1155e0a905 100644 --- a/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java +++ b/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java @@ -64,7 +64,11 @@ import java.util.concurrent.TimeUnit; * Note: Currently, we only support fetching the screenshot for the current application, so the * screenshot checks are hardcoded accordingly. * - * runtest --path frameworks/base/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java + * <p>Build/Install/Run: + * atest FrameworksServicesTests:AssistDataRequesterTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @FlakyTest(bugId = 113616538) diff --git a/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java b/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java index b4ad183db386..f882b63acfce 100644 --- a/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java @@ -16,6 +16,15 @@ import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +/** + * Tests for {@link ClientLifecycleManager}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:ClientLifecycleManagerTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @RunWith(AndroidJUnit4.class) @SmallTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java b/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java index 8d675dd3032d..d24991ebc539 100644 --- a/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java @@ -24,10 +24,10 @@ import static com.android.server.am.LaunchParamsController.LaunchParamsModifier. import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyInt; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -51,8 +51,11 @@ import org.junit.runner.RunWith; /** * Tests for exercising {@link LaunchParamsController}. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:LaunchParamsControllerTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java index f5f507f8b210..b52ce1702488 100644 --- a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java +++ b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java @@ -38,7 +38,13 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; /** - * atest PendingRemoteAnimationRegistryTest + * Tests for {@link PendingRemoteAnimationRegistry}. + * + * <p>Build/Install/Run: + * atest PendingRemoteAnimationRegistryTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @SmallTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java index aa9123b16aa7..c61054099282 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java @@ -76,7 +76,13 @@ import java.util.Random; import java.util.Set; /** - * atest FrameworksServicesTests:RecentTasksTest + * Tests for {@link RecentTasks}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:RecentTasksTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java index fa6a95ce275c..edc623589f4b 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java @@ -22,9 +22,9 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE; -import static org.mockito.Mockito.any; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -46,7 +46,13 @@ import org.junit.Test; import org.junit.runner.RunWith; /** - * atest FrameworksServicesTests:RecentsAnimationTest + * Tests for recent tasks animation. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:RecentsAnimationTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java index 19288a9c28d7..c38a594c1038 100644 --- a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java @@ -43,7 +43,13 @@ import org.junit.runner.RunWith; import java.util.ArrayList; /** - * runtest --path frameworks/base/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java + * Tests for {@link RunningTasks}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:RunningTasksTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit @@ -124,4 +130,4 @@ public class RunningTasksTest extends ActivityTestsBase { .build(); return task; } -}
\ No newline at end of file +} diff --git a/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java b/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java index 8e4e7e6b63c3..03d17375298f 100644 --- a/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java +++ b/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java @@ -28,6 +28,15 @@ import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +/** + * Tests for {@link SafeActivityOptions}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:SafeActivityOptionsTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @MediumTest @Presubmit @FlakyTest diff --git a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java index eec55b162b3e..fc9db14d5834 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java @@ -38,8 +38,11 @@ import org.junit.runner.RunWith; /** * Tests for exercising resizing task bounds. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:TaskLaunchParamsModifierTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java index 9e6055d55e0f..976e8355128e 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java @@ -30,7 +30,13 @@ import java.io.File; import java.util.Random; /** - * atest FrameworksServicesTests:TaskPersisterTest + * Tests for {@link TaskPersister}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:TaskPersisterTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ public class TaskPersisterTest extends AndroidTestCase { private static final String TEST_USER_NAME = "AM-Test-User"; @@ -85,4 +91,4 @@ public class TaskPersisterTest extends AndroidTestCase { fail("Error while removing the test user: " + TEST_USER_NAME); } } -}
\ No newline at end of file +} diff --git a/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java b/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java index 5aecec005fdb..eada2ce4f004 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java @@ -59,8 +59,11 @@ import java.util.ArrayList; /** * Tests for exercising {@link TaskRecord}. * - * Build/Install/Run: + * <p>Build/Install/Run: * atest FrameworksServicesTests:com.android.server.am.TaskRecordTests + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. */ @MediumTest @Presubmit diff --git a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java index 9406160b52ca..814071445df8 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java @@ -52,6 +52,15 @@ import org.junit.runner.RunWith; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +/** + * Tests for {@link TaskStackListener}. + * + * <p>Build/Install/Run: + * atest FrameworksServicesTests:TaskStackChangedListenerTest + * + * <p>This test class is a part of Window Manager Service tests and specified in + * {@link com.android.server.wm.test.filters.FrameworksTestsFilter}. + */ @MediumTest @RunWith(AndroidJUnit4.class) public class TaskStackChangedListenerTest { diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index da682c6df621..e949e7490230 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -855,7 +855,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver && status.isRoleCombinationSupported(UsbPort.POWER_ROLE_SOURCE, UsbPort.DATA_ROLE_DEVICE) && status.isRoleCombinationSupported(UsbPort.POWER_ROLE_SINK, - UsbPort.DATA_ROLE_HOST); + UsbPort.DATA_ROLE_DEVICE); args.recycle(); updateUsbNotification(false); diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 558d8d495d5c..06c85d27d880 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -33,7 +33,6 @@ import android.os.Build; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; -import android.os.UserHandle; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -45,7 +44,6 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.Executor; /** * Provides access to information about active calls and registration/call-management functionality. @@ -477,6 +475,12 @@ public class TelecomManager { "android.telecom.extra.START_CALL_WITH_RTT"; /** + * A boolean extra set to indicate whether an app is eligible to be bound to when there are + * ongoing calls on the device. + */ + public static final String EXTRA_IS_ENABLED = "android.telecom.extra.IS_ENABLED"; + + /** * A boolean meta-data value indicating whether an {@link InCallService} implements an * in-call user interface. Dialer implementations (see {@link #getDefaultDialerPackage()}) which * would also like to replace the in-call interface should set this meta-data to {@code true} in @@ -487,9 +491,7 @@ public class TelecomManager { /** * A boolean meta-data value indicating whether an {@link InCallService} implements an * in-call user interface to be used while the device is in car-mode (see - * {@link android.content.res.Configuration.UI_MODE_TYPE_CAR}). - * - * @hide + * {@link android.content.res.Configuration#UI_MODE_TYPE_CAR}). */ public static final String METADATA_IN_CALL_SERVICE_CAR_MODE_UI = "android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"; @@ -2041,7 +2043,6 @@ public class TelecomManager { } catch (RemoteException e) { Log.e(TAG, "RemoteException handleCallIntent: " + e); } - } private ITelecomService getTelecomService() { diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java index 81553a3bc0f8..afa35b4d4de3 100644 --- a/telephony/java/android/telephony/AccessNetworkConstants.java +++ b/telephony/java/android/telephony/AccessNetworkConstants.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.IntDef; import android.annotation.SystemApi; +import android.annotation.TestApi; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -51,6 +52,7 @@ public final class AccessNetworkConstants { * @hide */ @SystemApi + @TestApi public static final int TRANSPORT_TYPE_WWAN = 1; /** @@ -58,6 +60,7 @@ public final class AccessNetworkConstants { * @hide */ @SystemApi + @TestApi public static final int TRANSPORT_TYPE_WLAN = 2; /** @hide */ diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 5e9d33a86760..47bf48f09b25 100755 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -1844,6 +1844,14 @@ public class CarrierConfigManager { "editable_wfc_roaming_mode_bool"; /** + * Flag specifying wether to show blocking pay phone option in blocked numbers screen. Only show + * the option if payphone call presentation represents in the carrier's region. + * @hide + */ + public static final java.lang.String KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL = + "show_blocking_pay_phone_option_bool"; + + /** * Flag specifying whether the carrier will use the WFC home network mode in roaming network. * {@code false} - roaming preference can be selected separately from the home preference. * {@code true} - roaming preference is the same as home preference and @@ -2826,6 +2834,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_NOTIFY_VT_HANDOVER_TO_WIFI_FAILURE_BOOL, false); sDefaults.putStringArray(KEY_FILTERED_CNAP_NAMES_STRING_ARRAY, null); sDefaults.putBoolean(KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false); + sDefaults.putBoolean(KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL, false); sDefaults.putBoolean(KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false); sDefaults.putBoolean(KEY_STK_DISABLE_LAUNCH_BROWSER_BOOL, false); sDefaults.putBoolean(KEY_PERSIST_LPP_MODE_BOOL, true); diff --git a/telephony/java/android/telephony/DataSpecificRegistrationStates.java b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java index c3387f3f112d..fbf488e590fd 100644 --- a/telephony/java/android/telephony/DataSpecificRegistrationStates.java +++ b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java @@ -1,7 +1,24 @@ +/* + * 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.telephony; import android.annotation.NonNull; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; @@ -13,7 +30,8 @@ import java.util.Objects; * @hide */ @SystemApi -public final class DataSpecificRegistrationStates implements Parcelable{ +@TestApi +public final class DataSpecificRegistrationInfo implements Parcelable { /** * @hide * The maximum number of simultaneous Data Calls that @@ -53,27 +71,27 @@ public final class DataSpecificRegistrationStates implements Parcelable{ /** * Provides network support info for LTE VoPS and LTE Emergency bearer support */ - private final LteVopsSupportInfo lteVopsSupportInfo; + private final LteVopsSupportInfo mLteVopsSupportInfo; /** * @hide */ - DataSpecificRegistrationStates( + DataSpecificRegistrationInfo( int maxDataCalls, boolean isDcNrRestricted, boolean isNrAvailable, boolean isEnDcAvailable, LteVopsSupportInfo lteVops) { this.maxDataCalls = maxDataCalls; this.isDcNrRestricted = isDcNrRestricted; this.isNrAvailable = isNrAvailable; this.isEnDcAvailable = isEnDcAvailable; - this.lteVopsSupportInfo = lteVops; + this.mLteVopsSupportInfo = lteVops; } - private DataSpecificRegistrationStates(Parcel source) { + private DataSpecificRegistrationInfo(Parcel source) { maxDataCalls = source.readInt(); isDcNrRestricted = source.readBoolean(); isNrAvailable = source.readBoolean(); isEnDcAvailable = source.readBoolean(); - lteVopsSupportInfo = LteVopsSupportInfo.CREATOR.createFromParcel(source); + mLteVopsSupportInfo = LteVopsSupportInfo.CREATOR.createFromParcel(source); } @Override @@ -82,7 +100,7 @@ public final class DataSpecificRegistrationStates implements Parcelable{ dest.writeBoolean(isDcNrRestricted); dest.writeBoolean(isNrAvailable); dest.writeBoolean(isEnDcAvailable); - lteVopsSupportInfo.writeToParcel(dest, flags); + mLteVopsSupportInfo.writeToParcel(dest, flags); } @Override @@ -98,7 +116,7 @@ public final class DataSpecificRegistrationStates implements Parcelable{ .append(" isDcNrRestricted = " + isDcNrRestricted) .append(" isNrAvailable = " + isNrAvailable) .append(" isEnDcAvailable = " + isEnDcAvailable) - .append(lteVopsSupportInfo.toString()) + .append(mLteVopsSupportInfo.toString()) .append(" }") .toString(); } @@ -106,41 +124,41 @@ public final class DataSpecificRegistrationStates implements Parcelable{ @Override public int hashCode() { return Objects.hash(maxDataCalls, isDcNrRestricted, isNrAvailable, isEnDcAvailable, - lteVopsSupportInfo); + mLteVopsSupportInfo); } @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof DataSpecificRegistrationStates)) return false; + if (!(o instanceof DataSpecificRegistrationInfo)) return false; - DataSpecificRegistrationStates other = (DataSpecificRegistrationStates) o; + DataSpecificRegistrationInfo other = (DataSpecificRegistrationInfo) o; return this.maxDataCalls == other.maxDataCalls && this.isDcNrRestricted == other.isDcNrRestricted && this.isNrAvailable == other.isNrAvailable && this.isEnDcAvailable == other.isEnDcAvailable - && this.lteVopsSupportInfo.equals(other.lteVopsSupportInfo); + && this.mLteVopsSupportInfo.equals(other.mLteVopsSupportInfo); } - public static final Parcelable.Creator<DataSpecificRegistrationStates> CREATOR = - new Parcelable.Creator<DataSpecificRegistrationStates>() { + public static final @NonNull Parcelable.Creator<DataSpecificRegistrationInfo> CREATOR = + new Parcelable.Creator<DataSpecificRegistrationInfo>() { @Override - public DataSpecificRegistrationStates createFromParcel(Parcel source) { - return new DataSpecificRegistrationStates(source); + public DataSpecificRegistrationInfo createFromParcel(Parcel source) { + return new DataSpecificRegistrationInfo(source); } @Override - public DataSpecificRegistrationStates[] newArray(int size) { - return new DataSpecificRegistrationStates[size]; + public DataSpecificRegistrationInfo[] newArray(int size) { + return new DataSpecificRegistrationInfo[size]; } }; /** - * @return LteVopsSupportInfo + * @return The LTE VOPS (Voice over Packet Switched) support information */ @NonNull public LteVopsSupportInfo getLteVopsSupportInfo() { - return lteVopsSupportInfo; + return mLteVopsSupportInfo; } } diff --git a/telephony/java/android/telephony/LteVopsSupportInfo.java b/telephony/java/android/telephony/LteVopsSupportInfo.java index 0ae85c0dfa6c..fda20bd4cf12 100644 --- a/telephony/java/android/telephony/LteVopsSupportInfo.java +++ b/telephony/java/android/telephony/LteVopsSupportInfo.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.IntDef; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; @@ -30,6 +31,7 @@ import java.util.Objects; * @hide */ @SystemApi +@TestApi public final class LteVopsSupportInfo implements Parcelable { /**@hide*/ diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java index 9145b2532817..1dc29979dc61 100644 --- a/telephony/java/android/telephony/NetworkRegistrationInfo.java +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.AccessNetworkConstants.TransportType; @@ -38,6 +39,7 @@ import java.util.stream.Collectors; * @hide */ @SystemApi +@TestApi public final class NetworkRegistrationInfo implements Parcelable { /** * Network domain @@ -174,10 +176,10 @@ public final class NetworkRegistrationInfo implements Parcelable { private CellIdentity mCellIdentity; @Nullable - private VoiceSpecificRegistrationStates mVoiceSpecificStates; + private VoiceSpecificRegistrationInfo mVoiceSpecificInfo; @Nullable - private DataSpecificRegistrationStates mDataSpecificStates; + private DataSpecificRegistrationInfo mDataSpecificInfo; /** * @param domain Network domain. Must be a {@link Domain}. For transport type @@ -234,7 +236,7 @@ public final class NetworkRegistrationInfo implements Parcelable { this(domain, transportType, registrationState, accessNetworkTechnology, rejectCause, emergencyOnly, availableServices, cellIdentity); - mVoiceSpecificStates = new VoiceSpecificRegistrationStates(cssSupported, roamingIndicator, + mVoiceSpecificInfo = new VoiceSpecificRegistrationInfo(cssSupported, roamingIndicator, systemIsInPrl, defaultRoamingIndicator); } @@ -253,9 +255,9 @@ public final class NetworkRegistrationInfo implements Parcelable { this(domain, transportType, registrationState, accessNetworkTechnology, rejectCause, emergencyOnly, availableServices, cellIdentity); - mDataSpecificStates = new DataSpecificRegistrationStates( + mDataSpecificInfo = new DataSpecificRegistrationInfo( maxDataCalls, isDcNrRestricted, isNrAvailable, isEndcAvailable, lteVopsSupportInfo); - updateNrState(mDataSpecificStates); + updateNrState(mDataSpecificInfo); } private NetworkRegistrationInfo(Parcel source) { @@ -269,10 +271,10 @@ public final class NetworkRegistrationInfo implements Parcelable { mAvailableServices = new ArrayList<>(); source.readList(mAvailableServices, Integer.class.getClassLoader()); mCellIdentity = source.readParcelable(CellIdentity.class.getClassLoader()); - mVoiceSpecificStates = source.readParcelable( - VoiceSpecificRegistrationStates.class.getClassLoader()); - mDataSpecificStates = source.readParcelable( - DataSpecificRegistrationStates.class.getClassLoader()); + mVoiceSpecificInfo = source.readParcelable( + VoiceSpecificRegistrationInfo.class.getClassLoader()); + mDataSpecificInfo = source.readParcelable( + DataSpecificRegistrationInfo.class.getClassLoader()); mNrState = source.readInt(); } @@ -389,16 +391,16 @@ public final class NetworkRegistrationInfo implements Parcelable { * @hide */ @Nullable - public VoiceSpecificRegistrationStates getVoiceSpecificStates() { - return mVoiceSpecificStates; + public VoiceSpecificRegistrationInfo getVoiceSpecificInfo() { + return mVoiceSpecificInfo; } /** * @return Data registration related info */ @Nullable - public DataSpecificRegistrationStates getDataSpecificStates() { - return mDataSpecificStates; + public DataSpecificRegistrationInfo getDataSpecificInfo() { + return mDataSpecificInfo; } @Override @@ -474,8 +476,8 @@ public final class NetworkRegistrationInfo implements Parcelable { ? mAvailableServices.stream().map(type -> serviceTypeToString(type)) .collect(Collectors.joining(",")) : null) + "]") .append(" cellIdentity=").append(mCellIdentity) - .append(" voiceSpecificStates=").append(mVoiceSpecificStates) - .append(" dataSpecificStates=").append(mDataSpecificStates) + .append(" voiceSpecificInfo=").append(mVoiceSpecificInfo) + .append(" dataSpecificInfo=").append(mDataSpecificInfo) .append(" nrState=").append(nrStateToString(mNrState)) .append("}").toString(); } @@ -484,7 +486,7 @@ public final class NetworkRegistrationInfo implements Parcelable { public int hashCode() { return Objects.hash(mDomain, mTransportType, mRegistrationState, mRoamingType, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, - mCellIdentity, mVoiceSpecificStates, mDataSpecificStates, mNrState); + mCellIdentity, mVoiceSpecificInfo, mDataSpecificInfo, mNrState); } @Override @@ -505,8 +507,8 @@ public final class NetworkRegistrationInfo implements Parcelable { && mEmergencyOnly == other.mEmergencyOnly && mAvailableServices.equals(other.mAvailableServices) && Objects.equals(mCellIdentity, other.mCellIdentity) - && Objects.equals(mVoiceSpecificStates, other.mVoiceSpecificStates) - && Objects.equals(mDataSpecificStates, other.mDataSpecificStates) + && Objects.equals(mVoiceSpecificInfo, other.mVoiceSpecificInfo) + && Objects.equals(mDataSpecificInfo, other.mDataSpecificInfo) && mNrState == other.mNrState; } @@ -521,8 +523,8 @@ public final class NetworkRegistrationInfo implements Parcelable { dest.writeBoolean(mEmergencyOnly); dest.writeList(mAvailableServices); dest.writeParcelable(mCellIdentity, 0); - dest.writeParcelable(mVoiceSpecificStates, 0); - dest.writeParcelable(mDataSpecificStates, 0); + dest.writeParcelable(mVoiceSpecificInfo, 0); + dest.writeParcelable(mDataSpecificInfo, 0); dest.writeInt(mNrState); } @@ -543,7 +545,7 @@ public final class NetworkRegistrationInfo implements Parcelable { * * @param state data specific registration state contains the 5G NR indicators. */ - private void updateNrState(DataSpecificRegistrationStates state) { + private void updateNrState(DataSpecificRegistrationInfo state) { mNrState = NR_STATE_NONE; if (state.isEnDcAvailable) { if (!state.isDcNrRestricted && state.isNrAvailable) { diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index b0417b328f0e..caf27b79dc13 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -1855,6 +1855,7 @@ public class ServiceState implements Parcelable { /** * @hide */ + @TestApi public void addNetworkRegistrationInfo(NetworkRegistrationInfo regState) { if (regState == null) return; diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java index c39f1f5613b0..4d1b89c0e8ce 100644 --- a/telephony/java/android/telephony/SmsManager.java +++ b/telephony/java/android/telephony/SmsManager.java @@ -22,10 +22,6 @@ import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.app.ActivityThread; import android.app.PendingIntent; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothMapClient; -import android.bluetooth.BluetoothProfile; import android.content.ActivityNotFoundException; import android.content.ContentValues; import android.content.Context; @@ -36,7 +32,6 @@ import android.os.Build; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; -import android.telecom.PhoneAccount; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; @@ -66,7 +61,6 @@ import java.util.Map; */ public final class SmsManager { private static final String TAG = "SmsManager"; - private static final boolean DBG = false; /** * A psuedo-subId that represents the default subId at any given time. The actual subId it @@ -347,42 +341,11 @@ public final class SmsManager { throw new IllegalArgumentException("Invalid message body"); } - // A Manager code accessing another manager is *not* acceptable, in Android. - // In this particular case, it is unavoidable because of the following: - // If the subscription for this SmsManager instance belongs to a remote SIM - // then a listener to get BluetoothMapClient proxy needs to be started up. - // Doing that is possible only in a foreground thread or as a system user. - // i.e., Can't be done in ISms service. - // For that reason, SubscriptionManager needs to be accessed here to determine - // if the subscription belongs to a remote SIM. - // Ideally, there should be another API in ISms to service messages going thru - // remote SIM subscriptions (and ISms should be tweaked to be able to access - // BluetoothMapClient proxy) - Context context = ActivityThread.currentApplication().getApplicationContext(); - SubscriptionManager manager = (SubscriptionManager) context - .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); - int subId = getSubscriptionId(); - SubscriptionInfo info = manager.getActiveSubscriptionInfo(subId); - if (DBG) { - Log.d(TAG, "for subId: " + subId + ", subscription-info: " + info); - } - - /* If the Subscription associated with this SmsManager instance belongs to a remote-sim, - * then send the message thru the remote-sim subscription. - */ - if (info != null - && info.getSubscriptionType() == SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM) { - if (DBG) Log.d(TAG, "sending message thru bluetooth"); - sendTextMessageBluetooth(destinationAddress, scAddress, text, sentIntent, - deliveryIntent, info); - return; - } - try { // If the subscription is invalid or default, we will use the default phone to send the // SMS and possibly fail later in the SMS sending process. - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendTextForSubscriber(subId, ActivityThread.currentPackageName(), + ISms iSms = getISmsServiceOrThrow(); + iSms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, text, sentIntent, deliveryIntent, persistMessage); @@ -391,82 +354,6 @@ public final class SmsManager { } } - private void sendTextMessageBluetooth(String destAddr, String scAddress, - String text, PendingIntent sentIntent, PendingIntent deliveryIntent, - SubscriptionInfo info) { - BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); - if (btAdapter == null) { - // No bluetooth service on this platform? - sendErrorInPendingIntent(sentIntent, SmsManager.RESULT_ERROR_NO_SERVICE); - return; - } - BluetoothDevice device = btAdapter.getRemoteDevice(info.getIccId()); - if (device == null) { - if (DBG) Log.d(TAG, "Bluetooth device addr invalid: " + info.getIccId()); - sendErrorInPendingIntent(sentIntent, SmsManager.RESULT_ERROR_NO_SERVICE); - return; - } - btAdapter.getProfileProxy(ActivityThread.currentApplication().getApplicationContext(), - new MapMessageSender(destAddr, text, device, sentIntent, deliveryIntent), - BluetoothProfile.MAP_CLIENT); - } - - private class MapMessageSender implements BluetoothProfile.ServiceListener { - final Uri[] mDestAddr; - private String mMessage; - final BluetoothDevice mDevice; - final PendingIntent mSentIntent; - final PendingIntent mDeliveryIntent; - MapMessageSender(final String destAddr, final String message, final BluetoothDevice device, - final PendingIntent sentIntent, final PendingIntent deliveryIntent) { - super(); - mDestAddr = new Uri[] {new Uri.Builder() - .appendPath(destAddr) - .scheme(PhoneAccount.SCHEME_TEL) - .build()}; - mMessage = message; - mDevice = device; - mSentIntent = sentIntent; - mDeliveryIntent = deliveryIntent; - } - - @Override - public void onServiceConnected(int profile, BluetoothProfile proxy) { - if (DBG) Log.d(TAG, "Service connected"); - if (profile != BluetoothProfile.MAP_CLIENT) return; - BluetoothMapClient mapProfile = (BluetoothMapClient) proxy; - if (mMessage != null) { - if (DBG) Log.d(TAG, "Sending message thru bluetooth"); - mapProfile.sendMessage(mDevice, mDestAddr, mMessage, mSentIntent, mDeliveryIntent); - mMessage = null; - } - BluetoothAdapter.getDefaultAdapter() - .closeProfileProxy(BluetoothProfile.MAP_CLIENT, mapProfile); - } - - @Override - public void onServiceDisconnected(int profile) { - if (mMessage != null) { - if (DBG) Log.d(TAG, "Bluetooth disconnected before sending the message"); - sendErrorInPendingIntent(mSentIntent, SmsManager.RESULT_ERROR_NO_SERVICE); - mMessage = null; - } - } - } - - private void sendErrorInPendingIntent(PendingIntent intent, int errorCode) { - if (intent == null) { - return; - } - try { - intent.send(errorCode); - } catch (PendingIntent.CanceledException e) { - // PendingIntent is cancelled. ignore sending this error code back to - // caller. - if (DBG) Log.d(TAG, "PendingIntent.CanceledException: " + e.getMessage()); - } - } - /** * Send a text based SMS without writing it into the SMS Provider. * @@ -516,8 +403,8 @@ public final class SmsManager { } try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendTextForSubscriberWithSelfPermissions(getSubscriptionId(), + ISms iSms = getISmsServiceOrThrow(); + iSms.sendTextForSubscriberWithSelfPermissions(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, text, sentIntent, deliveryIntent, persistMessage); @@ -600,9 +487,9 @@ public final class SmsManager { } try { - ISms iccISms = getISmsServiceOrThrow(); - if (iccISms != null) { - iccISms.sendTextForSubscriberWithOptions(getSubscriptionId(), + ISms iSms = getISmsServiceOrThrow(); + if (iSms != null) { + iSms.sendTextForSubscriberWithOptions(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, text, sentIntent, deliveryIntent, persistMessage, priority, expectMore, validityPeriod); @@ -661,9 +548,9 @@ public final class SmsManager { "Invalid pdu format. format must be either 3gpp or 3gpp2"); } try { - ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms")); - if (iccISms != null) { - iccISms.injectSmsPduForSubscriber( + ISms iSms = ISms.Stub.asInterface(ServiceManager.getService("isms")); + if (iSms != null) { + iSms.injectSmsPduForSubscriber( getSubscriptionId(), pdu, format, receivedIntent); } } catch (RemoteException ex) { @@ -749,8 +636,8 @@ public final class SmsManager { if (parts.size() > 1) { try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendMultipartTextForSubscriber(getSubscriptionId(), + ISms iSms = getISmsServiceOrThrow(); + iSms.sendMultipartTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, parts, sentIntents, deliveryIntents, persistMessage); @@ -881,9 +768,9 @@ public final class SmsManager { if (parts.size() > 1) { try { - ISms iccISms = getISmsServiceOrThrow(); - if (iccISms != null) { - iccISms.sendMultipartTextForSubscriberWithOptions(getSubscriptionId(), + ISms iSms = getISmsServiceOrThrow(); + if (iSms != null) { + iSms.sendMultipartTextForSubscriberWithOptions(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, parts, sentIntents, deliveryIntents, persistMessage, priority, expectMore, validityPeriod); @@ -969,8 +856,8 @@ public final class SmsManager { } try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendDataForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), + ISms iSms = getISmsServiceOrThrow(); + iSms.sendDataForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, destinationPort & 0xFFFF, data, sentIntent, deliveryIntent); } catch (RemoteException ex) { @@ -996,8 +883,8 @@ public final class SmsManager { } try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendDataForSubscriberWithSelfPermissions(getSubscriptionId(), + ISms iSms = getISmsServiceOrThrow(); + iSms.sendDataForSubscriberWithSelfPermissions(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, scAddress, destinationPort & 0xFFFF, data, sentIntent, deliveryIntent); } catch (RemoteException ex) { @@ -1059,9 +946,9 @@ public final class SmsManager { boolean isSmsSimPickActivityNeeded = false; final Context context = ActivityThread.currentApplication().getApplicationContext(); try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - isSmsSimPickActivityNeeded = iccISms.isSmsSimPickActivityNeeded(subId); + ISms iSms = getISmsService(); + if (iSms != null) { + isSmsSimPickActivityNeeded = iSms.isSmsSimPickActivityNeeded(subId); } } catch (RemoteException ex) { Log.e(TAG, "Exception in getSubscriptionId"); @@ -1092,11 +979,11 @@ public final class SmsManager { * the service does not exist. */ private static ISms getISmsServiceOrThrow() { - ISms iccISms = getISmsService(); - if (iccISms == null) { + ISms iSms = getISmsService(); + if (iSms == null) { throw new UnsupportedOperationException("Sms is not supported"); } - return iccISms; + return iSms; } private static ISms getISmsService() { @@ -1125,9 +1012,9 @@ public final class SmsManager { throw new IllegalArgumentException("pdu is NULL"); } try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.copyMessageToIccEfForSubscriber(getSubscriptionId(), + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.copyMessageToIccEfForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), status, pdu, smsc); } @@ -1156,9 +1043,9 @@ public final class SmsManager { Arrays.fill(pdu, (byte)0xff); try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.updateMessageOnIccEfForSubscriber(getSubscriptionId(), + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.updateMessageOnIccEfForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), messageIndex, STATUS_ON_ICC_FREE, pdu); } @@ -1188,9 +1075,9 @@ public final class SmsManager { boolean success = false; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.updateMessageOnIccEfForSubscriber(getSubscriptionId(), + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.updateMessageOnIccEfForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), messageIndex, newStatus, pdu); } @@ -1215,9 +1102,9 @@ public final class SmsManager { List<SmsRawData> records = null; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - records = iccISms.getAllMessagesFromIccEfForSubscriber( + ISms iSms = getISmsService(); + if (iSms != null) { + records = iSms.getAllMessagesFromIccEfForSubscriber( getSubscriptionId(), ActivityThread.currentPackageName()); } @@ -1252,9 +1139,9 @@ public final class SmsManager { boolean success = false; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.enableCellBroadcastForSubscriber( + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.enableCellBroadcastForSubscriber( getSubscriptionId(), messageIdentifier, ranType); } } catch (RemoteException ex) { @@ -1288,9 +1175,9 @@ public final class SmsManager { boolean success = false; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.disableCellBroadcastForSubscriber( + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.disableCellBroadcastForSubscriber( getSubscriptionId(), messageIdentifier, ranType); } } catch (RemoteException ex) { @@ -1331,9 +1218,9 @@ public final class SmsManager { throw new IllegalArgumentException("endMessageId < startMessageId"); } try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.enableCellBroadcastRangeForSubscriber(getSubscriptionId(), + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.enableCellBroadcastRangeForSubscriber(getSubscriptionId(), startMessageId, endMessageId, ranType); } } catch (RemoteException ex) { @@ -1374,9 +1261,9 @@ public final class SmsManager { throw new IllegalArgumentException("endMessageId < startMessageId"); } try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - success = iccISms.disableCellBroadcastRangeForSubscriber(getSubscriptionId(), + ISms iSms = getISmsService(); + if (iSms != null) { + success = iSms.disableCellBroadcastRangeForSubscriber(getSubscriptionId(), startMessageId, endMessageId, ranType); } } catch (RemoteException ex) { @@ -1426,9 +1313,9 @@ public final class SmsManager { public boolean isImsSmsSupported() { boolean boSupported = false; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - boSupported = iccISms.isImsSmsSupportedForSubscriber(getSubscriptionId()); + ISms iSms = getISmsService(); + if (iSms != null) { + boSupported = iSms.isImsSmsSupportedForSubscriber(getSubscriptionId()); } } catch (RemoteException ex) { // ignore it @@ -1451,9 +1338,9 @@ public final class SmsManager { public String getImsSmsFormat() { String format = com.android.internal.telephony.SmsConstants.FORMAT_UNKNOWN; try { - ISms iccISms = getISmsService(); - if (iccISms != null) { - format = iccISms.getImsSmsFormatForSubscriber(getSubscriptionId()); + ISms iSms = getISmsService(); + if (iSms != null) { + format = iSms.getImsSmsFormatForSubscriber(getSubscriptionId()); } } catch (RemoteException ex) { // ignore it @@ -1467,10 +1354,10 @@ public final class SmsManager { * @return the default SMS subscription id */ public static int getDefaultSmsSubscriptionId() { - ISms iccISms = null; + ISms iSms = null; try { - iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms")); - return iccISms.getPreferredSmsSubscription(); + iSms = ISms.Stub.asInterface(ServiceManager.getService("isms")); + return iSms.getPreferredSmsSubscription(); } catch (RemoteException ex) { return -1; } catch (NullPointerException ex) { @@ -1486,10 +1373,10 @@ public final class SmsManager { */ @UnsupportedAppUsage public boolean isSMSPromptEnabled() { - ISms iccISms = null; + ISms iSms = null; try { - iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms")); - return iccISms.isSMSPromptEnabled(); + iSms = ISms.Stub.asInterface(ServiceManager.getService("isms")); + return iSms.isSMSPromptEnabled(); } catch (RemoteException ex) { return false; } catch (NullPointerException ex) { @@ -1966,8 +1853,8 @@ public final class SmsManager { throw new IllegalArgumentException("Empty message URI"); } try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendStoredText( + ISms iSms = getISmsServiceOrThrow(); + iSms.sendStoredText( getSubscriptionId(), ActivityThread.currentPackageName(), messageUri, scAddress, sentIntent, deliveryIntent); } catch (RemoteException ex) { @@ -2014,8 +1901,8 @@ public final class SmsManager { throw new IllegalArgumentException("Empty message URI"); } try { - ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendStoredMultipartText( + ISms iSms = getISmsServiceOrThrow(); + iSms.sendStoredMultipartText( getSubscriptionId(), ActivityThread.currentPackageName(), messageUri, scAddress, sentIntents, deliveryIntents); } catch (RemoteException ex) { diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 58f12e2c427a..b781b109bdcc 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -467,7 +467,7 @@ public class SubscriptionInfo implements Parcelable { * @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; } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 0bbf054d7563..1377277bc8e2 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -63,6 +63,7 @@ import com.android.internal.telephony.ISetOpportunisticDataCallback; 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; @@ -1075,7 +1076,8 @@ public class SubscriptionManager { * @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=" @@ -2699,7 +2701,8 @@ public class SubscriptionManager { * @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); } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 9dcadf118c80..f5ae945e5174 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -7107,10 +7107,21 @@ public class TelephonyManager { * @hide */ public boolean getTetherApnRequired() { + return getTetherApnRequired(getSubId(SubscriptionManager.getDefaultDataSubscriptionId())); + } + + /** + * Check whether DUN APN is required for tethering with subId. + * + * @param subId the id of the subscription to require tethering. + * @return {@code true} if DUN APN is required for tethering. + * @hide + */ + public boolean getTetherApnRequired(int subId) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.getTetherApnRequired(); + return telephony.getTetherApnRequiredForSubscriber(subId); } catch (RemoteException ex) { Rlog.e(TAG, "hasMatchedTetherApnSetting RemoteException", ex); } catch (NullPointerException ex) { diff --git a/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java b/telephony/java/android/telephony/VoiceSpecificRegistrationInfo.java index 871ee4d9f0a1..18a533a46273 100644 --- a/telephony/java/android/telephony/VoiceSpecificRegistrationStates.java +++ b/telephony/java/android/telephony/VoiceSpecificRegistrationInfo.java @@ -1,5 +1,22 @@ +/* + * 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.telephony; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -10,14 +27,14 @@ import java.util.Objects; * Class that stores information specific to voice network registration. * @hide */ -public class VoiceSpecificRegistrationStates implements Parcelable{ +public class VoiceSpecificRegistrationInfo implements Parcelable{ /** * oncurrent services support indicator. if * registered on a CDMA system. * false - Concurrent services not supported, * true - Concurrent services supported */ - public final boolean cssSupported; + public final boolean cssSupported; /** * TSB-58 Roaming Indicator if registered @@ -40,15 +57,15 @@ public class VoiceSpecificRegistrationStates implements Parcelable{ */ public final int defaultRoamingIndicator; - VoiceSpecificRegistrationStates(boolean cssSupported, int roamingIndicator, int systemIsInPrl, - int defaultRoamingIndicator) { + VoiceSpecificRegistrationInfo(boolean cssSupported, int roamingIndicator, int systemIsInPrl, + int defaultRoamingIndicator) { this.cssSupported = cssSupported; this.roamingIndicator = roamingIndicator; this.systemIsInPrl = systemIsInPrl; this.defaultRoamingIndicator = defaultRoamingIndicator; } - private VoiceSpecificRegistrationStates(Parcel source) { + private VoiceSpecificRegistrationInfo(Parcel source) { this.cssSupported = source.readBoolean(); this.roamingIndicator = source.readInt(); this.systemIsInPrl = source.readInt(); @@ -70,7 +87,7 @@ public class VoiceSpecificRegistrationStates implements Parcelable{ @Override public String toString() { - return "VoiceSpecificRegistrationStates {" + return "VoiceSpecificRegistrationInfo {" + " mCssSupported=" + cssSupported + " mRoamingIndicator=" + roamingIndicator + " mSystemIsInPrl=" + systemIsInPrl @@ -87,11 +104,11 @@ public class VoiceSpecificRegistrationStates implements Parcelable{ public boolean equals(Object o) { if (this == o) return true; - if (o == null || !(o instanceof VoiceSpecificRegistrationStates)) { + if (o == null || !(o instanceof VoiceSpecificRegistrationInfo)) { return false; } - VoiceSpecificRegistrationStates other = (VoiceSpecificRegistrationStates) o; + VoiceSpecificRegistrationInfo other = (VoiceSpecificRegistrationInfo) o; return this.cssSupported == other.cssSupported && this.roamingIndicator == other.roamingIndicator && this.systemIsInPrl == other.systemIsInPrl @@ -99,16 +116,16 @@ public class VoiceSpecificRegistrationStates implements Parcelable{ } - public static final Parcelable.Creator<VoiceSpecificRegistrationStates> CREATOR = - new Parcelable.Creator<VoiceSpecificRegistrationStates>() { + public static final @NonNull Parcelable.Creator<VoiceSpecificRegistrationInfo> CREATOR = + new Parcelable.Creator<VoiceSpecificRegistrationInfo>() { @Override - public VoiceSpecificRegistrationStates createFromParcel(Parcel source) { - return new VoiceSpecificRegistrationStates(source); + public VoiceSpecificRegistrationInfo createFromParcel(Parcel source) { + return new VoiceSpecificRegistrationInfo(source); } @Override - public VoiceSpecificRegistrationStates[] newArray(int size) { - return new VoiceSpecificRegistrationStates[size]; + public VoiceSpecificRegistrationInfo[] newArray(int size) { + return new VoiceSpecificRegistrationInfo[size]; } }; -}
\ No newline at end of file +} diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 209d35efe03e..c8dab272de3e 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -788,12 +788,13 @@ interface ITelephony { int getPreferredNetworkType(int subId); /** - * Check whether DUN APN is required for tethering. + * Check whether DUN APN is required for tethering with subId. * + * @param subId the id of the subscription to require tethering. * @return {@code true} if DUN APN is required for tethering. * @hide */ - boolean getTetherApnRequired(); + boolean getTetherApnRequiredForSubscriber(int subId); /** * Enables framework IMS and triggers IMS Registration. diff --git a/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java b/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java index 3e86e77183ec..21a4988950db 100644 --- a/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java +++ b/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java @@ -25,8 +25,6 @@ import static org.junit.Assert.assertEquals; import android.net.DhcpResults; import android.net.LinkAddress; -import android.net.StaticIpConfiguration; -import android.net.apf.ApfCapabilities; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -43,21 +41,16 @@ import java.net.Inet4Address; @RunWith(AndroidJUnit4.class) @SmallTest public class IpConfigurationParcelableUtilTest { - private StaticIpConfiguration mStaticIpConfiguration; private DhcpResults mDhcpResults; @Before public void setUp() { - mStaticIpConfiguration = new StaticIpConfiguration(); - mStaticIpConfiguration.ipAddress = new LinkAddress(parseNumericAddress("2001:db8::42"), 64); - mStaticIpConfiguration.gateway = parseNumericAddress("192.168.42.42"); - mStaticIpConfiguration.dnsServers.add(parseNumericAddress("2001:db8::43")); - mStaticIpConfiguration.dnsServers.add(parseNumericAddress("192.168.43.43")); - mStaticIpConfiguration.domains = "example.com"; - // Any added StaticIpConfiguration field must be included in equals() to be tested properly - assertFieldCountEquals(4, StaticIpConfiguration.class); - - mDhcpResults = new DhcpResults(mStaticIpConfiguration); + mDhcpResults = new DhcpResults(); + mDhcpResults.ipAddress = new LinkAddress(parseNumericAddress("2001:db8::42"), 64); + mDhcpResults.gateway = parseNumericAddress("192.168.42.42"); + mDhcpResults.dnsServers.add(parseNumericAddress("2001:db8::43")); + mDhcpResults.dnsServers.add(parseNumericAddress("192.168.43.43")); + mDhcpResults.domains = "example.com"; mDhcpResults.serverAddress = (Inet4Address) parseNumericAddress("192.168.44.44"); mDhcpResults.vendorInfo = "TEST_VENDOR_INFO"; mDhcpResults.leaseDuration = 3600; @@ -67,42 +60,31 @@ public class IpConfigurationParcelableUtilTest { } @Test - public void testParcelUnparcelStaticConfiguration() { - doStaticConfigurationParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcelStaticConfiguration_NullIpAddress() { - mStaticIpConfiguration.ipAddress = null; - doStaticConfigurationParcelUnparcelTest(); + public void testParcelUnparcelDhcpResults() { + doDhcpResultsParcelUnparcelTest(); } @Test - public void testParcelUnparcelStaticConfiguration_NullGateway() { - mStaticIpConfiguration.gateway = null; - doStaticConfigurationParcelUnparcelTest(); + public void testParcelUnparcelDhcpResults_NullIpAddress() { + mDhcpResults.ipAddress = null; + doDhcpResultsParcelUnparcelTest(); } @Test - public void testParcelUnparcelStaticConfiguration_NullDomains() { - mStaticIpConfiguration.domains = null; - doStaticConfigurationParcelUnparcelTest(); + public void testParcelUnparcelDhcpResults_NullGateway() { + mDhcpResults.gateway = null; + doDhcpResultsParcelUnparcelTest(); } @Test - public void testParcelUnparcelStaticConfiguration_EmptyDomains() { - mStaticIpConfiguration.domains = ""; - doStaticConfigurationParcelUnparcelTest(); - } - - private void doStaticConfigurationParcelUnparcelTest() { - final StaticIpConfiguration unparceled = - fromStableParcelable(toStableParcelable(mStaticIpConfiguration)); - assertEquals(mStaticIpConfiguration, unparceled); + public void testParcelUnparcelDhcpResults_NullDomains() { + mDhcpResults.domains = null; + doDhcpResultsParcelUnparcelTest(); } @Test - public void testParcelUnparcelDhcpResults() { + public void testParcelUnparcelDhcpResults_EmptyDomains() { + mDhcpResults.domains = ""; doDhcpResultsParcelUnparcelTest(); } @@ -122,10 +104,4 @@ public class IpConfigurationParcelableUtilTest { final DhcpResults unparceled = fromStableParcelable(toStableParcelable(mDhcpResults)); assertEquals(mDhcpResults, unparceled); } - - @Test - public void testParcelUnparcelApfCapabilities() { - final ApfCapabilities caps = new ApfCapabilities(123, 456, 789); - assertEquals(caps, fromStableParcelable(toStableParcelable(caps))); - } } diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 92a865a3dc58..a95db2242371 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -212,7 +212,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Consumer; import java.util.function.Predicate; /** @@ -499,7 +498,6 @@ public class ConnectivityServiceTest { try { doAnswer(validateAnswer).when(mNetworkMonitor).notifyNetworkConnected(); doAnswer(validateAnswer).when(mNetworkMonitor).forceReevaluation(anyInt()); - doAnswer(validateAnswer).when(mNetworkMonitor).setAcceptPartialConnectivity(); } catch (RemoteException e) { fail(e.getMessage()); } @@ -2554,8 +2552,7 @@ public class ConnectivityServiceTest { verifyActiveNetwork(TRANSPORT_CELLULAR); } - // TODO(b/128426024): deflake and re-enable - // @Test + @Test public void testPartialConnectivity() { // Register network callback. NetworkRequest request = new NetworkRequest.Builder() @@ -2579,20 +2576,24 @@ public class ConnectivityServiceTest { assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork()); callback.assertNoCallback(); + // With HTTPS probe disabled, NetworkMonitor should pass the network validation with http + // probe. + mWiFiNetworkAgent.setNetworkValid(); // If the user chooses yes to use this partial connectivity wifi, switch the default // network to wifi and check if wifi becomes valid or not. mCm.setAcceptPartialConnectivity(mWiFiNetworkAgent.getNetwork(), true /* accept */, false /* always */); - // With https probe disabled, NetworkMonitor should pass the network validation with http - // probe. - mWiFiNetworkAgent.setNetworkValid(); + // If user accepts partial connectivity network, + // NetworkMonitor#setAcceptPartialConnectivity() should be called too. waitForIdle(); try { - verify(mWiFiNetworkAgent.mNetworkMonitor, - timeout(TIMEOUT_MS).times(1)).setAcceptPartialConnectivity(); + verify(mWiFiNetworkAgent.mNetworkMonitor, times(1)).setAcceptPartialConnectivity(); } catch (RemoteException e) { fail(e.getMessage()); } + // Need a trigger point to let NetworkMonitor tell ConnectivityService that network is + // validated. + mCm.reportNetworkConnectivity(mWiFiNetworkAgent.getNetwork(), true); callback.expectCallback(CallbackState.LOSING, mCellNetworkAgent); NetworkCapabilities nc = callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent); @@ -2622,6 +2623,15 @@ public class ConnectivityServiceTest { // acceptUnvalidated is also used as setting for accepting partial networks. mWiFiNetworkAgent.explicitlySelected(true /* acceptUnvalidated */); mWiFiNetworkAgent.connect(true); + // If user accepted partial connectivity network before, + // NetworkMonitor#setAcceptPartialConnectivity() will be called in + // ConnectivityService#updateNetworkInfo(). + waitForIdle(); + try { + verify(mWiFiNetworkAgent.mNetworkMonitor, times(1)).setAcceptPartialConnectivity(); + } catch (RemoteException e) { + fail(e.getMessage()); + } callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent); callback.expectCallback(CallbackState.LOSING, mCellNetworkAgent); nc = callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent); @@ -2636,23 +2646,33 @@ public class ConnectivityServiceTest { // NET_CAPABILITY_PARTIAL_CONNECTIVITY. mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); mWiFiNetworkAgent.explicitlySelected(true /* acceptUnvalidated */); + // Current design cannot send multi-testResult from NetworkMonitor to ConnectivityService. + // So, if user accepts partial connectivity, NetworkMonitor will send PARTIAL_CONNECTIVITY + // to ConnectivityService first then send VALID. Once NetworkMonitor support + // multi-testResult, this test case also need to be changed to meet the new design. mWiFiNetworkAgent.connectWithPartialConnectivity(); - callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent); - // TODO: If the user accepted partial connectivity, we shouldn't switch to wifi until - // NetworkMonitor detects partial connectivity - assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork()); - mWiFiNetworkAgent.setNetworkValid(); + // If user accepted partial connectivity network before, + // NetworkMonitor#setAcceptPartialConnectivity() will be called in + // ConnectivityService#updateNetworkInfo(). waitForIdle(); try { - verify(mWiFiNetworkAgent.mNetworkMonitor, - timeout(TIMEOUT_MS).times(1)).setAcceptPartialConnectivity(); + verify(mWiFiNetworkAgent.mNetworkMonitor, times(1)).setAcceptPartialConnectivity(); } catch (RemoteException e) { fail(e.getMessage()); } + callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent); callback.expectCallback(CallbackState.LOSING, mCellNetworkAgent); - callback.expectCapabilitiesWith(NET_CAPABILITY_PARTIAL_CONNECTIVITY, mWiFiNetworkAgent); - // Wifi should be the default network. + // TODO: If the user accepted partial connectivity, we shouldn't switch to wifi until + // NetworkMonitor detects partial connectivity assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork()); + callback.expectCapabilitiesWith(NET_CAPABILITY_PARTIAL_CONNECTIVITY, mWiFiNetworkAgent); + mWiFiNetworkAgent.setNetworkValid(); + // Need a trigger point to let NetworkMonitor tell ConnectivityService that network is + // validated. + mCm.reportNetworkConnectivity(mWiFiNetworkAgent.getNetwork(), true); + callback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, mWiFiNetworkAgent); + mWiFiNetworkAgent.disconnect(); + callback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent); } @Test @@ -4022,8 +4042,13 @@ public class ConnectivityServiceTest { callback3.expectStopped(); } + @FunctionalInterface + private interface ThrowingConsumer<T> { + void accept(T t) throws Exception; + } + // Helper method to prepare the executor and run test - private void runTestWithSerialExecutors(Consumer<Executor> functor) { + private void runTestWithSerialExecutors(ThrowingConsumer<Executor> functor) throws Exception { final ExecutorService executorSingleThread = Executors.newSingleThreadExecutor(); final Executor executorInline = (Runnable r) -> r.run(); functor.accept(executorSingleThread); @@ -4032,15 +4057,9 @@ public class ConnectivityServiceTest { } @Test - public void testNattSocketKeepalives() { - runTestWithSerialExecutors(executor -> { - try { - doTestNattSocketKeepalivesWithExecutor(executor); - doTestNattSocketKeepalivesFdWithExecutor(executor); - } catch (Exception e) { - fail(e.getMessage()); - } - }); + public void testNattSocketKeepalives() throws Exception { + runTestWithSerialExecutors(executor -> doTestNattSocketKeepalivesWithExecutor(executor)); + runTestWithSerialExecutors(executor -> doTestNattSocketKeepalivesFdWithExecutor(executor)); } private void doTestNattSocketKeepalivesWithExecutor(Executor executor) throws Exception { @@ -4210,14 +4229,8 @@ public class ConnectivityServiceTest { } @Test - public void testTcpSocketKeepalives() { - runTestWithSerialExecutors(executor -> { - try { - doTestTcpSocketKeepalivesWithExecutor(executor); - } catch (Exception e) { - fail(e.getMessage()); - } - }); + public void testTcpSocketKeepalives() throws Exception { + runTestWithSerialExecutors(executor -> doTestTcpSocketKeepalivesWithExecutor(executor)); } private void doTestTcpSocketKeepalivesWithExecutor(Executor executor) throws Exception { diff --git a/tests/utils/testutils/java/com/android/server/wm/test/filters/CoreTestsFilter.java b/tests/utils/testutils/java/com/android/server/wm/test/filters/CoreTestsFilter.java deleted file mode 100644 index 941cfdb20fed..000000000000 --- a/tests/utils/testutils/java/com/android/server/wm/test/filters/CoreTestsFilter.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.wm.test.filters; - -import android.os.Bundle; - -import com.android.test.filters.SelectTest; - -/** - * JUnit test filter that select Window Manager Service related tests from FrameworksCoreTests. - * - * <p>Use this filter when running FrameworksCoreTests as - * <pre> - * adb shell am instrument -w \ - * -e filter com.android.server.wm.test.filters.CoreTestsFilter \ - * -e selectTest_verbose true \ - * com.android.frameworks.coretests/androidx.test.runner.AndroidJUnitRunner - * </pre> - */ -public final class CoreTestsFilter extends SelectTest { - - private static final String[] SELECTED_CORE_TESTS = { - "android.app.servertransaction.", // all tests under the package. - "android.view.DisplayCutoutTest", - }; - - public CoreTestsFilter(Bundle testArgs) { - super(addSelectTest(testArgs, SELECTED_CORE_TESTS)); - } -} diff --git a/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java b/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java new file mode 100644 index 000000000000..2ce1fc68e1ce --- /dev/null +++ b/tests/utils/testutils/java/com/android/server/wm/test/filters/FrameworksTestsFilter.java @@ -0,0 +1,66 @@ +/* + * 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.wm.test.filters; + +import android.os.Bundle; + +import com.android.test.filters.SelectTest; + +/** + * JUnit test filter that select Window Manager Service related tests from FrameworksCoreTests. + * + * <p>Use this filter when running FrameworksCoreTests as + * <pre> + * adb shell am instrument -w \ + * -e filter com.android.server.wm.test.filters.FrameworksTestsFilter \ + * -e selectTest_verbose true \ + * com.android.frameworks.coretests/androidx.test.runner.AndroidJUnitRunner + * </pre> + */ +public final class FrameworksTestsFilter extends SelectTest { + + private static final String[] SELECTED_TESTS = { + // Test specifications for FrameworksCoreTests. + "android.app.servertransaction.", // all tests under the package. + "android.view.DisplayCutoutTest", + // Test specifications for FrameworksServicesTests. + "com.android.server.policy.", // all tests under the package. + "com.android.server.am.ActivityLaunchParamsModifierTests", + "com.android.server.am.ActivityRecordTests", + "com.android.server.am.ActivityStackSupervisorTests", + "com.android.server.am.ActivityStackTests", + "com.android.server.am.ActivityStartControllerTests", + "com.android.server.am.ActivityStarterTests", + "com.android.server.am.ActivityStartInterceptorTest", + "com.android.server.am.AssistDataRequesterTest", + "com.android.server.am.ClientLifecycleManagerTests", + "com.android.server.am.LaunchParamsControllerTests", + "com.android.server.am.PendingRemoteAnimationRegistryTest", + "com.android.server.am.RecentsAnimationTest", + "com.android.server.am.RecentTasksTest", + "com.android.server.am.RunningTasksTest", + "com.android.server.am.SafeActivityOptionsTest", + "com.android.server.am.TaskLaunchParamsModifierTests", + "com.android.server.am.TaskPersisterTest", + "com.android.server.am.TaskRecordTests", + "com.android.server.am.TaskStackChangedListenerTest", + }; + + public FrameworksTestsFilter(Bundle testArgs) { + super(addSelectTest(testArgs, SELECTED_TESTS)); + } +} |